Name: series-workflowlmdzr Phase: Succeeded StartedAt: 2026-08-20 23:46:10 +0000 UTC FinishedAt: 2026-08-21 03:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[0] Phase: Succeeded StartedAt: 2026-08-20 23:46:10 +0000 UTC FinishedAt: 2026-08-20 23:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 23:46:10 +0000 UTC FinishedAt: 2026-08-20 23:52:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD_SEV", "KVM_SW_PROTECTED_VM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD_SEV", "KVM_SW_PROTECTED_VM" ], "series_id": "4dfe639f-b62b-4d95-9bef-04b64f4556b1" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_get_pfn", "sev_handle_rmp_fault" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fZ21lbV9nZXRfcGZuYCB0byBubyBsb25nZXIgcmV0dXJuIGEgYHN0cnVjdCBwYWdlYCBwb2ludGVyIHRvIHRoZSBjYWxsZXIsIGluc3RlYWQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbW1lZGlhdGVseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJdCB1cGRhdGVzIHZhcmlvdXMgY2FsbGVycyBhY3Jvc3MgYXJtNjQgYW5kIHg4NiBLVk0gY29kZSB0byByZW1vdmUgdGhlIGBwYWdlYCBhcmd1bWVudCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGNhbGxzIChlLmcuLCBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCwgYGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW5gKS4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE1NVSBzZXF1ZW5jZSBjaGVja2luZyAoYG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbmApIGluIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIFJNUCBmYXVsdHMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBvZiBwYWdlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBmaXhlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkbyBub3QgYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHByZW1hdHVyZSBwYWdlIGZyZWVpbmcgb3IgcmFjZSBjb25kaXRpb25zKSB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIEtWTSBndWVzdF9tZW1mZCBieSBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGluc2lkZSBga3ZtX2dtZW1fZ2V0X3BmbmAgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHBhZ2UgdG8gdGhlIGNhbGxlciB0byBiZSByZWxlYXNlZCBsYXRlci4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiB4ODYgKE1NVSBhbmQgU0VWLVNOUCkgYW5kIEFSTTY0IChNTVUgYW5kIG5lc3RlZCkgdG8gYWNjb21tb2RhdGUgdGhpcyBzaWduYXR1cmUgY2hhbmdlIGFuZCBhZGRzIE1NVSBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrcyBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGhhbmRsZSBpbnZhbGlkYXRpb24gcmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gYW5kIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgcnVubmluZyBhIEtWTSBndWVzdCB1dGlsaXppbmcgZ3Vlc3RfbWVtZmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YzdkNDA5MDcxZDMxMGJjZjIyYTEzMDgyNGQyNjg1ZGFlMDI0MzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjM6NDk6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggNmM5NDFhYWExMGM2My4uZDVhYTE5N2QyY2JmZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTE2MTMsNyAmIzQzOzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XG4gXHRzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2VhcmNoLmh3X21tdS1cdTAwM2VwZ3Q7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2Vrdm07XG4gXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XG4gXHRrdm1fcGZuX3QgcGZuO1xuQEAgLTE2NDEsNyAmIzQzOzE2NDAsNyBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbiYjNDM7XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC1cdTAwM2VtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHMyZmQtXHUwMDNldmNwdSwgczJmZC1cdTAwM2VmYXVsdF9pcGEsIFBBR0VfU0laRSxcbiBcdFx0XHRcdFx0ICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTtcbkBAIC0xNjgxLDcgJiM0MzsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdH1cbiBcbiBvdXRfdW5sb2NrOlxuLVx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVyk7XG4gXHRrdm1fZmF1bHRfdW5sb2NrKGt2bSk7XG4gXG4gXHRpZiAoKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykgXHUwMDI2XHUwMDI2ICFyZXQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggZmI1NGY2ZGFkOTk1Yy4uNDM1MjNiYjE3NjIxYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuQEAgLTEzNjAsNyAmIzQzOzEzNjAsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRib29sIHdyaXRlX2ZhdWx0LCB3cml0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gXHR1NjQgdmEsIHBmbiwgZ2ZuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNDExLDcgJiM0MzsxNDExLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0XHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pIHx8ICh3cml0ZV9mYXVsdCBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH0gZWxzZSB7XG4tXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbiYjNDM7XHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIHZ0LVx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCBjNTE5ZThlOGQ2NDZmLi4xMjlkNDAzMzA4MDUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTQ2MDQsNyAmIzQzOzQ2MDQsNyBAQCBzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gXG4gXHRyID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgZmF1bHQtXHUwMDNlc2xvdCwgZmF1bHQtXHUwMDNlZ2ZuLCBcdTAwMjZmYXVsdC1cdTAwM2VwZm4sXG4tXHRcdFx0ICAgICBcdTAwMjZmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UsIFx1MDAyNm1heF9vcmRlcik7XG4mIzQzO1x0XHRcdCAgICAgXHUwMDI2bWF4X29yZGVyKTtcbiBcdGlmIChyKSB7XG4gXHRcdGt2bV9tbXVfcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCBmYXVsdCk7XG4gXHRcdHJldHVybiByO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCBmY2I0MWRmZGU0YzAyLi4wYzkxYzkwNDU3M2NjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTQwMTYsNyAmIzQzOzQwMTYsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG5AQCAtNDA2MCw3ICYjNDM7NDA1OSw3IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiBcdCAqIFRoZSBuZXcgVk1TQSB3aWxsIGJlIHByaXZhdGUgbWVtb3J5IGd1ZXN0IG1lbW9yeSwgc28gcmV0cmlldmUgdGhlXG4gXHQgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIE5VTEwpKVxuJiM0MztcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuQEAgLTQwNzYsOCAmIzQzOzQwNzUsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRlbHNlXG4gXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuIH1cbiBcbiAvKlxuQEAgLTUwMDMsNyAmIzQzOzUwMDAsNyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4gXHRib29sIGFzc2lnbmVkO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcdGdmbl90IGdmbjtcbkBAIC01MDMwLDcgJiM0Mzs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIFx1MDAyNm9yZGVyKTtcbiYjNDM7XHRtbXVfc2VxID0ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2b3JkZXIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGJhY2tpbmcgcGFnZSBmb3IgcHJpdmF0ZSBHUEEgMHglbGx4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIGdwYSk7XG5AQCAtNTAzOSw5ICYjNDM7NTAzOSwxMyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcbiBcdHJldCA9IHNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcdTAwMjZhc3NpZ25lZCwgXHUwMDI2cm1wX2xldmVsKTtcbiBcdGlmIChyZXQgfHwgIWFzc2lnbmVkKSB7XG4tXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4tXHRcdGdvdG8gb3V0X25vX3RyYWNlO1xuJiM0MztcdFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbiYjNDM7XHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTUwNjksMjYgJiM0Mzs1MDczLDMxIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0aWYgKHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SylcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7XG4tXHRpZiAocmV0KSB7XG4tXHRcdC8qXG4tXHRcdCAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmVcbi1cdFx0ICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZFxuLVx0XHQgKiBpdHNlbGYuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcdTAwMjZhc3NpZ25lZCwgXHUwMDI2cm1wX2xldmVsKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4mIzQzO1x0XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4mIzQzO1x0XHRyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5XG4mIzQzO1x0XHRcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcbiYjNDM7XHRcdFx0ICogYWxyZWFkeSByZXNvbHZlZCBpdHNlbGYuIElmIGl0JiMzOTtzIG5vdCBhc3NpZ25lZCwgdGhlblxuJiM0MztcdFx0XHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcbiYjNDM7XHRcdFx0ICogdGhpcyBwYWdlIHNoYXJlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgKChhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKSB8fCAhYXNzaWduZWQpKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRrdm1femFwX2dmbl9yYW5nZShrdm0sIGdmbiwgZ2ZuICYjNDM7IFBUUlNfUEVSX1BNRCk7XG4gb3V0OlxuIFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xuLW91dF9ub190cmFjZTpcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODYsMTMgJiM0MzsyNTg2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcbiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4tXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxuLVx0XHQgICAgIGludCAqbWF4X29yZGVyKTtcbiYjNDM7XHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tXHRcdFx0XHQgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxuLVx0XHRcdFx0ICAgaW50ICptYXhfb3JkZXIpXG4mIzQzO1x0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuIHtcbiBcdEtWTV9CVUdfT04oMSwga3ZtKTtcbiBcdHJldHVybiAtRUlPO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBiNTk2NDg2ZDE4NGNhLi41ODk3NjIxNDBjM2VmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc1MSw4ICYjNDM7NzUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIH1cbiBcbiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4tXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxuLVx0XHQgICAgIGludCAqbWF4X29yZGVyKVxuJiM0MztcdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcbiB7XG4gXHRwZ29mZl90IGluZGV4ID0ga3ZtX2dtZW1fZ2V0X2luZGV4KHNsb3QsIGdmbik7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuQEAgLTc4MCwxMSAmIzQzOzc3OSw3IEBAIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiAjZW5kaWZcbiBcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRpZiAoIXIpXG4tXHRcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4tXHRlbHNlXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0Zm9saW9fcHV0KGZvbGlvKTtcbiBcbiBcdHJldHVybiByO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9nZXRfcGZuJiMzNDssCiAgICAmIzM0O3Nldl9oYW5kbGVfcm1wX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM3ZDQwOTA3MWQzMTBiY2YyMmExMzA4MjRkMjY4NWRhZTAyNDMxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDIzOjQ5OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwppbmRleCA2Yzk0MWFhYTEwYzYzLi5kNWFhMTk3ZDJjYmZkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwpAQCAtMTYxMyw3ICYjNDM7MTYxMyw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiAJZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7CiAJc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QgPSBzMmZkLSZndDt2Y3B1LSZndDthcmNoLmh3X21tdS0mZ3Q7cGd0OwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBzMmZkLSZndDt2Y3B1LSZndDtrdm07CiAJdm9pZCAqbWVtY2FjaGUgPSBOVUxMOwogCWt2bV9wZm5fdCBwZm47CkBAIC0xNjQxLDcgJiM0MzsxNjQwLDcgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAkvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqLwogCXNtcF9ybWIoKTsKIAotCXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLSZndDttZW1zbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpOwomIzQzOwlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC0mZ3Q7bWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdChzMmZkLSZndDt2Y3B1LCBzMmZkLSZndDtmYXVsdF9pcGEsIFBBR0VfU0laRSwKIAkJCQkJICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTsKQEAgLTE2ODEsNyAmIzQzOzE2ODAsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCX0KIAogb3V0X3VubG9jazoKLQlrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCAhIXJldCwgcHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpOwogCWt2bV9mYXVsdF91bmxvY2soa3ZtKTsKIAogCWlmICgocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpICZhbXA7JmFtcDsgIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKaW5kZXggZmI1NGY2ZGFkOTk1Yy4uNDM1MjNiYjE3NjIxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTEzNjAsNyAmIzQzOzEzNjAsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJYm9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7CiAJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCXN0cnVjdCB2bmNyX3RsYiAqdnQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAl1NjQgdmEsIHBmbiwgZ2ZuOwogCWludCByZXQ7CiAKQEAgLTE0MTEsNyAmIzQzOzE0MTEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJCWlmIChpc19lcnJvcl9ub3Nsb3RfcGZuKHBmbikgfHwgKHdyaXRlX2ZhdWx0ICZhbXA7JmFtcDsgIXdyaXRhYmxlKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0gZWxzZSB7Ci0JCXJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBtZW1zbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpOwomIzQzOwkJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIG1lbXNsb3QsIGdmbiwgJmFtcDtwZm4sIE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQlrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCB2dC0mZ3Q7d3IucGEsIFBBR0VfU0laRSwKIAkJCQkJICAgICAgd3JpdGVfZmF1bHQsIGZhbHNlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCBjNTE5ZThlOGQ2NDZmLi4xMjlkNDAzMzA4MDUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTQ2MDQsNyAmIzQzOzQ2MDQsNyBAQCBzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogCiAJciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBmYXVsdC0mZ3Q7c2xvdCwgZmF1bHQtJmd0O2dmbiwgJmFtcDtmYXVsdC0mZ3Q7cGZuLAotCQkJICAgICAmYW1wO2ZhdWx0LSZndDtyZWZjb3VudGVkX3BhZ2UsICZhbXA7bWF4X29yZGVyKTsKJiM0MzsJCQkgICAgICZhbXA7bWF4X29yZGVyKTsKIAlpZiAocikgewogCQlrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpOwogCQlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IGZjYjQxZGZkZTRjMDIuLjBjOTFjOTA0NTczY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNDAxNiw3ICYjNDM7NDAxNiw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlrdm1fcGZuX3QgcGZuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX211dGV4KTsKQEAgLTQwNjAsNyAmIzQzOzQwNTksNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCiAJICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGUKIAkgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLgogCSAqLwotCWlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKSkKJiM0MzsJaWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCBOVUxMKSkKIAkJcmV0dXJuOwogCiAJcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CkBAIC00MDc2LDggJiM0Mzs0MDc1LDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogCWVsc2UKIAkJc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7CiAJcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKLQotCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CiB9CiAKIC8qCkBAIC01MDAzLDcgJiM0Mzs1MDAwLDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJaW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCWJvb2wgYXNzaWduZWQ7CiAJa3ZtX3Bmbl90IHBmbjsKIAlnZm5fdCBnZm47CkBAIC01MDMwLDcgJiM0Mzs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCQlyZXR1cm47CiAJfQogCi0JcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgJmFtcDtvcmRlcik7CiYjNDM7CW1tdV9zZXEgPSBrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJc21wX3JtYigpOwomIzQzOwomIzQzOwlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtvcmRlcik7CiAJaWYgKHJldCkgewogCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYmFja2luZyBwYWdlIGZvciBwcml2YXRlIEdQQSAweCVsbHhcbiYjMzQ7LAogCQkJCSAgICBncGEpOwpAQCAtNTAzOSw5ICYjNDM7NTAzOSwxMyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAogCXJldCA9IHNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCk7CiAJaWYgKHJldCB8fCAhYXNzaWduZWQpIHsKLQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXG4mIzM0OywKLQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7Ci0JCWdvdG8gb3V0X25vX3RyYWNlOwomIzQzOwkJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwkJaWYgKCFtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKQomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxuJiMzNDssCiYjNDM7CQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7CiYjNDM7CiYjNDM7CQlyZXR1cm47CiAJfQogCiAJLyoKQEAgLTUwNjksMjYgJiM0Mzs1MDczLDMxIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCWlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pOwotCWlmIChyZXQpIHsKLQkJLyoKLQkJICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQmIzM5O3MgNEsgbm93IHRoZW4gdGhlIFBTTUFTSCBtYXkgaGF2ZQotCQkgKiByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcyBhbHJlYWR5IHJlc29sdmVkCi0JCSAqIGl0c2VsZi4KLQkJICovCi0JCWlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sICZhbXA7YXNzaWduZWQsICZhbXA7cm1wX2xldmVsKSAmYW1wOyZhbXA7Ci0JCSAgICBhc3NpZ25lZCAmYW1wOyZhbXA7IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SykKJiM0MzsJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDtrdm0tJmd0O21tdV9sb2NrKSB7CiYjNDM7CQlpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSkKIAkJCWdvdG8gb3V0OwogCi0JCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcbiYjMzQ7LAotCQkJCSAgICBncGEsIHBmbiwgcmV0KTsKJiM0MzsJCXJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5CiYjNDM7CQkJICogaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcwomIzQzOwkJCSAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCYjMzk7cyBub3QgYXNzaWduZWQsIHRoZW4KJiM0MzsJCQkgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGUKJiM0MzsJCQkgKiB0aGlzIHBhZ2Ugc2hhcmVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sICZhbXA7YXNzaWduZWQsICZhbXA7cm1wX2xldmVsKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICgoYXNzaWduZWQgJmFtcDsmYW1wOyBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpCiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgIGdwYSwgcGZuLCByZXQpOwomIzQzOwkJfQogCX0KIAogCWt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4gJiM0MzsgUFRSU19QRVJfUE1EKTsKIG91dDoKIAl0cmFjZV9rdm1fcm1wX2ZhdWx0KHZjcHUsIGdwYSwgcGZuLCBlcnJvcl9jb2RlLCBybXBfbGV2ZWwsIHJldCk7Ci1vdXRfbm9fdHJhY2U6Ci0Ja3ZtX3JlbGVhc2VfcGFnZV91bnVzZWQocGFnZSk7CiB9CiAKIHN0YXRpYyBib29sIGlzX3Bmbl9yYW5nZV9zaGFyZWQoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI1ODYsMTMgJiM0MzsyNTg2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiAKICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZECiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCi0JCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLAotCQkgICAgIGludCAqbWF4X29yZGVyKTsKJiM0MzsJCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbiwKLQkJCQkgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLAotCQkJCSAgIGludCAqbWF4X29yZGVyKQomIzQzOwkJCQkgICBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpCiB7CiAJS1ZNX0JVR19PTigxLCBrdm0pOwogCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggYjU5NjQ4NmQxODRjYS4uNTg5NzYyMTQwYzNlZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC03NTEsOCAmIzQzOzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSwKIH0KIAogaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJICAgICBpbnQgKm1heF9vcmRlcikKJiM0MzsJCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpCiB7CiAJcGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CkBAIC03ODAsMTEgJiM0Mzs3NzksNyBAQCBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAjZW5kaWYKIAogCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0KLQlpZiAoIXIpCi0JCSpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7Ci0JZWxzZQotCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwlmb2xpb19wdXQoZm9saW8pOwogCiAJcmV0dXJuIHI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBrdm1fZ21lbV9nZXRfcGZuIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGBrdm1fZ21lbV9nZXRfcGZuYC4gSXQmIzM5O3MgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBjbGFzc2ljIGluZGljYXRvciBvZiBhIHJlZmVyZW5jZSBjb3VudCBjaGFuZ2UuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB1c2VkIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGBzdHJ1Y3QgcGFnZWAgKGZvbGlvLCBpbiBtb2Rlcm4gdGVybXMpIGFuZCByZWxlYXNlIGl0IGxhdGVyIHVzaW5nIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmAsIG9yIGBrdm1fcmVsZWFzZV9wYWdlX3VudXNlZGAuIE5vdywgYGt2bV9nbWVtX2dldF9wZm5gIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGBmb2xpb19wdXQoKWAgZGlyZWN0bHkgYWZ0ZXIgYGZvbGlvX3VubG9jaygpYCwgcmlnaHQgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGEgdGhvcm91Z2ggY2hlY2sgZm9yIHJlYWNoYWJpbGl0eSBhbmQgZnV6emFiaWxpdHkuIFRoaXMgaXMgY29yZSBndWVzdF9tZW1mZCBmdW5jdGlvbmFsaXR5LCBkaXJlY3RseSBpbnZvbHZlZCBpbiBjb25maWRlbnRpYWwgY29tcHV0aW5nIGNvbnRleHRzIGxpa2UgU0VWLVNOUCwgVERYLCBhbmQgQVJNIENDQS4gVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIGZvciBwcml2YXRlIG1lbW9yeSwgc28gdGhlIGltcGFjdCBpcyBwb3RlbnRpYWxseSBoaWdoLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBob3cgdGhlIGZvbGlvJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBpcyBtYW5hZ2VkLiBQcmV2aW91c2x5LCB0aGUgY2FsbGVyIGhlbGQgYSByZWZlcmVuY2UsIHdoaWNoIGdhdmUgdGhlbSBjb250cm9sIG92ZXIgdGhlIHBhZ2UmIzM5O3MgbGlmZWN5Y2xlLiBOb3csIGBrdm1fZ21lbV9nZXRfcGZuYCAqaW1tZWRpYXRlbHkqIHJlbGVhc2VzIHRoYXQgcmVmZXJlbmNlLiBUaGlzIGJlZ3MgdGhlIHF1ZXN0aW9uOiBob3cgZG9lcyB0aGUgY2FsbGVyIHNhZmVseSAqdXNlKiB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGl0IGdldHMgYmFjaz8gSWYgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGRyb3BzIHRoZSByZWZlcmVuY2UsIHRoZXJlIGhhcyB0byBiZSBzb21lIG90aGVyIG1lY2hhbmlzbSB0byBlbnN1cmUgdGhlIGJhY2tpbmcgbWVtb3J5IGRvZXNuJiMzOTt0IGdldCBwcmVtYXR1cmVseSBmcmVlZCB3aGlsZSB0aGUgUEZOIGlzIGluIHVzZS4KCkFoLCByaWdodCwgdGhlIG1lbW9yeSBpcyBwaW5uZWQgb3IgbWFuYWdlZCBieSBndWVzdF9tZW1mZC4gVGhlIHJlZmVyZW5jZSBtaWdodCBiZSBpbXBsaWNpdGx5IGhlbGQgYnkgdGhlIGZpbGUgbWFwcGluZyBpdHNlbGYsIG9yIHRoZSBQRk4gbWlnaHQganVzdCBiZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBSTVAvRVBUIChvciBlcXVpdmFsZW50KSB0YWJsZXMsIGFuZCB0aGUgcGFnZSYjMzk7cyBsaWZldGltZSBpcyBib3VuZCB0byB0aGUgZ3Vlc3RfbWVtZmQgZmlsZSYjMzk7cy4gSW4gdGhlIGNhc2Ugb2YgZ3Vlc3RfbWVtZmQsIHRob3NlIHBhZ2VzIGFyZSB1bmV2aWN0YWJsZSBhbmQgbm90IG1hcHBlZCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhleSBhcmUgb25seSBmcmVlZCB3aGVuIHRoZSBndWVzdF9tZW1mZCBmaWxlIGlzIHRydW5jYXRlZCBvciBjbG9zZWQuIFRydW5jYXRpb24gZG9lcyB0cmlnZ2VyIE1NVSBub3RpZmllcnMgKG9yIHRoZSBga3ZtX2dtZW1faW52YWxpZGF0ZV9iZWdpbi9lbmRgIGVxdWl2YWxlbnRzIGluIGd1ZXN0X21lbWZkKSB0byB6YXAgdGhlIFNQVEVzLiBTbyBob2xkaW5nIGEgcmVmZXJlbmNlICpkdXJpbmcqIHRoZSBwYWdlIGZhdWx0IG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkgaWYgdGhleSYjMzk7cmUgcmVseWluZyBvbiB0aGUgTU1VIGxvY2sgYW5kIHNlcXVlbmNlIGNvdW50ZXIgYmVpbmcgdXNlZCBjb3JyZWN0bHkuCgpMZXQmIzM5O3MgbG9vayBhdCBhIGNvbmNyZXRlIGV4YW1wbGUgdG8gc2VlIGhvdyB0aGlzIGlzIHVzZWQuIEluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgc3BlY2lmaWNhbGx5IGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAsIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGBtbXVfc2VxYCBjaGVja2luZy4KCmBgYGMKQEAgLTUwMzAsNyAmIzQzOzUwMjcsMTAgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCAmYW1wO29yZGVyKTsKJiM0MzsJbW11X3NlcSA9IGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxOwomIzQzOwlzbXBfcm1iKCk7CiYjNDM7CiYjNDM7CXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO29yZGVyKTsKYGBgCgpUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIHBhdGNoIGltcGFjdHMgUk1QIGZhdWx0cyB3aXRoaW4gU0VWLWVuYWJsZWQgZ3Vlc3RzLCBhbmQgdGhlcmUmIzM5O3MgYSBzdHJvbmcgbGlrZWxpaG9vZCBpdCYjMzk7cyByZWx5aW5nIG9uIHRoZSBNTVUmIzM5O3Mgc2VxdWVuY2UgbnVtYmVyIHRvIGhhbmRsZSBhbnkgcmFjZSBjb25kaXRpb25zLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgS1ZNX0dVRVNUX01FTUZEYCBpcyBlbmFibGVkIGluIGFueSBvZiBvdXIgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zLCBvciBpZiBpdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWFzaWx5IGVuYWJsZWQgZm9yIHRlc3RpbmcuIFNpbmNlIGl0JiMzOTtzIHR5cGljYWxseSB0aWVkIHRvIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgYEtWTV9BTURfU0VWYCwgb3IgYEtWTV9JTlRFTF9URFhgLCBpdCBzaG91bGRuJiMzOTt0IGJlIHRvbyBkaWZmaWN1bHQgdG8gZ2V0IGl0IGVuYWJsZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuIEkmIzM5O2xsIG5lZWQgdG8gZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIEtjb25maWcgdG8gY29uZmlybSBob3cgdGhlc2UgZmxhZ3MgaW50ZXJhY3QuIFRoaXMgbmVlZHMgdG8gYmUgZnV6emVkIHZlcnkgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDEyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEtWTV9HVUVTVF9NRU1GRCBTZWxlY3Rpb24qKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgcmFkYXIgaXMgcGluZ2luZyBvbiBgS1ZNX0dVRVNUX01FTUZEYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIHdpdGhpbiB3aGljaCB0aGlzIGlzIGJlaW5nIHNlbGVjdGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwb2ludHMgb2YgdXNlLiBXaGF0IGFyZSB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGFuZCBjb2RlIHBhdGhzIHRoYXQgYXJlIG1ha2luZyB0aGlzIHNwZWNpZmljIHNlbGVjdGlvbj8gSXMgaXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFnIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUgb3IgYSBrZXJuZWwgbW9kdWxlIGxvYWRlZCBzdGF0ZSwgYSBmZWF0dXJlIGVuYWJsZWQgYnkgc29tZSBzcGVjaWZpYyBzZXR0aW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgc2VsZWN0aW9uIHByb2Nlc3MgaXRzZWxmIGlzIGtleSBoZXJlLiBJJiMzOTttIGFmdGVyIHRoZSAmIzM0O3doeSwmIzM0OyBub3QganVzdCB0aGUgJiMzNDt3aGF0LiYjMzQ7IFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IGluaXRpYWwgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFmdGVyIHRoYXQgSSBjYW4gdGhlbiB1bmRlcnN0YW5kIHdoYXQgdGhpcyBpcyB0aWVkIHRvIGFuZCB3aGVyZSBpdCBtaWdodCBiZSB1c2VmdWwsIG9yIHdoZXJlIGFuIGlzc3VlIG1pZ2h0IG9jY3VyLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgdXBzdHJlYW0gY29kZSwgYW5kIHRoZW4gaXRzIGRpcmVjdCBkZXBlbmRlbmNpZXMgYW5kIGl0cyBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgc28gSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBmb3IgbWF4aW11bSB2YWx1ZSBpbiB0aGlzIGRlZXAgZGl2ZS4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkwMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGluZyB0aGUgYGd1ZXN0X21lbWZkYCBmdW5jdGlvbmFsaXR5LCBhcyBpdCYjMzk7cyBiZWluZyBzZWxlY3RlZCBmb3IgYm90aCBBUk02NCB3aXRoIEtWTSBhbmQgeDg2XF82NCB3aXRoIEtWTVxfWDg2LiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uY2VwdCBvZiB1c2luZyBgZ3Vlc3RfbWVtZmRgIGlzIHByZXNlbnQgYW5kIGFjY2Vzc2libGUgd2l0aGluIHRoZSB0YXJnZXQgc3lzdGVtcy4KClRoZSBjaGFuZ2VzIGFyZSBkaXN0cmlidXRlZCBhY3Jvc3Mgc2V2ZXJhbCBrZXkgS1ZNIG1vZHVsZXMuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgZ21lbV9hYm9ydGAgaW4gYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGt2bV90cmFuc2xhdGVfdm5jcmAgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYW5kIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCBtYWtlcyBzZW5zZS4gVGhlc2UgYXJlIGFsbCBpbnRpbWF0ZWx5IGludm9sdmVkIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRyYW5zbGF0aW9uLCB3aGljaCB3b3VsZCBiZSB0aGUgZXhwZWN0ZWQgYXJlYXMgZm9yIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBgZ3Vlc3RfbWVtZmRgLiBUaGUgcHJlc2VuY2Ugb2YgbW9kaWZpY2F0aW9ucyB0byBgX19zZXZfc25wX3JlbG9hZF92bXNhYCBhbmQgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2Agc3VnZ2VzdHMgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBlbnZpcm9ubWVudHMsIHBlcmhhcHMgaW4gaG93IGBndWVzdF9tZW1mZGAgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHByb3RlY3Rpb24gZmVhdHVyZXMuCgpOb3csIGhvbGQgb24uIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGlzIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdW5jdGlvbiBiZXR0ZXIgdG8gZGV0ZXJtaW5lIHdoYXQgdGhvc2UgY2hhbmdlcyBlbnRhaWwgYW5kIHRvIGNvbm5lY3QgdGhlIG1lbW9yeSBmYXVsdCBhc3BlY3QgdG8gdGhlIGd1ZXN0IG1lbWZkLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgdGhlIHBhdGNoIGFsdGVycyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTg5PXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDU5NS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5NjpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTctXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2MTk9c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyNC1cdGlmIChmYXVsdC1cdTAwM2Vpc19wcml2YXRlIHx8IGt2bV9tZW1zbG90X2lzX2dtZW1fb25seShmYXVsdC1cdTAwM2VzbG90KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDYyNTpcdFx0cmV0dXJuIGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbSh2Y3B1LCBmYXVsdCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHRoaXMgbG9va3MgbGlrZSB3ZSYjMzk7dmUgc3R1bWJsZWQgb250byBzb21ldGhpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgd2l0aGluIHRoZSBjb3JlIEtWTSBNTVUgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGhvdyByZWZlcmVuY2VzIHRvIGd1ZXN0X21lbWZkIGZvbGlvcyBhcmUgbWFuYWdlZC4gVGhlIGtleSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcG9pbnQgYXQgd2hpY2ggYSByZWZlcmVuY2UgaXMgZHJvcHBlZDsgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHJlZmVyZW5jZSB0byB0aGUgY2FsbGVyIGluIGBrdm1fZ21lbV9nZXRfcGZuYCwgaXQmIzM5O3Mgbm93IGJlaW5nIGRyb3BwZWQgaW50ZXJuYWxseS4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uIGluIEtWTSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LiBHaXZlbiB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIG1lbW9yeSBoYW5kbGluZywgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHRoZSByaWdodCBuZXh0IHN0ZXAuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9nbWVtX2dldF9wZm5gIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9nbWVtX2dldF9wZm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vbW11LmM9MTYwOD1zdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2NDItXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxNjQzOlx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXHUwMDNlbWVtc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTY0NC1cdGlmIChyZXQpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzU3PXN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDEzLVx0fSBlbHNlIHtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE0MTQ6XHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MTUtXHRcdGlmIChyZXQpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ1OTY9c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYwNS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDYwNjpcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIFx1MDAyNmZhdWx0LVx1MDAzZXBmbixcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYwNy1cdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDEyPXN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQwNjEtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDA2MjpcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQwNjMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5OTg9dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MDMyLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MDMzOlx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZvcmRlcik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUwMzQtXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI1ODE9c3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU4Ny0jaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1ODg6aW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1ODktXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTAtI2Vsc2VcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTkxOnN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTItXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04Mz1zdGF0aWMgc3RydWN0IGZvbGlvICprdm1fZ21lbV9nZXRfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleClcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwMy1cdC8qXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjEwNDpcdCAqIEV4dGVybmFsIGludGVyZmFjZXMgbGlrZSBrdm1fZ21lbV9nZXRfcGZuKCkgc3VwcG9ydCBkZWFsaW5nXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwNS1cdCAqIHdpdGggaHVnZXBhZ2VzIHRvIGEgZGVncmVlLCBidXQgaW50ZXJuYWxseSwgZ3Vlc3RfbWVtZmQgY3VycmVudGx5XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz0yOTA9c3RhdGljIGludCBrdm1fZ21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMzA1LVx0ICogYWZ0ZXIgd2hpY2ggZmlsZV9yZWZfZ2V0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpIGZhaWwsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjMwNjpcdCAqIGt2bV9nbWVtX2dldF9wZm4oKSBjYW5ub3QgYmUgdXNpbmcgdGhlIGZpbGUgY29uY3VycmVudGx5LlxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0zMDctXHQgKiBmaWxlX3JlZl9wdXQoKSBwcm92aWRlcyBhIGZ1bGwgYmFycmllciwgYW5kIGdldF9maWxlX2FjdGl2ZSgpIHRoZVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NDY2PXN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy00ODAtXHQgKiBncmFjZWZ1bGx5IGhhbmRsaW5nIG1lbW9yeSBlcnJvcnMpLiAgSWYvd2hlbiB0aGUgZ3Vlc3QgYXR0ZW1wdHMgdG9cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NDgxOlx0ICogYWNjZXNzIGEgcG9pc29uZWQgcGFnZSwga3ZtX2dtZW1fZ2V0X3BmbigpIHdpbGwgcmV0dXJuIC1FSFdQT0lTT04sXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTQ4Mi1cdCAqIGF0IHdoaWNoIHBvaW50IEtWTSBjYW4gZWl0aGVyIHRlcm1pbmF0ZSB0aGUgVk0gb3IgcHJvcGFnYXRlIHRoZVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NjA2PWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY0OS1cdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjY1MDpcdCAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLlxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02NTEtXHQgKi9cbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTY3MT1zdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjc4LVx0LypcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6Njc5Olx0ICogc3luY2hyb25pemVfc3JjdShcdTAwMjZrdm0tXHUwMDNlc3JjdSkgZW5zdXJlZCB0aGF0IGt2bV9nbWVtX2dldF9wZm4oKVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02ODAtXHQgKiBjYW5ub3Qgc2VlIHRoaXMgbWVtc2xvdC5cbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTY4NT12b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzE2LS8qIFJldHVybnMgYSBsb2NrZWQgZm9saW8gb24gc3VjY2Vzcy4gICovXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjcxNzpzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTcxOC1cdFx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1Mi1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzUzOmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzU0LVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzY1LVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo3NjY6XHRmb2xpbyA9IF9fa3ZtX2dtZW1fZ2V0X3BmbihmaWxlLCBzbG90LCBpbmRleCwgcGZuLCBtYXhfb3JkZXIpO1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NjctXHRpZiAoSVNfRVJSKGZvbGlvKSlcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc4NS19XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjc4NjpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fZ2V0X3Bmbik7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc4Ny1cbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTc5MD1zdGF0aWMgbG9uZyBfX2t2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgwMC1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODAxOlx0Zm9saW8gPSBfX2t2bV9nbWVtX2dldF9wZm4oZmlsZSwgc2xvdCwgaW5kZXgsIFx1MDAyNnBmbiwgTlVMTCk7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgwMi1cdGlmIChJU19FUlIoZm9saW8pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDc0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGt2bV9nbWVtX2dldF9wZm5gIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYOKAlGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHRoaXMgaXMgc29tZXRoaW5nIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcsIHNvIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGlzIGFyZWEuCgpUaGUgZnVuY3Rpb25zIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFuZCBzaG91bGQgYmUgdGhlIGluaXRpYWwgdGFyZ2V0cyBhcmU6IGBrdm1fZ21lbV9nZXRfcGZuYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gLCBgZ21lbV9hYm9ydGAsIGFuZCBga3ZtX3RyYW5zbGF0ZV92bmNyYC4gSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRocyB0byB0aGVzZSB0byBkZXRlcm1pbmUgd2hlcmUgYmVzdCB0byBhcHBseSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEkgbmVlZCB0byBub3RlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaWYgdGhleSBhcmUgc3RhdGljIG9yIG5vdCwgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCBteSBmdXp6aW5nIGFwcHJvYWNoLiBMb29raW5nIGNsb3NlciwgSSBzZWUgdGhhdCBgZ21lbV9hYm9ydGAgaXMgc3RhdGljIGluIGBhcmNoL2FybTY0L2t2bS9tbXUuY2AsIGBrdm1fdHJhbnNsYXRlX3ZuY3JgIGlzIHN0YXRpYyBpbiBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgLCBga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtYCBpcyBzdGF0aWMgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBhbmQgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAgaXMgYWxzbyBzdGF0aWMsIHRoaXMgdGltZSBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaXMgbm9uLXN0YXRpYyBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyBub24tc3RhdGljIGFuZCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AsIGFzIG1lbnRpb25lZCBiZWZvcmUuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaXMgZXhwb3J0ZWQgb3IganVzdCBub24tc3RhdGljLCBzaW5jZSB0aGF0IGRpY3RhdGVzIGhvdyBlYXNpbHkgSSBjYW4gaW50ZXJhY3Qgd2l0aCBpdC4gQWgsIGl0JiMzOTtzIGp1c3Qgbm9uLXN0YXRpYywgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kIGZvciBhY2Nlc3MuIEdvb2QsIGFuZCBga3ZtX2dtZW1fZ2V0X3BmbmAgKmlzKiBleHBvcnRlZDogYEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ21lbV9nZXRfcGZuKWAuIFRoYXQmIzM5O3MgZXh0cmVtZWx5IHVzZWZ1bDsgSSBjYW4gbGV2ZXJhZ2UgdGhhdCB0byBicm9hZGVuIG15IGNvdmVyYWdlLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIEkmIzM5O2xsIG5lZWQgYEtWTWAgZW5hYmxlZCwgb2YgY291cnNlLiBgS1ZNX0dVRVNUX01FTUZEYCBpcyAqc2VsZWN0ZWQqIC0gYWgsIHRoYXQgbWVhbnMgSSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IHRoYXQgZGlyZWN0bHkuIEJ1dCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gbWFrZSBzdXJlIEkgYW0gY292ZXJpbmcgYWxsIHRoZSBiYXNlcywgZW5hYmxpbmcgYEtWTV9BTURfU0VWYCBvciBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgdG8gZW5zdXJlIHRoZSBtZW1mZCBjb2RlIGlzIHVzZWQgbWlnaHQgYmUgd29ydGh3aGlsZS4gSSBzaG91bGQgdmVyaWZ5IHdoYXQgc2VsZWN0cyBgS1ZNX0dVRVNUX01FTUZEYCwganVzdCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTY5PWNvbmZpZyBLVk1fV0VSUk9SXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgS1ZNX0FNRF9TRVZgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgS1ZNX0FNRF9TRVZgIHRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGVuY3J5cHRpb24gYW5kIHNlY3VyZSB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgcGxhdGZvcm1zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGhlcmUsIHJpZ2h0PyBTbywgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgYXJjaGl0ZWN0dXJhbCBhc3BlY3RzIOKAkyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGd1ZXN0IE9TLCB0aGUgaHlwZXJ2aXNvciwgYW5kIHRoZSBBTUQgU2VjdXJlIFByb2Nlc3Nvci4gSSYjMzk7bSByZWNhbGxpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiwgYW5kIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgbWl0aWdhdGlvbnMgYXJlIGluIHBsYWNlIHRvIG1pbmltaXplIHRoYXQgaW1wYWN0LiBJIHdhbnQgdG8ga25vdyBhYm91dCBrZXkgbWFuYWdlbWVudCBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQsIHBhcnRpY3VsYXJseSB3aGV0aGVyIGl0JiMzOTtzIHNvZnR3YXJlLW1hbmFnZWQsIGhhcmR3YXJlLW1hbmFnZWQsIG9yIGEgaHlicmlkIGFwcHJvYWNoLiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHNlY3VyaXR5IGJvdW5kYXJpZXMgdGhpcyBlc3RhYmxpc2hlcyDigJMgaXMgdGhlIGh5cGVydmlzb3Igbm93IHVudHJ1c3RlZCB3aXRoIHJlc3BlY3QgdG8gZ3Vlc3QgbWVtb3J5LCBvciBpcyB0aGVyZSBhIHRydXN0IHJlbGF0aW9uc2hpcCBhdCBwbGF5PyBXaGF0IGFib3V0IERNQSBhdHRhY2tzOyBhcmUgd2UgdXNpbmcgSU9NTVUgdG8gc2VjdXJlIHRob3NlPyBBbmQgb2YgY291cnNlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHNvIEkgc2hvdWxkIHNlZSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzExOAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGBLVk1fSU5URUxfVERYYDoKCioqQW5hbHl6aW5nIEtWTV9JTlRFTF9URFgqKgoKQWxyaWdodCwgdGltZSB0byBmb2N1cy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBLVk1fSU5URUxfVERYYC4gSW1tZWRpYXRlbHksIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGNoZWNraW5nIGl0cyBzdGF0dXMuIElzIGl0IGVuYWJsZWQ/IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJcyB0aGUgaGFyZHdhcmUgcHJlc2VudCBhbmQgY2FwYWJsZT8gV2hhdCYjMzk7cyB0aGUga2VybmVsIHZlcnNpb24gbG9va2luZyBsaWtlPyBBcmUgdGhlIG5lY2Vzc2FyeSBtb2R1bGVzIGxvYWRlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cz8gSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgYW5kIGtub3duIGlzc3Vlcy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZywgYW5kIGlkZW50aWZ5IGFueSByZWQgZmxhZ3MgaW1tZWRpYXRlbHkuIElzIHRoaXMgZmVhdHVyZSBiZWhhdmluZyBhcyBJIGV4cGVjdCBpdCB0bz8gSXMgaXQgcHJvdmlkaW5nIHRoZSBhbnRpY2lwYXRlZCBmdW5jdGlvbmFsaXR5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHRoYXQgbmVlZCBmdXJ0aGVyIGludmVzdGlnYXRpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gYW5kIFNFVi1TTlAgR3Vlc3QgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgYSBodW5jaC4gSXMgYEtWTV9HVUVTVF9NRU1GRGAgc2ltcGx5IHNlbGVjdGVkIGJ5IGBLVk1gIG9uIGFybTY0IGFuZCBgS1ZNX1g4NmAgb24geDg2PyAgVGhlIGNvbmZpZyBjb25maXJtcyBpdDoKCmBgYAphcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5OglzZWxlY3QgS1ZNX0dVRVNUX01FTUZECmFyY2gveDg2L2t2bS9LY29uZmlnOjUwOglzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NApgYGAKClNvIGVuYWJsaW5nIGBLVk1gIGFuZCBgS1ZNX0FNRF9TRVZgIGlzIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZnVuY3Rpb25zIGFjcm9zcyBhcmNoaXRlY3R1cmVzLCBzbyBJIHNob3VsZCBiZSBmYW1pbGlhciB3aXRoIHRoZW0gYWxsLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGlzIGlzIHdoZXJlIFJNUCBmYXVsdHMgZm9yIFNFVi1TTlAgZ3Vlc3RzIGFyZSBoYW5kbGVkLCBzbyB0aGF0JiMzOTtzIGEga2V5IGFyZWEgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IG1vZGlmeWluZyBob3cgdGhlIFBGTiBpcyByZXRyaWV2ZWQgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGUgYG1tdV9zZXFgIGlzIGhhbmRsZWQuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGZvciBjb250ZXh0IHVwZGF0ZXMuCgpBZGRpdGlvbmFsbHksIEkgc2VlIGNoYW5nZXMgdG8gYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBPbiBBUk02NCwgdGhlIGNoYW5nZXMgaW52b2x2ZSBgZ21lbV9hYm9ydGAgaW4gYGFyY2gvYXJtNjQva3ZtL21tdS5jYCBhbmQgYGt2bV90cmFuc2xhdGVfdm5jcmAgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYC4KCkJhc2VkIG9uIHRoaXMsIHRoZSBjZW50cmFsIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOgoKLSAgIGBrdm1fZ21lbV9nZXRfcGZuYAotICAgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YAotICAgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAKLSAgIGBnbWVtX2Fib3J0YAotICAgYGt2bV90cmFuc2xhdGVfdm5jcmAKCldhaXQsIGEgc21hbGwgcXVlc3Rpb24uIEl0IHNlZW1zIHRoYXQgYGdtZW1fYWJvcnRgIGFuZCBga3ZtX3RyYW5zbGF0ZV92bmNyYCBhcmUgc3RhdGljLCB0aG91Z2ggY2xlYXJseSBub3QgdHJpdmlhbCwgaG90LXBhdGggZnVuY3Rpb25zICh0aGV5JiMzOTtyZSBwYWdlIGZhdWx0IGhhbmRsZXJzIGZvciBzcGVjaWZpYyBjYXNlcykuIEhvd2V2ZXIsIHRoZSBndWlkZWxpbmVzIEkgdXN1YWxseSBmb2xsb3cgYXJlIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGF0IG9uZSBpcyBpbmxpbmVkLCBvciBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgcmVhc29uIGZvciBpdHMgc3RhdGlzIGRlY2xhcmF0aW9uLiBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgYSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50LCBhcyBpcyBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTg5PXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDU5NS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5NjpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTctXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2MTk9c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyNC1cdGlmIChmYXVsdC1cdTAwM2Vpc19wcml2YXRlIHx8IGt2bV9tZW1zbG90X2lzX2dtZW1fb25seShmYXVsdC1cdTAwM2VzbG90KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDYyNTpcdFx0cmV0dXJuIGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbSh2Y3B1LCBmYXVsdCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDAwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgZ3Vlc3RfbWVtZmRgIHdpdGhpbiBLVk0uIFRoZSBjb2RlIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIG5vdCBkaXJlY3RseSBpbmxpbmVkLCBzbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBga3ZtX2dtZW1fZ2V0X3BmbmAgYW5kIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgYW5kIGlmIHRoZXkmIzM5O3JlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLgoKQWxyaWdodCwgYGt2bV9nbWVtX2dldF9wZm5gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIEtWTSBwYWdlIGZhdWx0cyB3aGVuIHRoZSBndWVzdCBhdHRlbXB0cyB0byBhY2Nlc3MgcHJpdmF0ZSBtZW1vcnksIGFuZCB0aGlzIGhhcHBlbnMgd2hlbiBydW5uaW5nIGEgVk0gdXNpbmcgYGd1ZXN0X21lbWZkYCBhbmQgYWNjZXNzaW5nIHRoZSBtZW1vcnkuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGEgdXNlcnNwYWNlIGRlcGVuZGVuY3ksIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyLgoKTm93LCBsZXQgbWUgcHV0IHRvZ2V0aGVyIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggYWx0ZXJzIGhvdyBmb2xpbyByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiBga3ZtX2dtZW1fZ2V0X3BmbmAuIEluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQsIGl0JiMzOTtzIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgZGlyZWN0bHkgd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSBjYWxsZXIuIFRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4gYm90aCB4ODYgKHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1NVSBhbmQgU0VWLVNOUCBjb2RlKSBhbmQgQVJNNjQgKE1NVSBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uKSB0byBhY2NvbW1vZGF0ZSB0aGlzIG5ldyBzaWduYXR1cmUuIEFkZGl0aW9uYWxseSwgaXQgaW50cm9kdWNlcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBhZGRyZXNzIHBvdGVudGlhbCBpbnZhbGlkYXRpb24gcmFjZXMuCgpFc3NlbnRpYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEtWTSBhbmQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBtZW1vcnkgbWFuYWdlbWVudCB3aGljaCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJlY2F1c2UgaXQgaW1wYWN0cyBhbnlvbmUgcnVubmluZyBhIEtWTSBndWVzdCB0aGF0IGxldmVyYWdlcyBgZ3Vlc3RfbWVtZmRgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQ6IGBLVk1gLCBgS1ZNX0FNRF9TRVZgLCBhbmQgYEtWTV9TV19QUk9URUNURURfVk1gLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBzeW1ib2xzOiBga3ZtX2dtZW1fZ2V0X3BmbmAgYW5kIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuCkkmIzM5O20gYWxzbyBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgaXMgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz02OT1jb25maWcgS1ZNX1dFUlJPUlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtWTS9BTUQtU0VWIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGVuYWJsaW5nIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgdGhhdCBsZXZlcmFnZSBgZ3Vlc3RfbWVtZmRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3VwcG9ydGluZyBrZXJuZWwgZmVhdHVyZXMgYXJlIGluIHBsYWNlLCB3aGljaCBtZWFucyB2YWxpZGF0aW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUuCgpNeSBmb2N1cyBpcyB0byBlbnN1cmUgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCBpbiB0aGlzIGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiBgS1ZNX0FNRF9TRVZgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSB0aGVzZSBgZ3Vlc3RfbWVtZmRgIHNlY3VyZWQgdmlydHVhbCBtYWNoaW5lcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBSTVAgZmF1bHQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9oYW5kbGVfcm1wX2ZhdWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDk2Nj1zdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTk3LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTk4OnZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTk5LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE5Njk9c3RhdGljIGludCBucGZfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjUtXHRpZiAocmMgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX0dVRVNUX1JNUF9NQVNLKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDI2Olx0XHRzZXZfaGFuZGxlX3JtcF9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDI3LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTAxMT1leHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAxMjp2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMTMtaW50IHNldl9nbWVtX21ha2VfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwga3ZtX3Bmbl90IG5yX3BhZ2VzKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTEwMzg9c3RhdGljIGlubGluZSBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCkgeyByZXR1cm4gLUVOWElPOyB9XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMzktI2RlZmluZSBtYXhfc2V2X2FzaWQgMFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDQwOnN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpIHt9XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwNDEtc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc5MwoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgU0VWIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBmdW5jdGlvbi4gUmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgdGhpbmcgaXMgKmFjdHVhbGx5KiBkZWZpbmVkIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgIGZpbGUuIE5vdGhpbmcgdG9vIHN1cnByaXNpbmcgdGhlcmUuIEFuZCBpdCBvbmx5IGdldHMgY29tcGlsZWQgd2hlbiB0aGUgYEtWTV9BTURfU0VWYCBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBoZWxwcyBuYXJyb3cgZG93biB3aGVuIEkmIzM5O2xsIGVuY291bnRlciBpdC4gTm93LCB3aGF0JiMzOTtzIG5leHQuLi4gSSB0aGluayBJJiMzOTtsbCBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB0byByZWNvcmQgd2hhdCBJJiMzOTt2ZSBmb3VuZCBzbyBmYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7S1ZNX1NXX1BST1RFQ1RFRF9WTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2dldF9wZm4mIzM0OywKICAgICYjMzQ7c2V2X2hhbmRsZV9ybXBfZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIEtWTSBndWVzdF9tZW1mZCBieSBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGluc2lkZSBga3ZtX2dtZW1fZ2V0X3BmbmAgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHBhZ2UgdG8gdGhlIGNhbGxlciB0byBiZSByZWxlYXNlZCBsYXRlci4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiB4ODYgKE1NVSBhbmQgU0VWLVNOUCkgYW5kIEFSTTY0IChNTVUgYW5kIG5lc3RlZCkgdG8gYWNjb21tb2RhdGUgdGhpcyBzaWduYXR1cmUgY2hhbmdlIGFuZCBhZGRzIE1NVSBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrcyBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGhhbmRsZSBpbnZhbGlkYXRpb24gcmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gYW5kIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgcnVubmluZyBhIEtWTSBndWVzdCB1dGlsaXppbmcgZ3Vlc3RfbWVtZmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgS1ZNIGd1ZXN0X21lbWZkIGJ5IGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW5zaWRlIGBrdm1fZ21lbV9nZXRfcGZuYCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgcGFnZSB0byB0aGUgY2FsbGVyIHRvIGJlIHJlbGVhc2VkIGxhdGVyLiBJdCB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIHg4NiAoTU1VIGFuZCBTRVYtU05QKSBhbmQgQVJNNjQgKE1NVSBhbmQgbmVzdGVkKSB0byBhY2NvbW1vZGF0ZSB0aGlzIHNpZ25hdHVyZSBjaGFuZ2UgYW5kIGFkZHMgTU1VIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIGluIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgdG8gaGFuZGxlIGludmFsaWRhdGlvbiByYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEtWTSBhbmQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBydW5uaW5nIGEgS1ZNIGd1ZXN0IHV0aWxpemluZyBndWVzdF9tZW1mZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fZ2V0X3BmbmAgdG8gbm8gbG9uZ2VyIHJldHVybiBhIGBzdHJ1Y3QgcGFnZWAgcG9pbnRlciB0byB0aGUgY2FsbGVyLCBpbnN0ZWFkIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgYWNyb3NzIGFybTY0IGFuZCB4ODYgS1ZNIGNvZGUgdG8gcmVtb3ZlIHRoZSBgcGFnZWAgYXJndW1lbnQgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCBjYWxscyAoZS5nLiwgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCkuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBNTVUgc2VxdWVuY2UgY2hlY2tpbmcgKGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gKSBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSTVAgZmF1bHRzLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjN2Q0MDkwNzFkMzEwYmNmMjJhMTMwODI0ZDI2ODVkYWUwMjQzMTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAyMzo0OTo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggNmM5NDFhYWExMGM2My4uZDVhYTE5N2QyY2JmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmMKQEAgLTE2MTMsNyAmIzQzOzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCWVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90ID0gS1ZNX1BHVEFCTEVfUFJPVF9SOwogCXN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC0mZ3Q7dmNwdS0mZ3Q7YXJjaC5od19tbXUtJmd0O3BndDsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGt2bSAqa3ZtID0gczJmZC0mZ3Q7dmNwdS0mZ3Q7a3ZtOwogCXZvaWQgKm1lbWNhY2hlID0gTlVMTDsKIAlrdm1fcGZuX3QgcGZuOwpAQCAtMTY0MSw3ICYjNDM7MTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiAJLyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi8KIAlzbXBfcm1iKCk7CiAKLQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC0mZ3Q7bWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKTsKJiM0MzsJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtJmd0O21lbXNsb3QsIGdmbiwgJmFtcDtwZm4sIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJa3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC0mZ3Q7dmNwdSwgczJmZC0mZ3Q7ZmF1bHRfaXBhLCBQQUdFX1NJWkUsCiAJCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7CkBAIC0xNjgxLDcgJiM0MzsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAl9CiAKIG91dF91bmxvY2s6Ci0Ja3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKTsKIAlrdm1fZmF1bHRfdW5sb2NrKGt2bSk7CiAKIAlpZiAoKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKSAmYW1wOyZhbXA7ICFyZXQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCmluZGV4IGZiNTRmNmRhZDk5NWMuLjQzNTIzYmIxNzYyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCkBAIC0xMzYwLDcgJiM0MzsxMzYwLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCWJvb2wgd3JpdGVfZmF1bHQsIHdyaXRhYmxlOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAlzdHJ1Y3Qgdm5jcl90bGIgKnZ0OwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdTY0IHZhLCBwZm4sIGdmbjsKIAlpbnQgcmV0OwogCkBAIC0xNDExLDcgJiM0MzsxNDExLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCQlpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pIHx8ICh3cml0ZV9mYXVsdCAmYW1wOyZhbXA7ICF3cml0YWJsZSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UgewotCQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgbWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKTsKJiM0MzsJCXJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBtZW1zbG90LCBnZm4sICZhbXA7cGZuLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJa3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgdnQtJmd0O3dyLnBhLCBQQUdFX1NJWkUsCiAJCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggYzUxOWU4ZThkNjQ2Zi4uMTI5ZDQwMzMwODA1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC00NjA0LDcgJiM0Mzs0NjA0LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCXIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgZmF1bHQtJmd0O3Nsb3QsIGZhdWx0LSZndDtnZm4sICZhbXA7ZmF1bHQtJmd0O3BmbiwKLQkJCSAgICAgJmFtcDtmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlLCAmYW1wO21heF9vcmRlcik7CiYjNDM7CQkJICAgICAmYW1wO21heF9vcmRlcik7CiAJaWYgKHIpIHsKIAkJa3ZtX21tdV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIGZhdWx0KTsKIAkJcmV0dXJuIHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCBmY2I0MWRmZGU0YzAyLi4wYzkxYzkwNDU3M2NjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTQwMTYsNyAmIzQzOzQwMTYsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJa3ZtX3Bmbl90IHBmbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9tdXRleCk7CkBAIC00MDYwLDcgJiM0Mzs0MDU5LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogCSAqIFRoZSBuZXcgVk1TQSB3aWxsIGJlIHByaXZhdGUgbWVtb3J5IGd1ZXN0IG1lbW9yeSwgc28gcmV0cmlldmUgdGhlCiAJICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC4KIAkgKi8KLQlpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgTlVMTCkpCiYjNDM7CWlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgTlVMTCkpCiAJCXJldHVybjsKIAogCXJlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwpAQCAtNDA3Niw4ICYjNDM7NDA3NSw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIAllbHNlCiAJCXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pOwogCXJlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7Ci0KLQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOwogfQogCiAvKgpAQCAtNTAwMyw3ICYjNDM7NTAwMCw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCWludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAlib29sIGFzc2lnbmVkOwogCWt2bV9wZm5fdCBwZm47CiAJZ2ZuX3QgZ2ZuOwpAQCAtNTAzMCw3ICYjNDM7NTAyNywxMCBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAkJcmV0dXJuOwogCX0KIAotCXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsICZhbXA7b3JkZXIpOwomIzQzOwltbXVfc2VxID0ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsKJiM0MzsJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7b3JkZXIpOwogCWlmIChyZXQpIHsKIAkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGJhY2tpbmcgcGFnZSBmb3IgcHJpdmF0ZSBHUEEgMHglbGx4XG4mIzM0OywKIAkJCQkgICAgZ3BhKTsKQEAgLTUwMzksOSAmIzQzOzUwMzksMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAKIAlyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgJmFtcDthc3NpZ25lZCwgJmFtcDtybXBfbGV2ZWwpOwogCWlmIChyZXQgfHwgIWFzc2lnbmVkKSB7Ci0JCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxuJiMzNDssCi0JCQkJICAgIGdwYSwgcGZuLCByZXQpOwotCQlnb3RvIG91dF9ub190cmFjZTsKJiM0MzsJCWd1YXJkKHJlYWRfbG9jaykoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsKJiM0MzsJCWlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSkKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgIGdwYSwgcGZuLCByZXQpOwomIzQzOwomIzQzOwkJcmV0dXJuOwogCX0KIAogCS8qCkBAIC01MDY5LDI2ICYjNDM7NTA3MywzMSBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAlpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKQogCQlnb3RvIG91dDsKIAotCXJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTsKLQlpZiAocmV0KSB7Ci0JCS8qCi0JCSAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmUKLQkJICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZAotCQkgKiBpdHNlbGYuCi0JCSAqLwotCQlpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCkgJmFtcDsmYW1wOwotCQkgICAgYXNzaWduZWQgJmFtcDsmYW1wOyBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspCiYjNDM7CXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewomIzQzOwkJaWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpCiAJCQlnb3RvIG91dDsKIAotCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXG4mIzM0OywKLQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7CiYjNDM7CQlyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCYjMzk7cyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heQomIzQzOwkJCSAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMKJiM0MzsJCQkgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQmIzM5O3Mgbm90IGFzc2lnbmVkLCB0aGVuCiYjNDM7CQkJICogdGhpcyBtdXN0IGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgdGhhdCBtYWRlCiYjNDM7CQkJICogdGhpcyBwYWdlIHNoYXJlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAoKGFzc2lnbmVkICZhbXA7JmFtcDsgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKSB8fCAhYXNzaWduZWQpKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXG4mIzM0OywKJiM0MzsJCQkJCSAgICBncGEsIHBmbiwgcmV0KTsKJiM0MzsJCX0KIAl9CiAKIAlrdm1femFwX2dmbl9yYW5nZShrdm0sIGdmbiwgZ2ZuICYjNDM7IFBUUlNfUEVSX1BNRCk7CiBvdXQ6CiAJdHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpOwotb3V0X25vX3RyYWNlOgotCWt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpOwogfQogCiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCAwM2JmYzkyODY0YjZlLi41MDI0NjUxMTljYTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0yNTg2LDEzICYjNDM7MjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogCiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAogaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJICAgICBpbnQgKm1heF9vcmRlcik7CiYjNDM7CQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sCi0JCQkJICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJCQkgICBpbnQgKm1heF9vcmRlcikKJiM0MzsJCQkJICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKQogewogCUtWTV9CVUdfT04oMSwga3ZtKTsKIAlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IGI1OTY0ODZkMTg0Y2EuLjU4OTc2MjE0MGMzZWYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtNzUxLDggJiM0Mzs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsCiB9CiAKIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKLQkJICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsCi0JCSAgICAgaW50ICptYXhfb3JkZXIpCiYjNDM7CQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKQogewogCXBnb2ZmX3QgaW5kZXggPSBrdm1fZ21lbV9nZXRfaW5kZXgoc2xvdCwgZ2ZuKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwpAQCAtNzgwLDExICYjNDM7Nzc5LDcgQEAgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogI2VuZGlmCiAKIAlmb2xpb191bmxvY2soZm9saW8pOwotCi0JaWYgKCFyKQotCQkqcGFnZSA9IGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgaW5kZXgpOwotCWVsc2UKLQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKIAogCXJldHVybiByOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gR3Vlc3QgTWVtb3J5IFJlZmFjdG9yaW5nIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYW5pbmcgdXAgdGhlIGBrdm1fZ21lbV9nZXRfcGZuYCBmdW5jdGlvbi4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgcGFnZSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkLiBJdCYjMzk7cyBhZmZlY3Rpbmcgc2V2ZXJhbCBmaWxlczogYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGFuZCBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIFRoZSBtYWluIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGNhbGxlciBubyBsb25nZXIgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBwYWdlOyB0aGUgcmVmZXJlbmNlIGlzIGVmZmVjdGl2ZWx5IGRyb3BwZWQgaW1tZWRpYXRlbHkgd2l0aGluIGBrdm1fZ21lbV9nZXRfcGZuYCB1c2luZyBgZm9saW9fcHV0KGZvbGlvKWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byBlaXRoZXIgcHJldmVudCBwb3RlbnRpYWwgcGFnZSByZWZlcmVuY2UgbGVha3Mgb3Igc2ltcGxpZnkgdGhlIEFQSSBieSBjaGFuZ2luZyBob3cgZ21lbSBwYWdlcyBhcmUgbWFuYWdlZC4gRWl0aGVyIHRoZXNlIHBhZ2VzIGRvbiYjMzk7dCBuZWVkIHRvIGJlIHBpbm5lZCBieSB0aGUgY2FsbGVyIGluIHRoZSBzYW1lIHdheSwgb3IgbWF5YmUgdGhlIGZpbGUgaXRzZWxmIHRha2VzIHJlc3BvbnNpYmlsaXR5IGZvciBwaW5uaW5nLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHdpdGggbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0JiMzOTtzIHJlbW92aW5nIGEgcG9pbnRlciBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwLCBub3QgaW50cm9kdWNpbmcgYW55dGhpbmcgbmV3IHRvIHVzZXJzcGFjZS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzLiBJdCBsb29rcyBsaWtlIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgY2xlYW51cCBvZiB0aGUgS1ZNIGd1ZXN0X21lbWZkIEFQSSBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIE1vcmVvdmVyLCBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBkdWUgdG8gcHJlbWF0dXJlIHBhZ2UgcmVsZWFzZSB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi9MT0NLREVQL2V0Yy4gSSBkb24mIzM5O3QgdGhpbmsgSSBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIGFuYWx5c2lzLgoKTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGEgc3BlY2lmaWMgcG9pbnQuIEluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaXMgYmVpbmcgdXBkYXRlZC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBgZmF1bHQtJmd0O3JlZmNvdW50ZWRfcGFnZWAgaXMgbm8gbG9uZ2VyIHNldC4gVGhpcyAqaXMqIGEgcG9pbnQgb2YgY29uY2Vybi4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhbGxlZDoKCmBgYGMKIAlyID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIGZhdWx0LSZndDtzbG90LCBmYXVsdC0mZ3Q7Z2ZuLCAmYW1wO2ZhdWx0LSZndDtwZm4sCi0JCQkgICAgICZhbXA7ZmF1bHQtJmd0O3JlZmNvdW50ZWRfcGFnZSwgJmFtcDttYXhfb3JkZXIpOwomIzQzOwkJCSAgICAgJmFtcDttYXhfb3JkZXIpOwpgYGAKClNpbmNlIGBmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlYCBpcyBubyBsb25nZXIgcG9wdWxhdGVkIGJ5IGBrdm1fZ21lbV9nZXRfcGZuYCwgd2hhdCYjMzk7cyBnb2luZyB0byBoYXBwZW4gd2l0aCBpdD8gRG9lcyBpdCByZW1haW4gdW5pbml0aWFsaXplZCwgYW5kIGlzIGl0IHVzZWQgbGF0ZXI/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHRgIGFuZCB3aGVyZSBgcmVmY291bnRlZF9wYWdlYCBpcyB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciB0byBhbmFseXplIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZmNvdW50ZWRfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NDU4OT1zdGF0aWMgdm9pZCBrdm1fbW11X2ZpbmlzaF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTEte1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NTkyOlx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTMtXHRcdFx0XHQgciA9PSBSRVRfUEZfUkVUUlksIGZhdWx0LVx1MDAzZW1hcF93cml0YWJsZSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjE5PXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjgtXHRmYXVsdC1cdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIGZvbGwsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2Mjk6XHRcdFx0XHQgICAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlbWFwX3dyaXRhYmxlLCBcdTAwMjZmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjMwLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1OC1cdGZhdWx0LVx1MDAzZXBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKGZhdWx0LVx1MDAzZXNsb3QsIGZhdWx0LVx1MDAzZWdmbiwgZm9sbCxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDY1OTpcdFx0XHRcdCAgICAgICBcdTAwMjZmYXVsdC1cdTAwM2VtYXBfd3JpdGFibGUsIFx1MDAyNmZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NjAtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD0yMjY9c3RydWN0IGt2bV9wYWdlX2ZhdWx0IHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI4MS1cdGt2bV9wZm5fdCBwZm47XG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oOjI4MjpcdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2U7XG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI4My1cdGJvb2wgbWFwX3dyaXRhYmxlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBHZW5lc2lzIG9mICYjMzQ7ZmF1bHQmIzM0OyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgb3JpZ2luIG9mIHRoZSB2YXJpYWJsZSwgYGZhdWx0YC4gV2hlcmUgZG9lcyB0aGlzIGd1eSBwb3AgaW50byBleGlzdGVuY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbml0aWFsaXphdGlvbiwgaXRzIGluaXRpYWwgdmFsdWUgKG9yIGxhY2sgdGhlcmVvZiksIGFuZCBob3cgdGhhdCBpbml0aWFsIHN0YXRlIHNoYXBlcyB0aGUgc3Vic2VxdWVudCBmbG93IG9mIHRoZSBjb2RlLiBJcyBpdCBhc3NpZ25lZCBkaXJlY3RseT8gSXMgaXQgYSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUgb3IgY2xhc3M/IElzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZD8gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlIGluaXRpYWxpemF0aW9uIGlzIGtleTsgaXQmIzM5O2xsIGluZmx1ZW5jZSBldmVyeXRoaW5nIGRvd24gdGhlIGxpbmUuIElzIHRoZXJlIHNvbWUgZGVmYXVsdCBzdGF0ZSBhc3N1bWVkPyBBcmUgdGhlcmUgcHJlY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSB0aGlzIHRoaW5nIGlzIGV2ZW4gY29uc2lkZXJlZCB2YWxpZD8gR290dGEga25vdyB0aGlzIHN0dWZmLiBEaWdnaW5nIGludG8gdGhpcyBpbml0aWFsaXphdGlvbiBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIGBmYXVsdGAgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrdm1fcGFnZV9mYXVsdCAuKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NTU9c3RhdGljIGludCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk1OC17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NTk6XHRzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgZmF1bHQgPSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NjAtXHRcdC5hZGRyID0gY3IyX29yX2dwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNTQ9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1NS17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNTY6XHRzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgZmF1bHQgPSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTctXHRcdC5hZGRyID0gZ2ZuX3RvX2dwYShnZm4pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIE51bGwgUG9pbnRlciBpbiBGYXVsdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZmF1bHRgIHN0cnVjdCwgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBgZmF1bHQgPSB7IC4uLiB9YCBpcyBrZXkgaGVyZS4gVGhhdCBtZWFucyBhbnl0aGluZyAqbm90KiBleHBsaWNpdGx5IGxpc3RlZCB3aXRoaW4gdGhhdCBjdXJseSBicmFjZSBsaXN0IHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcyBhc3N1bXB0aW9uLiBJIGJlbGlldmUsIGltcGxpY2l0bHksIHRoaXMgbWVhbnMgYHJlZmNvdW50ZWRfcGFnZWAgd2lsbCBiZSBOVUxMIGlmIG5vdCBhc3NpZ25lZCBhIHNwZWNpZmljIHZhbHVlIGR1cmluZyB0aGUgcHJvY2Vzcy4KCk5vdywgaWYgYGt2bV9nbWVtX2dldF9wZm5gICpkb2VzbiYjMzk7dCogc2V0IGBmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlYCDigJMgYW5kIHRoaXMgaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0g4oCTIHRoZW4gaXQmIzM5O2xsIHJlbWFpbiB0aGF0IHplcm8taW5pdGlhbGl6ZWQgTlVMTCB2YWx1ZS4gVGhhdOKAmXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMsIGFzIHRoaXMgZmllbGQgY291bGQgYmUgcmVhZCBsYXRlci4KClRoZSBmb2xsb3dpbmcgY2FsbCBpczogYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSh2Y3B1LSZndDtrdm0sIGZhdWx0LSZndDtyZWZjb3VudGVkX3BhZ2UsIC4uLilgLiBJZiBgZmF1bHQtJmd0O3JlZmNvdW50ZWRfcGFnZWAgaXMgaW5kZWVkIE5VTEwsIGNhbGxpbmcgdGhpcyB3aWxsIGJlIGZpbmUgYW5kIGEgbm8tb3AuIEl0IHNob3VsZCBiZSBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGF0IGZ1bmN0aW9uLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgMTAwJSBjZXJ0YWluIG9mIHRoYXQgYW5kIG5vdCBqdXN0IGFzc3VtZSB0aGF0IGlzIHRoZSBjYXNlLiBTbyB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgYW5kIGRldGVybWluZSB0aGUgYWN0aW9ucyBpdCB3aWxsIHRha2Ugb24gYSBOVUxMIHBvaW50ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTI5MT12b2lkIGt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyOTItXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI5MzpzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI5NC1cdFx0XHRcdFx0ICAgIGJvb2wgdW51c2VkLCBib29sIGRpcnR5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzI0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byB3YWxrIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgdGhpbmtpbmcgbGlrZSBJJiMzOTttIGRlYnVnZ2luZyBhIHRyaWNreSBtZW1vcnkgaXNzdWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXBwZW5zIGhlcmUsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byByZWxlYXNpbmcgdGhlIGZhdWx0LWluIHBhZ2UuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBiYXNpY3MsIHdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGEgS1ZNIGd1ZXN0PyBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3Igb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGNhbGxlZCBjb25jdXJyZW50bHkuIExldCYjMzk7cyBzZWUgaG93IHRoZSByZWxlYXNlIHByb2Nlc3Mgd29ya3MgYXQgYSBsb3cgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyOTE9dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjkyLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyOTM6c3RhdGljIGlubGluZSB2b2lkIGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyOTQtXHRcdFx0XHRcdCAgICBib29sIHVudXNlZCwgYm9vbCBkaXJ0eSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgZnVuY3Rpb24uIEkmIzM5O3ZlIHNlZW4gdGhpcyBvbmUgYmVmb3JlLCBvZiBjb3Vyc2UsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgS1ZNJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKKipNeSBQZXJzcGVjdGl2ZSBvbiBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCoqCgpSaWdodCwgc28gdGhpcyBmdW5jdGlvbiBpcywgZXNzZW50aWFsbHksIGEgY2xlYW51cCByb3V0aW5lLiBJdCYjMzk7cyB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIEtWTSBncmFjZWZ1bGx5IHJlbGlucXVpc2hlcyBhIHBhZ2UgdGhhdCB3YXMgYnJvdWdodCBpbiBmb3IgYSBmYXVsdC4gVGhhdCAmIzM0O2ZhdWx0JiMzNDsgY291bGQgYmUgZHVlIHRvIGEgdmFyaWV0eSBvZiByZWFzb25zIOKAkyBhIGd1ZXN0IHdhbnRpbmcgdG8gYWNjZXNzIGEgcGFnZSB0aGF0IHdhc24mIzM5O3QgcmVzaWRlbnQsIGEgY29weS1vbi13cml0ZSBldmVudCwgb3IgcGVyaGFwcyBldmVuIGEgcGFnZSBiZWluZyByZWNsYWltZWQgZnJvbSBhIHN3YXAgZGV2aWNlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZSBhbHdheXM6IHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uPyBJcyBpdCBhIGhlYXZpbHkgdHJhZmZpY2tlZCBwYXJ0IG9mIHRoZSBjb2RlLCBvciBtb3JlIG9mIGFuIGVkZ2UgY2FzZT8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZWxlYXNlLiBJcyB0aGUgcGFnZSBzaW1wbHkgYmVpbmcgZnJlZWQgYmFjayB0byB0aGUgaG9zdCYjMzk7cyBwYWdlIGFsbG9jYXRvcj8gT3IgYXJlIHRoZXJlIG1vcmUgc3VidGxlIGNvbnNpZGVyYXRpb25zLCBsaWtlIGludmFsaWRhdGluZyBUTEIgZW50cmllcywgdXBkYXRpbmcgcGFnZSB0YWJsZXMsIG9yIGVuc3VyaW5nIGNvaGVyZW5jeSBhY3Jvc3MgZGlmZmVyZW50IENQVSBjb3Jlcz8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgcmVmZXIgdG8gdGhpcyBwYWdlIHRoYXQgKm11c3QqIGJlIHVwZGF0ZWQgb3IgaW52YWxpZGF0ZWQgYXMgcGFydCBvZiB0aGlzIHByb2Nlc3M/IFRoaXMgaXMgd2hlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBjYW4gYmVjb21lIGEgbmlnaHRtYXJlLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgaGVyZTogbG9ja3MsIGF0b21pYyBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIG90aGVyIGZ1bmN0aW9ucyBhY2Nlc3NpbmcgdGhlIHNhbWUgZGF0YS4KCkZyb20gYW4gb3B0aW1pemF0aW9uIHN0YW5kcG9pbnQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGVmZmljaWVuY3kgb2YgdGhpcyByZWxlYXNlIHByb2Nlc3MuIElzIGl0IG9wdGltaXplZCBmb3IgY29tbW9uIHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBiYXRjaGluZyBvcGVyYXRpb25zIG9yIGVtcGxveWluZyBtb3JlIGVmZmljaWVudCBkYXRhIHN0cnVjdHVyZXMgdG8gaW1wcm92ZSB0aHJvdWdocHV0PyBHaXZlbiBLVk0mIzM5O3MgY3JpdGljYWwgcm9sZSBpbiB2aXJ0dWFsaXphdGlvbiwgYW55IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGluIHRoaXMgZnVuY3Rpb24gY2FuIGhhdmUgYSBzaWduaWZpY2FudCBjYXNjYWRpbmcgZWZmZWN0IG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIHBhcnRpY3VsYXJseSBhbnkgY2FjaGUtcmVsYXRlZCBlZmZlY3RzLgoKRmluYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgcmVsZWFzZSBmYWlscz8gRG9lcyB0aGUgc3lzdGVtIGdyYWNlZnVsbHkgcmVjb3Zlciwgb3IgY291bGQgdGhpcyBsZWFkIHRvIGNyYXNoZXMgb3IgbWVtb3J5IGxlYWtzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmFpbHVyZSBtb2RlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYm90aCB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0LiBTZWN1cml0eSBpcyBwYXJhbW91bnQgc28gYW55IHBvdGVudGlhbCBmb3IgYSBkb3VibGUtZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiBpcyBhIHJlZCBmbGFnLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZWQgYW55IHN1Y2ggc2NlbmFyaW9zLiBPa2F5LCBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdHZvaWQga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4xMjkxOlx0dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcbjEyOTI6XHRcbjEyOTM6XHRzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4xMjk0Olx0XHRcdFx0XHRcdCAgICBib29sIHVudXNlZCwgYm9vbCBkaXJ0eSlcbjEyOTU6XHR7XG4xMjk2Olx0XHRsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZChcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spIHx8IHVudXNlZCk7XG4xMjk3Olx0XG4xMjk4Olx0XHRpZiAoIXBhZ2UpXG4xMjk5Olx0XHRcdHJldHVybjtcbjEzMDA6XHRcbjEzMDE6XHRcdC8qXG4xMzAyOlx0XHQgKiBJZiB0aGUgcGFnZSB0aGF0IEtWTSBnb3QgZnJvbSB0aGUgKnByaW1hcnkgTU1VKiBpcyB3cml0YWJsZSwgYW5kIEtWTVxuMTMwMzpcdFx0ICogaW5zdGFsbGVkIG9yIHJldXNlZCBhIFNQVEUsIG1hcmsgdGhlIHBhZ2UvZm9saW8gZGlydHkuICBOb3RlLCB0aGlzXG4xMzA0Olx0XHQgKiBtYXkgbWFyayBhIGZvbGlvIGRpcnR5IGV2ZW4gaWYgS1ZNIGNyZWF0ZWQgYSByZWFkLW9ubHkgU1BURSwgZS5nLiBpZlxuMTMwNTpcdFx0ICogdGhlIEdGTiBpcyB3cml0ZS1wcm90ZWN0ZWQuICBGb2xpb3MgY2FuJiMzOTt0IGJlIHNhZmVseSBtYXJrZWQgZGlydHlcbjEzMDY6XHRcdCAqIG91dHNpZGUgb2YgbW11X2xvY2sgYXMgZG9pbmcgc28gY291bGQgcmFjZSB3aXRoIHdyaXRlYmFjayBvbiB0aGVcbjEzMDc6XHRcdCAqIGZvbGlvLiAgQXMgYSByZXN1bHQsIEtWTSBjYW4mIzM5O3QgbWFyayBmb2xpb3MgZGlydHkgaW4gdGhlIGZhc3QgcGFnZVxuMTMwODpcdFx0ICogZmF1bHQgaGFuZGxlciwgYW5kIHNvIEtWTSBtdXN0IChzb21ld2hhdCkgc3BlY3VsYXRpdmVseSBtYXJrIHRoZVxuMTMwOTpcdFx0ICogZm9saW8gZGlydHkgaWYgS1ZNIGNvdWxkIGxvY2tsZXNzbHkgbWFrZSB0aGUgU1BURSB3cml0YWJsZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBOdWxsIFBvaW50ZXIgSXNzdWVzKioKCk9rYXksIHNvIEkgc2VlIGBpZiAoIXBhZ2UpIHJldHVybjtgIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNoIHNlZW1zIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBgcGFnZWAgbWlnaHQgYmUgTlVMTC4gR29vZCwgdGhhdCYjMzk7cyBhIGJhc2ljIGNoZWNrLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gYGt2bV90cmFuc2xhdGVfdm5jcmAgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24uCgpBaGEsIGBzdHJ1Y3Qgdm5jcl90bGIgKnZ0O2AgYW5kIHRoZSBjcnVjaWFsIGxpbmU6IGBzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7YC4gV2FpdCwgYHBhZ2VgICppcyogaW5pdGlhbGl6ZWQgdG8gTlVMTC4gVGhhdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UsIHByZXZlbnRpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQnV0LCBJJiMzOTttIG5vdGljaW5nIGl0JiMzOTtzIG5vdCBhY3R1YWxseSBwYXNzZWQgdG8gYGt2bV9nbWVtX2dldF9wZm5gIGFueW1vcmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSByZW1vdmFsIG9mIHRoZSBjYWxsIGlzIG5vdCBhIHByb2JsZW0uCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyBgcGFnZWAgdXNlZCAqYW55d2hlcmUqIGVsc2UgZG93biB0aGUgbGluZT8gSWYgaXQgaXNuJiMzOTt0LCBhbmQgaXQmIzM5O3Mgbm90IGJlaW5nIGRlcmVmZXJlbmNlZCwgdGhhdCBudWxsIGluaXRpYWxpemF0aW9uIGlzIHNvbWV3aGF0IHJlZHVuZGFudCwgYnV0IGhhcm1sZXNzLiBCdXQsIGlmIGl0ICppcyogdXNlZCBmdXJ0aGVyIGRvd24gdGhlIGNvZGUgcGF0aCB3aXRob3V0IGJlaW5nIGFzc2lnbmVkIGEgdmFsaWQgcG9pbnRlciwgdGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYW5kIHdlJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz02OD1pbnQga3ZtX3ZjcHVfaW5pdF9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTc4LVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5KVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6Nzk6XHRcdHZjcHUtXHUwMDNlYXJjaC5jdHh0LnZuY3JfYXJyYXkgPSAodTY0ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04MC1cdFx0XHRcdFx0XHRcdFx0ICAgIF9fR0ZQX1pFUk8pO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEyMjpcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtXHUwMDNlYXJjaC5jdHh0LnZuY3JfYXJyYXkpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTIzLVx0XHR2Y3B1LVx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5ID0gTlVMTDtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0yNTE9c3RhdGljIGludCB3YWxrX25lc3RlZF9zMl9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBpcGEsXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMjU2LVx0dW5zaWduZWQgaW50IGFkZHJfdG9wLCBhZGRyX2JvdHRvbTtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjI1NzpcdHU2NCBkZXNjLCBuZXdfZGVzYzsgIC8qIHBhZ2UgdGFibGUgZW50cnkgKi9cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTI1OC1cdGludCByZXQ7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTI3MD12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMDMtICogICAodW5sZXNzIHdlIGFyZSBwcmVlbXB0ZWQpLCBzbyB0aGUgcmVzb2x1dGlvbiBvZiBhIHRyYW5zbGF0aW9uIGZhdWx0XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzA0OiAqICAgbXVzdCBnbyB2aWEgYSByZXF1ZXN0IHRoYXQgd2lsbCBtYXAgdGhlIFZOQ1IgcGFnZSBpbiB0aGUgZml4bWFwLlxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMwNS0gKiAgIHZjcHVfbG9hZCgpIG1pZ2h0IGFzIHdlbGwgdXNlIHRoZSBzYW1lIG1lY2hhbmlzbS5cbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzE0LSAqIC0gT24gYW55IFRMQkkgZm9yIHRoZSBFTDJcdTAwMjYwIHRyYW5zbGF0aW9uIHJlZ2ltZSwgd2UgbXVzdCBmaW5kIGFueSBUTEIgdGhhdFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMxNTogKiAgIGludGVyc2VjdHMgd2l0aCB0aGUgVExCSSByZXF1ZXN0LCBpbnZhbGlkYXRlIGl0LCBhbmQgdW5tYXAgdGhlIHBhZ2VcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMTYtICogICBmcm9tIHRoZSBmaXhtYXAuIEJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgdmNwdS1wcml2YXRlIFRMQnMsXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMyMi0gKiAgIGxvb2tpbmcgYXQgdGhlIElQQSBpbnN0ZWFkLiBUaGUgZnVubnkgcGFydCBpcyB0aGF0IHRoZXJlIG1heSBub3QgYmUgYVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMyMzogKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24mIzM5O3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1RcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMjQtICogICBpbnN0cnVjdGlvbnMuXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM1Nz1zdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM2Mi1cdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzYzOlx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM2NC1cdHU2NCB2YSwgcGZuLCBnZm47XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQwOS1cdFx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0ZV9mYXVsdCA/IEZPTExfV1JJVEUgOiAwLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQxMDpcdFx0XHRcdFx0XHUwMDI2d3JpdGFibGUsIFx1MDAyNnBhZ2UpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQxMS1cdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSB8fCAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICF3cml0YWJsZSkpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQyMy1cdFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5KHZjcHUtXHUwMDNla3ZtLCBtbXVfc2VxKSkge1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQyNDpcdFx0XHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cdTAwM2Vrdm0sIHBhZ2UsIHRydWUsIGZhbHNlKTtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MjUtXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQzMy1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BUF9MMV9WTkNSX0VMMiwgdmNwdSk7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNDM0Olx0XHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cdTAwM2Vrdm0sIHBhZ2UsIGZhbHNlLCB2dC1cdTAwM2V3ci5wdyk7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDM1LVx0fVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MzctXHRpZiAodnQtXHUwMDNld3IucHcpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNDM4Olx0XHRtYXJrX3BhZ2VfZGlydHkodmNwdS1cdTAwM2Vrdm0sIGdmbik7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDM5LVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE2MDQ9dTY0IGxpbWl0X252X2lkX3JlZyhzdHJ1Y3Qga3ZtICprdm0sIHUzMiByZWcsIHU2NCB2YWwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTY2MS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2NjI6XHRcdC8qIERpc2FsbG93IHVuc3VwcG9ydGVkIFMyIHBhZ2Ugc2l6ZXMgKi9cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2NjMtXHRcdHN3aXRjaCAoUEFHRV9TSVpFKSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTY3NS1cdFx0LypcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2NzY6XHRcdCAqIFNpbmNlIHdlIGNhbiYjMzk7dCBzdXBwb3J0IGEgZ3Vlc3QgUzIgcGFnZSBzaXplIHNtYWxsZXJcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2Nzc6XHRcdCAqIHRoYW4gdGhlIGhvc3QmIzM5O3Mgb3duIHBhZ2Ugc2l6ZSAoZHVlIHRvIEtWTSBvbmx5XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNjc4Olx0XHQgKiBwb3B1bGF0aW5nIGl0cyBvd24gUzIgdXNpbmcgdGhlIGtlcm5lbCYjMzk7cyBwYWdlXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNjc5LVx0XHQgKiBzaXplKSwgYWR2ZXJ0aXNlIHRoZSBsaW1pdGF0aW9uIHVzaW5nIEZFQVRfR1RHLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2MwoJCQkJCQkJb3V0cHV0OiAyODMKCQkJCQkJCXRob3VnaHRzOiA5NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gUmlzayBvZiBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYHBhZ2VgIGlzIHN0aWxsIGluIHVzZSB3aXRoaW4gYGt2bV90cmFuc2xhdGVfdm5jcmAgd2hlbiBpdCYjMzk7cyAqbm90KiBhIGdtZW0gY2FzZS4gSXQmIzM5O3MgcHJvcGVybHkgaGFuZGxlZCwgdGhvdWdoLCB3aXRoIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgIGhhbmRsaW5nIHRoZSByZWxlYXNlIHdoZW4gYHBhZ2VgIGlzIHZhbGlkLiBJZiBpdCAqaXMqIGdtZW0sIGBwYWdlYCBpcyBOVUxMLCBhbmQgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgY29ycmVjdGx5IGhhbmRsZXMgdGhlIE5VTEwgY2FzZS4gVGhhdCYjMzk7cyBmaW5lLgoKVGhlbiBJIGNoZWNrZWQgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBhbmQgc2F3IHRoZSBhZGRpdGlvbiBvZiBgbW11X3NlcWAgYW5kIGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gLiBUaGlzIGlzIGNsYXNzaWMgS1ZNIGNvbmN1cnJlbmN5IGhhbmRsaW5nIGZvciBSTVAgZmF1bHRzIOKAkyBpdCYjMzk7cyBhbGwgYWJvdXQgY2hlY2tpbmcgaWYgdGhlIE1NVSBzZXF1ZW5jZSBoYXMgY2hhbmdlZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMuIE5vIGNvbmNlcm5zIHRoZXJlOyBpdCYjMzk7cyByb2J1c3QgYW5kIHN0YW5kYXJkIHByYWN0aWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpOZXh0LCBJIGRyaWxsZWQgaW50byBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgYW5kIGBrdm1fZ21lbV9nZXRfcGZuYC4gSGVyZSYjMzk7cyB0aGUgY29yZSBjaGFuZ2UuIFRoZSBmdW5jdGlvbiAqdXNlZCogdG8gcmV0dXJuIGEgYHN0cnVjdCBwYWdlYCBwb2ludGVyIHRvIHRoZSBjYWxsZXIsIGJ1dCBub3cgaXQgZHJvcHMgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbW1lZGlhdGVseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIHRoZSBjYWxsZXIgKmRvZXNuJiMzOTt0KiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBwYWdlIGFueW1vcmUuIElzIHRoaXMgc2FmZT8gSSB0aG91Z2h0IHRocm91Z2ggaXQsIGFuZCBJIGJlbGlldmUgaXQgaXMuIFRoZSBwYWdlIGlzIHBpbm5lZCBiZWNhdXNlIG9mIHRoZSBgZ3Vlc3RfbWVtZmRgIGZpbGUsIGFuZCBLVk0gaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhhdCBmaWxlLiBFdmVuIGlmIHRoZXJlJiMzOTtzIGEgYnVnIGhlcmUgKGxpa2UgYSB1c2UtYWZ0ZXItZnJlZSksIGl0JiMzOTtzIGEgVUFGLCBhbmQgS0FTQU4gc2hvdWxkIGVhc2lseSBkZXRlY3QgdGhhdC4gQ3J1Y2lhbGx5LCBpdCYjMzk7cyAqbm90KiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KClNvLCB0aGUgcGF0Y2ggaXMgcmVhbGx5IGp1c3QgcmVmYWN0b3JpbmcgYW5kIGNvbmN1cnJlbmN5IGZpeGVzLiBUaGUgdXBkYXRlcyBhY3Jvc3MgdGhlIGNvZGUgdGhhdCByZW1vdmVkIGBwYWdlYCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGNhbGxzIHNpbXBseSByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gYGt2bV9nbWVtX2dldF9wZm5gLiBUaGUgYWRkaXRpb24gb2YgdGhlIE1NVSBzZXF1ZW5jZSBjaGVja3MgaW4gdGhlIFJNUCBmYXVsdCBoYW5kbGVyIGFkZHJlc3NlcyBhIGtub3duIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9uJiMzOTt0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBkb24mIzM5O3QgY2hhbmdlIGhvdyBib3VuZHMgY2hlY2tpbmcgd29ya3MgaW4gYSB3YXkgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgd291bGQgcHJlc2VudCBhcyBVQUZzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgaXNzdWVzIGFyZSB2ZXJ5IGxpa2VseSB0byBiZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQvb3IgTE9DS0RFUC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcmlzaywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gd3JpdGUgdGhhdCBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fZ2V0X3BmbmAgdG8gbm8gbG9uZ2VyIHJldHVybiBhIGBzdHJ1Y3QgcGFnZWAgcG9pbnRlciB0byB0aGUgY2FsbGVyLCBpbnN0ZWFkIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgYWNyb3NzIGFybTY0IGFuZCB4ODYgS1ZNIGNvZGUgdG8gcmVtb3ZlIHRoZSBgcGFnZWAgYXJndW1lbnQgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCBjYWxscyAoZS5nLiwgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCkuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBNTVUgc2VxdWVuY2UgY2hlY2tpbmcgKGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gKSBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSTVAgZmF1bHRzLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fZ2V0X3BmbmAgdG8gbm8gbG9uZ2VyIHJldHVybiBhIGBzdHJ1Y3QgcGFnZWAgcG9pbnRlciB0byB0aGUgY2FsbGVyLCBpbnN0ZWFkIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgYWNyb3NzIGFybTY0IGFuZCB4ODYgS1ZNIGNvZGUgdG8gcmVtb3ZlIHRoZSBgcGFnZWAgYXJndW1lbnQgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCBjYWxscyAoZS5nLiwgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCkuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBNTVUgc2VxdWVuY2UgY2hlY2tpbmcgKGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gKSBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSTVAgZmF1bHRzLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjAwLjAyNTk1Nzg4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDgyMDE1NzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fU1dfUFJPVEVDVEVEX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dtZW1fZ2V0X3BmblwiLFxuICAgIFwic2V2X2hhbmRsZV9ybXBfZmF1bHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fZ21lbV9nZXRfcGZuYCB0byBubyBsb25nZXIgcmV0dXJuIGEgYHN0cnVjdCBwYWdlYCBwb2ludGVyIHRvIHRoZSBjYWxsZXIsIGluc3RlYWQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbW1lZGlhdGVseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJdCB1cGRhdGVzIHZhcmlvdXMgY2FsbGVycyBhY3Jvc3MgYXJtNjQgYW5kIHg4NiBLVk0gY29kZSB0byByZW1vdmUgdGhlIGBwYWdlYCBhcmd1bWVudCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGNhbGxzIChlLmcuLCBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCwgYGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW5gKS4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE1NVSBzZXF1ZW5jZSBjaGVja2luZyAoYG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbmApIGluIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIFJNUCBmYXVsdHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIG9mIHBhZ2UgcmVmZXJlbmNlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGZpeGVzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRvIG5vdCBhZGQgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG8gbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcHJlbWF0dXJlIHBhZ2UgZnJlZWluZyBvciByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDowMC4wMjU5NjM2NTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTM0Mzk2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YzdkNDA5MDcxZDMxMGJjZjIyYTEzMDgyNGQyNjg1ZGFlMDI0MzE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDIzOjQ5OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5pbmRleCA2Yzk0MWFhYTEwYzYzLi5kNWFhMTk3ZDJjYmZkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5AQCAtMTYxMyw3ICsxNjEzLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4gXFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XFxuIFxcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC1cXHUwMDNldmNwdS1cXHUwMDNlYXJjaC5od19tbXUtXFx1MDAzZXBndDtcXG4gXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gczJmZC1cXHUwMDNldmNwdS1cXHUwMDNla3ZtO1xcbiBcXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuQEAgLTE2NDEsNyArMTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXFxuIFxcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXFxuIFxcdHNtcF9ybWIoKTtcXG4gXFxuLVxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVxcdTAwM2VtZW1zbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKTtcXG4rXFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXFx1MDAzZW1lbXNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgTlVMTCk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC1cXHUwMDNldmNwdSwgczJmZC1cXHUwMDNlZmF1bHRfaXBhLCBQQUdFX1NJWkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7XFxuQEAgLTE2ODEsNyArMTY4MCw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXFxuIFxcdH1cXG4gXFxuIG91dF91bmxvY2s6XFxuLVxcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsICEhcmV0LCBwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKTtcXG4gXFx0a3ZtX2ZhdWx0X3VubG9jayhrdm0pO1xcbiBcXG4gXFx0aWYgKChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSBcXHUwMDI2XFx1MDAyNiAhcmV0KVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuaW5kZXggZmI1NGY2ZGFkOTk1Yy4uNDM1MjNiYjE3NjIxYSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuQEAgLTEzNjAsNyArMTM2MCw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFx0Ym9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4gXFx0c3RydWN0IHZuY3JfdGxiICp2dDtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gXFx0dTY0IHZhLCBwZm4sIGdmbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTE0MTEsNyArMTQxMSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFx0XFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSB8fCAod3JpdGVfZmF1bHQgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKTtcXG4rXFx0XFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgTlVMTCk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgdnQtXFx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbmluZGV4IGM1MTllOGU4ZDY0NmYuLjEyOWQ0MDMzMDgwNTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNDYwNCw3ICs0NjA0LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR9XFxuIFxcbiBcXHRyID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIGZhdWx0LVxcdTAwM2VzbG90LCBmYXVsdC1cXHUwMDNlZ2ZuLCBcXHUwMDI2ZmF1bHQtXFx1MDAzZXBmbixcXG4tXFx0XFx0XFx0ICAgICBcXHUwMDI2ZmF1bHQtXFx1MDAzZXJlZmNvdW50ZWRfcGFnZSwgXFx1MDAyNm1heF9vcmRlcik7XFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNm1heF9vcmRlcik7XFxuIFxcdGlmIChyKSB7XFxuIFxcdFxcdGt2bV9tbXVfcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCBmYXVsdCk7XFxuIFxcdFxcdHJldHVybiByO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IGZjYjQxZGZkZTRjMDIuLjBjOTFjOTA0NTczY2MgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtNDAxNiw3ICs0MDE2LDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFx0a3ZtX3Bmbl90IHBmbjtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcXG5AQCAtNDA2MCw3ICs0MDU5LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbiBcXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxcbiBcXHQgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKSlcXG4rXFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIE5VTEwpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbkBAIC00MDc2LDggKzQwNzUsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuIFxcdGVsc2VcXG4gXFx0XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XFxuIFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tXFxuLVxcdGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTUwMDMsNyArNTAwMCw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxcbiBcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcdGludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuIFxcdGJvb2wgYXNzaWduZWQ7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuIFxcdGdmbl90IGdmbjtcXG5AQCAtNTAzMCw3ICs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBcXHUwMDI2b3JkZXIpO1xcbitcXHRtbXVfc2VxID0ga3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XFxuK1xcdHNtcF9ybWIoKTtcXG4rXFxuK1xcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZvcmRlcik7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYmFja2luZyBwYWdlIGZvciBwcml2YXRlIEdQQSAweCVsbHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICBncGEpO1xcbkBAIC01MDM5LDkgKzUwMzksMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuIFxcbiBcXHRyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXFx1MDAyNmFzc2lnbmVkLCBcXHUwMDI2cm1wX2xldmVsKTtcXG4gXFx0aWYgKHJldCB8fCAhYXNzaWduZWQpIHtcXG4tXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICBncGEsIHBmbiwgcmV0KTtcXG4tXFx0XFx0Z290byBvdXRfbm9fdHJhY2U7XFxuK1xcdFxcdGd1YXJkKHJlYWRfbG9jaykoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXG4rXFx0XFx0aWYgKCFtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxcbitcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGdwYSwgcGZuLCByZXQpO1xcbitcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC01MDY5LDI2ICs1MDczLDMxIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxcbiBcXHRpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCdzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmVcXG4tXFx0XFx0ICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZFxcbi1cXHRcXHQgKiBpdHNlbGYuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcXHUwMDI2YXNzaWduZWQsIFxcdTAwMjZybXBfbGV2ZWwpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBhc3NpZ25lZCBcXHUwMDI2XFx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXFxuK1xcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuK1xcdFxcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlNFVjogVW5hYmxlIHRvIHNwbGl0IFJNUCBlbnRyeSBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IHJldCAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgIGdwYSwgcGZuLCByZXQpO1xcbitcXHRcXHRyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxcbitcXHRcXHRcXHQgKiBoYXZlIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzXFxuK1xcdFxcdFxcdCAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCdzIG5vdCBhc3NpZ25lZCwgdGhlblxcbitcXHRcXHRcXHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcXG4rXFx0XFx0XFx0ICogdGhpcyBwYWdlIHNoYXJlZC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFxcdTAwMjZhc3NpZ25lZCwgXFx1MDAyNnJtcF9sZXZlbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICgoYXNzaWduZWQgXFx1MDAyNlxcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKSB8fCAhYXNzaWduZWQpKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlNFVjogVW5hYmxlIHRvIHNwbGl0IFJNUCBlbnRyeSBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IHJldCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGdwYSwgcGZuLCByZXQpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4gKyBQVFJTX1BFUl9QTUQpO1xcbiBvdXQ6XFxuIFxcdHRyYWNlX2t2bV9ybXBfZmF1bHQodmNwdSwgZ3BhLCBwZm4sIGVycm9yX2NvZGUsIHJtcF9sZXZlbCwgcmV0KTtcXG4tb3V0X25vX3RyYWNlOlxcbi1cXHRrdm1fcmVsZWFzZV9wYWdlX3VudXNlZChwYWdlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgaXNfcGZuX3JhbmdlX3NoYXJlZChrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTI1ODYsMTMgKzI1ODYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tXFx0XFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXFxuLVxcdFxcdCAgICAgaW50ICptYXhfb3JkZXIpO1xcbitcXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcXG4tXFx0XFx0XFx0XFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcXG4tXFx0XFx0XFx0XFx0ICAgaW50ICptYXhfb3JkZXIpXFxuK1xcdFxcdFxcdFxcdCAgIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcXG4ge1xcbiBcXHRLVk1fQlVHX09OKDEsIGt2bSk7XFxuIFxcdHJldHVybiAtRUlPO1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IGI1OTY0ODZkMTg0Y2EuLjU4OTc2MjE0MGMzZWYgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5AQCAtNzUxLDggKzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gfVxcbiBcXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi1cXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcXG4tXFx0XFx0ICAgICBpbnQgKm1heF9vcmRlcilcXG4rXFx0XFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcXG4ge1xcbiBcXHRwZ29mZl90IGluZGV4ID0ga3ZtX2dtZW1fZ2V0X2luZGV4KHNsb3QsIGdmbik7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuQEAgLTc4MCwxMSArNzc5LDcgQEAgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiAjZW5kaWZcXG4gXFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcbi1cXHRpZiAoIXIpXFxuLVxcdFxcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFxuIFxcdHJldHVybiByO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjAxLjY0MDEwNTQzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2MjMwNTIyNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9nZXRfcGZuXCIsXG4gICAgXCJzZXZfaGFuZGxlX3JtcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YzdkNDA5MDcxZDMxMGJjZjIyYTEzMDgyNGQyNjg1ZGFlMDI0MzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjM6NDk6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzLi5kNWFhMTk3ZDJjYmZkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5AQCAtMTYxMyw3ICsxNjEzLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90ID0gS1ZNX1BHVEFCTEVfUFJPVF9SO1xuIFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QgPSBzMmZkLVx1MDAzZXZjcHUtXHUwMDNlYXJjaC5od19tbXUtXHUwMDNlcGd0O1xuIFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBzMmZkLVx1MDAzZXZjcHUtXHUwMDNla3ZtO1xuIFx0dm9pZCAqbWVtY2FjaGUgPSBOVUxMO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbkBAIC0xNjQxLDcgKzE2NDAsNyBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbitcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC1cdTAwM2V2Y3B1LCBzMmZkLVx1MDAzZWZhdWx0X2lwYSwgUEFHRV9TSVpFLFxuIFx0XHRcdFx0XHQgICAgICB3cml0ZV9mYXVsdCwgZXhlY19mYXVsdCwgZmFsc2UpO1xuQEAgLTE2ODEsNyArMTY4MCw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4gXHR9XG4gXG4gb3V0X3VubG9jazpcbi1cdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsICEhcmV0LCBwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpO1xuIFx0a3ZtX2ZhdWx0X3VubG9jayhrdm0pO1xuIFxuIFx0aWYgKChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpIFx1MDAyNlx1MDAyNiAhcmV0KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbmluZGV4IGZiNTRmNmRhZDk5NWMuLjQzNTIzYmIxNzYyMWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC0xMzYwLDcgKzEzNjAsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRib29sIHdyaXRlX2ZhdWx0LCB3cml0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHU2NCB2YSwgcGZuLCBnZm47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE0MTEsNyArMTQxMSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSB8fCAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICF3cml0YWJsZSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4rXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIHZ0LVx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCBjNTE5ZThlOGQ2NDZmLi4xMjlkNDAzMzA4MDUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTQ2MDQsNyArNDYwNCw3IEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiBcbiBcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIFx1MDAyNmZhdWx0LVx1MDAzZXBmbixcbi1cdFx0XHQgICAgIFx1MDAyNmZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZSwgXHUwMDI2bWF4X29yZGVyKTtcbitcdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4gXHRpZiAocikge1xuIFx0XHRrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpO1xuIFx0XHRyZXR1cm4gcjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggZmNiNDFkZmRlNGMwMi4uMGM5MWM5MDQ1NzNjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MDE2LDcgKzQwMTYsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG5AQCAtNDA2MCw3ICs0MDU5LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG4gXHQgKi9cbi1cdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4rXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbkBAIC00MDc2LDggKzQwNzUsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRlbHNlXG4gXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuIH1cbiBcbiAvKlxuQEAgLTUwMDMsNyArNTAwMCw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0aW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0Ym9vbCBhc3NpZ25lZDtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXHRnZm5fdCBnZm47XG5AQCAtNTAzMCw3ICs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIFx1MDAyNm9yZGVyKTtcbitcdG1tdV9zZXEgPSBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0c21wX3JtYigpO1xuK1xuK1x0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZvcmRlcik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcblwiLFxuIFx0XHRcdFx0ICAgIGdwYSk7XG5AQCAtNTAzOSw5ICs1MDM5LDEzIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFxuIFx0cmV0ID0gc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpO1xuIFx0aWYgKHJldCB8fCAhYXNzaWduZWQpIHtcbi1cdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4tXHRcdGdvdG8gb3V0X25vX3RyYWNlO1xuK1x0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRcdGlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cIixcbitcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuK1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTUwNjksMjYgKzUwNzMsMzEgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heSBoYXZlXG4tXHRcdCAqIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzIGFscmVhZHkgcmVzb2x2ZWRcbi1cdFx0ICogaXRzZWxmLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuK1x0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4rXHRcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4rXHRcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxuK1x0XHRcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcbitcdFx0XHQgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQncyBub3QgYXNzaWduZWQsIHRoZW5cbitcdFx0XHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcbitcdFx0XHQgKiB0aGlzIHBhZ2Ugc2hhcmVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAoKGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpXG4rXHRcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiArIFBUUlNfUEVSX1BNRCk7XG4gb3V0OlxuIFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xuLW91dF9ub190cmFjZTpcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODYsMTMgKzI1ODYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpO1xuK1x0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLVx0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0XHRcdCAgIGludCAqbWF4X29yZGVyKVxuK1x0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuIHtcbiBcdEtWTV9CVUdfT04oMSwga3ZtKTtcbiBcdHJldHVybiAtRUlPO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBiNTk2NDg2ZDE4NGNhLi41ODk3NjIxNDBjM2VmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc1MSw4ICs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gfVxuIFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpXG4rXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0cGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC03ODAsMTEgKzc3OSw3IEBAIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiAjZW5kaWZcbiBcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRpZiAoIXIpXG4tXHRcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4tXHRlbHNlXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTA6MDEuNjQwMTA2NTYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3MTkyMDcxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBrdm1fZ21lbV9nZXRfcGZuIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gYGt2bV9nbWVtX2dldF9wZm5gLiBJdCdzIHJlbW92aW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgY2xhc3NpYyBpbmRpY2F0b3Igb2YgYSByZWZlcmVuY2UgY291bnQgY2hhbmdlLiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgdXNlZCB0byB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBgc3RydWN0IHBhZ2VgIChmb2xpbywgaW4gbW9kZXJuIHRlcm1zKSBhbmQgcmVsZWFzZSBpdCBsYXRlciB1c2luZyBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCwgYGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW5gLCBvciBga3ZtX3JlbGVhc2VfcGFnZV91bnVzZWRgLiBOb3csIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBgZm9saW9fcHV0KClgIGRpcmVjdGx5IGFmdGVyIGBmb2xpb191bmxvY2soKWAsIHJpZ2h0IGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGEgdGhvcm91Z2ggY2hlY2sgZm9yIHJlYWNoYWJpbGl0eSBhbmQgZnV6emFiaWxpdHkuIFRoaXMgaXMgY29yZSBndWVzdF9tZW1mZCBmdW5jdGlvbmFsaXR5LCBkaXJlY3RseSBpbnZvbHZlZCBpbiBjb25maWRlbnRpYWwgY29tcHV0aW5nIGNvbnRleHRzIGxpa2UgU0VWLVNOUCwgVERYLCBhbmQgQVJNIENDQS4gVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIGZvciBwcml2YXRlIG1lbW9yeSwgc28gdGhlIGltcGFjdCBpcyBwb3RlbnRpYWxseSBoaWdoLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGhvdyB0aGUgZm9saW8ncyByZWZlcmVuY2UgY291bnQgaXMgbWFuYWdlZC4gUHJldmlvdXNseSwgdGhlIGNhbGxlciBoZWxkIGEgcmVmZXJlbmNlLCB3aGljaCBnYXZlIHRoZW0gY29udHJvbCBvdmVyIHRoZSBwYWdlJ3MgbGlmZWN5Y2xlLiBOb3csIGBrdm1fZ21lbV9nZXRfcGZuYCAqaW1tZWRpYXRlbHkqIHJlbGVhc2VzIHRoYXQgcmVmZXJlbmNlLiBUaGlzIGJlZ3MgdGhlIHF1ZXN0aW9uOiBob3cgZG9lcyB0aGUgY2FsbGVyIHNhZmVseSAqdXNlKiB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGl0IGdldHMgYmFjaz8gSWYgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGRyb3BzIHRoZSByZWZlcmVuY2UsIHRoZXJlIGhhcyB0byBiZSBzb21lIG90aGVyIG1lY2hhbmlzbSB0byBlbnN1cmUgdGhlIGJhY2tpbmcgbWVtb3J5IGRvZXNuJ3QgZ2V0IHByZW1hdHVyZWx5IGZyZWVkIHdoaWxlIHRoZSBQRk4gaXMgaW4gdXNlLlxuXG5BaCwgcmlnaHQsIHRoZSBtZW1vcnkgaXMgcGlubmVkIG9yIG1hbmFnZWQgYnkgZ3Vlc3RfbWVtZmQuIFRoZSByZWZlcmVuY2UgbWlnaHQgYmUgaW1wbGljaXRseSBoZWxkIGJ5IHRoZSBmaWxlIG1hcHBpbmcgaXRzZWxmLCBvciB0aGUgUEZOIG1pZ2h0IGp1c3QgYmUgdXNlZCB0byBwb3B1bGF0ZSB0aGUgUk1QL0VQVCAob3IgZXF1aXZhbGVudCkgdGFibGVzLCBhbmQgdGhlIHBhZ2UncyBsaWZldGltZSBpcyBib3VuZCB0byB0aGUgZ3Vlc3RfbWVtZmQgZmlsZSdzLiBJbiB0aGUgY2FzZSBvZiBndWVzdF9tZW1mZCwgdGhvc2UgcGFnZXMgYXJlIHVuZXZpY3RhYmxlIGFuZCBub3QgbWFwcGVkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB0aGV5IGFyZSBvbmx5IGZyZWVkIHdoZW4gdGhlIGd1ZXN0X21lbWZkIGZpbGUgaXMgdHJ1bmNhdGVkIG9yIGNsb3NlZC4gVHJ1bmNhdGlvbiBkb2VzIHRyaWdnZXIgTU1VIG5vdGlmaWVycyAob3IgdGhlIGBrdm1fZ21lbV9pbnZhbGlkYXRlX2JlZ2luL2VuZGAgZXF1aXZhbGVudHMgaW4gZ3Vlc3RfbWVtZmQpIHRvIHphcCB0aGUgU1BURXMuIFNvIGhvbGRpbmcgYSByZWZlcmVuY2UgKmR1cmluZyogdGhlIHBhZ2UgZmF1bHQgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeSBpZiB0aGV5J3JlIHJlbHlpbmcgb24gdGhlIE1NVSBsb2NrIGFuZCBzZXF1ZW5jZSBjb3VudGVyIGJlaW5nIHVzZWQgY29ycmVjdGx5LlxuXG5MZXQncyBsb29rIGF0IGEgY29uY3JldGUgZXhhbXBsZSB0byBzZWUgaG93IHRoaXMgaXMgdXNlZC4gSW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBzcGVjaWZpY2FsbHkgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgSSBzZWUgdGhleSd2ZSBhZGRlZCBgbW11X3NlcWAgY2hlY2tpbmcuXG5cbmBgYGNcbkBAIC01MDMwLDcgKzUwMjcsMTAgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgXHUwMDI2b3JkZXIpO1xuK1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRzbXBfcm1iKCk7XG4rXG4rXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNm9yZGVyKTtcbmBgYFxuXG5UaGlzIGNvbmZpcm1zIHRoYXQgdGhlIHBhdGNoIGltcGFjdHMgUk1QIGZhdWx0cyB3aXRoaW4gU0VWLWVuYWJsZWQgZ3Vlc3RzLCBhbmQgdGhlcmUncyBhIHN0cm9uZyBsaWtlbGlob29kIGl0J3MgcmVseWluZyBvbiB0aGUgTU1VJ3Mgc2VxdWVuY2UgbnVtYmVyIHRvIGhhbmRsZSBhbnkgcmFjZSBjb25kaXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBLVk1fR1VFU1RfTUVNRkRgIGlzIGVuYWJsZWQgaW4gYW55IG9mIG91ciBzeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIG9yIGlmIGl0J3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVhc2lseSBlbmFibGVkIGZvciB0ZXN0aW5nLiBTaW5jZSBpdCdzIHR5cGljYWxseSB0aWVkIHRvIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgYEtWTV9BTURfU0VWYCwgb3IgYEtWTV9JTlRFTF9URFhgLCBpdCBzaG91bGRuJ3QgYmUgdG9vIGRpZmZpY3VsdCB0byBnZXQgaXQgZW5hYmxlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGluIHRoZSBLY29uZmlnIHRvIGNvbmZpcm0gaG93IHRoZXNlIGZsYWdzIGludGVyYWN0LiBUaGlzIG5lZWRzIHRvIGJlIGZ1enplZCB2ZXJ5IHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDoxNC4zNTkzMTcxMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyOTY5NjI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0dVRVNUX01FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjE2LjQ4OTAxODM5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTg0NzM2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fR1VFU1RfTUVNRkQgU2VsZWN0aW9uKipcblxuQWxyaWdodCwgbXkgaW50ZXJuYWwgcmFkYXIgaXMgcGluZ2luZyBvbiBgS1ZNX0dVRVNUX01FTUZEYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIHdpdGhpbiB3aGljaCB0aGlzIGlzIGJlaW5nIHNlbGVjdGVkLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIHBvaW50cyBvZiB1c2UuIFdoYXQgYXJlIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGNvZGUgcGF0aHMgdGhhdCBhcmUgbWFraW5nIHRoaXMgc3BlY2lmaWMgc2VsZWN0aW9uPyBJcyBpdCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWcgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSBvciBhIGtlcm5lbCBtb2R1bGUgbG9hZGVkIHN0YXRlLCBhIGZlYXR1cmUgZW5hYmxlZCBieSBzb21lIHNwZWNpZmljIHNldHRpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBzZWxlY3Rpb24gcHJvY2VzcyBpdHNlbGYgaXMga2V5IGhlcmUuIEknbSBhZnRlciB0aGUgXCJ3aHksXCIgbm90IGp1c3QgdGhlIFwid2hhdC5cIiBUaGlzIGlzIGxpa2VseSB0aGUgYmVzdCBpbml0aWFsIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBZnRlciB0aGF0IEkgY2FuIHRoZW4gdW5kZXJzdGFuZCB3aGF0IHRoaXMgaXMgdGllZCB0byBhbmQgd2hlcmUgaXQgbWlnaHQgYmUgdXNlZnVsLCBvciB3aGVyZSBhbiBpc3N1ZSBtaWdodCBvY2N1ci4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHVwc3RyZWFtIGNvZGUsIGFuZCB0aGVuIGl0cyBkaXJlY3QgZGVwZW5kZW5jaWVzIGFuZCBpdHMgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIHNvIEkgY2FuIGRldGVybWluZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgZm9yIG1heGltdW0gdmFsdWUgaW4gdGhpcyBkZWVwIGRpdmUuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDoyMC4wMDc0OTQ2MDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODcyMTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzgtXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNDktXFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTA6MjEuNzQ2MjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwOTg1MTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0aW5nIHRoZSBgZ3Vlc3RfbWVtZmRgIGZ1bmN0aW9uYWxpdHksIGFzIGl0J3MgYmVpbmcgc2VsZWN0ZWQgZm9yIGJvdGggQVJNNjQgd2l0aCBLVk0gYW5kIHg4NlxcXzY0IHdpdGggS1ZNXFxfWDg2LiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uY2VwdCBvZiB1c2luZyBgZ3Vlc3RfbWVtZmRgIGlzIHByZXNlbnQgYW5kIGFjY2Vzc2libGUgd2l0aGluIHRoZSB0YXJnZXQgc3lzdGVtcy5cblxuVGhlIGNoYW5nZXMgYXJlIGRpc3RyaWJ1dGVkIGFjcm9zcyBzZXZlcmFsIGtleSBLVk0gbW9kdWxlcy4gVGhlIGZhY3QgdGhhdCBpdCB0b3VjaGVzIGBnbWVtX2Fib3J0YCBpbiBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBga3ZtX3RyYW5zbGF0ZV92bmNyYCBpbiBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgLCBhbmQgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIG1ha2VzIHNlbnNlLiBUaGVzZSBhcmUgYWxsIGludGltYXRlbHkgaW52b2x2ZWQgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdHJhbnNsYXRpb24sIHdoaWNoIHdvdWxkIGJlIHRoZSBleHBlY3RlZCBhcmVhcyBmb3IgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIGBndWVzdF9tZW1mZGAuIFRoZSBwcmVzZW5jZSBvZiBtb2RpZmljYXRpb25zIHRvIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGFuZCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBzdWdnZXN0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGVudmlyb25tZW50cywgcGVyaGFwcyBpbiBob3cgYGd1ZXN0X21lbWZkYCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgcHJvdGVjdGlvbiBmZWF0dXJlcy5cblxuTm93LCBob2xkIG9uLiBga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtYCBpcyBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZnVuY3Rpb24gYmV0dGVyIHRvIGRldGVybWluZSB3aGF0IHRob3NlIGNoYW5nZXMgZW50YWlsIGFuZCB0byBjb25uZWN0IHRoZSBtZW1vcnkgZmF1bHQgYXNwZWN0IHRvIHRoZSBndWVzdCBtZW1mZC4gTGV0J3MgZGVsdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgdGhlIHBhdGNoIGFsdGVycyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDoyNi44NTYwNzY3MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNDI1NDc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTg5PXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTk1LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5NjpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTk3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjE5PXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyNC1cXHRpZiAoZmF1bHQtXFx1MDAzZWlzX3ByaXZhdGUgfHwga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGZhdWx0LVxcdTAwM2VzbG90KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2MjU6XFx0XFx0cmV0dXJuIGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbSh2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDoyOS4wODAzMzU0NzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUxMDQ1MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIGxvb2tzIGxpa2Ugd2UndmUgc3R1bWJsZWQgb250byBzb21ldGhpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgd2l0aGluIHRoZSBjb3JlIEtWTSBNTVUgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGhvdyByZWZlcmVuY2VzIHRvIGd1ZXN0X21lbWZkIGZvbGlvcyBhcmUgbWFuYWdlZC4gVGhlIGtleSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcG9pbnQgYXQgd2hpY2ggYSByZWZlcmVuY2UgaXMgZHJvcHBlZDsgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHJlZmVyZW5jZSB0byB0aGUgY2FsbGVyIGluIGBrdm1fZ21lbV9nZXRfcGZuYCwgaXQncyBub3cgYmVpbmcgZHJvcHBlZCBpbnRlcm5hbGx5LiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGFsdGVyYXRpb24gaW4gS1ZNJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4gR2l2ZW4gdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIG1lbW9yeSBoYW5kbGluZywgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHRoZSByaWdodCBuZXh0IHN0ZXAuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9nbWVtX2dldF9wZm5gIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTA6MzMuMjMxMzgzMjE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcwMDYzNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9nbWVtX2dldF9wZm5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbW11LmM9MTYwOD1zdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTY0Mi1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxNjQzOlxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVxcdTAwM2VtZW1zbG90LCBnZm4sIFxcdTAwMjZwZm4sIE5VTEwpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2NDQtXFx0aWYgKHJldCkge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM1Nz1zdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDEzLVxcdH0gZWxzZSB7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQxNDpcXHRcXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXFx1MDAzZWt2bSwgbWVtc2xvdCwgZ2ZuLCBcXHUwMDI2cGZuLCBOVUxMKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDE1LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDU5Nj1zdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MDUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjA2OlxcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXFx1MDAzZWt2bSwgZmF1bHQtXFx1MDAzZXNsb3QsIGZhdWx0LVxcdTAwM2VnZm4sIFxcdTAwMjZmYXVsdC1cXHUwMDNlcGZuLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYwNy1cXHRcXHRcXHQgICAgIFxcdTAwMjZtYXhfb3JkZXIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDEyPXN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA2MS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQwNjI6XFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIE5VTEwpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5OTg9dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUwMzItXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MDMzOlxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZvcmRlcik7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MDM0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU4Ny0jaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTg4OmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU4OS1cXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5MC0jZWxzZVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTkxOnN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTkyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9ODM9c3RhdGljIHN0cnVjdCBmb2xpbyAqa3ZtX2dtZW1fZ2V0X2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwMy1cXHQvKlxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MTA0OlxcdCAqIEV4dGVybmFsIGludGVyZmFjZXMgbGlrZSBrdm1fZ21lbV9nZXRfcGZuKCkgc3VwcG9ydCBkZWFsaW5nXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xMDUtXFx0ICogd2l0aCBodWdlcGFnZXMgdG8gYSBkZWdyZWUsIGJ1dCBpbnRlcm5hbGx5LCBndWVzdF9tZW1mZCBjdXJyZW50bHlcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MjkwPXN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMzA1LVxcdCAqIGFmdGVyIHdoaWNoIGZpbGVfcmVmX2dldCgpIGFuZCBnZXRfZmlsZV9hY3RpdmUoKSBmYWlsLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MzA2OlxcdCAqIGt2bV9nbWVtX2dldF9wZm4oKSBjYW5ub3QgYmUgdXNpbmcgdGhlIGZpbGUgY29uY3VycmVudGx5LlxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMzA3LVxcdCAqIGZpbGVfcmVmX3B1dCgpIHByb3ZpZGVzIGEgZnVsbCBiYXJyaWVyLCBhbmQgZ2V0X2ZpbGVfYWN0aXZlKCkgdGhlXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTQ2Nj1zdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy00ODAtXFx0ICogZ3JhY2VmdWxseSBoYW5kbGluZyBtZW1vcnkgZXJyb3JzKS4gIElmL3doZW4gdGhlIGd1ZXN0IGF0dGVtcHRzIHRvXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo0ODE6XFx0ICogYWNjZXNzIGEgcG9pc29uZWQgcGFnZSwga3ZtX2dtZW1fZ2V0X3BmbigpIHdpbGwgcmV0dXJuIC1FSFdQT0lTT04sXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy00ODItXFx0ICogYXQgd2hpY2ggcG9pbnQgS1ZNIGNhbiBlaXRoZXIgdGVybWluYXRlIHRoZSBWTSBvciBwcm9wYWdhdGUgdGhlXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTYwNj1pbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY0OS1cXHQgKiBrdm1fZ21lbV9iaW5kKCkgbXVzdCBvY2N1ciBvbiBhIG5ldyBtZW1zbG90LiAgQmVjYXVzZSB0aGUgbWVtc2xvdFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NjUwOlxcdCAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLlxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjUxLVxcdCAqL1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz02NzE9c3RhdGljIHZvaWQgX19rdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgc3RydWN0IGdtZW1fZmlsZSAqZilcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjc4LVxcdC8qXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2Nzk6XFx0ICogc3luY2hyb25pemVfc3JjdShcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KSBlbnN1cmVkIHRoYXQga3ZtX2dtZW1fZ2V0X3BmbigpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02ODAtXFx0ICogY2Fubm90IHNlZSB0aGlzIG1lbXNsb3QuXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTY4NT12b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MTYtLyogUmV0dXJucyBhIGxvY2tlZCBmb2xpbyBvbiBzdWNjZXNzLiAgKi9cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjcxNzpzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MTgtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzUyLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzUzOmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1NC1cXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NjUtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo3NjY6XFx0Zm9saW8gPSBfX2t2bV9nbWVtX2dldF9wZm4oZmlsZSwgc2xvdCwgaW5kZXgsIHBmbiwgbWF4X29yZGVyKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc2Ny1cXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzg1LX1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjc4NjpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fZ2V0X3Bmbik7XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03ODctXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTc5MD1zdGF0aWMgbG9uZyBfX2t2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtODAwLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODAxOlxcdGZvbGlvID0gX19rdm1fZ21lbV9nZXRfcGZuKGZpbGUsIHNsb3QsIGluZGV4LCBcXHUwMDI2cGZuLCBOVUxMKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgwMi1cXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDozNS42MDE0NTIyMDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1MjQ0ODk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGt2bV9nbWVtX2dldF9wZm5gIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYOKAlGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHRoaXMgaXMgc29tZXRoaW5nIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcsIHNvIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGlzIGFyZWEuXG5cblRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgcmVsZXZhbnQgYW5kIHNob3VsZCBiZSB0aGUgaW5pdGlhbCB0YXJnZXRzIGFyZTogYGt2bV9nbWVtX2dldF9wZm5gLCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLCBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAsIGBnbWVtX2Fib3J0YCwgYW5kIGBrdm1fdHJhbnNsYXRlX3ZuY3JgLiBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzIHRvIHRoZXNlIHRvIGRldGVybWluZSB3aGVyZSBiZXN0IHRvIGFwcGx5IGZ1enppbmcgc3RyYXRlZ2llcy5cblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJIG5lZWQgdG8gbm90ZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGlmIHRoZXkgYXJlIHN0YXRpYyBvciBub3QsIHNpbmNlIHRoYXQgd2lsbCBhZmZlY3QgbXkgZnV6emluZyBhcHByb2FjaC4gTG9va2luZyBjbG9zZXIsIEkgc2VlIHRoYXQgYGdtZW1fYWJvcnRgIGlzIHN0YXRpYyBpbiBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBga3ZtX3RyYW5zbGF0ZV92bmNyYCBpcyBzdGF0aWMgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaXMgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgYW5kIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGlzIGFsc28gc3RhdGljLCB0aGlzIHRpbWUgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIGlzIG5vbi1zdGF0aWMgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgbm9uLXN0YXRpYyBhbmQgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBhcyBtZW50aW9uZWQgYmVmb3JlLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkgaWYgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBpcyBleHBvcnRlZCBvciBqdXN0IG5vbi1zdGF0aWMsIHNpbmNlIHRoYXQgZGljdGF0ZXMgaG93IGVhc2lseSBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0LiBBaCwgaXQncyBqdXN0IG5vbi1zdGF0aWMsIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kIGZvciBhY2Nlc3MuIEdvb2QsIGFuZCBga3ZtX2dtZW1fZ2V0X3BmbmAgKmlzKiBleHBvcnRlZDogYEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ21lbV9nZXRfcGZuKWAuIFRoYXQncyBleHRyZW1lbHkgdXNlZnVsOyBJIGNhbiBsZXZlcmFnZSB0aGF0IHRvIGJyb2FkZW4gbXkgY292ZXJhZ2UuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgYEtWTWAgZW5hYmxlZCwgb2YgY291cnNlLiBgS1ZNX0dVRVNUX01FTUZEYCBpcyAqc2VsZWN0ZWQqIC0gYWgsIHRoYXQgbWVhbnMgSSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgdGhhdCBkaXJlY3RseS4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBtYWtlIHN1cmUgSSBhbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLCBlbmFibGluZyBgS1ZNX0FNRF9TRVZgIG9yIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCB0byBlbnN1cmUgdGhlIG1lbWZkIGNvZGUgaXMgdXNlZCBtaWdodCBiZSB3b3J0aHdoaWxlLiBJIHNob3VsZCB2ZXJpZnkgd2hhdCBzZWxlY3RzIGBLVk1fR1VFU1RfTUVNRkRgLCBqdXN0IHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTA6NDMuODUzOTAzODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjM2NTExMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1JcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDo0Ni4yMTc1NjA0OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MzIyNjM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBLVk1fQU1EX1NFVmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgS1ZNX0FNRF9TRVZgIHRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGVuY3J5cHRpb24gYW5kIHNlY3VyZSB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgcGxhdGZvcm1zLiBXZSdyZSB0YWxraW5nIGFib3V0IFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgaGVyZSwgcmlnaHQ/IFNvLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGFyY2hpdGVjdHVyYWwgYXNwZWN0cyDigJMgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBndWVzdCBPUywgdGhlIGh5cGVydmlzb3IsIGFuZCB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IuIEknbSByZWNhbGxpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiwgYW5kIEknbSB3b25kZXJpbmcgd2hhdCBtaXRpZ2F0aW9ucyBhcmUgaW4gcGxhY2UgdG8gbWluaW1pemUgdGhhdCBpbXBhY3QuIEkgd2FudCB0byBrbm93IGFib3V0IGtleSBtYW5hZ2VtZW50IGFuZCBob3cgaXQncyBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hldGhlciBpdCdzIHNvZnR3YXJlLW1hbmFnZWQsIGhhcmR3YXJlLW1hbmFnZWQsIG9yIGEgaHlicmlkIGFwcHJvYWNoLiBJJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgc2VjdXJpdHkgYm91bmRhcmllcyB0aGlzIGVzdGFibGlzaGVzIOKAkyBpcyB0aGUgaHlwZXJ2aXNvciBub3cgdW50cnVzdGVkIHdpdGggcmVzcGVjdCB0byBndWVzdCBtZW1vcnksIG9yIGlzIHRoZXJlIGEgdHJ1c3QgcmVsYXRpb25zaGlwIGF0IHBsYXk/IFdoYXQgYWJvdXQgRE1BIGF0dGFja3M7IGFyZSB3ZSB1c2luZyBJT01NVSB0byBzZWN1cmUgdGhvc2U/IEFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgc28gSSBzaG91bGQgc2VlIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcyMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjUwLjE2MDc4OTc4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MTIwNjQyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDo1Mi40MzIwMDI3NDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NDAxMjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgYEtWTV9JTlRFTF9URFhgOlxuXG4qKkFuYWx5emluZyBLVk1fSU5URUxfVERYKipcblxuQWxyaWdodCwgdGltZSB0byBmb2N1cy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggYEtWTV9JTlRFTF9URFhgLiBJbW1lZGlhdGVseSwgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBjaGVja2luZyBpdHMgc3RhdHVzLiBJcyBpdCBlbmFibGVkPyBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJcyB0aGUgaGFyZHdhcmUgcHJlc2VudCBhbmQgY2FwYWJsZT8gV2hhdCdzIHRoZSBrZXJuZWwgdmVyc2lvbiBsb29raW5nIGxpa2U/IEFyZSB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMgbG9hZGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzPyBJJ20gYWxzbyB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0cywgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIGFuZCBrbm93biBpc3N1ZXMuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcsIGFuZCBpZGVudGlmeSBhbnkgcmVkIGZsYWdzIGltbWVkaWF0ZWx5LiBJcyB0aGlzIGZlYXR1cmUgYmVoYXZpbmcgYXMgSSBleHBlY3QgaXQgdG8/IElzIGl0IHByb3ZpZGluZyB0aGUgYW50aWNpcGF0ZWQgZnVuY3Rpb25hbGl0eT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGlzc3VlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB0aGF0IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjU1Ljk4NjAxNzY3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1Mzk3NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjU4LjI0MDAyMDg4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA4NDMwMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBhbmQgU0VWLVNOUCBHdWVzdCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBjaGVja2luZyBhIGh1bmNoLiBJcyBgS1ZNX0dVRVNUX01FTUZEYCBzaW1wbHkgc2VsZWN0ZWQgYnkgYEtWTWAgb24gYXJtNjQgYW5kIGBLVk1fWDg2YCBvbiB4ODY/ICBUaGUgY29uZmlnIGNvbmZpcm1zIGl0OlxuXG5gYGBcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzk6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5gYGBcblxuU28gZW5hYmxpbmcgYEtWTWAgYW5kIGBLVk1fQU1EX1NFVmAgaXMgZGVmaW5pdGVseSBvbiB0aGUgcmlnaHQgdHJhY2suXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZnVuY3Rpb25zIGFjcm9zcyBhcmNoaXRlY3R1cmVzLCBzbyBJIHNob3VsZCBiZSBmYW1pbGlhciB3aXRoIHRoZW0gYWxsLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGlzIGlzIHdoZXJlIFJNUCBmYXVsdHMgZm9yIFNFVi1TTlAgZ3Vlc3RzIGFyZSBoYW5kbGVkLCBzbyB0aGF0J3MgYSBrZXkgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgbW9kaWZ5aW5nIGhvdyB0aGUgUEZOIGlzIHJldHJpZXZlZCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZSBgbW11X3NlcWAgaXMgaGFuZGxlZC4gSXQncyBhbHNvIG1vZGlmeWluZyBgX19zZXZfc25wX3JlbG9hZF92bXNhYCBmb3IgY29udGV4dCB1cGRhdGVzLlxuXG5BZGRpdGlvbmFsbHksIEkgc2VlIGNoYW5nZXMgdG8gYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBPbiBBUk02NCwgdGhlIGNoYW5nZXMgaW52b2x2ZSBgZ21lbV9hYm9ydGAgaW4gYGFyY2gvYXJtNjQva3ZtL21tdS5jYCBhbmQgYGt2bV90cmFuc2xhdGVfdm5jcmAgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYC5cblxuQmFzZWQgb24gdGhpcywgdGhlIGNlbnRyYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6XG5cbi0gICBga3ZtX2dtZW1fZ2V0X3BmbmBcbi0gICBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgXG4tICAgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWBcbi0gICBgZ21lbV9hYm9ydGBcbi0gICBga3ZtX3RyYW5zbGF0ZV92bmNyYFxuXG5XYWl0LCBhIHNtYWxsIHF1ZXN0aW9uLiBJdCBzZWVtcyB0aGF0IGBnbWVtX2Fib3J0YCBhbmQgYGt2bV90cmFuc2xhdGVfdm5jcmAgYXJlIHN0YXRpYywgdGhvdWdoIGNsZWFybHkgbm90IHRyaXZpYWwsIGhvdC1wYXRoIGZ1bmN0aW9ucyAodGhleSdyZSBwYWdlIGZhdWx0IGhhbmRsZXJzIGZvciBzcGVjaWZpYyBjYXNlcykuIEhvd2V2ZXIsIHRoZSBndWlkZWxpbmVzIEkgdXN1YWxseSBmb2xsb3cgYXJlIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoYXQgb25lIGlzIGlubGluZWQsIG9yIGlmIHRoZXJlIGlzIGEgcGFydGljdWxhciByZWFzb24gZm9yIGl0cyBzdGF0aXMgZGVjbGFyYXRpb24uIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQsIGFzIGlzIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjA2Ljk0ODQ1NTU3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzOTUxNDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTg5PXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTk1LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5NjpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTk3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjE5PXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyNC1cXHRpZiAoZmF1bHQtXFx1MDAzZWlzX3ByaXZhdGUgfHwga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGZhdWx0LVxcdTAwM2VzbG90KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2MjU6XFx0XFx0cmV0dXJuIGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbSh2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTowOS4yODc5NzQ5MjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3NzAyNjI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGl0IGRlYWxzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGBndWVzdF9tZW1mZGAgd2l0aGluIEtWTS4gVGhlIGNvZGUgaXMgc3RhdGljLCBidXQgaXQncyBub3QgZGlyZWN0bHkgaW5saW5lZCwgc28gSSdsbCBnbyBzdHJhaWdodCB0byBga3ZtX2dtZW1fZ2V0X3BmbmAgYW5kIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgYW5kIGlmIHRoZXkncmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXG5cbkFscmlnaHQsIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyB0cmlnZ2VyZWQgZHVyaW5nIEtWTSBwYWdlIGZhdWx0cyB3aGVuIHRoZSBndWVzdCBhdHRlbXB0cyB0byBhY2Nlc3MgcHJpdmF0ZSBtZW1vcnksIGFuZCB0aGlzIGhhcHBlbnMgd2hlbiBydW5uaW5nIGEgVk0gdXNpbmcgYGd1ZXN0X21lbWZkYCBhbmQgYWNjZXNzaW5nIHRoZSBtZW1vcnkuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGEgdXNlcnNwYWNlIGRlcGVuZGVuY3ksIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyLlxuXG5Ob3csIGxldCBtZSBwdXQgdG9nZXRoZXIgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCBhbHRlcnMgaG93IGZvbGlvIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgd2l0aGluIGBrdm1fZ21lbV9nZXRfcGZuYC4gSW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHBhZ2UgdG8gdGhlIGNhbGxlciB0byBiZSByZWxlYXNlZCwgaXQncyBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvbiB0aGUgY2FsbGVyLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIGJvdGggeDg2IChzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBNTVUgYW5kIFNFVi1TTlAgY29kZSkgYW5kIEFSTTY0IChNTVUgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbikgdG8gYWNjb21tb2RhdGUgdGhpcyBuZXcgc2lnbmF0dXJlLiBBZGRpdGlvbmFsbHksIGl0IGludHJvZHVjZXMgTU1VIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIGluIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgdG8gYWRkcmVzcyBwb3RlbnRpYWwgaW52YWxpZGF0aW9uIHJhY2VzLlxuXG5Fc3NlbnRpYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEtWTSBhbmQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBtZW1vcnkgbWFuYWdlbWVudCB3aGljaCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJlY2F1c2UgaXQgaW1wYWN0cyBhbnlvbmUgcnVubmluZyBhIEtWTSBndWVzdCB0aGF0IGxldmVyYWdlcyBgZ3Vlc3RfbWVtZmRgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudDogYEtWTWAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBzeW1ib2xzOiBga3ZtX2dtZW1fZ2V0X3BmbmAgYW5kIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuXG5JJ20gYWxzbyBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgaXMgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAwMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MToxNS44NjUwMDQyMTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjgwNzc1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1JcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MToxNy45OTMwODY1MDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1ODIyNjc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0vQU1ELVNFViBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGVuYWJsaW5nIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgdGhhdCBsZXZlcmFnZSBgZ3Vlc3RfbWVtZmRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3VwcG9ydGluZyBrZXJuZWwgZmVhdHVyZXMgYXJlIGluIHBsYWNlLCB3aGljaCBtZWFucyB2YWxpZGF0aW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGFyY2hpdGVjdHVyZS5cblxuTXkgZm9jdXMgaXMgdG8gZW5zdXJlIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiBgS1ZNX0FNRF9TRVZgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSB0aGVzZSBgZ3Vlc3RfbWVtZmRgIHNlY3VyZWQgdmlydHVhbCBtYWNoaW5lcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBSTVAgZmF1bHQgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6MjEuMDUxMzE2OTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzc2NTg2NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X2hhbmRsZV9ybXBfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTY2PXN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5Ny1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5OTg6dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTk5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk2OT1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDI1LVxcdGlmIChyYyBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX0dVRVNUX1JNUF9NQVNLKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjAyNjpcXHRcXHRzZXZfaGFuZGxlX3JtcF9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyNy1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTAxMT1leHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMTI6dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAxMy1pbnQgc2V2X2dtZW1fbWFrZV9wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBrdm1fcGZuX3QgbnJfcGFnZXMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDM4PXN0YXRpYyBpbmxpbmUgaW50IHNldl9kZXZfZ2V0X2F0dHIodTMyIGdyb3VwLCB1NjQgYXR0ciwgdTY0ICp2YWwpIHsgcmV0dXJuIC1FTlhJTzsgfVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzOS0jZGVmaW5lIG1heF9zZXZfYXNpZCAwXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDQwOnN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpIHt9XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDQxLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6MjMuMjI4OTgwOTUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTE2MDAzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTRVYgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBmdW5jdGlvbi4gUmlnaHQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyB0aGluZyBpcyAqYWN0dWFsbHkqIGRlZmluZWQgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgZmlsZS4gTm90aGluZyB0b28gc3VycHJpc2luZyB0aGVyZS4gQW5kIGl0IG9ubHkgZ2V0cyBjb21waWxlZCB3aGVuIHRoZSBgS1ZNX0FNRF9TRVZgIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0IGhlbHBzIG5hcnJvdyBkb3duIHdoZW4gSSdsbCBlbmNvdW50ZXIgaXQuIE5vdywgd2hhdCdzIG5leHQuLi4gSSB0aGluayBJJ2xsIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB3aGF0IEkndmUgZm91bmQgc28gZmFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc5MywiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MToyNy43MjA1ODQyMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAwMzg0NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9nZXRfcGZuXCIsXG4gICAgXCJzZXZfaGFuZGxlX3JtcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9nZXRfcGZuXCIsXG4gICAgXCJzZXZfaGFuZGxlX3JtcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MToyNy44NzA2MzMyNzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTc1NDY3OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6MjcuODcyNDAzNzM4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQyOTczNjkyMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fZ2V0X3BmbmAgdG8gbm8gbG9uZ2VyIHJldHVybiBhIGBzdHJ1Y3QgcGFnZWAgcG9pbnRlciB0byB0aGUgY2FsbGVyLCBpbnN0ZWFkIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgYWNyb3NzIGFybTY0IGFuZCB4ODYgS1ZNIGNvZGUgdG8gcmVtb3ZlIHRoZSBgcGFnZWAgYXJndW1lbnQgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCBjYWxscyAoZS5nLiwgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCkuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBNTVUgc2VxdWVuY2UgY2hlY2tpbmcgKGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gKSBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSTVAgZmF1bHRzLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBvZiBwYWdlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBmaXhlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkbyBub3QgYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHByZW1hdHVyZSBwYWdlIGZyZWVpbmcgb3IgcmFjZSBjb25kaXRpb25zKSB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YzdkNDA5MDcxZDMxMGJjZjIyYTEzMDgyNGQyNjg1ZGFlMDI0MzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjM6NDk6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzLi5kNWFhMTk3ZDJjYmZkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5AQCAtMTYxMyw3ICsxNjEzLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90ID0gS1ZNX1BHVEFCTEVfUFJPVF9SO1xuIFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QgPSBzMmZkLVx1MDAzZXZjcHUtXHUwMDNlYXJjaC5od19tbXUtXHUwMDNlcGd0O1xuIFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBzMmZkLVx1MDAzZXZjcHUtXHUwMDNla3ZtO1xuIFx0dm9pZCAqbWVtY2FjaGUgPSBOVUxMO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbkBAIC0xNjQxLDcgKzE2NDAsNyBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbitcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC1cdTAwM2V2Y3B1LCBzMmZkLVx1MDAzZWZhdWx0X2lwYSwgUEFHRV9TSVpFLFxuIFx0XHRcdFx0XHQgICAgICB3cml0ZV9mYXVsdCwgZXhlY19mYXVsdCwgZmFsc2UpO1xuQEAgLTE2ODEsNyArMTY4MCw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4gXHR9XG4gXG4gb3V0X3VubG9jazpcbi1cdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsICEhcmV0LCBwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpO1xuIFx0a3ZtX2ZhdWx0X3VubG9jayhrdm0pO1xuIFxuIFx0aWYgKChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpIFx1MDAyNlx1MDAyNiAhcmV0KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbmluZGV4IGZiNTRmNmRhZDk5NWMuLjQzNTIzYmIxNzYyMWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC0xMzYwLDcgKzEzNjAsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRib29sIHdyaXRlX2ZhdWx0LCB3cml0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHU2NCB2YSwgcGZuLCBnZm47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE0MTEsNyArMTQxMSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSB8fCAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICF3cml0YWJsZSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4rXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIHZ0LVx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCBjNTE5ZThlOGQ2NDZmLi4xMjlkNDAzMzA4MDUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTQ2MDQsNyArNDYwNCw3IEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiBcbiBcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIFx1MDAyNmZhdWx0LVx1MDAzZXBmbixcbi1cdFx0XHQgICAgIFx1MDAyNmZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZSwgXHUwMDI2bWF4X29yZGVyKTtcbitcdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4gXHRpZiAocikge1xuIFx0XHRrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpO1xuIFx0XHRyZXR1cm4gcjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggZmNiNDFkZmRlNGMwMi4uMGM5MWM5MDQ1NzNjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MDE2LDcgKzQwMTYsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG5AQCAtNDA2MCw3ICs0MDU5LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG4gXHQgKi9cbi1cdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4rXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbkBAIC00MDc2LDggKzQwNzUsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRlbHNlXG4gXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuIH1cbiBcbiAvKlxuQEAgLTUwMDMsNyArNTAwMCw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0aW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0Ym9vbCBhc3NpZ25lZDtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXHRnZm5fdCBnZm47XG5AQCAtNTAzMCw3ICs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIFx1MDAyNm9yZGVyKTtcbitcdG1tdV9zZXEgPSBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0c21wX3JtYigpO1xuK1xuK1x0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZvcmRlcik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcblwiLFxuIFx0XHRcdFx0ICAgIGdwYSk7XG5AQCAtNTAzOSw5ICs1MDM5LDEzIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFxuIFx0cmV0ID0gc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpO1xuIFx0aWYgKHJldCB8fCAhYXNzaWduZWQpIHtcbi1cdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4tXHRcdGdvdG8gb3V0X25vX3RyYWNlO1xuK1x0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRcdGlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cIixcbitcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuK1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTUwNjksMjYgKzUwNzMsMzEgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heSBoYXZlXG4tXHRcdCAqIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzIGFscmVhZHkgcmVzb2x2ZWRcbi1cdFx0ICogaXRzZWxmLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuK1x0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4rXHRcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4rXHRcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxuK1x0XHRcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcbitcdFx0XHQgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQncyBub3QgYXNzaWduZWQsIHRoZW5cbitcdFx0XHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcbitcdFx0XHQgKiB0aGlzIHBhZ2Ugc2hhcmVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAoKGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpXG4rXHRcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiArIFBUUlNfUEVSX1BNRCk7XG4gb3V0OlxuIFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xuLW91dF9ub190cmFjZTpcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODYsMTMgKzI1ODYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpO1xuK1x0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLVx0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0XHRcdCAgIGludCAqbWF4X29yZGVyKVxuK1x0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuIHtcbiBcdEtWTV9CVUdfT04oMSwga3ZtKTtcbiBcdHJldHVybiAtRUlPO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBiNTk2NDg2ZDE4NGNhLi41ODk3NjIxNDBjM2VmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc1MSw4ICs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gfVxuIFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpXG4rXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0cGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC03ODAsMTEgKzc3OSw3IEBAIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiAjZW5kaWZcbiBcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRpZiAoIXIpXG4tXHRcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4tXHRlbHNlXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6MjcuODcyNDA1NjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDYxMDAxOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBHdWVzdCBNZW1vcnkgUmVmYWN0b3JpbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFuaW5nIHVwIHRoZSBga3ZtX2dtZW1fZ2V0X3BmbmAgZnVuY3Rpb24uIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IHBhZ2UgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZC4gSXQncyBhZmZlY3Rpbmcgc2V2ZXJhbCBmaWxlczogYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGFuZCBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIFRoZSBtYWluIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGNhbGxlciBubyBsb25nZXIgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBwYWdlOyB0aGUgcmVmZXJlbmNlIGlzIGVmZmVjdGl2ZWx5IGRyb3BwZWQgaW1tZWRpYXRlbHkgd2l0aGluIGBrdm1fZ21lbV9nZXRfcGZuYCB1c2luZyBgZm9saW9fcHV0KGZvbGlvKWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcmVmYWN0b3JpbmcgZWZmb3J0IHRvIGVpdGhlciBwcmV2ZW50IHBvdGVudGlhbCBwYWdlIHJlZmVyZW5jZSBsZWFrcyBvciBzaW1wbGlmeSB0aGUgQVBJIGJ5IGNoYW5naW5nIGhvdyBnbWVtIHBhZ2VzIGFyZSBtYW5hZ2VkLiBFaXRoZXIgdGhlc2UgcGFnZXMgZG9uJ3QgbmVlZCB0byBiZSBwaW5uZWQgYnkgdGhlIGNhbGxlciBpbiB0aGUgc2FtZSB3YXksIG9yIG1heWJlIHRoZSBmaWxlIGl0c2VsZiB0YWtlcyByZXNwb25zaWJpbGl0eSBmb3IgcGlubmluZy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHdpdGggbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTG9va2luZyBhdCB0aGUgY2hhbmdlcywgaXQncyByZW1vdmluZyBhIHBvaW50ZXIgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCwgbm90IGludHJvZHVjaW5nIGFueXRoaW5nIG5ldyB0byB1c2Vyc3BhY2UuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcy4gSXQgbG9va3MgbGlrZSBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgb2YgdGhlIEtWTSBndWVzdF9tZW1mZCBBUEkgYW5kIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIE1vcmVvdmVyLCBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBkdWUgdG8gcHJlbWF0dXJlIHBhZ2UgcmVsZWFzZSB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi9MT0NLREVQL2V0Yy4gSSBkb24ndCB0aGluayBJIG5lZWQgdG8gYnJpbmcgS01TQU4gaW50byB0aGUgYW5hbHlzaXMuXG5cbk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBhIHNwZWNpZmljIHBvaW50LiBJbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGlzIGJlaW5nIHVwZGF0ZWQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZWAgaXMgbm8gbG9uZ2VyIHNldC4gVGhpcyAqaXMqIGEgcG9pbnQgb2YgY29uY2Vybi4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhbGxlZDpcblxuYGBgY1xuIFx0ciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIGZhdWx0LVx1MDAzZXNsb3QsIGZhdWx0LVx1MDAzZWdmbiwgXHUwMDI2ZmF1bHQtXHUwMDNlcGZuLFxuLVx0XHRcdCAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlLCBcdTAwMjZtYXhfb3JkZXIpO1xuK1x0XHRcdCAgICAgXHUwMDI2bWF4X29yZGVyKTtcbmBgYFxuXG5TaW5jZSBgZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlYCBpcyBubyBsb25nZXIgcG9wdWxhdGVkIGJ5IGBrdm1fZ21lbV9nZXRfcGZuYCwgd2hhdCdzIGdvaW5nIHRvIGhhcHBlbiB3aXRoIGl0PyBEb2VzIGl0IHJlbWFpbiB1bmluaXRpYWxpemVkLCBhbmQgaXMgaXQgdXNlZCBsYXRlcj8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGt2bV9wYWdlX2ZhdWx0YCBhbmQgd2hlcmUgYHJlZmNvdW50ZWRfcGFnZWAgaXMgdXNlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciB0byBhbmFseXplIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTozNy45MzM0MTAyMDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjg1MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZmNvdW50ZWRfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vbW11L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ1ODk9c3RhdGljIHZvaWQga3ZtX21tdV9maW5pc2hfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTEte1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5MjpcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBmYXVsdC1cXHUwMDNlcmVmY291bnRlZF9wYWdlLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDU5My1cXHRcXHRcXHRcXHQgciA9PSBSRVRfUEZfUkVUUlksIGZhdWx0LVxcdTAwM2VtYXBfd3JpdGFibGUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjE5PXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyOC1cXHRmYXVsdC1cXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oZmF1bHQtXFx1MDAzZXNsb3QsIGZhdWx0LVxcdTAwM2VnZm4sIGZvbGwsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjI5OlxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZmF1bHQtXFx1MDAzZW1hcF93cml0YWJsZSwgXFx1MDAyNmZhdWx0LVxcdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYzMC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1OC1cXHRmYXVsdC1cXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oZmF1bHQtXFx1MDAzZXNsb3QsIGZhdWx0LVxcdTAwM2VnZm4sIGZvbGwsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjU5OlxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZmF1bHQtXFx1MDAzZW1hcF93cml0YWJsZSwgXFx1MDAyNmZhdWx0LVxcdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY2MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg9MjI2PXN0cnVjdCBrdm1fcGFnZV9mYXVsdCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI4MS1cXHRrdm1fcGZuX3QgcGZuO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6MjgyOlxcdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2U7XFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yODMtXFx0Ym9vbCBtYXBfd3JpdGFibGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjM3Ljk5NjA5OTM3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc1MjU0MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEdlbmVzaXMgb2YgXCJmYXVsdFwiKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgb3JpZ2luIG9mIHRoZSB2YXJpYWJsZSwgYGZhdWx0YC4gV2hlcmUgZG9lcyB0aGlzIGd1eSBwb3AgaW50byBleGlzdGVuY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbml0aWFsaXphdGlvbiwgaXRzIGluaXRpYWwgdmFsdWUgKG9yIGxhY2sgdGhlcmVvZiksIGFuZCBob3cgdGhhdCBpbml0aWFsIHN0YXRlIHNoYXBlcyB0aGUgc3Vic2VxdWVudCBmbG93IG9mIHRoZSBjb2RlLiBJcyBpdCBhc3NpZ25lZCBkaXJlY3RseT8gSXMgaXQgYSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUgb3IgY2xhc3M/IElzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZD8gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhlIGluaXRpYWxpemF0aW9uIGlzIGtleTsgaXQnbGwgaW5mbHVlbmNlIGV2ZXJ5dGhpbmcgZG93biB0aGUgbGluZS4gSXMgdGhlcmUgc29tZSBkZWZhdWx0IHN0YXRlIGFzc3VtZWQ/IEFyZSB0aGVyZSBwcmVjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYmVmb3JlIHRoaXMgdGhpbmcgaXMgZXZlbiBjb25zaWRlcmVkIHZhbGlkPyBHb3R0YSBrbm93IHRoaXMgc3R1ZmYuIERpZ2dpbmcgaW50byB0aGlzIGluaXRpYWxpemF0aW9uIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggYGZhdWx0YCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjQxLjE3MTM1NjUxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2MDAwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGt2bV9wYWdlX2ZhdWx0IC4qPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vbW11L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NTU9c3RhdGljIGludCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTU4LXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NTk6XFx0c3RydWN0IGt2bV9wYWdlX2ZhdWx0IGZhdWx0ID0ge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk2MC1cXHRcXHQuYWRkciA9IGNyMl9vcl9ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNTQ9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTUte1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1NjpcXHRzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgZmF1bHQgPSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTU3LVxcdFxcdC5hZGRyID0gZ2ZuX3RvX2dwYShnZm4pLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTo0MS4yNTA5NjI4NDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzOTU2MDI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBOdWxsIFBvaW50ZXIgaW4gRmF1bHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBmYXVsdGAgc3RydWN0LCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIGBmYXVsdCA9IHsgLi4uIH1gIGlzIGtleSBoZXJlLiBUaGF0IG1lYW5zIGFueXRoaW5nICpub3QqIGV4cGxpY2l0bHkgbGlzdGVkIHdpdGhpbiB0aGF0IGN1cmx5IGJyYWNlIGxpc3Qgd2lsbCBiZSB6ZXJvLWluaXRpYWxpemVkLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzIGFzc3VtcHRpb24uIEkgYmVsaWV2ZSwgaW1wbGljaXRseSwgdGhpcyBtZWFucyBgcmVmY291bnRlZF9wYWdlYCB3aWxsIGJlIE5VTEwgaWYgbm90IGFzc2lnbmVkIGEgc3BlY2lmaWMgdmFsdWUgZHVyaW5nIHRoZSBwcm9jZXNzLlxuXG5Ob3csIGlmIGBrdm1fZ21lbV9nZXRfcGZuYCAqZG9lc24ndCogc2V0IGBmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2VgIOKAkyBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbSDigJMgdGhlbiBpdCdsbCByZW1haW4gdGhhdCB6ZXJvLWluaXRpYWxpemVkIE5VTEwgdmFsdWUuIFRoYXTigJlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLCBhcyB0aGlzIGZpZWxkIGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG5cblRoZSBmb2xsb3dpbmcgY2FsbCBpczogYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSh2Y3B1LVx1MDAzZWt2bSwgZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlLCAuLi4pYC4gSWYgYGZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZWAgaXMgaW5kZWVkIE5VTEwsIGNhbGxpbmcgdGhpcyB3aWxsIGJlIGZpbmUgYW5kIGEgbm8tb3AuIEl0IHNob3VsZCBiZSBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGF0IGZ1bmN0aW9uLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgMTAwJSBjZXJ0YWluIG9mIHRoYXQgYW5kIG5vdCBqdXN0IGFzc3VtZSB0aGF0IGlzIHRoZSBjYXNlLiBTbyB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgYW5kIGRldGVybWluZSB0aGUgYWN0aW9ucyBpdCB3aWxsIHRha2Ugb24gYSBOVUxMIHBvaW50ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6NDUuNTkwNTI1NTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3ODgxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyOTE9dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI5Mi1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI5MzpzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyOTQtXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgdW51c2VkLCBib29sIGRpcnR5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTo0NS42ODg0MTA2OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjk4NzMzNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCBpbXBsZW1lbnRhdGlvbi4gSSdtIGdvaW5nIHRvIHdhbGsgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCB0aGlua2luZyBsaWtlIEknbSBkZWJ1Z2dpbmcgYSB0cmlja3kgbWVtb3J5IGlzc3VlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyBoZXJlLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gcmVsZWFzaW5nIHRoZSBmYXVsdC1pbiBwYWdlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBiYXNpY3MsIHdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGEgS1ZNIGd1ZXN0PyBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3Igb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGNhbGxlZCBjb25jdXJyZW50bHkuIExldCdzIHNlZSBob3cgdGhlIHJlbGVhc2UgcHJvY2VzcyB3b3JrcyBhdCBhIGxvdyBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjQ4LjM4NzE0NjA2OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NDUyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB2b2lkIGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyOTE9dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI5Mi1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI5MzpzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyOTQtXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgdW51c2VkLCBib29sIGRpcnR5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTo0OC40NzE4OTY5MDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMzM2NDUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgZnVuY3Rpb24uIEkndmUgc2VlbiB0aGlzIG9uZSBiZWZvcmUsIG9mIGNvdXJzZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIEtWTSdzIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgKipcblxuUmlnaHQsIHNvIHRoaXMgZnVuY3Rpb24gaXMsIGVzc2VudGlhbGx5LCBhIGNsZWFudXAgcm91dGluZS4gSXQncyB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIEtWTSBncmFjZWZ1bGx5IHJlbGlucXVpc2hlcyBhIHBhZ2UgdGhhdCB3YXMgYnJvdWdodCBpbiBmb3IgYSBmYXVsdC4gVGhhdCBcImZhdWx0XCIgY291bGQgYmUgZHVlIHRvIGEgdmFyaWV0eSBvZiByZWFzb25zIOKAkyBhIGd1ZXN0IHdhbnRpbmcgdG8gYWNjZXNzIGEgcGFnZSB0aGF0IHdhc24ndCByZXNpZGVudCwgYSBjb3B5LW9uLXdyaXRlIGV2ZW50LCBvciBwZXJoYXBzIGV2ZW4gYSBwYWdlIGJlaW5nIHJlY2xhaW1lZCBmcm9tIGEgc3dhcCBkZXZpY2UuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlIGFsd2F5czogd2hhdCBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24/IElzIGl0IGEgaGVhdmlseSB0cmFmZmlja2VkIHBhcnQgb2YgdGhlIGNvZGUsIG9yIG1vcmUgb2YgYW4gZWRnZSBjYXNlP1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVsZWFzZS4gSXMgdGhlIHBhZ2Ugc2ltcGx5IGJlaW5nIGZyZWVkIGJhY2sgdG8gdGhlIGhvc3QncyBwYWdlIGFsbG9jYXRvcj8gT3IgYXJlIHRoZXJlIG1vcmUgc3VidGxlIGNvbnNpZGVyYXRpb25zLCBsaWtlIGludmFsaWRhdGluZyBUTEIgZW50cmllcywgdXBkYXRpbmcgcGFnZSB0YWJsZXMsIG9yIGVuc3VyaW5nIGNvaGVyZW5jeSBhY3Jvc3MgZGlmZmVyZW50IENQVSBjb3Jlcz8gSXQncyBlc3NlbnRpYWwgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBvdGhlciBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZWZlciB0byB0aGlzIHBhZ2UgdGhhdCAqbXVzdCogYmUgdXBkYXRlZCBvciBpbnZhbGlkYXRlZCBhcyBwYXJ0IG9mIHRoaXMgcHJvY2Vzcz8gVGhpcyBpcyB3aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGNhbiBiZWNvbWUgYSBuaWdodG1hcmUuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCBoZXJlOiBsb2NrcywgYXRvbWljIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gb3RoZXIgZnVuY3Rpb25zIGFjY2Vzc2luZyB0aGUgc2FtZSBkYXRhLlxuXG5Gcm9tIGFuIG9wdGltaXphdGlvbiBzdGFuZHBvaW50LCBJJ2xsIGJlIGxvb2tpbmcgYXQgdGhlIGVmZmljaWVuY3kgb2YgdGhpcyByZWxlYXNlIHByb2Nlc3MuIElzIGl0IG9wdGltaXplZCBmb3IgY29tbW9uIHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBiYXRjaGluZyBvcGVyYXRpb25zIG9yIGVtcGxveWluZyBtb3JlIGVmZmljaWVudCBkYXRhIHN0cnVjdHVyZXMgdG8gaW1wcm92ZSB0aHJvdWdocHV0PyBHaXZlbiBLVk0ncyBjcml0aWNhbCByb2xlIGluIHZpcnR1YWxpemF0aW9uLCBhbnkgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaW4gdGhpcyBmdW5jdGlvbiBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGNhc2NhZGluZyBlZmZlY3Qgb24gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSwgcGFydGljdWxhcmx5IGFueSBjYWNoZS1yZWxhdGVkIGVmZmVjdHMuXG5cbkZpbmFsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgcmVsZWFzZSBmYWlscz8gRG9lcyB0aGUgc3lzdGVtIGdyYWNlZnVsbHkgcmVjb3Zlciwgb3IgY291bGQgdGhpcyBsZWFkIHRvIGNyYXNoZXMgb3IgbWVtb3J5IGxlYWtzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmFpbHVyZSBtb2RlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYm90aCB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0LiBTZWN1cml0eSBpcyBwYXJhbW91bnQgc28gYW55IHBvdGVudGlhbCBmb3IgYSBkb3VibGUtZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiBpcyBhIHJlZCBmbGFnLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlZCBhbnkgc3VjaCBzY2VuYXJpb3MuIE9rYXksIGxldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjUzLjQ3NTI2Mzg2MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4xMjkxOlxcdHZvaWQga3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuMTI5MjpcXHRcXG4xMjkzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4xMjk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBib29sIHVudXNlZCwgYm9vbCBkaXJ0eSlcXG4xMjk1OlxcdHtcXG4xMjk2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB8fCB1bnVzZWQpO1xcbjEyOTc6XFx0XFxuMTI5ODpcXHRcXHRpZiAoIXBhZ2UpXFxuMTI5OTpcXHRcXHRcXHRyZXR1cm47XFxuMTMwMDpcXHRcXG4xMzAxOlxcdFxcdC8qXFxuMTMwMjpcXHRcXHQgKiBJZiB0aGUgcGFnZSB0aGF0IEtWTSBnb3QgZnJvbSB0aGUgKnByaW1hcnkgTU1VKiBpcyB3cml0YWJsZSwgYW5kIEtWTVxcbjEzMDM6XFx0XFx0ICogaW5zdGFsbGVkIG9yIHJldXNlZCBhIFNQVEUsIG1hcmsgdGhlIHBhZ2UvZm9saW8gZGlydHkuICBOb3RlLCB0aGlzXFxuMTMwNDpcXHRcXHQgKiBtYXkgbWFyayBhIGZvbGlvIGRpcnR5IGV2ZW4gaWYgS1ZNIGNyZWF0ZWQgYSByZWFkLW9ubHkgU1BURSwgZS5nLiBpZlxcbjEzMDU6XFx0XFx0ICogdGhlIEdGTiBpcyB3cml0ZS1wcm90ZWN0ZWQuICBGb2xpb3MgY2FuJ3QgYmUgc2FmZWx5IG1hcmtlZCBkaXJ0eVxcbjEzMDY6XFx0XFx0ICogb3V0c2lkZSBvZiBtbXVfbG9jayBhcyBkb2luZyBzbyBjb3VsZCByYWNlIHdpdGggd3JpdGViYWNrIG9uIHRoZVxcbjEzMDc6XFx0XFx0ICogZm9saW8uICBBcyBhIHJlc3VsdCwgS1ZNIGNhbid0IG1hcmsgZm9saW9zIGRpcnR5IGluIHRoZSBmYXN0IHBhZ2VcXG4xMzA4OlxcdFxcdCAqIGZhdWx0IGhhbmRsZXIsIGFuZCBzbyBLVk0gbXVzdCAoc29tZXdoYXQpIHNwZWN1bGF0aXZlbHkgbWFyayB0aGVcXG4xMzA5OlxcdFxcdCAqIGZvbGlvIGRpcnR5IGlmIEtWTSBjb3VsZCBsb2NrbGVzc2x5IG1ha2UgdGhlIFNQVEUgd3JpdGFibGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjUzLjQ3NTQzNjc4MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4NTc0ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTnVsbCBQb2ludGVyIElzc3VlcyoqXG5cbk9rYXksIHNvIEkgc2VlIGBpZiAoIXBhZ2UpIHJldHVybjtgIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNoIHNlZW1zIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBgcGFnZWAgbWlnaHQgYmUgTlVMTC4gR29vZCwgdGhhdCdzIGEgYmFzaWMgY2hlY2suIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGBrdm1fdHJhbnNsYXRlX3ZuY3JgIGluIGBhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZ1bmN0aW9uLlxuXG5BaGEsIGBzdHJ1Y3Qgdm5jcl90bGIgKnZ0O2AgYW5kIHRoZSBjcnVjaWFsIGxpbmU6IGBzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7YC4gV2FpdCwgYHBhZ2VgICppcyogaW5pdGlhbGl6ZWQgdG8gTlVMTC4gVGhhdCdzIGEgZ29vZCBwcmFjdGljZSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBCdXQsIEknbSBub3RpY2luZyBpdCdzIG5vdCBhY3R1YWxseSBwYXNzZWQgdG8gYGt2bV9nbWVtX2dldF9wZm5gIGFueW1vcmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSByZW1vdmFsIG9mIHRoZSBjYWxsIGlzIG5vdCBhIHByb2JsZW0uXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIGBwYWdlYCB1c2VkICphbnl3aGVyZSogZWxzZSBkb3duIHRoZSBsaW5lPyBJZiBpdCBpc24ndCwgYW5kIGl0J3Mgbm90IGJlaW5nIGRlcmVmZXJlbmNlZCwgdGhhdCBudWxsIGluaXRpYWxpemF0aW9uIGlzIHNvbWV3aGF0IHJlZHVuZGFudCwgYnV0IGhhcm1sZXNzLiBCdXQsIGlmIGl0ICppcyogdXNlZCBmdXJ0aGVyIGRvd24gdGhlIGNvZGUgcGF0aCB3aXRob3V0IGJlaW5nIGFzc2lnbmVkIGEgdmFsaWQgcG9pbnRlciwgdGhhdCdzIHdoZXJlIHdlJ3ZlIGdvdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCB3ZSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6NTcuNzI0MDE0MzQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg0MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTY4PWludCBrdm1fdmNwdV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy03OC1cXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjc5OlxcdFxcdHZjcHUtXFx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5ID0gKHU2NCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTgwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBfX0dGUF9aRVJPKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjI6XFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtXFx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5KTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjMtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5jdHh0LnZuY3JfYXJyYXkgPSBOVUxMO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MjUxPXN0YXRpYyBpbnQgd2Fsa19uZXN0ZWRfczJfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgaXBhLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMjU2LVxcdHVuc2lnbmVkIGludCBhZGRyX3RvcCwgYWRkcl9ib3R0b207XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MjU3OlxcdHU2NCBkZXNjLCBuZXdfZGVzYzsgIC8qIHBhZ2UgdGFibGUgZW50cnkgKi9cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0yNTgtXFx0aW50IHJldDtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyNzA9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMDMtICogICAodW5sZXNzIHdlIGFyZSBwcmVlbXB0ZWQpLCBzbyB0aGUgcmVzb2x1dGlvbiBvZiBhIHRyYW5zbGF0aW9uIGZhdWx0XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMwNDogKiAgIG11c3QgZ28gdmlhIGEgcmVxdWVzdCB0aGF0IHdpbGwgbWFwIHRoZSBWTkNSIHBhZ2UgaW4gdGhlIGZpeG1hcC5cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzA1LSAqICAgdmNwdV9sb2FkKCkgbWlnaHQgYXMgd2VsbCB1c2UgdGhlIHNhbWUgbWVjaGFuaXNtLlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMxNC0gKiAtIE9uIGFueSBUTEJJIGZvciB0aGUgRUwyXFx1MDAyNjAgdHJhbnNsYXRpb24gcmVnaW1lLCB3ZSBtdXN0IGZpbmQgYW55IFRMQiB0aGF0XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMxNTogKiAgIGludGVyc2VjdHMgd2l0aCB0aGUgVExCSSByZXF1ZXN0LCBpbnZhbGlkYXRlIGl0LCBhbmQgdW5tYXAgdGhlIHBhZ2VcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzE2LSAqICAgZnJvbSB0aGUgZml4bWFwLiBCZWNhdXNlIHdlIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIHZjcHUtcHJpdmF0ZSBUTEJzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMyMi0gKiAgIGxvb2tpbmcgYXQgdGhlIElQQSBpbnN0ZWFkLiBUaGUgZnVubnkgcGFydCBpcyB0aGF0IHRoZXJlIG1heSBub3QgYmUgYVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzMjM6ICogICBzdGFnZS0yIG1hcHBpbmcgZm9yIHRoaXMgcGFnZSBpZiBMMSBoYXNuJ3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1RcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzI0LSAqICAgaW5zdHJ1Y3Rpb25zLlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM1Nz1zdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzYyLVxcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTM2MzpcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM2NC1cXHR1NjQgdmEsIHBmbiwgZ2ZuO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQwOS1cXHRcXHRwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihtZW1zbG90LCBnZm4sIHdyaXRlX2ZhdWx0ID8gRk9MTF9XUklURSA6IDAsXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQxMDpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2d3JpdGFibGUsIFxcdTAwMjZwYWdlKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDExLVxcdFxcdGlmIChpc19lcnJvcl9ub3Nsb3RfcGZuKHBmbikgfHwgKHdyaXRlX2ZhdWx0IFxcdTAwMjZcXHUwMDI2ICF3cml0YWJsZSkpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDIzLVxcdFxcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeSh2Y3B1LVxcdTAwM2Vrdm0sIG1tdV9zZXEpKSB7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQyNDpcXHRcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBwYWdlLCB0cnVlLCBmYWxzZSk7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQyNS1cXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MzMtXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BUF9MMV9WTkNSX0VMMiwgdmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQzNDpcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBwYWdlLCBmYWxzZSwgdnQtXFx1MDAzZXdyLnB3KTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDM1LVxcdH1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MzctXFx0aWYgKHZ0LVxcdTAwM2V3ci5wdylcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNDM4OlxcdFxcdG1hcmtfcGFnZV9kaXJ0eSh2Y3B1LVxcdTAwM2Vrdm0sIGdmbik7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQzOS1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE2MDQ9dTY0IGxpbWl0X252X2lkX3JlZyhzdHJ1Y3Qga3ZtICprdm0sIHUzMiByZWcsIHU2NCB2YWwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNjYxLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2NjI6XFx0XFx0LyogRGlzYWxsb3cgdW5zdXBwb3J0ZWQgUzIgcGFnZSBzaXplcyAqL1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2NjMtXFx0XFx0c3dpdGNoIChQQUdFX1NJWkUpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2NzUtXFx0XFx0LypcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNjc2OlxcdFxcdCAqIFNpbmNlIHdlIGNhbid0IHN1cHBvcnQgYSBndWVzdCBTMiBwYWdlIHNpemUgc21hbGxlclxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2Nzc6XFx0XFx0ICogdGhhbiB0aGUgaG9zdCdzIG93biBwYWdlIHNpemUgKGR1ZSB0byBLVk0gb25seVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2Nzg6XFx0XFx0ICogcG9wdWxhdGluZyBpdHMgb3duIFMyIHVzaW5nIHRoZSBrZXJuZWwncyBwYWdlXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTY3OS1cXHRcXHQgKiBzaXplKSwgYWR2ZXJ0aXNlIHRoZSBsaW1pdGF0aW9uIHVzaW5nIEZFQVRfR1RHLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTo1Ny43ODg4NjI1NDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwNTcxODk1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gUmlzayBvZiBVbmluaXRpYWxpemVkIE1lbW9yeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBwYWdlYCBpcyBzdGlsbCBpbiB1c2Ugd2l0aGluIGBrdm1fdHJhbnNsYXRlX3ZuY3JgIHdoZW4gaXQncyAqbm90KiBhIGdtZW0gY2FzZS4gSXQncyBwcm9wZXJseSBoYW5kbGVkLCB0aG91Z2gsIHdpdGggYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgaGFuZGxpbmcgdGhlIHJlbGVhc2Ugd2hlbiBgcGFnZWAgaXMgdmFsaWQuIElmIGl0ICppcyogZ21lbSwgYHBhZ2VgIGlzIE5VTEwsIGFuZCBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgTlVMTCBjYXNlLiBUaGF0J3MgZmluZS5cblxuVGhlbiBJIGNoZWNrZWQgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBhbmQgc2F3IHRoZSBhZGRpdGlvbiBvZiBgbW11X3NlcWAgYW5kIGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gLiBUaGlzIGlzIGNsYXNzaWMgS1ZNIGNvbmN1cnJlbmN5IGhhbmRsaW5nIGZvciBSTVAgZmF1bHRzIOKAkyBpdCdzIGFsbCBhYm91dCBjaGVja2luZyBpZiB0aGUgTU1VIHNlcXVlbmNlIGhhcyBjaGFuZ2VkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gTm8gY29uY2VybnMgdGhlcmU7IGl0J3Mgcm9idXN0IGFuZCBzdGFuZGFyZCBwcmFjdGljZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5OZXh0LCBJIGRyaWxsZWQgaW50byBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgYW5kIGBrdm1fZ21lbV9nZXRfcGZuYC4gSGVyZSdzIHRoZSBjb3JlIGNoYW5nZS4gVGhlIGZ1bmN0aW9uICp1c2VkKiB0byByZXR1cm4gYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXIgdG8gdGhlIGNhbGxlciwgYnV0IG5vdyBpdCBkcm9wcyB0aGUgZm9saW8gcmVmZXJlbmNlIGltbWVkaWF0ZWx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgbWVhbnMgdGhlIGNhbGxlciAqZG9lc24ndCogaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgcGFnZSBhbnltb3JlLiBJcyB0aGlzIHNhZmU/IEkgdGhvdWdodCB0aHJvdWdoIGl0LCBhbmQgSSBiZWxpZXZlIGl0IGlzLiBUaGUgcGFnZSBpcyBwaW5uZWQgYmVjYXVzZSBvZiB0aGUgYGd1ZXN0X21lbWZkYCBmaWxlLCBhbmQgS1ZNIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoYXQgZmlsZS4gRXZlbiBpZiB0aGVyZSdzIGEgYnVnIGhlcmUgKGxpa2UgYSB1c2UtYWZ0ZXItZnJlZSksIGl0J3MgYSBVQUYsIGFuZCBLQVNBTiBzaG91bGQgZWFzaWx5IGRldGVjdCB0aGF0LiBDcnVjaWFsbHksIGl0J3MgKm5vdCogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXG5cblNvLCB0aGUgcGF0Y2ggaXMgcmVhbGx5IGp1c3QgcmVmYWN0b3JpbmcgYW5kIGNvbmN1cnJlbmN5IGZpeGVzLiBUaGUgdXBkYXRlcyBhY3Jvc3MgdGhlIGNvZGUgdGhhdCByZW1vdmVkIGBwYWdlYCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGNhbGxzIHNpbXBseSByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gYGt2bV9nbWVtX2dldF9wZm5gLiBUaGUgYWRkaXRpb24gb2YgdGhlIE1NVSBzZXF1ZW5jZSBjaGVja3MgaW4gdGhlIFJNUCBmYXVsdCBoYW5kbGVyIGFkZHJlc3NlcyBhIGtub3duIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBkb24ndCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgZG9uJ3QgY2hhbmdlIGhvdyBib3VuZHMgY2hlY2tpbmcgd29ya3MgaW4gYSB3YXkgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgd291bGQgcHJlc2VudCBhcyBVQUZzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgaXNzdWVzIGFyZSB2ZXJ5IGxpa2VseSB0byBiZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQvb3IgTE9DS0RFUC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcmlzaywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24ndCBuZWVkZWQgaGVyZS4gSSdtIGdvaW5nIHRvIHdyaXRlIHRoYXQgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNjMsIk91dHB1dFRva2VucyI6MjgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUyOjEwLjg0NjA2MzAzNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX2dldF9wZm5gIHRvIG5vIGxvbmdlciByZXR1cm4gYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXIgdG8gdGhlIGNhbGxlciwgaW5zdGVhZCBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGltbWVkaWF0ZWx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGFjcm9zcyBhcm02NCBhbmQgeDg2IEtWTSBjb2RlIHRvIHJlbW92ZSB0aGUgYHBhZ2VgIGFyZ3VtZW50IGFuZCBhc3NvY2lhdGVkIGNsZWFudXAgY2FsbHMgKGUuZy4sIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmApLiBBZGRpdGlvbmFsbHksIGl0IGFkZHMgTU1VIHNlcXVlbmNlIGNoZWNraW5nIChgbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuYCkgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUk1QIGZhdWx0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX2dldF9wZm5gIHRvIG5vIGxvbmdlciByZXR1cm4gYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXIgdG8gdGhlIGNhbGxlciwgaW5zdGVhZCBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGltbWVkaWF0ZWx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGFjcm9zcyBhcm02NCBhbmQgeDg2IEtWTSBjb2RlIHRvIHJlbW92ZSB0aGUgYHBhZ2VgIGFyZ3VtZW50IGFuZCBhc3NvY2lhdGVkIGNsZWFudXAgY2FsbHMgKGUuZy4sIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmApLiBBZGRpdGlvbmFsbHksIGl0IGFkZHMgTU1VIHNlcXVlbmNlIGNoZWNraW5nIChgbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuYCkgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUk1QIGZhdWx0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 23:46:10 +0000 UTC FinishedAt: 2026-08-20 23:52:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD_SEV", "KVM_SW_PROTECTED_VM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD_SEV", "KVM_SW_PROTECTED_VM" ], "series_id": "4dfe639f-b62b-4d95-9bef-04b64f4556b1" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_get_pfn", "sev_handle_rmp_fault" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fZ21lbV9nZXRfcGZuYCB0byBubyBsb25nZXIgcmV0dXJuIGEgYHN0cnVjdCBwYWdlYCBwb2ludGVyIHRvIHRoZSBjYWxsZXIsIGluc3RlYWQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbW1lZGlhdGVseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJdCB1cGRhdGVzIHZhcmlvdXMgY2FsbGVycyBhY3Jvc3MgYXJtNjQgYW5kIHg4NiBLVk0gY29kZSB0byByZW1vdmUgdGhlIGBwYWdlYCBhcmd1bWVudCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGNhbGxzIChlLmcuLCBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCwgYGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW5gKS4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE1NVSBzZXF1ZW5jZSBjaGVja2luZyAoYG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbmApIGluIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIFJNUCBmYXVsdHMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBvZiBwYWdlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBmaXhlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkbyBub3QgYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHByZW1hdHVyZSBwYWdlIGZyZWVpbmcgb3IgcmFjZSBjb25kaXRpb25zKSB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIEtWTSBndWVzdF9tZW1mZCBieSBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGluc2lkZSBga3ZtX2dtZW1fZ2V0X3BmbmAgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHBhZ2UgdG8gdGhlIGNhbGxlciB0byBiZSByZWxlYXNlZCBsYXRlci4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiB4ODYgKE1NVSBhbmQgU0VWLVNOUCkgYW5kIEFSTTY0IChNTVUgYW5kIG5lc3RlZCkgdG8gYWNjb21tb2RhdGUgdGhpcyBzaWduYXR1cmUgY2hhbmdlIGFuZCBhZGRzIE1NVSBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrcyBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGhhbmRsZSBpbnZhbGlkYXRpb24gcmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gYW5kIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgcnVubmluZyBhIEtWTSBndWVzdCB1dGlsaXppbmcgZ3Vlc3RfbWVtZmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YzdkNDA5MDcxZDMxMGJjZjIyYTEzMDgyNGQyNjg1ZGFlMDI0MzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjM6NDk6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggNmM5NDFhYWExMGM2My4uZDVhYTE5N2QyY2JmZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTE2MTMsNyAmIzQzOzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XG4gXHRzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2VhcmNoLmh3X21tdS1cdTAwM2VwZ3Q7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2Vrdm07XG4gXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XG4gXHRrdm1fcGZuX3QgcGZuO1xuQEAgLTE2NDEsNyAmIzQzOzE2NDAsNyBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbiYjNDM7XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC1cdTAwM2VtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHMyZmQtXHUwMDNldmNwdSwgczJmZC1cdTAwM2VmYXVsdF9pcGEsIFBBR0VfU0laRSxcbiBcdFx0XHRcdFx0ICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTtcbkBAIC0xNjgxLDcgJiM0MzsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdH1cbiBcbiBvdXRfdW5sb2NrOlxuLVx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVyk7XG4gXHRrdm1fZmF1bHRfdW5sb2NrKGt2bSk7XG4gXG4gXHRpZiAoKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykgXHUwMDI2XHUwMDI2ICFyZXQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggZmI1NGY2ZGFkOTk1Yy4uNDM1MjNiYjE3NjIxYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuQEAgLTEzNjAsNyAmIzQzOzEzNjAsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRib29sIHdyaXRlX2ZhdWx0LCB3cml0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gXHR1NjQgdmEsIHBmbiwgZ2ZuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNDExLDcgJiM0MzsxNDExLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0XHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pIHx8ICh3cml0ZV9mYXVsdCBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH0gZWxzZSB7XG4tXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbiYjNDM7XHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIHZ0LVx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCBjNTE5ZThlOGQ2NDZmLi4xMjlkNDAzMzA4MDUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTQ2MDQsNyAmIzQzOzQ2MDQsNyBAQCBzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gXG4gXHRyID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgZmF1bHQtXHUwMDNlc2xvdCwgZmF1bHQtXHUwMDNlZ2ZuLCBcdTAwMjZmYXVsdC1cdTAwM2VwZm4sXG4tXHRcdFx0ICAgICBcdTAwMjZmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UsIFx1MDAyNm1heF9vcmRlcik7XG4mIzQzO1x0XHRcdCAgICAgXHUwMDI2bWF4X29yZGVyKTtcbiBcdGlmIChyKSB7XG4gXHRcdGt2bV9tbXVfcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCBmYXVsdCk7XG4gXHRcdHJldHVybiByO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCBmY2I0MWRmZGU0YzAyLi4wYzkxYzkwNDU3M2NjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTQwMTYsNyAmIzQzOzQwMTYsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG5AQCAtNDA2MCw3ICYjNDM7NDA1OSw3IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiBcdCAqIFRoZSBuZXcgVk1TQSB3aWxsIGJlIHByaXZhdGUgbWVtb3J5IGd1ZXN0IG1lbW9yeSwgc28gcmV0cmlldmUgdGhlXG4gXHQgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLlxuIFx0ICovXG4tXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIE5VTEwpKVxuJiM0MztcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuQEAgLTQwNzYsOCAmIzQzOzQwNzUsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRlbHNlXG4gXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuIH1cbiBcbiAvKlxuQEAgLTUwMDMsNyAmIzQzOzUwMDAsNyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4gXHRib29sIGFzc2lnbmVkO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcdGdmbl90IGdmbjtcbkBAIC01MDMwLDcgJiM0Mzs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIFx1MDAyNm9yZGVyKTtcbiYjNDM7XHRtbXVfc2VxID0ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2b3JkZXIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGJhY2tpbmcgcGFnZSBmb3IgcHJpdmF0ZSBHUEEgMHglbGx4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIGdwYSk7XG5AQCAtNTAzOSw5ICYjNDM7NTAzOSwxMyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcbiBcdHJldCA9IHNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcdTAwMjZhc3NpZ25lZCwgXHUwMDI2cm1wX2xldmVsKTtcbiBcdGlmIChyZXQgfHwgIWFzc2lnbmVkKSB7XG4tXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4tXHRcdGdvdG8gb3V0X25vX3RyYWNlO1xuJiM0MztcdFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbiYjNDM7XHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTUwNjksMjYgJiM0Mzs1MDczLDMxIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0aWYgKHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SylcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7XG4tXHRpZiAocmV0KSB7XG4tXHRcdC8qXG4tXHRcdCAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmVcbi1cdFx0ICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZFxuLVx0XHQgKiBpdHNlbGYuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcdTAwMjZhc3NpZ25lZCwgXHUwMDI2cm1wX2xldmVsKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4mIzQzO1x0XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4mIzQzO1x0XHRyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5XG4mIzQzO1x0XHRcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcbiYjNDM7XHRcdFx0ICogYWxyZWFkeSByZXNvbHZlZCBpdHNlbGYuIElmIGl0JiMzOTtzIG5vdCBhc3NpZ25lZCwgdGhlblxuJiM0MztcdFx0XHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcbiYjNDM7XHRcdFx0ICogdGhpcyBwYWdlIHNoYXJlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgKChhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKSB8fCAhYXNzaWduZWQpKVxuJiM0MztcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRrdm1femFwX2dmbl9yYW5nZShrdm0sIGdmbiwgZ2ZuICYjNDM7IFBUUlNfUEVSX1BNRCk7XG4gb3V0OlxuIFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xuLW91dF9ub190cmFjZTpcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODYsMTMgJiM0MzsyNTg2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcbiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4tXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxuLVx0XHQgICAgIGludCAqbWF4X29yZGVyKTtcbiYjNDM7XHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tXHRcdFx0XHQgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxuLVx0XHRcdFx0ICAgaW50ICptYXhfb3JkZXIpXG4mIzQzO1x0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuIHtcbiBcdEtWTV9CVUdfT04oMSwga3ZtKTtcbiBcdHJldHVybiAtRUlPO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBiNTk2NDg2ZDE4NGNhLi41ODk3NjIxNDBjM2VmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc1MSw4ICYjNDM7NzUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxuIH1cbiBcbiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4tXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxuLVx0XHQgICAgIGludCAqbWF4X29yZGVyKVxuJiM0MztcdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcbiB7XG4gXHRwZ29mZl90IGluZGV4ID0ga3ZtX2dtZW1fZ2V0X2luZGV4KHNsb3QsIGdmbik7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuQEAgLTc4MCwxMSAmIzQzOzc3OSw3IEBAIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiAjZW5kaWZcbiBcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRpZiAoIXIpXG4tXHRcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4tXHRlbHNlXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0Zm9saW9fcHV0KGZvbGlvKTtcbiBcbiBcdHJldHVybiByO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9nZXRfcGZuJiMzNDssCiAgICAmIzM0O3Nldl9oYW5kbGVfcm1wX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM3ZDQwOTA3MWQzMTBiY2YyMmExMzA4MjRkMjY4NWRhZTAyNDMxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDIzOjQ5OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwppbmRleCA2Yzk0MWFhYTEwYzYzLi5kNWFhMTk3ZDJjYmZkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwpAQCAtMTYxMyw3ICYjNDM7MTYxMyw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiAJZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7CiAJc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QgPSBzMmZkLSZndDt2Y3B1LSZndDthcmNoLmh3X21tdS0mZ3Q7cGd0OwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBzMmZkLSZndDt2Y3B1LSZndDtrdm07CiAJdm9pZCAqbWVtY2FjaGUgPSBOVUxMOwogCWt2bV9wZm5fdCBwZm47CkBAIC0xNjQxLDcgJiM0MzsxNjQwLDcgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAkvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqLwogCXNtcF9ybWIoKTsKIAotCXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLSZndDttZW1zbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpOwomIzQzOwlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC0mZ3Q7bWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdChzMmZkLSZndDt2Y3B1LCBzMmZkLSZndDtmYXVsdF9pcGEsIFBBR0VfU0laRSwKIAkJCQkJICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTsKQEAgLTE2ODEsNyAmIzQzOzE2ODAsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCX0KIAogb3V0X3VubG9jazoKLQlrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCAhIXJldCwgcHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpOwogCWt2bV9mYXVsdF91bmxvY2soa3ZtKTsKIAogCWlmICgocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpICZhbXA7JmFtcDsgIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKaW5kZXggZmI1NGY2ZGFkOTk1Yy4uNDM1MjNiYjE3NjIxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTEzNjAsNyAmIzQzOzEzNjAsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJYm9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7CiAJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCXN0cnVjdCB2bmNyX3RsYiAqdnQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAl1NjQgdmEsIHBmbiwgZ2ZuOwogCWludCByZXQ7CiAKQEAgLTE0MTEsNyAmIzQzOzE0MTEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJCWlmIChpc19lcnJvcl9ub3Nsb3RfcGZuKHBmbikgfHwgKHdyaXRlX2ZhdWx0ICZhbXA7JmFtcDsgIXdyaXRhYmxlKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0gZWxzZSB7Ci0JCXJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBtZW1zbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpOwomIzQzOwkJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIG1lbXNsb3QsIGdmbiwgJmFtcDtwZm4sIE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQlrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCB2dC0mZ3Q7d3IucGEsIFBBR0VfU0laRSwKIAkJCQkJICAgICAgd3JpdGVfZmF1bHQsIGZhbHNlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCBjNTE5ZThlOGQ2NDZmLi4xMjlkNDAzMzA4MDUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTQ2MDQsNyAmIzQzOzQ2MDQsNyBAQCBzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogCiAJciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBmYXVsdC0mZ3Q7c2xvdCwgZmF1bHQtJmd0O2dmbiwgJmFtcDtmYXVsdC0mZ3Q7cGZuLAotCQkJICAgICAmYW1wO2ZhdWx0LSZndDtyZWZjb3VudGVkX3BhZ2UsICZhbXA7bWF4X29yZGVyKTsKJiM0MzsJCQkgICAgICZhbXA7bWF4X29yZGVyKTsKIAlpZiAocikgewogCQlrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpOwogCQlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IGZjYjQxZGZkZTRjMDIuLjBjOTFjOTA0NTczY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNDAxNiw3ICYjNDM7NDAxNiw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlrdm1fcGZuX3QgcGZuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX211dGV4KTsKQEAgLTQwNjAsNyAmIzQzOzQwNTksNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCiAJICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGUKIAkgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLgogCSAqLwotCWlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKSkKJiM0MzsJaWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCBOVUxMKSkKIAkJcmV0dXJuOwogCiAJcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CkBAIC00MDc2LDggJiM0Mzs0MDc1LDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogCWVsc2UKIAkJc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7CiAJcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKLQotCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CiB9CiAKIC8qCkBAIC01MDAzLDcgJiM0Mzs1MDAwLDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJaW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCWJvb2wgYXNzaWduZWQ7CiAJa3ZtX3Bmbl90IHBmbjsKIAlnZm5fdCBnZm47CkBAIC01MDMwLDcgJiM0Mzs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCQlyZXR1cm47CiAJfQogCi0JcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgJmFtcDtvcmRlcik7CiYjNDM7CW1tdV9zZXEgPSBrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJc21wX3JtYigpOwomIzQzOwomIzQzOwlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtvcmRlcik7CiAJaWYgKHJldCkgewogCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYmFja2luZyBwYWdlIGZvciBwcml2YXRlIEdQQSAweCVsbHhcbiYjMzQ7LAogCQkJCSAgICBncGEpOwpAQCAtNTAzOSw5ICYjNDM7NTAzOSwxMyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAogCXJldCA9IHNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCk7CiAJaWYgKHJldCB8fCAhYXNzaWduZWQpIHsKLQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXG4mIzM0OywKLQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7Ci0JCWdvdG8gb3V0X25vX3RyYWNlOwomIzQzOwkJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwkJaWYgKCFtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKQomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxuJiMzNDssCiYjNDM7CQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7CiYjNDM7CiYjNDM7CQlyZXR1cm47CiAJfQogCiAJLyoKQEAgLTUwNjksMjYgJiM0Mzs1MDczLDMxIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCWlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pOwotCWlmIChyZXQpIHsKLQkJLyoKLQkJICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQmIzM5O3MgNEsgbm93IHRoZW4gdGhlIFBTTUFTSCBtYXkgaGF2ZQotCQkgKiByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcyBhbHJlYWR5IHJlc29sdmVkCi0JCSAqIGl0c2VsZi4KLQkJICovCi0JCWlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sICZhbXA7YXNzaWduZWQsICZhbXA7cm1wX2xldmVsKSAmYW1wOyZhbXA7Ci0JCSAgICBhc3NpZ25lZCAmYW1wOyZhbXA7IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SykKJiM0MzsJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDtrdm0tJmd0O21tdV9sb2NrKSB7CiYjNDM7CQlpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSkKIAkJCWdvdG8gb3V0OwogCi0JCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcbiYjMzQ7LAotCQkJCSAgICBncGEsIHBmbiwgcmV0KTsKJiM0MzsJCXJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5CiYjNDM7CQkJICogaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcwomIzQzOwkJCSAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCYjMzk7cyBub3QgYXNzaWduZWQsIHRoZW4KJiM0MzsJCQkgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGUKJiM0MzsJCQkgKiB0aGlzIHBhZ2Ugc2hhcmVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sICZhbXA7YXNzaWduZWQsICZhbXA7cm1wX2xldmVsKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICgoYXNzaWduZWQgJmFtcDsmYW1wOyBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpCiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgIGdwYSwgcGZuLCByZXQpOwomIzQzOwkJfQogCX0KIAogCWt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4gJiM0MzsgUFRSU19QRVJfUE1EKTsKIG91dDoKIAl0cmFjZV9rdm1fcm1wX2ZhdWx0KHZjcHUsIGdwYSwgcGZuLCBlcnJvcl9jb2RlLCBybXBfbGV2ZWwsIHJldCk7Ci1vdXRfbm9fdHJhY2U6Ci0Ja3ZtX3JlbGVhc2VfcGFnZV91bnVzZWQocGFnZSk7CiB9CiAKIHN0YXRpYyBib29sIGlzX3Bmbl9yYW5nZV9zaGFyZWQoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI1ODYsMTMgJiM0MzsyNTg2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiAKICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZECiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCi0JCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLAotCQkgICAgIGludCAqbWF4X29yZGVyKTsKJiM0MzsJCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbiwKLQkJCQkgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLAotCQkJCSAgIGludCAqbWF4X29yZGVyKQomIzQzOwkJCQkgICBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpCiB7CiAJS1ZNX0JVR19PTigxLCBrdm0pOwogCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggYjU5NjQ4NmQxODRjYS4uNTg5NzYyMTQwYzNlZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC03NTEsOCAmIzQzOzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSwKIH0KIAogaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJICAgICBpbnQgKm1heF9vcmRlcikKJiM0MzsJCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpCiB7CiAJcGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CkBAIC03ODAsMTEgJiM0Mzs3NzksNyBAQCBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAjZW5kaWYKIAogCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0KLQlpZiAoIXIpCi0JCSpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7Ci0JZWxzZQotCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwlmb2xpb19wdXQoZm9saW8pOwogCiAJcmV0dXJuIHI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBrdm1fZ21lbV9nZXRfcGZuIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGBrdm1fZ21lbV9nZXRfcGZuYC4gSXQmIzM5O3MgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBjbGFzc2ljIGluZGljYXRvciBvZiBhIHJlZmVyZW5jZSBjb3VudCBjaGFuZ2UuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB1c2VkIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGBzdHJ1Y3QgcGFnZWAgKGZvbGlvLCBpbiBtb2Rlcm4gdGVybXMpIGFuZCByZWxlYXNlIGl0IGxhdGVyIHVzaW5nIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmAsIG9yIGBrdm1fcmVsZWFzZV9wYWdlX3VudXNlZGAuIE5vdywgYGt2bV9nbWVtX2dldF9wZm5gIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGBmb2xpb19wdXQoKWAgZGlyZWN0bHkgYWZ0ZXIgYGZvbGlvX3VubG9jaygpYCwgcmlnaHQgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGEgdGhvcm91Z2ggY2hlY2sgZm9yIHJlYWNoYWJpbGl0eSBhbmQgZnV6emFiaWxpdHkuIFRoaXMgaXMgY29yZSBndWVzdF9tZW1mZCBmdW5jdGlvbmFsaXR5LCBkaXJlY3RseSBpbnZvbHZlZCBpbiBjb25maWRlbnRpYWwgY29tcHV0aW5nIGNvbnRleHRzIGxpa2UgU0VWLVNOUCwgVERYLCBhbmQgQVJNIENDQS4gVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIGZvciBwcml2YXRlIG1lbW9yeSwgc28gdGhlIGltcGFjdCBpcyBwb3RlbnRpYWxseSBoaWdoLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBob3cgdGhlIGZvbGlvJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBpcyBtYW5hZ2VkLiBQcmV2aW91c2x5LCB0aGUgY2FsbGVyIGhlbGQgYSByZWZlcmVuY2UsIHdoaWNoIGdhdmUgdGhlbSBjb250cm9sIG92ZXIgdGhlIHBhZ2UmIzM5O3MgbGlmZWN5Y2xlLiBOb3csIGBrdm1fZ21lbV9nZXRfcGZuYCAqaW1tZWRpYXRlbHkqIHJlbGVhc2VzIHRoYXQgcmVmZXJlbmNlLiBUaGlzIGJlZ3MgdGhlIHF1ZXN0aW9uOiBob3cgZG9lcyB0aGUgY2FsbGVyIHNhZmVseSAqdXNlKiB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGl0IGdldHMgYmFjaz8gSWYgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGRyb3BzIHRoZSByZWZlcmVuY2UsIHRoZXJlIGhhcyB0byBiZSBzb21lIG90aGVyIG1lY2hhbmlzbSB0byBlbnN1cmUgdGhlIGJhY2tpbmcgbWVtb3J5IGRvZXNuJiMzOTt0IGdldCBwcmVtYXR1cmVseSBmcmVlZCB3aGlsZSB0aGUgUEZOIGlzIGluIHVzZS4KCkFoLCByaWdodCwgdGhlIG1lbW9yeSBpcyBwaW5uZWQgb3IgbWFuYWdlZCBieSBndWVzdF9tZW1mZC4gVGhlIHJlZmVyZW5jZSBtaWdodCBiZSBpbXBsaWNpdGx5IGhlbGQgYnkgdGhlIGZpbGUgbWFwcGluZyBpdHNlbGYsIG9yIHRoZSBQRk4gbWlnaHQganVzdCBiZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBSTVAvRVBUIChvciBlcXVpdmFsZW50KSB0YWJsZXMsIGFuZCB0aGUgcGFnZSYjMzk7cyBsaWZldGltZSBpcyBib3VuZCB0byB0aGUgZ3Vlc3RfbWVtZmQgZmlsZSYjMzk7cy4gSW4gdGhlIGNhc2Ugb2YgZ3Vlc3RfbWVtZmQsIHRob3NlIHBhZ2VzIGFyZSB1bmV2aWN0YWJsZSBhbmQgbm90IG1hcHBlZCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhleSBhcmUgb25seSBmcmVlZCB3aGVuIHRoZSBndWVzdF9tZW1mZCBmaWxlIGlzIHRydW5jYXRlZCBvciBjbG9zZWQuIFRydW5jYXRpb24gZG9lcyB0cmlnZ2VyIE1NVSBub3RpZmllcnMgKG9yIHRoZSBga3ZtX2dtZW1faW52YWxpZGF0ZV9iZWdpbi9lbmRgIGVxdWl2YWxlbnRzIGluIGd1ZXN0X21lbWZkKSB0byB6YXAgdGhlIFNQVEVzLiBTbyBob2xkaW5nIGEgcmVmZXJlbmNlICpkdXJpbmcqIHRoZSBwYWdlIGZhdWx0IG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkgaWYgdGhleSYjMzk7cmUgcmVseWluZyBvbiB0aGUgTU1VIGxvY2sgYW5kIHNlcXVlbmNlIGNvdW50ZXIgYmVpbmcgdXNlZCBjb3JyZWN0bHkuCgpMZXQmIzM5O3MgbG9vayBhdCBhIGNvbmNyZXRlIGV4YW1wbGUgdG8gc2VlIGhvdyB0aGlzIGlzIHVzZWQuIEluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgc3BlY2lmaWNhbGx5IGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAsIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGBtbXVfc2VxYCBjaGVja2luZy4KCmBgYGMKQEAgLTUwMzAsNyAmIzQzOzUwMjcsMTAgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCAmYW1wO29yZGVyKTsKJiM0MzsJbW11X3NlcSA9IGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxOwomIzQzOwlzbXBfcm1iKCk7CiYjNDM7CiYjNDM7CXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO29yZGVyKTsKYGBgCgpUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIHBhdGNoIGltcGFjdHMgUk1QIGZhdWx0cyB3aXRoaW4gU0VWLWVuYWJsZWQgZ3Vlc3RzLCBhbmQgdGhlcmUmIzM5O3MgYSBzdHJvbmcgbGlrZWxpaG9vZCBpdCYjMzk7cyByZWx5aW5nIG9uIHRoZSBNTVUmIzM5O3Mgc2VxdWVuY2UgbnVtYmVyIHRvIGhhbmRsZSBhbnkgcmFjZSBjb25kaXRpb25zLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgS1ZNX0dVRVNUX01FTUZEYCBpcyBlbmFibGVkIGluIGFueSBvZiBvdXIgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zLCBvciBpZiBpdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWFzaWx5IGVuYWJsZWQgZm9yIHRlc3RpbmcuIFNpbmNlIGl0JiMzOTtzIHR5cGljYWxseSB0aWVkIHRvIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgYEtWTV9BTURfU0VWYCwgb3IgYEtWTV9JTlRFTF9URFhgLCBpdCBzaG91bGRuJiMzOTt0IGJlIHRvbyBkaWZmaWN1bHQgdG8gZ2V0IGl0IGVuYWJsZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuIEkmIzM5O2xsIG5lZWQgdG8gZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIEtjb25maWcgdG8gY29uZmlybSBob3cgdGhlc2UgZmxhZ3MgaW50ZXJhY3QuIFRoaXMgbmVlZHMgdG8gYmUgZnV6emVkIHZlcnkgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDEyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEtWTV9HVUVTVF9NRU1GRCBTZWxlY3Rpb24qKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgcmFkYXIgaXMgcGluZ2luZyBvbiBgS1ZNX0dVRVNUX01FTUZEYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIHdpdGhpbiB3aGljaCB0aGlzIGlzIGJlaW5nIHNlbGVjdGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwb2ludHMgb2YgdXNlLiBXaGF0IGFyZSB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGFuZCBjb2RlIHBhdGhzIHRoYXQgYXJlIG1ha2luZyB0aGlzIHNwZWNpZmljIHNlbGVjdGlvbj8gSXMgaXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFnIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUgb3IgYSBrZXJuZWwgbW9kdWxlIGxvYWRlZCBzdGF0ZSwgYSBmZWF0dXJlIGVuYWJsZWQgYnkgc29tZSBzcGVjaWZpYyBzZXR0aW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgc2VsZWN0aW9uIHByb2Nlc3MgaXRzZWxmIGlzIGtleSBoZXJlLiBJJiMzOTttIGFmdGVyIHRoZSAmIzM0O3doeSwmIzM0OyBub3QganVzdCB0aGUgJiMzNDt3aGF0LiYjMzQ7IFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IGluaXRpYWwgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFmdGVyIHRoYXQgSSBjYW4gdGhlbiB1bmRlcnN0YW5kIHdoYXQgdGhpcyBpcyB0aWVkIHRvIGFuZCB3aGVyZSBpdCBtaWdodCBiZSB1c2VmdWwsIG9yIHdoZXJlIGFuIGlzc3VlIG1pZ2h0IG9jY3VyLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgdXBzdHJlYW0gY29kZSwgYW5kIHRoZW4gaXRzIGRpcmVjdCBkZXBlbmRlbmNpZXMgYW5kIGl0cyBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgc28gSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBmb3IgbWF4aW11bSB2YWx1ZSBpbiB0aGlzIGRlZXAgZGl2ZS4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkwMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGluZyB0aGUgYGd1ZXN0X21lbWZkYCBmdW5jdGlvbmFsaXR5LCBhcyBpdCYjMzk7cyBiZWluZyBzZWxlY3RlZCBmb3IgYm90aCBBUk02NCB3aXRoIEtWTSBhbmQgeDg2XF82NCB3aXRoIEtWTVxfWDg2LiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uY2VwdCBvZiB1c2luZyBgZ3Vlc3RfbWVtZmRgIGlzIHByZXNlbnQgYW5kIGFjY2Vzc2libGUgd2l0aGluIHRoZSB0YXJnZXQgc3lzdGVtcy4KClRoZSBjaGFuZ2VzIGFyZSBkaXN0cmlidXRlZCBhY3Jvc3Mgc2V2ZXJhbCBrZXkgS1ZNIG1vZHVsZXMuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgZ21lbV9hYm9ydGAgaW4gYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGt2bV90cmFuc2xhdGVfdm5jcmAgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYW5kIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCBtYWtlcyBzZW5zZS4gVGhlc2UgYXJlIGFsbCBpbnRpbWF0ZWx5IGludm9sdmVkIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRyYW5zbGF0aW9uLCB3aGljaCB3b3VsZCBiZSB0aGUgZXhwZWN0ZWQgYXJlYXMgZm9yIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBgZ3Vlc3RfbWVtZmRgLiBUaGUgcHJlc2VuY2Ugb2YgbW9kaWZpY2F0aW9ucyB0byBgX19zZXZfc25wX3JlbG9hZF92bXNhYCBhbmQgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2Agc3VnZ2VzdHMgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBlbnZpcm9ubWVudHMsIHBlcmhhcHMgaW4gaG93IGBndWVzdF9tZW1mZGAgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHByb3RlY3Rpb24gZmVhdHVyZXMuCgpOb3csIGhvbGQgb24uIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGlzIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdW5jdGlvbiBiZXR0ZXIgdG8gZGV0ZXJtaW5lIHdoYXQgdGhvc2UgY2hhbmdlcyBlbnRhaWwgYW5kIHRvIGNvbm5lY3QgdGhlIG1lbW9yeSBmYXVsdCBhc3BlY3QgdG8gdGhlIGd1ZXN0IG1lbWZkLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgdGhlIHBhdGNoIGFsdGVycyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTg5PXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDU5NS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5NjpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTctXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2MTk9c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyNC1cdGlmIChmYXVsdC1cdTAwM2Vpc19wcml2YXRlIHx8IGt2bV9tZW1zbG90X2lzX2dtZW1fb25seShmYXVsdC1cdTAwM2VzbG90KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDYyNTpcdFx0cmV0dXJuIGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbSh2Y3B1LCBmYXVsdCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHRoaXMgbG9va3MgbGlrZSB3ZSYjMzk7dmUgc3R1bWJsZWQgb250byBzb21ldGhpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgd2l0aGluIHRoZSBjb3JlIEtWTSBNTVUgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGhvdyByZWZlcmVuY2VzIHRvIGd1ZXN0X21lbWZkIGZvbGlvcyBhcmUgbWFuYWdlZC4gVGhlIGtleSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcG9pbnQgYXQgd2hpY2ggYSByZWZlcmVuY2UgaXMgZHJvcHBlZDsgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHJlZmVyZW5jZSB0byB0aGUgY2FsbGVyIGluIGBrdm1fZ21lbV9nZXRfcGZuYCwgaXQmIzM5O3Mgbm93IGJlaW5nIGRyb3BwZWQgaW50ZXJuYWxseS4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uIGluIEtWTSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LiBHaXZlbiB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIG1lbW9yeSBoYW5kbGluZywgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHRoZSByaWdodCBuZXh0IHN0ZXAuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9nbWVtX2dldF9wZm5gIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9nbWVtX2dldF9wZm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vbW11LmM9MTYwOD1zdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2NDItXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxNjQzOlx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXHUwMDNlbWVtc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTY0NC1cdGlmIChyZXQpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzU3PXN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDEzLVx0fSBlbHNlIHtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE0MTQ6XHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MTUtXHRcdGlmIChyZXQpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ1OTY9c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYwNS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDYwNjpcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIFx1MDAyNmZhdWx0LVx1MDAzZXBmbixcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYwNy1cdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDEyPXN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQwNjEtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDA2MjpcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQwNjMtXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5OTg9dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MDMyLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MDMzOlx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZvcmRlcik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUwMzQtXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI1ODE9c3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU4Ny0jaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI1ODg6aW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1ODktXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTAtI2Vsc2VcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTkxOnN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTItXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04Mz1zdGF0aWMgc3RydWN0IGZvbGlvICprdm1fZ21lbV9nZXRfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleClcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwMy1cdC8qXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjEwNDpcdCAqIEV4dGVybmFsIGludGVyZmFjZXMgbGlrZSBrdm1fZ21lbV9nZXRfcGZuKCkgc3VwcG9ydCBkZWFsaW5nXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwNS1cdCAqIHdpdGggaHVnZXBhZ2VzIHRvIGEgZGVncmVlLCBidXQgaW50ZXJuYWxseSwgZ3Vlc3RfbWVtZmQgY3VycmVudGx5XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz0yOTA9c3RhdGljIGludCBrdm1fZ21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMzA1LVx0ICogYWZ0ZXIgd2hpY2ggZmlsZV9yZWZfZ2V0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpIGZhaWwsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjMwNjpcdCAqIGt2bV9nbWVtX2dldF9wZm4oKSBjYW5ub3QgYmUgdXNpbmcgdGhlIGZpbGUgY29uY3VycmVudGx5LlxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0zMDctXHQgKiBmaWxlX3JlZl9wdXQoKSBwcm92aWRlcyBhIGZ1bGwgYmFycmllciwgYW5kIGdldF9maWxlX2FjdGl2ZSgpIHRoZVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NDY2PXN0YXRpYyBpbnQga3ZtX2dtZW1fZXJyb3JfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy00ODAtXHQgKiBncmFjZWZ1bGx5IGhhbmRsaW5nIG1lbW9yeSBlcnJvcnMpLiAgSWYvd2hlbiB0aGUgZ3Vlc3QgYXR0ZW1wdHMgdG9cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NDgxOlx0ICogYWNjZXNzIGEgcG9pc29uZWQgcGFnZSwga3ZtX2dtZW1fZ2V0X3BmbigpIHdpbGwgcmV0dXJuIC1FSFdQT0lTT04sXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTQ4Mi1cdCAqIGF0IHdoaWNoIHBvaW50IEtWTSBjYW4gZWl0aGVyIHRlcm1pbmF0ZSB0aGUgVk0gb3IgcHJvcGFnYXRlIHRoZVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NjA2PWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY0OS1cdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjY1MDpcdCAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLlxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02NTEtXHQgKi9cbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTY3MT1zdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjc4LVx0LypcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6Njc5Olx0ICogc3luY2hyb25pemVfc3JjdShcdTAwMjZrdm0tXHUwMDNlc3JjdSkgZW5zdXJlZCB0aGF0IGt2bV9nbWVtX2dldF9wZm4oKVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02ODAtXHQgKiBjYW5ub3Qgc2VlIHRoaXMgbWVtc2xvdC5cbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTY4NT12b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzE2LS8qIFJldHVybnMgYSBsb2NrZWQgZm9saW8gb24gc3VjY2Vzcy4gICovXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjcxNzpzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTcxOC1cdFx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1Mi1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzUzOmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzU0LVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzY1LVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo3NjY6XHRmb2xpbyA9IF9fa3ZtX2dtZW1fZ2V0X3BmbihmaWxlLCBzbG90LCBpbmRleCwgcGZuLCBtYXhfb3JkZXIpO1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NjctXHRpZiAoSVNfRVJSKGZvbGlvKSlcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc4NS19XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjc4NjpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fZ2V0X3Bmbik7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc4Ny1cbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTc5MD1zdGF0aWMgbG9uZyBfX2t2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgwMC1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODAxOlx0Zm9saW8gPSBfX2t2bV9nbWVtX2dldF9wZm4oZmlsZSwgc2xvdCwgaW5kZXgsIFx1MDAyNnBmbiwgTlVMTCk7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgwMi1cdGlmIChJU19FUlIoZm9saW8pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDc0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGt2bV9nbWVtX2dldF9wZm5gIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYOKAlGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHRoaXMgaXMgc29tZXRoaW5nIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcsIHNvIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGlzIGFyZWEuCgpUaGUgZnVuY3Rpb25zIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFuZCBzaG91bGQgYmUgdGhlIGluaXRpYWwgdGFyZ2V0cyBhcmU6IGBrdm1fZ21lbV9nZXRfcGZuYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gLCBgZ21lbV9hYm9ydGAsIGFuZCBga3ZtX3RyYW5zbGF0ZV92bmNyYC4gSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2FsbCBwYXRocyB0byB0aGVzZSB0byBkZXRlcm1pbmUgd2hlcmUgYmVzdCB0byBhcHBseSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEkgbmVlZCB0byBub3RlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaWYgdGhleSBhcmUgc3RhdGljIG9yIG5vdCwgc2luY2UgdGhhdCB3aWxsIGFmZmVjdCBteSBmdXp6aW5nIGFwcHJvYWNoLiBMb29raW5nIGNsb3NlciwgSSBzZWUgdGhhdCBgZ21lbV9hYm9ydGAgaXMgc3RhdGljIGluIGBhcmNoL2FybTY0L2t2bS9tbXUuY2AsIGBrdm1fdHJhbnNsYXRlX3ZuY3JgIGlzIHN0YXRpYyBpbiBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgLCBga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtYCBpcyBzdGF0aWMgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBhbmQgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAgaXMgYWxzbyBzdGF0aWMsIHRoaXMgdGltZSBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaXMgbm9uLXN0YXRpYyBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyBub24tc3RhdGljIGFuZCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AsIGFzIG1lbnRpb25lZCBiZWZvcmUuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaXMgZXhwb3J0ZWQgb3IganVzdCBub24tc3RhdGljLCBzaW5jZSB0aGF0IGRpY3RhdGVzIGhvdyBlYXNpbHkgSSBjYW4gaW50ZXJhY3Qgd2l0aCBpdC4gQWgsIGl0JiMzOTtzIGp1c3Qgbm9uLXN0YXRpYywgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kIGZvciBhY2Nlc3MuIEdvb2QsIGFuZCBga3ZtX2dtZW1fZ2V0X3BmbmAgKmlzKiBleHBvcnRlZDogYEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ21lbV9nZXRfcGZuKWAuIFRoYXQmIzM5O3MgZXh0cmVtZWx5IHVzZWZ1bDsgSSBjYW4gbGV2ZXJhZ2UgdGhhdCB0byBicm9hZGVuIG15IGNvdmVyYWdlLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIEkmIzM5O2xsIG5lZWQgYEtWTWAgZW5hYmxlZCwgb2YgY291cnNlLiBgS1ZNX0dVRVNUX01FTUZEYCBpcyAqc2VsZWN0ZWQqIC0gYWgsIHRoYXQgbWVhbnMgSSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IHRoYXQgZGlyZWN0bHkuIEJ1dCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gbWFrZSBzdXJlIEkgYW0gY292ZXJpbmcgYWxsIHRoZSBiYXNlcywgZW5hYmxpbmcgYEtWTV9BTURfU0VWYCBvciBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgdG8gZW5zdXJlIHRoZSBtZW1mZCBjb2RlIGlzIHVzZWQgbWlnaHQgYmUgd29ydGh3aGlsZS4gSSBzaG91bGQgdmVyaWZ5IHdoYXQgc2VsZWN0cyBgS1ZNX0dVRVNUX01FTUZEYCwganVzdCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTY5PWNvbmZpZyBLVk1fV0VSUk9SXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgS1ZNX0FNRF9TRVZgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgS1ZNX0FNRF9TRVZgIHRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGVuY3J5cHRpb24gYW5kIHNlY3VyZSB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgcGxhdGZvcm1zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGhlcmUsIHJpZ2h0PyBTbywgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgYXJjaGl0ZWN0dXJhbCBhc3BlY3RzIOKAkyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGd1ZXN0IE9TLCB0aGUgaHlwZXJ2aXNvciwgYW5kIHRoZSBBTUQgU2VjdXJlIFByb2Nlc3Nvci4gSSYjMzk7bSByZWNhbGxpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiwgYW5kIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgbWl0aWdhdGlvbnMgYXJlIGluIHBsYWNlIHRvIG1pbmltaXplIHRoYXQgaW1wYWN0LiBJIHdhbnQgdG8ga25vdyBhYm91dCBrZXkgbWFuYWdlbWVudCBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQsIHBhcnRpY3VsYXJseSB3aGV0aGVyIGl0JiMzOTtzIHNvZnR3YXJlLW1hbmFnZWQsIGhhcmR3YXJlLW1hbmFnZWQsIG9yIGEgaHlicmlkIGFwcHJvYWNoLiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHNlY3VyaXR5IGJvdW5kYXJpZXMgdGhpcyBlc3RhYmxpc2hlcyDigJMgaXMgdGhlIGh5cGVydmlzb3Igbm93IHVudHJ1c3RlZCB3aXRoIHJlc3BlY3QgdG8gZ3Vlc3QgbWVtb3J5LCBvciBpcyB0aGVyZSBhIHRydXN0IHJlbGF0aW9uc2hpcCBhdCBwbGF5PyBXaGF0IGFib3V0IERNQSBhdHRhY2tzOyBhcmUgd2UgdXNpbmcgSU9NTVUgdG8gc2VjdXJlIHRob3NlPyBBbmQgb2YgY291cnNlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHNvIEkgc2hvdWxkIHNlZSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzExOAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGBLVk1fSU5URUxfVERYYDoKCioqQW5hbHl6aW5nIEtWTV9JTlRFTF9URFgqKgoKQWxyaWdodCwgdGltZSB0byBmb2N1cy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGBLVk1fSU5URUxfVERYYC4gSW1tZWRpYXRlbHksIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGNoZWNraW5nIGl0cyBzdGF0dXMuIElzIGl0IGVuYWJsZWQ/IFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJcyB0aGUgaGFyZHdhcmUgcHJlc2VudCBhbmQgY2FwYWJsZT8gV2hhdCYjMzk7cyB0aGUga2VybmVsIHZlcnNpb24gbG9va2luZyBsaWtlPyBBcmUgdGhlIG5lY2Vzc2FyeSBtb2R1bGVzIGxvYWRlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cz8gSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucywgYW5kIGtub3duIGlzc3Vlcy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZywgYW5kIGlkZW50aWZ5IGFueSByZWQgZmxhZ3MgaW1tZWRpYXRlbHkuIElzIHRoaXMgZmVhdHVyZSBiZWhhdmluZyBhcyBJIGV4cGVjdCBpdCB0bz8gSXMgaXQgcHJvdmlkaW5nIHRoZSBhbnRpY2lwYXRlZCBmdW5jdGlvbmFsaXR5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHRoYXQgbmVlZCBmdXJ0aGVyIGludmVzdGlnYXRpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gYW5kIFNFVi1TTlAgR3Vlc3QgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgYSBodW5jaC4gSXMgYEtWTV9HVUVTVF9NRU1GRGAgc2ltcGx5IHNlbGVjdGVkIGJ5IGBLVk1gIG9uIGFybTY0IGFuZCBgS1ZNX1g4NmAgb24geDg2PyAgVGhlIGNvbmZpZyBjb25maXJtcyBpdDoKCmBgYAphcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5OglzZWxlY3QgS1ZNX0dVRVNUX01FTUZECmFyY2gveDg2L2t2bS9LY29uZmlnOjUwOglzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NApgYGAKClNvIGVuYWJsaW5nIGBLVk1gIGFuZCBgS1ZNX0FNRF9TRVZgIGlzIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZnVuY3Rpb25zIGFjcm9zcyBhcmNoaXRlY3R1cmVzLCBzbyBJIHNob3VsZCBiZSBmYW1pbGlhciB3aXRoIHRoZW0gYWxsLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGlzIGlzIHdoZXJlIFJNUCBmYXVsdHMgZm9yIFNFVi1TTlAgZ3Vlc3RzIGFyZSBoYW5kbGVkLCBzbyB0aGF0JiMzOTtzIGEga2V5IGFyZWEgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IG1vZGlmeWluZyBob3cgdGhlIFBGTiBpcyByZXRyaWV2ZWQgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGUgYG1tdV9zZXFgIGlzIGhhbmRsZWQuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGZvciBjb250ZXh0IHVwZGF0ZXMuCgpBZGRpdGlvbmFsbHksIEkgc2VlIGNoYW5nZXMgdG8gYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBPbiBBUk02NCwgdGhlIGNoYW5nZXMgaW52b2x2ZSBgZ21lbV9hYm9ydGAgaW4gYGFyY2gvYXJtNjQva3ZtL21tdS5jYCBhbmQgYGt2bV90cmFuc2xhdGVfdm5jcmAgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYC4KCkJhc2VkIG9uIHRoaXMsIHRoZSBjZW50cmFsIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOgoKLSAgIGBrdm1fZ21lbV9nZXRfcGZuYAotICAgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YAotICAgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAKLSAgIGBnbWVtX2Fib3J0YAotICAgYGt2bV90cmFuc2xhdGVfdm5jcmAKCldhaXQsIGEgc21hbGwgcXVlc3Rpb24uIEl0IHNlZW1zIHRoYXQgYGdtZW1fYWJvcnRgIGFuZCBga3ZtX3RyYW5zbGF0ZV92bmNyYCBhcmUgc3RhdGljLCB0aG91Z2ggY2xlYXJseSBub3QgdHJpdmlhbCwgaG90LXBhdGggZnVuY3Rpb25zICh0aGV5JiMzOTtyZSBwYWdlIGZhdWx0IGhhbmRsZXJzIGZvciBzcGVjaWZpYyBjYXNlcykuIEhvd2V2ZXIsIHRoZSBndWlkZWxpbmVzIEkgdXN1YWxseSBmb2xsb3cgYXJlIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGF0IG9uZSBpcyBpbmxpbmVkLCBvciBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgcmVhc29uIGZvciBpdHMgc3RhdGlzIGRlY2xhcmF0aW9uLiBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgYSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50LCBhcyBpcyBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTg5PXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDU5NS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5NjpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTctXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2MTk9c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyNC1cdGlmIChmYXVsdC1cdTAwM2Vpc19wcml2YXRlIHx8IGt2bV9tZW1zbG90X2lzX2dtZW1fb25seShmYXVsdC1cdTAwM2VzbG90KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDYyNTpcdFx0cmV0dXJuIGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbSh2Y3B1LCBmYXVsdCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDAwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBpdCBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgZ3Vlc3RfbWVtZmRgIHdpdGhpbiBLVk0uIFRoZSBjb2RlIGlzIHN0YXRpYywgYnV0IGl0JiMzOTtzIG5vdCBkaXJlY3RseSBpbmxpbmVkLCBzbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBga3ZtX2dtZW1fZ2V0X3BmbmAgYW5kIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgYW5kIGlmIHRoZXkmIzM5O3JlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLgoKQWxyaWdodCwgYGt2bV9nbWVtX2dldF9wZm5gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIEtWTSBwYWdlIGZhdWx0cyB3aGVuIHRoZSBndWVzdCBhdHRlbXB0cyB0byBhY2Nlc3MgcHJpdmF0ZSBtZW1vcnksIGFuZCB0aGlzIGhhcHBlbnMgd2hlbiBydW5uaW5nIGEgVk0gdXNpbmcgYGd1ZXN0X21lbWZkYCBhbmQgYWNjZXNzaW5nIHRoZSBtZW1vcnkuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGEgdXNlcnNwYWNlIGRlcGVuZGVuY3ksIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyLgoKTm93LCBsZXQgbWUgcHV0IHRvZ2V0aGVyIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggYWx0ZXJzIGhvdyBmb2xpbyByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiBga3ZtX2dtZW1fZ2V0X3BmbmAuIEluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQsIGl0JiMzOTtzIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgZGlyZWN0bHkgd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSBjYWxsZXIuIFRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4gYm90aCB4ODYgKHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1NVSBhbmQgU0VWLVNOUCBjb2RlKSBhbmQgQVJNNjQgKE1NVSBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uKSB0byBhY2NvbW1vZGF0ZSB0aGlzIG5ldyBzaWduYXR1cmUuIEFkZGl0aW9uYWxseSwgaXQgaW50cm9kdWNlcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBhZGRyZXNzIHBvdGVudGlhbCBpbnZhbGlkYXRpb24gcmFjZXMuCgpFc3NlbnRpYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEtWTSBhbmQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBtZW1vcnkgbWFuYWdlbWVudCB3aGljaCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJlY2F1c2UgaXQgaW1wYWN0cyBhbnlvbmUgcnVubmluZyBhIEtWTSBndWVzdCB0aGF0IGxldmVyYWdlcyBgZ3Vlc3RfbWVtZmRgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQ6IGBLVk1gLCBgS1ZNX0FNRF9TRVZgLCBhbmQgYEtWTV9TV19QUk9URUNURURfVk1gLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBzeW1ib2xzOiBga3ZtX2dtZW1fZ2V0X3BmbmAgYW5kIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuCkkmIzM5O20gYWxzbyBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgaXMgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz02OT1jb25maWcgS1ZNX1dFUlJPUlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtWTS9BTUQtU0VWIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGVuYWJsaW5nIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgdGhhdCBsZXZlcmFnZSBgZ3Vlc3RfbWVtZmRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3VwcG9ydGluZyBrZXJuZWwgZmVhdHVyZXMgYXJlIGluIHBsYWNlLCB3aGljaCBtZWFucyB2YWxpZGF0aW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBhcmNoaXRlY3R1cmUuCgpNeSBmb2N1cyBpcyB0byBlbnN1cmUgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCBpbiB0aGlzIGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSBpZiBgS1ZNX0FNRF9TRVZgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSB0aGVzZSBgZ3Vlc3RfbWVtZmRgIHNlY3VyZWQgdmlydHVhbCBtYWNoaW5lcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBSTVAgZmF1bHQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9oYW5kbGVfcm1wX2ZhdWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDk2Nj1zdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTk3LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTk4OnZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTk5LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE5Njk9c3RhdGljIGludCBucGZfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjUtXHRpZiAocmMgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX0dVRVNUX1JNUF9NQVNLKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDI2Olx0XHRzZXZfaGFuZGxlX3JtcF9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDI3LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTAxMT1leHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAxMjp2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMTMtaW50IHNldl9nbWVtX21ha2VfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbiwga3ZtX3Bmbl90IG5yX3BhZ2VzKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTEwMzg9c3RhdGljIGlubGluZSBpbnQgc2V2X2Rldl9nZXRfYXR0cih1MzIgZ3JvdXAsIHU2NCBhdHRyLCB1NjQgKnZhbCkgeyByZXR1cm4gLUVOWElPOyB9XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMzktI2RlZmluZSBtYXhfc2V2X2FzaWQgMFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDQwOnN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpIHt9XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwNDEtc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNldl9kZWNyeXB0X3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc5MwoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgU0VWIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBmdW5jdGlvbi4gUmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgdGhpbmcgaXMgKmFjdHVhbGx5KiBkZWZpbmVkIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgIGZpbGUuIE5vdGhpbmcgdG9vIHN1cnByaXNpbmcgdGhlcmUuIEFuZCBpdCBvbmx5IGdldHMgY29tcGlsZWQgd2hlbiB0aGUgYEtWTV9BTURfU0VWYCBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBoZWxwcyBuYXJyb3cgZG93biB3aGVuIEkmIzM5O2xsIGVuY291bnRlciBpdC4gTm93LCB3aGF0JiMzOTtzIG5leHQuLi4gSSB0aGluayBJJiMzOTtsbCBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB0byByZWNvcmQgd2hhdCBJJiMzOTt2ZSBmb3VuZCBzbyBmYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7S1ZNX1NXX1BST1RFQ1RFRF9WTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2dldF9wZm4mIzM0OywKICAgICYjMzQ7c2V2X2hhbmRsZV9ybXBfZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIEtWTSBndWVzdF9tZW1mZCBieSBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGluc2lkZSBga3ZtX2dtZW1fZ2V0X3BmbmAgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHBhZ2UgdG8gdGhlIGNhbGxlciB0byBiZSByZWxlYXNlZCBsYXRlci4gSXQgdXBkYXRlcyB0aGUgY2FsbGVycyBpbiB4ODYgKE1NVSBhbmQgU0VWLVNOUCkgYW5kIEFSTTY0IChNTVUgYW5kIG5lc3RlZCkgdG8gYWNjb21tb2RhdGUgdGhpcyBzaWduYXR1cmUgY2hhbmdlIGFuZCBhZGRzIE1NVSBzZXF1ZW5jZSBjb3VudGVyIGNoZWNrcyBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGhhbmRsZSBpbnZhbGlkYXRpb24gcmFjZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gYW5kIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgcnVubmluZyBhIEtWTSBndWVzdCB1dGlsaXppbmcgZ3Vlc3RfbWVtZmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgS1ZNIGd1ZXN0X21lbWZkIGJ5IGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW5zaWRlIGBrdm1fZ21lbV9nZXRfcGZuYCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgcGFnZSB0byB0aGUgY2FsbGVyIHRvIGJlIHJlbGVhc2VkIGxhdGVyLiBJdCB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIHg4NiAoTU1VIGFuZCBTRVYtU05QKSBhbmQgQVJNNjQgKE1NVSBhbmQgbmVzdGVkKSB0byBhY2NvbW1vZGF0ZSB0aGlzIHNpZ25hdHVyZSBjaGFuZ2UgYW5kIGFkZHMgTU1VIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIGluIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgdG8gaGFuZGxlIGludmFsaWRhdGlvbiByYWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEtWTSBhbmQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBydW5uaW5nIGEgS1ZNIGd1ZXN0IHV0aWxpemluZyBndWVzdF9tZW1mZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fZ2V0X3BmbmAgdG8gbm8gbG9uZ2VyIHJldHVybiBhIGBzdHJ1Y3QgcGFnZWAgcG9pbnRlciB0byB0aGUgY2FsbGVyLCBpbnN0ZWFkIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgYWNyb3NzIGFybTY0IGFuZCB4ODYgS1ZNIGNvZGUgdG8gcmVtb3ZlIHRoZSBgcGFnZWAgYXJndW1lbnQgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCBjYWxscyAoZS5nLiwgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCkuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBNTVUgc2VxdWVuY2UgY2hlY2tpbmcgKGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gKSBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSTVAgZmF1bHRzLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjN2Q0MDkwNzFkMzEwYmNmMjJhMTMwODI0ZDI2ODVkYWUwMjQzMTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAyMzo0OTo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggNmM5NDFhYWExMGM2My4uZDVhYTE5N2QyY2JmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmMKQEAgLTE2MTMsNyAmIzQzOzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCWVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90ID0gS1ZNX1BHVEFCTEVfUFJPVF9SOwogCXN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC0mZ3Q7dmNwdS0mZ3Q7YXJjaC5od19tbXUtJmd0O3BndDsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGt2bSAqa3ZtID0gczJmZC0mZ3Q7dmNwdS0mZ3Q7a3ZtOwogCXZvaWQgKm1lbWNhY2hlID0gTlVMTDsKIAlrdm1fcGZuX3QgcGZuOwpAQCAtMTY0MSw3ICYjNDM7MTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiAJLyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi8KIAlzbXBfcm1iKCk7CiAKLQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC0mZ3Q7bWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKTsKJiM0MzsJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtJmd0O21lbXNsb3QsIGdmbiwgJmFtcDtwZm4sIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJa3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC0mZ3Q7dmNwdSwgczJmZC0mZ3Q7ZmF1bHRfaXBhLCBQQUdFX1NJWkUsCiAJCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7CkBAIC0xNjgxLDcgJiM0MzsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAl9CiAKIG91dF91bmxvY2s6Ci0Ja3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKTsKIAlrdm1fZmF1bHRfdW5sb2NrKGt2bSk7CiAKIAlpZiAoKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKSAmYW1wOyZhbXA7ICFyZXQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCmluZGV4IGZiNTRmNmRhZDk5NWMuLjQzNTIzYmIxNzYyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCkBAIC0xMzYwLDcgJiM0MzsxMzYwLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCWJvb2wgd3JpdGVfZmF1bHQsIHdyaXRhYmxlOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAlzdHJ1Y3Qgdm5jcl90bGIgKnZ0OwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdTY0IHZhLCBwZm4sIGdmbjsKIAlpbnQgcmV0OwogCkBAIC0xNDExLDcgJiM0MzsxNDExLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCQlpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihwZm4pIHx8ICh3cml0ZV9mYXVsdCAmYW1wOyZhbXA7ICF3cml0YWJsZSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UgewotCQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgbWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKTsKJiM0MzsJCXJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBtZW1zbG90LCBnZm4sICZhbXA7cGZuLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJa3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgdnQtJmd0O3dyLnBhLCBQQUdFX1NJWkUsCiAJCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggYzUxOWU4ZThkNjQ2Zi4uMTI5ZDQwMzMwODA1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC00NjA0LDcgJiM0Mzs0NjA0LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCXIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgZmF1bHQtJmd0O3Nsb3QsIGZhdWx0LSZndDtnZm4sICZhbXA7ZmF1bHQtJmd0O3BmbiwKLQkJCSAgICAgJmFtcDtmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlLCAmYW1wO21heF9vcmRlcik7CiYjNDM7CQkJICAgICAmYW1wO21heF9vcmRlcik7CiAJaWYgKHIpIHsKIAkJa3ZtX21tdV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIGZhdWx0KTsKIAkJcmV0dXJuIHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCBmY2I0MWRmZGU0YzAyLi4wYzkxYzkwNDU3M2NjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTQwMTYsNyAmIzQzOzQwMTYsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJa3ZtX3Bmbl90IHBmbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9tdXRleCk7CkBAIC00MDYwLDcgJiM0Mzs0MDU5LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogCSAqIFRoZSBuZXcgVk1TQSB3aWxsIGJlIHByaXZhdGUgbWVtb3J5IGd1ZXN0IG1lbW9yeSwgc28gcmV0cmlldmUgdGhlCiAJICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC4KIAkgKi8KLQlpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgTlVMTCkpCiYjNDM7CWlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgTlVMTCkpCiAJCXJldHVybjsKIAogCXJlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwpAQCAtNDA3Niw4ICYjNDM7NDA3NSw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIAllbHNlCiAJCXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pOwogCXJlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7Ci0KLQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOwogfQogCiAvKgpAQCAtNTAwMyw3ICYjNDM7NTAwMCw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCWludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAlib29sIGFzc2lnbmVkOwogCWt2bV9wZm5fdCBwZm47CiAJZ2ZuX3QgZ2ZuOwpAQCAtNTAzMCw3ICYjNDM7NTAyNywxMCBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAkJcmV0dXJuOwogCX0KIAotCXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsICZhbXA7b3JkZXIpOwomIzQzOwltbXVfc2VxID0ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsKJiM0MzsJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7b3JkZXIpOwogCWlmIChyZXQpIHsKIAkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGJhY2tpbmcgcGFnZSBmb3IgcHJpdmF0ZSBHUEEgMHglbGx4XG4mIzM0OywKIAkJCQkgICAgZ3BhKTsKQEAgLTUwMzksOSAmIzQzOzUwMzksMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAKIAlyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgJmFtcDthc3NpZ25lZCwgJmFtcDtybXBfbGV2ZWwpOwogCWlmIChyZXQgfHwgIWFzc2lnbmVkKSB7Ci0JCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxuJiMzNDssCi0JCQkJICAgIGdwYSwgcGZuLCByZXQpOwotCQlnb3RvIG91dF9ub190cmFjZTsKJiM0MzsJCWd1YXJkKHJlYWRfbG9jaykoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsKJiM0MzsJCWlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSkKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgIGdwYSwgcGZuLCByZXQpOwomIzQzOwomIzQzOwkJcmV0dXJuOwogCX0KIAogCS8qCkBAIC01MDY5LDI2ICYjNDM7NTA3MywzMSBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAlpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKQogCQlnb3RvIG91dDsKIAotCXJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTsKLQlpZiAocmV0KSB7Ci0JCS8qCi0JCSAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmUKLQkJICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZAotCQkgKiBpdHNlbGYuCi0JCSAqLwotCQlpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCkgJmFtcDsmYW1wOwotCQkgICAgYXNzaWduZWQgJmFtcDsmYW1wOyBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspCiYjNDM7CXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewomIzQzOwkJaWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpCiAJCQlnb3RvIG91dDsKIAotCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXG4mIzM0OywKLQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7CiYjNDM7CQlyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCYjMzk7cyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heQomIzQzOwkJCSAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMKJiM0MzsJCQkgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQmIzM5O3Mgbm90IGFzc2lnbmVkLCB0aGVuCiYjNDM7CQkJICogdGhpcyBtdXN0IGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgdGhhdCBtYWRlCiYjNDM7CQkJICogdGhpcyBwYWdlIHNoYXJlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAoKGFzc2lnbmVkICZhbXA7JmFtcDsgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKSB8fCAhYXNzaWduZWQpKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXG4mIzM0OywKJiM0MzsJCQkJCSAgICBncGEsIHBmbiwgcmV0KTsKJiM0MzsJCX0KIAl9CiAKIAlrdm1femFwX2dmbl9yYW5nZShrdm0sIGdmbiwgZ2ZuICYjNDM7IFBUUlNfUEVSX1BNRCk7CiBvdXQ6CiAJdHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpOwotb3V0X25vX3RyYWNlOgotCWt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpOwogfQogCiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCAwM2JmYzkyODY0YjZlLi41MDI0NjUxMTljYTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0yNTg2LDEzICYjNDM7MjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogCiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAogaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJICAgICBpbnQgKm1heF9vcmRlcik7CiYjNDM7CQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sCi0JCQkJICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJCQkgICBpbnQgKm1heF9vcmRlcikKJiM0MzsJCQkJICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKQogewogCUtWTV9CVUdfT04oMSwga3ZtKTsKIAlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IGI1OTY0ODZkMTg0Y2EuLjU4OTc2MjE0MGMzZWYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtNzUxLDggJiM0Mzs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsCiB9CiAKIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKLQkJICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsCi0JCSAgICAgaW50ICptYXhfb3JkZXIpCiYjNDM7CQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKQogewogCXBnb2ZmX3QgaW5kZXggPSBrdm1fZ21lbV9nZXRfaW5kZXgoc2xvdCwgZ2ZuKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwpAQCAtNzgwLDExICYjNDM7Nzc5LDcgQEAgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogI2VuZGlmCiAKIAlmb2xpb191bmxvY2soZm9saW8pOwotCi0JaWYgKCFyKQotCQkqcGFnZSA9IGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgaW5kZXgpOwotCWVsc2UKLQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKIAogCXJldHVybiByOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gR3Vlc3QgTWVtb3J5IFJlZmFjdG9yaW5nIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYW5pbmcgdXAgdGhlIGBrdm1fZ21lbV9nZXRfcGZuYCBmdW5jdGlvbi4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgcGFnZSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkLiBJdCYjMzk7cyBhZmZlY3Rpbmcgc2V2ZXJhbCBmaWxlczogYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGFuZCBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIFRoZSBtYWluIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGNhbGxlciBubyBsb25nZXIgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBwYWdlOyB0aGUgcmVmZXJlbmNlIGlzIGVmZmVjdGl2ZWx5IGRyb3BwZWQgaW1tZWRpYXRlbHkgd2l0aGluIGBrdm1fZ21lbV9nZXRfcGZuYCB1c2luZyBgZm9saW9fcHV0KGZvbGlvKWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byBlaXRoZXIgcHJldmVudCBwb3RlbnRpYWwgcGFnZSByZWZlcmVuY2UgbGVha3Mgb3Igc2ltcGxpZnkgdGhlIEFQSSBieSBjaGFuZ2luZyBob3cgZ21lbSBwYWdlcyBhcmUgbWFuYWdlZC4gRWl0aGVyIHRoZXNlIHBhZ2VzIGRvbiYjMzk7dCBuZWVkIHRvIGJlIHBpbm5lZCBieSB0aGUgY2FsbGVyIGluIHRoZSBzYW1lIHdheSwgb3IgbWF5YmUgdGhlIGZpbGUgaXRzZWxmIHRha2VzIHJlc3BvbnNpYmlsaXR5IGZvciBwaW5uaW5nLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHdpdGggbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0JiMzOTtzIHJlbW92aW5nIGEgcG9pbnRlciBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwLCBub3QgaW50cm9kdWNpbmcgYW55dGhpbmcgbmV3IHRvIHVzZXJzcGFjZS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzLiBJdCBsb29rcyBsaWtlIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgY2xlYW51cCBvZiB0aGUgS1ZNIGd1ZXN0X21lbWZkIEFQSSBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIE1vcmVvdmVyLCBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBkdWUgdG8gcHJlbWF0dXJlIHBhZ2UgcmVsZWFzZSB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi9MT0NLREVQL2V0Yy4gSSBkb24mIzM5O3QgdGhpbmsgSSBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIGFuYWx5c2lzLgoKTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGEgc3BlY2lmaWMgcG9pbnQuIEluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaXMgYmVpbmcgdXBkYXRlZC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBgZmF1bHQtJmd0O3JlZmNvdW50ZWRfcGFnZWAgaXMgbm8gbG9uZ2VyIHNldC4gVGhpcyAqaXMqIGEgcG9pbnQgb2YgY29uY2Vybi4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhbGxlZDoKCmBgYGMKIAlyID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIGZhdWx0LSZndDtzbG90LCBmYXVsdC0mZ3Q7Z2ZuLCAmYW1wO2ZhdWx0LSZndDtwZm4sCi0JCQkgICAgICZhbXA7ZmF1bHQtJmd0O3JlZmNvdW50ZWRfcGFnZSwgJmFtcDttYXhfb3JkZXIpOwomIzQzOwkJCSAgICAgJmFtcDttYXhfb3JkZXIpOwpgYGAKClNpbmNlIGBmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlYCBpcyBubyBsb25nZXIgcG9wdWxhdGVkIGJ5IGBrdm1fZ21lbV9nZXRfcGZuYCwgd2hhdCYjMzk7cyBnb2luZyB0byBoYXBwZW4gd2l0aCBpdD8gRG9lcyBpdCByZW1haW4gdW5pbml0aWFsaXplZCwgYW5kIGlzIGl0IHVzZWQgbGF0ZXI/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHRgIGFuZCB3aGVyZSBgcmVmY291bnRlZF9wYWdlYCBpcyB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciB0byBhbmFseXplIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZmNvdW50ZWRfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NDU4OT1zdGF0aWMgdm9pZCBrdm1fbW11X2ZpbmlzaF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTEte1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NTkyOlx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTMtXHRcdFx0XHQgciA9PSBSRVRfUEZfUkVUUlksIGZhdWx0LVx1MDAzZW1hcF93cml0YWJsZSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjE5PXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjgtXHRmYXVsdC1cdTAwM2VwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIGZvbGwsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2Mjk6XHRcdFx0XHQgICAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlbWFwX3dyaXRhYmxlLCBcdTAwMjZmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjMwLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1OC1cdGZhdWx0LVx1MDAzZXBmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKGZhdWx0LVx1MDAzZXNsb3QsIGZhdWx0LVx1MDAzZWdmbiwgZm9sbCxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDY1OTpcdFx0XHRcdCAgICAgICBcdTAwMjZmYXVsdC1cdTAwM2VtYXBfd3JpdGFibGUsIFx1MDAyNmZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NjAtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD0yMjY9c3RydWN0IGt2bV9wYWdlX2ZhdWx0IHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI4MS1cdGt2bV9wZm5fdCBwZm47XG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oOjI4MjpcdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2U7XG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI4My1cdGJvb2wgbWFwX3dyaXRhYmxlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBHZW5lc2lzIG9mICYjMzQ7ZmF1bHQmIzM0OyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgb3JpZ2luIG9mIHRoZSB2YXJpYWJsZSwgYGZhdWx0YC4gV2hlcmUgZG9lcyB0aGlzIGd1eSBwb3AgaW50byBleGlzdGVuY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbml0aWFsaXphdGlvbiwgaXRzIGluaXRpYWwgdmFsdWUgKG9yIGxhY2sgdGhlcmVvZiksIGFuZCBob3cgdGhhdCBpbml0aWFsIHN0YXRlIHNoYXBlcyB0aGUgc3Vic2VxdWVudCBmbG93IG9mIHRoZSBjb2RlLiBJcyBpdCBhc3NpZ25lZCBkaXJlY3RseT8gSXMgaXQgYSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUgb3IgY2xhc3M/IElzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZD8gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlIGluaXRpYWxpemF0aW9uIGlzIGtleTsgaXQmIzM5O2xsIGluZmx1ZW5jZSBldmVyeXRoaW5nIGRvd24gdGhlIGxpbmUuIElzIHRoZXJlIHNvbWUgZGVmYXVsdCBzdGF0ZSBhc3N1bWVkPyBBcmUgdGhlcmUgcHJlY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJlZm9yZSB0aGlzIHRoaW5nIGlzIGV2ZW4gY29uc2lkZXJlZCB2YWxpZD8gR290dGEga25vdyB0aGlzIHN0dWZmLiBEaWdnaW5nIGludG8gdGhpcyBpbml0aWFsaXphdGlvbiBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIGBmYXVsdGAgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrdm1fcGFnZV9mYXVsdCAuKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NTU9c3RhdGljIGludCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk1OC17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NTk6XHRzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgZmF1bHQgPSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NjAtXHRcdC5hZGRyID0gY3IyX29yX2dwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNTQ9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1NS17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNTY6XHRzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgZmF1bHQgPSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTctXHRcdC5hZGRyID0gZ2ZuX3RvX2dwYShnZm4pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIE51bGwgUG9pbnRlciBpbiBGYXVsdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZmF1bHRgIHN0cnVjdCwgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBgZmF1bHQgPSB7IC4uLiB9YCBpcyBrZXkgaGVyZS4gVGhhdCBtZWFucyBhbnl0aGluZyAqbm90KiBleHBsaWNpdGx5IGxpc3RlZCB3aXRoaW4gdGhhdCBjdXJseSBicmFjZSBsaXN0IHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcyBhc3N1bXB0aW9uLiBJIGJlbGlldmUsIGltcGxpY2l0bHksIHRoaXMgbWVhbnMgYHJlZmNvdW50ZWRfcGFnZWAgd2lsbCBiZSBOVUxMIGlmIG5vdCBhc3NpZ25lZCBhIHNwZWNpZmljIHZhbHVlIGR1cmluZyB0aGUgcHJvY2Vzcy4KCk5vdywgaWYgYGt2bV9nbWVtX2dldF9wZm5gICpkb2VzbiYjMzk7dCogc2V0IGBmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlYCDigJMgYW5kIHRoaXMgaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0g4oCTIHRoZW4gaXQmIzM5O2xsIHJlbWFpbiB0aGF0IHplcm8taW5pdGlhbGl6ZWQgTlVMTCB2YWx1ZS4gVGhhdOKAmXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMsIGFzIHRoaXMgZmllbGQgY291bGQgYmUgcmVhZCBsYXRlci4KClRoZSBmb2xsb3dpbmcgY2FsbCBpczogYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSh2Y3B1LSZndDtrdm0sIGZhdWx0LSZndDtyZWZjb3VudGVkX3BhZ2UsIC4uLilgLiBJZiBgZmF1bHQtJmd0O3JlZmNvdW50ZWRfcGFnZWAgaXMgaW5kZWVkIE5VTEwsIGNhbGxpbmcgdGhpcyB3aWxsIGJlIGZpbmUgYW5kIGEgbm8tb3AuIEl0IHNob3VsZCBiZSBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGF0IGZ1bmN0aW9uLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgMTAwJSBjZXJ0YWluIG9mIHRoYXQgYW5kIG5vdCBqdXN0IGFzc3VtZSB0aGF0IGlzIHRoZSBjYXNlLiBTbyB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgYW5kIGRldGVybWluZSB0aGUgYWN0aW9ucyBpdCB3aWxsIHRha2Ugb24gYSBOVUxMIHBvaW50ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTI5MT12b2lkIGt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyOTItXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI5MzpzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI5NC1cdFx0XHRcdFx0ICAgIGJvb2wgdW51c2VkLCBib29sIGRpcnR5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzI0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byB3YWxrIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgdGhpbmtpbmcgbGlrZSBJJiMzOTttIGRlYnVnZ2luZyBhIHRyaWNreSBtZW1vcnkgaXNzdWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXBwZW5zIGhlcmUsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byByZWxlYXNpbmcgdGhlIGZhdWx0LWluIHBhZ2UuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBiYXNpY3MsIHdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGEgS1ZNIGd1ZXN0PyBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3Igb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGNhbGxlZCBjb25jdXJyZW50bHkuIExldCYjMzk7cyBzZWUgaG93IHRoZSByZWxlYXNlIHByb2Nlc3Mgd29ya3MgYXQgYSBsb3cgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyOTE9dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xMjkyLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjEyOTM6c3RhdGljIGlubGluZSB2b2lkIGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyOTQtXHRcdFx0XHRcdCAgICBib29sIHVudXNlZCwgYm9vbCBkaXJ0eSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgZnVuY3Rpb24uIEkmIzM5O3ZlIHNlZW4gdGhpcyBvbmUgYmVmb3JlLCBvZiBjb3Vyc2UsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgS1ZNJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKKipNeSBQZXJzcGVjdGl2ZSBvbiBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCoqCgpSaWdodCwgc28gdGhpcyBmdW5jdGlvbiBpcywgZXNzZW50aWFsbHksIGEgY2xlYW51cCByb3V0aW5lLiBJdCYjMzk7cyB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIEtWTSBncmFjZWZ1bGx5IHJlbGlucXVpc2hlcyBhIHBhZ2UgdGhhdCB3YXMgYnJvdWdodCBpbiBmb3IgYSBmYXVsdC4gVGhhdCAmIzM0O2ZhdWx0JiMzNDsgY291bGQgYmUgZHVlIHRvIGEgdmFyaWV0eSBvZiByZWFzb25zIOKAkyBhIGd1ZXN0IHdhbnRpbmcgdG8gYWNjZXNzIGEgcGFnZSB0aGF0IHdhc24mIzM5O3QgcmVzaWRlbnQsIGEgY29weS1vbi13cml0ZSBldmVudCwgb3IgcGVyaGFwcyBldmVuIGEgcGFnZSBiZWluZyByZWNsYWltZWQgZnJvbSBhIHN3YXAgZGV2aWNlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZSBhbHdheXM6IHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uPyBJcyBpdCBhIGhlYXZpbHkgdHJhZmZpY2tlZCBwYXJ0IG9mIHRoZSBjb2RlLCBvciBtb3JlIG9mIGFuIGVkZ2UgY2FzZT8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZWxlYXNlLiBJcyB0aGUgcGFnZSBzaW1wbHkgYmVpbmcgZnJlZWQgYmFjayB0byB0aGUgaG9zdCYjMzk7cyBwYWdlIGFsbG9jYXRvcj8gT3IgYXJlIHRoZXJlIG1vcmUgc3VidGxlIGNvbnNpZGVyYXRpb25zLCBsaWtlIGludmFsaWRhdGluZyBUTEIgZW50cmllcywgdXBkYXRpbmcgcGFnZSB0YWJsZXMsIG9yIGVuc3VyaW5nIGNvaGVyZW5jeSBhY3Jvc3MgZGlmZmVyZW50IENQVSBjb3Jlcz8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgcmVmZXIgdG8gdGhpcyBwYWdlIHRoYXQgKm11c3QqIGJlIHVwZGF0ZWQgb3IgaW52YWxpZGF0ZWQgYXMgcGFydCBvZiB0aGlzIHByb2Nlc3M/IFRoaXMgaXMgd2hlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBjYW4gYmVjb21lIGEgbmlnaHRtYXJlLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgaGVyZTogbG9ja3MsIGF0b21pYyBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIG90aGVyIGZ1bmN0aW9ucyBhY2Nlc3NpbmcgdGhlIHNhbWUgZGF0YS4KCkZyb20gYW4gb3B0aW1pemF0aW9uIHN0YW5kcG9pbnQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGVmZmljaWVuY3kgb2YgdGhpcyByZWxlYXNlIHByb2Nlc3MuIElzIGl0IG9wdGltaXplZCBmb3IgY29tbW9uIHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBiYXRjaGluZyBvcGVyYXRpb25zIG9yIGVtcGxveWluZyBtb3JlIGVmZmljaWVudCBkYXRhIHN0cnVjdHVyZXMgdG8gaW1wcm92ZSB0aHJvdWdocHV0PyBHaXZlbiBLVk0mIzM5O3MgY3JpdGljYWwgcm9sZSBpbiB2aXJ0dWFsaXphdGlvbiwgYW55IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGluIHRoaXMgZnVuY3Rpb24gY2FuIGhhdmUgYSBzaWduaWZpY2FudCBjYXNjYWRpbmcgZWZmZWN0IG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIHBhcnRpY3VsYXJseSBhbnkgY2FjaGUtcmVsYXRlZCBlZmZlY3RzLgoKRmluYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgcmVsZWFzZSBmYWlscz8gRG9lcyB0aGUgc3lzdGVtIGdyYWNlZnVsbHkgcmVjb3Zlciwgb3IgY291bGQgdGhpcyBsZWFkIHRvIGNyYXNoZXMgb3IgbWVtb3J5IGxlYWtzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmFpbHVyZSBtb2RlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYm90aCB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0LiBTZWN1cml0eSBpcyBwYXJhbW91bnQgc28gYW55IHBvdGVudGlhbCBmb3IgYSBkb3VibGUtZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiBpcyBhIHJlZCBmbGFnLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZWQgYW55IHN1Y2ggc2NlbmFyaW9zLiBPa2F5LCBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdHZvaWQga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4xMjkxOlx0dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcbjEyOTI6XHRcbjEyOTM6XHRzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4xMjk0Olx0XHRcdFx0XHRcdCAgICBib29sIHVudXNlZCwgYm9vbCBkaXJ0eSlcbjEyOTU6XHR7XG4xMjk2Olx0XHRsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZChcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spIHx8IHVudXNlZCk7XG4xMjk3Olx0XG4xMjk4Olx0XHRpZiAoIXBhZ2UpXG4xMjk5Olx0XHRcdHJldHVybjtcbjEzMDA6XHRcbjEzMDE6XHRcdC8qXG4xMzAyOlx0XHQgKiBJZiB0aGUgcGFnZSB0aGF0IEtWTSBnb3QgZnJvbSB0aGUgKnByaW1hcnkgTU1VKiBpcyB3cml0YWJsZSwgYW5kIEtWTVxuMTMwMzpcdFx0ICogaW5zdGFsbGVkIG9yIHJldXNlZCBhIFNQVEUsIG1hcmsgdGhlIHBhZ2UvZm9saW8gZGlydHkuICBOb3RlLCB0aGlzXG4xMzA0Olx0XHQgKiBtYXkgbWFyayBhIGZvbGlvIGRpcnR5IGV2ZW4gaWYgS1ZNIGNyZWF0ZWQgYSByZWFkLW9ubHkgU1BURSwgZS5nLiBpZlxuMTMwNTpcdFx0ICogdGhlIEdGTiBpcyB3cml0ZS1wcm90ZWN0ZWQuICBGb2xpb3MgY2FuJiMzOTt0IGJlIHNhZmVseSBtYXJrZWQgZGlydHlcbjEzMDY6XHRcdCAqIG91dHNpZGUgb2YgbW11X2xvY2sgYXMgZG9pbmcgc28gY291bGQgcmFjZSB3aXRoIHdyaXRlYmFjayBvbiB0aGVcbjEzMDc6XHRcdCAqIGZvbGlvLiAgQXMgYSByZXN1bHQsIEtWTSBjYW4mIzM5O3QgbWFyayBmb2xpb3MgZGlydHkgaW4gdGhlIGZhc3QgcGFnZVxuMTMwODpcdFx0ICogZmF1bHQgaGFuZGxlciwgYW5kIHNvIEtWTSBtdXN0IChzb21ld2hhdCkgc3BlY3VsYXRpdmVseSBtYXJrIHRoZVxuMTMwOTpcdFx0ICogZm9saW8gZGlydHkgaWYgS1ZNIGNvdWxkIGxvY2tsZXNzbHkgbWFrZSB0aGUgU1BURSB3cml0YWJsZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBOdWxsIFBvaW50ZXIgSXNzdWVzKioKCk9rYXksIHNvIEkgc2VlIGBpZiAoIXBhZ2UpIHJldHVybjtgIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNoIHNlZW1zIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBgcGFnZWAgbWlnaHQgYmUgTlVMTC4gR29vZCwgdGhhdCYjMzk7cyBhIGJhc2ljIGNoZWNrLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gYGt2bV90cmFuc2xhdGVfdm5jcmAgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24uCgpBaGEsIGBzdHJ1Y3Qgdm5jcl90bGIgKnZ0O2AgYW5kIHRoZSBjcnVjaWFsIGxpbmU6IGBzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7YC4gV2FpdCwgYHBhZ2VgICppcyogaW5pdGlhbGl6ZWQgdG8gTlVMTC4gVGhhdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UsIHByZXZlbnRpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gQnV0LCBJJiMzOTttIG5vdGljaW5nIGl0JiMzOTtzIG5vdCBhY3R1YWxseSBwYXNzZWQgdG8gYGt2bV9nbWVtX2dldF9wZm5gIGFueW1vcmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSByZW1vdmFsIG9mIHRoZSBjYWxsIGlzIG5vdCBhIHByb2JsZW0uCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyBgcGFnZWAgdXNlZCAqYW55d2hlcmUqIGVsc2UgZG93biB0aGUgbGluZT8gSWYgaXQgaXNuJiMzOTt0LCBhbmQgaXQmIzM5O3Mgbm90IGJlaW5nIGRlcmVmZXJlbmNlZCwgdGhhdCBudWxsIGluaXRpYWxpemF0aW9uIGlzIHNvbWV3aGF0IHJlZHVuZGFudCwgYnV0IGhhcm1sZXNzLiBCdXQsIGlmIGl0ICppcyogdXNlZCBmdXJ0aGVyIGRvd24gdGhlIGNvZGUgcGF0aCB3aXRob3V0IGJlaW5nIGFzc2lnbmVkIGEgdmFsaWQgcG9pbnRlciwgdGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgYW5kIHdlJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz02OD1pbnQga3ZtX3ZjcHVfaW5pdF9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTc4LVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5KVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6Nzk6XHRcdHZjcHUtXHUwMDNlYXJjaC5jdHh0LnZuY3JfYXJyYXkgPSAodTY0ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04MC1cdFx0XHRcdFx0XHRcdFx0ICAgIF9fR0ZQX1pFUk8pO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEyMjpcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtXHUwMDNlYXJjaC5jdHh0LnZuY3JfYXJyYXkpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTIzLVx0XHR2Y3B1LVx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5ID0gTlVMTDtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0yNTE9c3RhdGljIGludCB3YWxrX25lc3RlZF9zMl9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBpcGEsXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMjU2LVx0dW5zaWduZWQgaW50IGFkZHJfdG9wLCBhZGRyX2JvdHRvbTtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjI1NzpcdHU2NCBkZXNjLCBuZXdfZGVzYzsgIC8qIHBhZ2UgdGFibGUgZW50cnkgKi9cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTI1OC1cdGludCByZXQ7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTI3MD12b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMDMtICogICAodW5sZXNzIHdlIGFyZSBwcmVlbXB0ZWQpLCBzbyB0aGUgcmVzb2x1dGlvbiBvZiBhIHRyYW5zbGF0aW9uIGZhdWx0XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzA0OiAqICAgbXVzdCBnbyB2aWEgYSByZXF1ZXN0IHRoYXQgd2lsbCBtYXAgdGhlIFZOQ1IgcGFnZSBpbiB0aGUgZml4bWFwLlxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMwNS0gKiAgIHZjcHVfbG9hZCgpIG1pZ2h0IGFzIHdlbGwgdXNlIHRoZSBzYW1lIG1lY2hhbmlzbS5cbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzE0LSAqIC0gT24gYW55IFRMQkkgZm9yIHRoZSBFTDJcdTAwMjYwIHRyYW5zbGF0aW9uIHJlZ2ltZSwgd2UgbXVzdCBmaW5kIGFueSBUTEIgdGhhdFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMxNTogKiAgIGludGVyc2VjdHMgd2l0aCB0aGUgVExCSSByZXF1ZXN0LCBpbnZhbGlkYXRlIGl0LCBhbmQgdW5tYXAgdGhlIHBhZ2VcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMTYtICogICBmcm9tIHRoZSBmaXhtYXAuIEJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgdmNwdS1wcml2YXRlIFRMQnMsXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMyMi0gKiAgIGxvb2tpbmcgYXQgdGhlIElQQSBpbnN0ZWFkLiBUaGUgZnVubnkgcGFydCBpcyB0aGF0IHRoZXJlIG1heSBub3QgYmUgYVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMyMzogKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24mIzM5O3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1RcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMjQtICogICBpbnN0cnVjdGlvbnMuXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM1Nz1zdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM2Mi1cdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzYzOlx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM2NC1cdHU2NCB2YSwgcGZuLCBnZm47XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQwOS1cdFx0cGZuID0gX19rdm1fZmF1bHRpbl9wZm4obWVtc2xvdCwgZ2ZuLCB3cml0ZV9mYXVsdCA/IEZPTExfV1JJVEUgOiAwLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQxMDpcdFx0XHRcdFx0XHUwMDI2d3JpdGFibGUsIFx1MDAyNnBhZ2UpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQxMS1cdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSB8fCAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICF3cml0YWJsZSkpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQyMy1cdFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5KHZjcHUtXHUwMDNla3ZtLCBtbXVfc2VxKSkge1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQyNDpcdFx0XHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cdTAwM2Vrdm0sIHBhZ2UsIHRydWUsIGZhbHNlKTtcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MjUtXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQzMy1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BUF9MMV9WTkNSX0VMMiwgdmNwdSk7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNDM0Olx0XHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cdTAwM2Vrdm0sIHBhZ2UsIGZhbHNlLCB2dC1cdTAwM2V3ci5wdyk7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDM1LVx0fVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MzctXHRpZiAodnQtXHUwMDNld3IucHcpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNDM4Olx0XHRtYXJrX3BhZ2VfZGlydHkodmNwdS1cdTAwM2Vrdm0sIGdmbik7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDM5LVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE2MDQ9dTY0IGxpbWl0X252X2lkX3JlZyhzdHJ1Y3Qga3ZtICprdm0sIHUzMiByZWcsIHU2NCB2YWwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTY2MS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2NjI6XHRcdC8qIERpc2FsbG93IHVuc3VwcG9ydGVkIFMyIHBhZ2Ugc2l6ZXMgKi9cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2NjMtXHRcdHN3aXRjaCAoUEFHRV9TSVpFKSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTY3NS1cdFx0LypcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2NzY6XHRcdCAqIFNpbmNlIHdlIGNhbiYjMzk7dCBzdXBwb3J0IGEgZ3Vlc3QgUzIgcGFnZSBzaXplIHNtYWxsZXJcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2Nzc6XHRcdCAqIHRoYW4gdGhlIGhvc3QmIzM5O3Mgb3duIHBhZ2Ugc2l6ZSAoZHVlIHRvIEtWTSBvbmx5XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNjc4Olx0XHQgKiBwb3B1bGF0aW5nIGl0cyBvd24gUzIgdXNpbmcgdGhlIGtlcm5lbCYjMzk7cyBwYWdlXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNjc5LVx0XHQgKiBzaXplKSwgYWR2ZXJ0aXNlIHRoZSBsaW1pdGF0aW9uIHVzaW5nIEZFQVRfR1RHLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2MwoJCQkJCQkJb3V0cHV0OiAyODMKCQkJCQkJCXRob3VnaHRzOiA5NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gUmlzayBvZiBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYHBhZ2VgIGlzIHN0aWxsIGluIHVzZSB3aXRoaW4gYGt2bV90cmFuc2xhdGVfdm5jcmAgd2hlbiBpdCYjMzk7cyAqbm90KiBhIGdtZW0gY2FzZS4gSXQmIzM5O3MgcHJvcGVybHkgaGFuZGxlZCwgdGhvdWdoLCB3aXRoIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgIGhhbmRsaW5nIHRoZSByZWxlYXNlIHdoZW4gYHBhZ2VgIGlzIHZhbGlkLiBJZiBpdCAqaXMqIGdtZW0sIGBwYWdlYCBpcyBOVUxMLCBhbmQgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgY29ycmVjdGx5IGhhbmRsZXMgdGhlIE5VTEwgY2FzZS4gVGhhdCYjMzk7cyBmaW5lLgoKVGhlbiBJIGNoZWNrZWQgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBhbmQgc2F3IHRoZSBhZGRpdGlvbiBvZiBgbW11X3NlcWAgYW5kIGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gLiBUaGlzIGlzIGNsYXNzaWMgS1ZNIGNvbmN1cnJlbmN5IGhhbmRsaW5nIGZvciBSTVAgZmF1bHRzIOKAkyBpdCYjMzk7cyBhbGwgYWJvdXQgY2hlY2tpbmcgaWYgdGhlIE1NVSBzZXF1ZW5jZSBoYXMgY2hhbmdlZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMuIE5vIGNvbmNlcm5zIHRoZXJlOyBpdCYjMzk7cyByb2J1c3QgYW5kIHN0YW5kYXJkIHByYWN0aWNlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpOZXh0LCBJIGRyaWxsZWQgaW50byBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgYW5kIGBrdm1fZ21lbV9nZXRfcGZuYC4gSGVyZSYjMzk7cyB0aGUgY29yZSBjaGFuZ2UuIFRoZSBmdW5jdGlvbiAqdXNlZCogdG8gcmV0dXJuIGEgYHN0cnVjdCBwYWdlYCBwb2ludGVyIHRvIHRoZSBjYWxsZXIsIGJ1dCBub3cgaXQgZHJvcHMgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbW1lZGlhdGVseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIHRoZSBjYWxsZXIgKmRvZXNuJiMzOTt0KiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBwYWdlIGFueW1vcmUuIElzIHRoaXMgc2FmZT8gSSB0aG91Z2h0IHRocm91Z2ggaXQsIGFuZCBJIGJlbGlldmUgaXQgaXMuIFRoZSBwYWdlIGlzIHBpbm5lZCBiZWNhdXNlIG9mIHRoZSBgZ3Vlc3RfbWVtZmRgIGZpbGUsIGFuZCBLVk0gaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhhdCBmaWxlLiBFdmVuIGlmIHRoZXJlJiMzOTtzIGEgYnVnIGhlcmUgKGxpa2UgYSB1c2UtYWZ0ZXItZnJlZSksIGl0JiMzOTtzIGEgVUFGLCBhbmQgS0FTQU4gc2hvdWxkIGVhc2lseSBkZXRlY3QgdGhhdC4gQ3J1Y2lhbGx5LCBpdCYjMzk7cyAqbm90KiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KClNvLCB0aGUgcGF0Y2ggaXMgcmVhbGx5IGp1c3QgcmVmYWN0b3JpbmcgYW5kIGNvbmN1cnJlbmN5IGZpeGVzLiBUaGUgdXBkYXRlcyBhY3Jvc3MgdGhlIGNvZGUgdGhhdCByZW1vdmVkIGBwYWdlYCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGNhbGxzIHNpbXBseSByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gYGt2bV9nbWVtX2dldF9wZm5gLiBUaGUgYWRkaXRpb24gb2YgdGhlIE1NVSBzZXF1ZW5jZSBjaGVja3MgaW4gdGhlIFJNUCBmYXVsdCBoYW5kbGVyIGFkZHJlc3NlcyBhIGtub3duIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9uJiMzOTt0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGFuZCBkb24mIzM5O3QgY2hhbmdlIGhvdyBib3VuZHMgY2hlY2tpbmcgd29ya3MgaW4gYSB3YXkgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgd291bGQgcHJlc2VudCBhcyBVQUZzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgaXNzdWVzIGFyZSB2ZXJ5IGxpa2VseSB0byBiZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQvb3IgTE9DS0RFUC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcmlzaywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gd3JpdGUgdGhhdCBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fZ2V0X3BmbmAgdG8gbm8gbG9uZ2VyIHJldHVybiBhIGBzdHJ1Y3QgcGFnZWAgcG9pbnRlciB0byB0aGUgY2FsbGVyLCBpbnN0ZWFkIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgYWNyb3NzIGFybTY0IGFuZCB4ODYgS1ZNIGNvZGUgdG8gcmVtb3ZlIHRoZSBgcGFnZWAgYXJndW1lbnQgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCBjYWxscyAoZS5nLiwgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCkuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBNTVUgc2VxdWVuY2UgY2hlY2tpbmcgKGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gKSBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSTVAgZmF1bHRzLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fZ2V0X3BmbmAgdG8gbm8gbG9uZ2VyIHJldHVybiBhIGBzdHJ1Y3QgcGFnZWAgcG9pbnRlciB0byB0aGUgY2FsbGVyLCBpbnN0ZWFkIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgYWNyb3NzIGFybTY0IGFuZCB4ODYgS1ZNIGNvZGUgdG8gcmVtb3ZlIHRoZSBgcGFnZWAgYXJndW1lbnQgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCBjYWxscyAoZS5nLiwgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCkuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBNTVUgc2VxdWVuY2UgY2hlY2tpbmcgKGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gKSBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSTVAgZmF1bHRzLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjAwLjAyNTk1Nzg4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDgyMDE1NzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fU1dfUFJPVEVDVEVEX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dtZW1fZ2V0X3BmblwiLFxuICAgIFwic2V2X2hhbmRsZV9ybXBfZmF1bHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBrdm1fZ21lbV9nZXRfcGZuYCB0byBubyBsb25nZXIgcmV0dXJuIGEgYHN0cnVjdCBwYWdlYCBwb2ludGVyIHRvIHRoZSBjYWxsZXIsIGluc3RlYWQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbW1lZGlhdGVseSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBJdCB1cGRhdGVzIHZhcmlvdXMgY2FsbGVycyBhY3Jvc3MgYXJtNjQgYW5kIHg4NiBLVk0gY29kZSB0byByZW1vdmUgdGhlIGBwYWdlYCBhcmd1bWVudCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGNhbGxzIChlLmcuLCBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCwgYGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW5gKS4gQWRkaXRpb25hbGx5LCBpdCBhZGRzIE1NVSBzZXF1ZW5jZSBjaGVja2luZyAoYG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbmApIGluIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIFJNUCBmYXVsdHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlZmFjdG9yaW5nIG9mIHBhZ2UgcmVmZXJlbmNlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGZpeGVzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRvIG5vdCBhZGQgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG8gbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgcHJlbWF0dXJlIHBhZ2UgZnJlZWluZyBvciByYWNlIGNvbmRpdGlvbnMpIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDowMC4wMjU5NjM2NTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTM0Mzk2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YzdkNDA5MDcxZDMxMGJjZjIyYTEzMDgyNGQyNjg1ZGFlMDI0MzE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDIzOjQ5OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5pbmRleCA2Yzk0MWFhYTEwYzYzLi5kNWFhMTk3ZDJjYmZkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5AQCAtMTYxMyw3ICsxNjEzLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4gXFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XFxuIFxcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC1cXHUwMDNldmNwdS1cXHUwMDNlYXJjaC5od19tbXUtXFx1MDAzZXBndDtcXG4gXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gczJmZC1cXHUwMDNldmNwdS1cXHUwMDNla3ZtO1xcbiBcXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuQEAgLTE2NDEsNyArMTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXFxuIFxcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXFxuIFxcdHNtcF9ybWIoKTtcXG4gXFxuLVxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVxcdTAwM2VtZW1zbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKTtcXG4rXFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXFx1MDAzZW1lbXNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgTlVMTCk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC1cXHUwMDNldmNwdSwgczJmZC1cXHUwMDNlZmF1bHRfaXBhLCBQQUdFX1NJWkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7XFxuQEAgLTE2ODEsNyArMTY4MCw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXFxuIFxcdH1cXG4gXFxuIG91dF91bmxvY2s6XFxuLVxcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsICEhcmV0LCBwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKTtcXG4gXFx0a3ZtX2ZhdWx0X3VubG9jayhrdm0pO1xcbiBcXG4gXFx0aWYgKChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSBcXHUwMDI2XFx1MDAyNiAhcmV0KVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuaW5kZXggZmI1NGY2ZGFkOTk1Yy4uNDM1MjNiYjE3NjIxYSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuQEAgLTEzNjAsNyArMTM2MCw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFx0Ym9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4gXFx0c3RydWN0IHZuY3JfdGxiICp2dDtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gXFx0dTY0IHZhLCBwZm4sIGdmbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTE0MTEsNyArMTQxMSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFx0XFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSB8fCAod3JpdGVfZmF1bHQgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKTtcXG4rXFx0XFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgTlVMTCk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgdnQtXFx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbmluZGV4IGM1MTllOGU4ZDY0NmYuLjEyOWQ0MDMzMDgwNTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNDYwNCw3ICs0NjA0LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR9XFxuIFxcbiBcXHRyID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIGZhdWx0LVxcdTAwM2VzbG90LCBmYXVsdC1cXHUwMDNlZ2ZuLCBcXHUwMDI2ZmF1bHQtXFx1MDAzZXBmbixcXG4tXFx0XFx0XFx0ICAgICBcXHUwMDI2ZmF1bHQtXFx1MDAzZXJlZmNvdW50ZWRfcGFnZSwgXFx1MDAyNm1heF9vcmRlcik7XFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNm1heF9vcmRlcik7XFxuIFxcdGlmIChyKSB7XFxuIFxcdFxcdGt2bV9tbXVfcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCBmYXVsdCk7XFxuIFxcdFxcdHJldHVybiByO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IGZjYjQxZGZkZTRjMDIuLjBjOTFjOTA0NTczY2MgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtNDAxNiw3ICs0MDE2LDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFx0a3ZtX3Bmbl90IHBmbjtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnN2bS1cXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcXG5AQCAtNDA2MCw3ICs0MDU5LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbiBcXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxcbiBcXHQgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKSlcXG4rXFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIE5VTEwpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbkBAIC00MDc2LDggKzQwNzUsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuIFxcdGVsc2VcXG4gXFx0XFx0c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XFxuIFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tXFxuLVxcdGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTUwMDMsNyArNTAwMCw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxcbiBcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcdGludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuIFxcdGJvb2wgYXNzaWduZWQ7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuIFxcdGdmbl90IGdmbjtcXG5AQCAtNTAzMCw3ICs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBcXHUwMDI2b3JkZXIpO1xcbitcXHRtbXVfc2VxID0ga3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XFxuK1xcdHNtcF9ybWIoKTtcXG4rXFxuK1xcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZvcmRlcik7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYmFja2luZyBwYWdlIGZvciBwcml2YXRlIEdQQSAweCVsbHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICBncGEpO1xcbkBAIC01MDM5LDkgKzUwMzksMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuIFxcbiBcXHRyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXFx1MDAyNmFzc2lnbmVkLCBcXHUwMDI2cm1wX2xldmVsKTtcXG4gXFx0aWYgKHJldCB8fCAhYXNzaWduZWQpIHtcXG4tXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICBncGEsIHBmbiwgcmV0KTtcXG4tXFx0XFx0Z290byBvdXRfbm9fdHJhY2U7XFxuK1xcdFxcdGd1YXJkKHJlYWRfbG9jaykoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXG4rXFx0XFx0aWYgKCFtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxcbitcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGdwYSwgcGZuLCByZXQpO1xcbitcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC01MDY5LDI2ICs1MDczLDMxIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxcbiBcXHRpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCdzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmVcXG4tXFx0XFx0ICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZFxcbi1cXHRcXHQgKiBpdHNlbGYuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcXHUwMDI2YXNzaWduZWQsIFxcdTAwMjZybXBfbGV2ZWwpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBhc3NpZ25lZCBcXHUwMDI2XFx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXFxuK1xcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuK1xcdFxcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlNFVjogVW5hYmxlIHRvIHNwbGl0IFJNUCBlbnRyeSBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IHJldCAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgIGdwYSwgcGZuLCByZXQpO1xcbitcXHRcXHRyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxcbitcXHRcXHRcXHQgKiBoYXZlIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzXFxuK1xcdFxcdFxcdCAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCdzIG5vdCBhc3NpZ25lZCwgdGhlblxcbitcXHRcXHRcXHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcXG4rXFx0XFx0XFx0ICogdGhpcyBwYWdlIHNoYXJlZC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFxcdTAwMjZhc3NpZ25lZCwgXFx1MDAyNnJtcF9sZXZlbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICgoYXNzaWduZWQgXFx1MDAyNlxcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKSB8fCAhYXNzaWduZWQpKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlNFVjogVW5hYmxlIHRvIHNwbGl0IFJNUCBlbnRyeSBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IHJldCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGdwYSwgcGZuLCByZXQpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4gKyBQVFJTX1BFUl9QTUQpO1xcbiBvdXQ6XFxuIFxcdHRyYWNlX2t2bV9ybXBfZmF1bHQodmNwdSwgZ3BhLCBwZm4sIGVycm9yX2NvZGUsIHJtcF9sZXZlbCwgcmV0KTtcXG4tb3V0X25vX3RyYWNlOlxcbi1cXHRrdm1fcmVsZWFzZV9wYWdlX3VudXNlZChwYWdlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgaXNfcGZuX3JhbmdlX3NoYXJlZChrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTI1ODYsMTMgKzI1ODYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tXFx0XFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXFxuLVxcdFxcdCAgICAgaW50ICptYXhfb3JkZXIpO1xcbitcXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcXG4tXFx0XFx0XFx0XFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcXG4tXFx0XFx0XFx0XFx0ICAgaW50ICptYXhfb3JkZXIpXFxuK1xcdFxcdFxcdFxcdCAgIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcXG4ge1xcbiBcXHRLVk1fQlVHX09OKDEsIGt2bSk7XFxuIFxcdHJldHVybiAtRUlPO1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbmluZGV4IGI1OTY0ODZkMTg0Y2EuLjU4OTc2MjE0MGMzZWYgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5AQCAtNzUxLDggKzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gfVxcbiBcXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi1cXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcXG4tXFx0XFx0ICAgICBpbnQgKm1heF9vcmRlcilcXG4rXFx0XFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcXG4ge1xcbiBcXHRwZ29mZl90IGluZGV4ID0ga3ZtX2dtZW1fZ2V0X2luZGV4KHNsb3QsIGdmbik7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuQEAgLTc4MCwxMSArNzc5LDcgQEAgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiAjZW5kaWZcXG4gXFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcbi1cXHRpZiAoIXIpXFxuLVxcdFxcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFxuIFxcdHJldHVybiByO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjAxLjY0MDEwNTQzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2MjMwNTIyNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9nZXRfcGZuXCIsXG4gICAgXCJzZXZfaGFuZGxlX3JtcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YzdkNDA5MDcxZDMxMGJjZjIyYTEzMDgyNGQyNjg1ZGFlMDI0MzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjM6NDk6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzLi5kNWFhMTk3ZDJjYmZkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5AQCAtMTYxMyw3ICsxNjEzLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90ID0gS1ZNX1BHVEFCTEVfUFJPVF9SO1xuIFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QgPSBzMmZkLVx1MDAzZXZjcHUtXHUwMDNlYXJjaC5od19tbXUtXHUwMDNlcGd0O1xuIFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBzMmZkLVx1MDAzZXZjcHUtXHUwMDNla3ZtO1xuIFx0dm9pZCAqbWVtY2FjaGUgPSBOVUxMO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbkBAIC0xNjQxLDcgKzE2NDAsNyBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbitcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC1cdTAwM2V2Y3B1LCBzMmZkLVx1MDAzZWZhdWx0X2lwYSwgUEFHRV9TSVpFLFxuIFx0XHRcdFx0XHQgICAgICB3cml0ZV9mYXVsdCwgZXhlY19mYXVsdCwgZmFsc2UpO1xuQEAgLTE2ODEsNyArMTY4MCw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4gXHR9XG4gXG4gb3V0X3VubG9jazpcbi1cdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsICEhcmV0LCBwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpO1xuIFx0a3ZtX2ZhdWx0X3VubG9jayhrdm0pO1xuIFxuIFx0aWYgKChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpIFx1MDAyNlx1MDAyNiAhcmV0KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbmluZGV4IGZiNTRmNmRhZDk5NWMuLjQzNTIzYmIxNzYyMWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC0xMzYwLDcgKzEzNjAsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRib29sIHdyaXRlX2ZhdWx0LCB3cml0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHU2NCB2YSwgcGZuLCBnZm47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE0MTEsNyArMTQxMSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSB8fCAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICF3cml0YWJsZSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4rXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIHZ0LVx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCBjNTE5ZThlOGQ2NDZmLi4xMjlkNDAzMzA4MDUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTQ2MDQsNyArNDYwNCw3IEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiBcbiBcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIFx1MDAyNmZhdWx0LVx1MDAzZXBmbixcbi1cdFx0XHQgICAgIFx1MDAyNmZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZSwgXHUwMDI2bWF4X29yZGVyKTtcbitcdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4gXHRpZiAocikge1xuIFx0XHRrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpO1xuIFx0XHRyZXR1cm4gcjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggZmNiNDFkZmRlNGMwMi4uMGM5MWM5MDQ1NzNjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MDE2LDcgKzQwMTYsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG5AQCAtNDA2MCw3ICs0MDU5LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG4gXHQgKi9cbi1cdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4rXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbkBAIC00MDc2LDggKzQwNzUsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRlbHNlXG4gXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuIH1cbiBcbiAvKlxuQEAgLTUwMDMsNyArNTAwMCw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0aW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0Ym9vbCBhc3NpZ25lZDtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXHRnZm5fdCBnZm47XG5AQCAtNTAzMCw3ICs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIFx1MDAyNm9yZGVyKTtcbitcdG1tdV9zZXEgPSBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0c21wX3JtYigpO1xuK1xuK1x0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZvcmRlcik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcblwiLFxuIFx0XHRcdFx0ICAgIGdwYSk7XG5AQCAtNTAzOSw5ICs1MDM5LDEzIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFxuIFx0cmV0ID0gc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpO1xuIFx0aWYgKHJldCB8fCAhYXNzaWduZWQpIHtcbi1cdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4tXHRcdGdvdG8gb3V0X25vX3RyYWNlO1xuK1x0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRcdGlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cIixcbitcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuK1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTUwNjksMjYgKzUwNzMsMzEgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heSBoYXZlXG4tXHRcdCAqIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzIGFscmVhZHkgcmVzb2x2ZWRcbi1cdFx0ICogaXRzZWxmLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuK1x0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4rXHRcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4rXHRcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxuK1x0XHRcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcbitcdFx0XHQgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQncyBub3QgYXNzaWduZWQsIHRoZW5cbitcdFx0XHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcbitcdFx0XHQgKiB0aGlzIHBhZ2Ugc2hhcmVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAoKGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpXG4rXHRcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiArIFBUUlNfUEVSX1BNRCk7XG4gb3V0OlxuIFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xuLW91dF9ub190cmFjZTpcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODYsMTMgKzI1ODYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpO1xuK1x0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLVx0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0XHRcdCAgIGludCAqbWF4X29yZGVyKVxuK1x0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuIHtcbiBcdEtWTV9CVUdfT04oMSwga3ZtKTtcbiBcdHJldHVybiAtRUlPO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBiNTk2NDg2ZDE4NGNhLi41ODk3NjIxNDBjM2VmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc1MSw4ICs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gfVxuIFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpXG4rXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0cGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC03ODAsMTEgKzc3OSw3IEBAIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiAjZW5kaWZcbiBcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRpZiAoIXIpXG4tXHRcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4tXHRlbHNlXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTA6MDEuNjQwMTA2NTYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3MTkyMDcxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBrdm1fZ21lbV9nZXRfcGZuIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gYGt2bV9nbWVtX2dldF9wZm5gLiBJdCdzIHJlbW92aW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgY2xhc3NpYyBpbmRpY2F0b3Igb2YgYSByZWZlcmVuY2UgY291bnQgY2hhbmdlLiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgdXNlZCB0byB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBgc3RydWN0IHBhZ2VgIChmb2xpbywgaW4gbW9kZXJuIHRlcm1zKSBhbmQgcmVsZWFzZSBpdCBsYXRlciB1c2luZyBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCwgYGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW5gLCBvciBga3ZtX3JlbGVhc2VfcGFnZV91bnVzZWRgLiBOb3csIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBgZm9saW9fcHV0KClgIGRpcmVjdGx5IGFmdGVyIGBmb2xpb191bmxvY2soKWAsIHJpZ2h0IGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGEgdGhvcm91Z2ggY2hlY2sgZm9yIHJlYWNoYWJpbGl0eSBhbmQgZnV6emFiaWxpdHkuIFRoaXMgaXMgY29yZSBndWVzdF9tZW1mZCBmdW5jdGlvbmFsaXR5LCBkaXJlY3RseSBpbnZvbHZlZCBpbiBjb25maWRlbnRpYWwgY29tcHV0aW5nIGNvbnRleHRzIGxpa2UgU0VWLVNOUCwgVERYLCBhbmQgQVJNIENDQS4gVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIGZvciBwcml2YXRlIG1lbW9yeSwgc28gdGhlIGltcGFjdCBpcyBwb3RlbnRpYWxseSBoaWdoLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGhvdyB0aGUgZm9saW8ncyByZWZlcmVuY2UgY291bnQgaXMgbWFuYWdlZC4gUHJldmlvdXNseSwgdGhlIGNhbGxlciBoZWxkIGEgcmVmZXJlbmNlLCB3aGljaCBnYXZlIHRoZW0gY29udHJvbCBvdmVyIHRoZSBwYWdlJ3MgbGlmZWN5Y2xlLiBOb3csIGBrdm1fZ21lbV9nZXRfcGZuYCAqaW1tZWRpYXRlbHkqIHJlbGVhc2VzIHRoYXQgcmVmZXJlbmNlLiBUaGlzIGJlZ3MgdGhlIHF1ZXN0aW9uOiBob3cgZG9lcyB0aGUgY2FsbGVyIHNhZmVseSAqdXNlKiB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGl0IGdldHMgYmFjaz8gSWYgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGRyb3BzIHRoZSByZWZlcmVuY2UsIHRoZXJlIGhhcyB0byBiZSBzb21lIG90aGVyIG1lY2hhbmlzbSB0byBlbnN1cmUgdGhlIGJhY2tpbmcgbWVtb3J5IGRvZXNuJ3QgZ2V0IHByZW1hdHVyZWx5IGZyZWVkIHdoaWxlIHRoZSBQRk4gaXMgaW4gdXNlLlxuXG5BaCwgcmlnaHQsIHRoZSBtZW1vcnkgaXMgcGlubmVkIG9yIG1hbmFnZWQgYnkgZ3Vlc3RfbWVtZmQuIFRoZSByZWZlcmVuY2UgbWlnaHQgYmUgaW1wbGljaXRseSBoZWxkIGJ5IHRoZSBmaWxlIG1hcHBpbmcgaXRzZWxmLCBvciB0aGUgUEZOIG1pZ2h0IGp1c3QgYmUgdXNlZCB0byBwb3B1bGF0ZSB0aGUgUk1QL0VQVCAob3IgZXF1aXZhbGVudCkgdGFibGVzLCBhbmQgdGhlIHBhZ2UncyBsaWZldGltZSBpcyBib3VuZCB0byB0aGUgZ3Vlc3RfbWVtZmQgZmlsZSdzLiBJbiB0aGUgY2FzZSBvZiBndWVzdF9tZW1mZCwgdGhvc2UgcGFnZXMgYXJlIHVuZXZpY3RhYmxlIGFuZCBub3QgbWFwcGVkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB0aGV5IGFyZSBvbmx5IGZyZWVkIHdoZW4gdGhlIGd1ZXN0X21lbWZkIGZpbGUgaXMgdHJ1bmNhdGVkIG9yIGNsb3NlZC4gVHJ1bmNhdGlvbiBkb2VzIHRyaWdnZXIgTU1VIG5vdGlmaWVycyAob3IgdGhlIGBrdm1fZ21lbV9pbnZhbGlkYXRlX2JlZ2luL2VuZGAgZXF1aXZhbGVudHMgaW4gZ3Vlc3RfbWVtZmQpIHRvIHphcCB0aGUgU1BURXMuIFNvIGhvbGRpbmcgYSByZWZlcmVuY2UgKmR1cmluZyogdGhlIHBhZ2UgZmF1bHQgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeSBpZiB0aGV5J3JlIHJlbHlpbmcgb24gdGhlIE1NVSBsb2NrIGFuZCBzZXF1ZW5jZSBjb3VudGVyIGJlaW5nIHVzZWQgY29ycmVjdGx5LlxuXG5MZXQncyBsb29rIGF0IGEgY29uY3JldGUgZXhhbXBsZSB0byBzZWUgaG93IHRoaXMgaXMgdXNlZC4gSW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBzcGVjaWZpY2FsbHkgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgSSBzZWUgdGhleSd2ZSBhZGRlZCBgbW11X3NlcWAgY2hlY2tpbmcuXG5cbmBgYGNcbkBAIC01MDMwLDcgKzUwMjcsMTAgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgXHUwMDI2b3JkZXIpO1xuK1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRzbXBfcm1iKCk7XG4rXG4rXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNm9yZGVyKTtcbmBgYFxuXG5UaGlzIGNvbmZpcm1zIHRoYXQgdGhlIHBhdGNoIGltcGFjdHMgUk1QIGZhdWx0cyB3aXRoaW4gU0VWLWVuYWJsZWQgZ3Vlc3RzLCBhbmQgdGhlcmUncyBhIHN0cm9uZyBsaWtlbGlob29kIGl0J3MgcmVseWluZyBvbiB0aGUgTU1VJ3Mgc2VxdWVuY2UgbnVtYmVyIHRvIGhhbmRsZSBhbnkgcmFjZSBjb25kaXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBLVk1fR1VFU1RfTUVNRkRgIGlzIGVuYWJsZWQgaW4gYW55IG9mIG91ciBzeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIG9yIGlmIGl0J3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVhc2lseSBlbmFibGVkIGZvciB0ZXN0aW5nLiBTaW5jZSBpdCdzIHR5cGljYWxseSB0aWVkIHRvIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgYEtWTV9BTURfU0VWYCwgb3IgYEtWTV9JTlRFTF9URFhgLCBpdCBzaG91bGRuJ3QgYmUgdG9vIGRpZmZpY3VsdCB0byBnZXQgaXQgZW5hYmxlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGluIHRoZSBLY29uZmlnIHRvIGNvbmZpcm0gaG93IHRoZXNlIGZsYWdzIGludGVyYWN0LiBUaGlzIG5lZWRzIHRvIGJlIGZ1enplZCB2ZXJ5IHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDoxNC4zNTkzMTcxMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyOTY5NjI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0dVRVNUX01FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjE2LjQ4OTAxODM5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTg0NzM2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fR1VFU1RfTUVNRkQgU2VsZWN0aW9uKipcblxuQWxyaWdodCwgbXkgaW50ZXJuYWwgcmFkYXIgaXMgcGluZ2luZyBvbiBgS1ZNX0dVRVNUX01FTUZEYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIHdpdGhpbiB3aGljaCB0aGlzIGlzIGJlaW5nIHNlbGVjdGVkLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIHBvaW50cyBvZiB1c2UuIFdoYXQgYXJlIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGNvZGUgcGF0aHMgdGhhdCBhcmUgbWFraW5nIHRoaXMgc3BlY2lmaWMgc2VsZWN0aW9uPyBJcyBpdCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWcgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSBvciBhIGtlcm5lbCBtb2R1bGUgbG9hZGVkIHN0YXRlLCBhIGZlYXR1cmUgZW5hYmxlZCBieSBzb21lIHNwZWNpZmljIHNldHRpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBzZWxlY3Rpb24gcHJvY2VzcyBpdHNlbGYgaXMga2V5IGhlcmUuIEknbSBhZnRlciB0aGUgXCJ3aHksXCIgbm90IGp1c3QgdGhlIFwid2hhdC5cIiBUaGlzIGlzIGxpa2VseSB0aGUgYmVzdCBpbml0aWFsIGFwcHJvYWNoIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBZnRlciB0aGF0IEkgY2FuIHRoZW4gdW5kZXJzdGFuZCB3aGF0IHRoaXMgaXMgdGllZCB0byBhbmQgd2hlcmUgaXQgbWlnaHQgYmUgdXNlZnVsLCBvciB3aGVyZSBhbiBpc3N1ZSBtaWdodCBvY2N1ci4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHVwc3RyZWFtIGNvZGUsIGFuZCB0aGVuIGl0cyBkaXJlY3QgZGVwZW5kZW5jaWVzIGFuZCBpdHMgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIHNvIEkgY2FuIGRldGVybWluZSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgZm9yIG1heGltdW0gdmFsdWUgaW4gdGhpcyBkZWVwIGRpdmUuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDoyMC4wMDc0OTQ2MDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODcyMTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzgtXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNDktXFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTA6MjEuNzQ2MjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwOTg1MTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0aW5nIHRoZSBgZ3Vlc3RfbWVtZmRgIGZ1bmN0aW9uYWxpdHksIGFzIGl0J3MgYmVpbmcgc2VsZWN0ZWQgZm9yIGJvdGggQVJNNjQgd2l0aCBLVk0gYW5kIHg4NlxcXzY0IHdpdGggS1ZNXFxfWDg2LiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhlIGNvcmUgY29uY2VwdCBvZiB1c2luZyBgZ3Vlc3RfbWVtZmRgIGlzIHByZXNlbnQgYW5kIGFjY2Vzc2libGUgd2l0aGluIHRoZSB0YXJnZXQgc3lzdGVtcy5cblxuVGhlIGNoYW5nZXMgYXJlIGRpc3RyaWJ1dGVkIGFjcm9zcyBzZXZlcmFsIGtleSBLVk0gbW9kdWxlcy4gVGhlIGZhY3QgdGhhdCBpdCB0b3VjaGVzIGBnbWVtX2Fib3J0YCBpbiBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBga3ZtX3RyYW5zbGF0ZV92bmNyYCBpbiBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgLCBhbmQgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIG1ha2VzIHNlbnNlLiBUaGVzZSBhcmUgYWxsIGludGltYXRlbHkgaW52b2x2ZWQgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdHJhbnNsYXRpb24sIHdoaWNoIHdvdWxkIGJlIHRoZSBleHBlY3RlZCBhcmVhcyBmb3IgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIGBndWVzdF9tZW1mZGAuIFRoZSBwcmVzZW5jZSBvZiBtb2RpZmljYXRpb25zIHRvIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGFuZCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBzdWdnZXN0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGVudmlyb25tZW50cywgcGVyaGFwcyBpbiBob3cgYGd1ZXN0X21lbWZkYCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgcHJvdGVjdGlvbiBmZWF0dXJlcy5cblxuTm93LCBob2xkIG9uLiBga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtYCBpcyBpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZnVuY3Rpb24gYmV0dGVyIHRvIGRldGVybWluZSB3aGF0IHRob3NlIGNoYW5nZXMgZW50YWlsIGFuZCB0byBjb25uZWN0IHRoZSBtZW1vcnkgZmF1bHQgYXNwZWN0IHRvIHRoZSBndWVzdCBtZW1mZC4gTGV0J3MgZGVsdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgdGhlIHBhdGNoIGFsdGVycyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDoyNi44NTYwNzY3MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNDI1NDc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTg5PXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTk1LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5NjpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTk3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjE5PXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyNC1cXHRpZiAoZmF1bHQtXFx1MDAzZWlzX3ByaXZhdGUgfHwga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGZhdWx0LVxcdTAwM2VzbG90KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2MjU6XFx0XFx0cmV0dXJuIGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbSh2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDoyOS4wODAzMzU0NzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUxMDQ1MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIGxvb2tzIGxpa2Ugd2UndmUgc3R1bWJsZWQgb250byBzb21ldGhpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgd2l0aGluIHRoZSBjb3JlIEtWTSBNTVUgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGhvdyByZWZlcmVuY2VzIHRvIGd1ZXN0X21lbWZkIGZvbGlvcyBhcmUgbWFuYWdlZC4gVGhlIGtleSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcG9pbnQgYXQgd2hpY2ggYSByZWZlcmVuY2UgaXMgZHJvcHBlZDsgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHJlZmVyZW5jZSB0byB0aGUgY2FsbGVyIGluIGBrdm1fZ21lbV9nZXRfcGZuYCwgaXQncyBub3cgYmVpbmcgZHJvcHBlZCBpbnRlcm5hbGx5LiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGFsdGVyYXRpb24gaW4gS1ZNJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4gR2l2ZW4gdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIG1lbW9yeSBoYW5kbGluZywgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHRoZSByaWdodCBuZXh0IHN0ZXAuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9nbWVtX2dldF9wZm5gIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTA6MzMuMjMxMzgzMjE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcwMDYzNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9nbWVtX2dldF9wZm5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbW11LmM9MTYwOD1zdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTY0Mi1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxNjQzOlxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVxcdTAwM2VtZW1zbG90LCBnZm4sIFxcdTAwMjZwZm4sIE5VTEwpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2NDQtXFx0aWYgKHJldCkge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM1Nz1zdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDEzLVxcdH0gZWxzZSB7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQxNDpcXHRcXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXFx1MDAzZWt2bSwgbWVtc2xvdCwgZ2ZuLCBcXHUwMDI2cGZuLCBOVUxMKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDE1LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDU5Nj1zdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MDUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjA2OlxcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXFx1MDAzZWt2bSwgZmF1bHQtXFx1MDAzZXNsb3QsIGZhdWx0LVxcdTAwM2VnZm4sIFxcdTAwMjZmYXVsdC1cXHUwMDNlcGZuLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYwNy1cXHRcXHRcXHQgICAgIFxcdTAwMjZtYXhfb3JkZXIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDEyPXN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA2MS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQwNjI6XFx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIE5VTEwpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDA2My1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5OTg9dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUwMzItXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MDMzOlxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZvcmRlcik7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MDM0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU4Ny0jaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTg4OmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU4OS1cXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5MC0jZWxzZVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTkxOnN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTkyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9ODM9c3RhdGljIHN0cnVjdCBmb2xpbyAqa3ZtX2dtZW1fZ2V0X2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwMy1cXHQvKlxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MTA0OlxcdCAqIEV4dGVybmFsIGludGVyZmFjZXMgbGlrZSBrdm1fZ21lbV9nZXRfcGZuKCkgc3VwcG9ydCBkZWFsaW5nXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xMDUtXFx0ICogd2l0aCBodWdlcGFnZXMgdG8gYSBkZWdyZWUsIGJ1dCBpbnRlcm5hbGx5LCBndWVzdF9tZW1mZCBjdXJyZW50bHlcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MjkwPXN0YXRpYyBpbnQga3ZtX2dtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMzA1LVxcdCAqIGFmdGVyIHdoaWNoIGZpbGVfcmVmX2dldCgpIGFuZCBnZXRfZmlsZV9hY3RpdmUoKSBmYWlsLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MzA2OlxcdCAqIGt2bV9nbWVtX2dldF9wZm4oKSBjYW5ub3QgYmUgdXNpbmcgdGhlIGZpbGUgY29uY3VycmVudGx5LlxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMzA3LVxcdCAqIGZpbGVfcmVmX3B1dCgpIHByb3ZpZGVzIGEgZnVsbCBiYXJyaWVyLCBhbmQgZ2V0X2ZpbGVfYWN0aXZlKCkgdGhlXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTQ2Nj1zdGF0aWMgaW50IGt2bV9nbWVtX2Vycm9yX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy00ODAtXFx0ICogZ3JhY2VmdWxseSBoYW5kbGluZyBtZW1vcnkgZXJyb3JzKS4gIElmL3doZW4gdGhlIGd1ZXN0IGF0dGVtcHRzIHRvXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo0ODE6XFx0ICogYWNjZXNzIGEgcG9pc29uZWQgcGFnZSwga3ZtX2dtZW1fZ2V0X3BmbigpIHdpbGwgcmV0dXJuIC1FSFdQT0lTT04sXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy00ODItXFx0ICogYXQgd2hpY2ggcG9pbnQgS1ZNIGNhbiBlaXRoZXIgdGVybWluYXRlIHRoZSBWTSBvciBwcm9wYWdhdGUgdGhlXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTYwNj1pbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY0OS1cXHQgKiBrdm1fZ21lbV9iaW5kKCkgbXVzdCBvY2N1ciBvbiBhIG5ldyBtZW1zbG90LiAgQmVjYXVzZSB0aGUgbWVtc2xvdFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NjUwOlxcdCAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLlxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjUxLVxcdCAqL1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz02NzE9c3RhdGljIHZvaWQgX19rdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgc3RydWN0IGdtZW1fZmlsZSAqZilcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjc4LVxcdC8qXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2Nzk6XFx0ICogc3luY2hyb25pemVfc3JjdShcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KSBlbnN1cmVkIHRoYXQga3ZtX2dtZW1fZ2V0X3BmbigpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02ODAtXFx0ICogY2Fubm90IHNlZSB0aGlzIG1lbXNsb3QuXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTY4NT12b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MTYtLyogUmV0dXJucyBhIGxvY2tlZCBmb2xpbyBvbiBzdWNjZXNzLiAgKi9cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjcxNzpzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MTgtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzUyLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzUzOmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1NC1cXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NjUtXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo3NjY6XFx0Zm9saW8gPSBfX2t2bV9nbWVtX2dldF9wZm4oZmlsZSwgc2xvdCwgaW5kZXgsIHBmbiwgbWF4X29yZGVyKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc2Ny1cXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzg1LX1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjc4NjpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dtZW1fZ2V0X3Bmbik7XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03ODctXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTc5MD1zdGF0aWMgbG9uZyBfX2t2bV9nbWVtX3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtODAwLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6ODAxOlxcdGZvbGlvID0gX19rdm1fZ21lbV9nZXRfcGZuKGZpbGUsIHNsb3QsIGluZGV4LCBcXHUwMDI2cGZuLCBOVUxMKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTgwMi1cXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDozNS42MDE0NTIyMDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1MjQ0ODk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGt2bV9nbWVtX2dldF9wZm5gIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYOKAlGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHRoaXMgaXMgc29tZXRoaW5nIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcsIHNvIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGlzIGFyZWEuXG5cblRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgcmVsZXZhbnQgYW5kIHNob3VsZCBiZSB0aGUgaW5pdGlhbCB0YXJnZXRzIGFyZTogYGt2bV9nbWVtX2dldF9wZm5gLCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLCBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAsIGBnbWVtX2Fib3J0YCwgYW5kIGBrdm1fdHJhbnNsYXRlX3ZuY3JgLiBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzIHRvIHRoZXNlIHRvIGRldGVybWluZSB3aGVyZSBiZXN0IHRvIGFwcGx5IGZ1enppbmcgc3RyYXRlZ2llcy5cblxuSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBJIG5lZWQgdG8gbm90ZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGlmIHRoZXkgYXJlIHN0YXRpYyBvciBub3QsIHNpbmNlIHRoYXQgd2lsbCBhZmZlY3QgbXkgZnV6emluZyBhcHByb2FjaC4gTG9va2luZyBjbG9zZXIsIEkgc2VlIHRoYXQgYGdtZW1fYWJvcnRgIGlzIHN0YXRpYyBpbiBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBga3ZtX3RyYW5zbGF0ZV92bmNyYCBpcyBzdGF0aWMgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaXMgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgYW5kIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGlzIGFsc28gc3RhdGljLCB0aGlzIHRpbWUgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIGlzIG5vbi1zdGF0aWMgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgbm9uLXN0YXRpYyBhbmQgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBhcyBtZW50aW9uZWQgYmVmb3JlLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkgaWYgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBpcyBleHBvcnRlZCBvciBqdXN0IG5vbi1zdGF0aWMsIHNpbmNlIHRoYXQgZGljdGF0ZXMgaG93IGVhc2lseSBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0LiBBaCwgaXQncyBqdXN0IG5vbi1zdGF0aWMsIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kIGZvciBhY2Nlc3MuIEdvb2QsIGFuZCBga3ZtX2dtZW1fZ2V0X3BmbmAgKmlzKiBleHBvcnRlZDogYEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ21lbV9nZXRfcGZuKWAuIFRoYXQncyBleHRyZW1lbHkgdXNlZnVsOyBJIGNhbiBsZXZlcmFnZSB0aGF0IHRvIGJyb2FkZW4gbXkgY292ZXJhZ2UuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgYEtWTWAgZW5hYmxlZCwgb2YgY291cnNlLiBgS1ZNX0dVRVNUX01FTUZEYCBpcyAqc2VsZWN0ZWQqIC0gYWgsIHRoYXQgbWVhbnMgSSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgdGhhdCBkaXJlY3RseS4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBtYWtlIHN1cmUgSSBhbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLCBlbmFibGluZyBgS1ZNX0FNRF9TRVZgIG9yIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCB0byBlbnN1cmUgdGhlIG1lbWZkIGNvZGUgaXMgdXNlZCBtaWdodCBiZSB3b3J0aHdoaWxlLiBJIHNob3VsZCB2ZXJpZnkgd2hhdCBzZWxlY3RzIGBLVk1fR1VFU1RfTUVNRkRgLCBqdXN0IHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTA6NDMuODUzOTAzODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjM2NTExMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1JcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDo0Ni4yMTc1NjA0OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MzIyNjM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBLVk1fQU1EX1NFVmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgS1ZNX0FNRF9TRVZgIHRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGVuY3J5cHRpb24gYW5kIHNlY3VyZSB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgcGxhdGZvcm1zLiBXZSdyZSB0YWxraW5nIGFib3V0IFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgaGVyZSwgcmlnaHQ/IFNvLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGFyY2hpdGVjdHVyYWwgYXNwZWN0cyDigJMgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBndWVzdCBPUywgdGhlIGh5cGVydmlzb3IsIGFuZCB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IuIEknbSByZWNhbGxpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiwgYW5kIEknbSB3b25kZXJpbmcgd2hhdCBtaXRpZ2F0aW9ucyBhcmUgaW4gcGxhY2UgdG8gbWluaW1pemUgdGhhdCBpbXBhY3QuIEkgd2FudCB0byBrbm93IGFib3V0IGtleSBtYW5hZ2VtZW50IGFuZCBob3cgaXQncyBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hldGhlciBpdCdzIHNvZnR3YXJlLW1hbmFnZWQsIGhhcmR3YXJlLW1hbmFnZWQsIG9yIGEgaHlicmlkIGFwcHJvYWNoLiBJJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgc2VjdXJpdHkgYm91bmRhcmllcyB0aGlzIGVzdGFibGlzaGVzIOKAkyBpcyB0aGUgaHlwZXJ2aXNvciBub3cgdW50cnVzdGVkIHdpdGggcmVzcGVjdCB0byBndWVzdCBtZW1vcnksIG9yIGlzIHRoZXJlIGEgdHJ1c3QgcmVsYXRpb25zaGlwIGF0IHBsYXk/IFdoYXQgYWJvdXQgRE1BIGF0dGFja3M7IGFyZSB3ZSB1c2luZyBJT01NVSB0byBzZWN1cmUgdGhvc2U/IEFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgc28gSSBzaG91bGQgc2VlIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcyMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjUwLjE2MDc4OTc4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MTIwNjQyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MDo1Mi40MzIwMDI3NDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NDAxMjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgYEtWTV9JTlRFTF9URFhgOlxuXG4qKkFuYWx5emluZyBLVk1fSU5URUxfVERYKipcblxuQWxyaWdodCwgdGltZSB0byBmb2N1cy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggYEtWTV9JTlRFTF9URFhgLiBJbW1lZGlhdGVseSwgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBjaGVja2luZyBpdHMgc3RhdHVzLiBJcyBpdCBlbmFibGVkPyBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJcyB0aGUgaGFyZHdhcmUgcHJlc2VudCBhbmQgY2FwYWJsZT8gV2hhdCdzIHRoZSBrZXJuZWwgdmVyc2lvbiBsb29raW5nIGxpa2U/IEFyZSB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMgbG9hZGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzPyBJJ20gYWxzbyB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0cywgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIGFuZCBrbm93biBpc3N1ZXMuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcsIGFuZCBpZGVudGlmeSBhbnkgcmVkIGZsYWdzIGltbWVkaWF0ZWx5LiBJcyB0aGlzIGZlYXR1cmUgYmVoYXZpbmcgYXMgSSBleHBlY3QgaXQgdG8/IElzIGl0IHByb3ZpZGluZyB0aGUgYW50aWNpcGF0ZWQgZnVuY3Rpb25hbGl0eT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGlzc3VlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyB0aGF0IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjU1Ljk4NjAxNzY3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1Mzk3NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUwOjU4LjI0MDAyMDg4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA4NDMwMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBhbmQgU0VWLVNOUCBHdWVzdCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBjaGVja2luZyBhIGh1bmNoLiBJcyBgS1ZNX0dVRVNUX01FTUZEYCBzaW1wbHkgc2VsZWN0ZWQgYnkgYEtWTWAgb24gYXJtNjQgYW5kIGBLVk1fWDg2YCBvbiB4ODY/ICBUaGUgY29uZmlnIGNvbmZpcm1zIGl0OlxuXG5gYGBcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzk6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5gYGBcblxuU28gZW5hYmxpbmcgYEtWTWAgYW5kIGBLVk1fQU1EX1NFVmAgaXMgZGVmaW5pdGVseSBvbiB0aGUgcmlnaHQgdHJhY2suXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZnVuY3Rpb25zIGFjcm9zcyBhcmNoaXRlY3R1cmVzLCBzbyBJIHNob3VsZCBiZSBmYW1pbGlhciB3aXRoIHRoZW0gYWxsLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGlzIGlzIHdoZXJlIFJNUCBmYXVsdHMgZm9yIFNFVi1TTlAgZ3Vlc3RzIGFyZSBoYW5kbGVkLCBzbyB0aGF0J3MgYSBrZXkgYXJlYSB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgbW9kaWZ5aW5nIGhvdyB0aGUgUEZOIGlzIHJldHJpZXZlZCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZSBgbW11X3NlcWAgaXMgaGFuZGxlZC4gSXQncyBhbHNvIG1vZGlmeWluZyBgX19zZXZfc25wX3JlbG9hZF92bXNhYCBmb3IgY29udGV4dCB1cGRhdGVzLlxuXG5BZGRpdGlvbmFsbHksIEkgc2VlIGNoYW5nZXMgdG8gYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBPbiBBUk02NCwgdGhlIGNoYW5nZXMgaW52b2x2ZSBgZ21lbV9hYm9ydGAgaW4gYGFyY2gvYXJtNjQva3ZtL21tdS5jYCBhbmQgYGt2bV90cmFuc2xhdGVfdm5jcmAgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYC5cblxuQmFzZWQgb24gdGhpcywgdGhlIGNlbnRyYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6XG5cbi0gICBga3ZtX2dtZW1fZ2V0X3BmbmBcbi0gICBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgXG4tICAgYGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbWBcbi0gICBgZ21lbV9hYm9ydGBcbi0gICBga3ZtX3RyYW5zbGF0ZV92bmNyYFxuXG5XYWl0LCBhIHNtYWxsIHF1ZXN0aW9uLiBJdCBzZWVtcyB0aGF0IGBnbWVtX2Fib3J0YCBhbmQgYGt2bV90cmFuc2xhdGVfdm5jcmAgYXJlIHN0YXRpYywgdGhvdWdoIGNsZWFybHkgbm90IHRyaXZpYWwsIGhvdC1wYXRoIGZ1bmN0aW9ucyAodGhleSdyZSBwYWdlIGZhdWx0IGhhbmRsZXJzIGZvciBzcGVjaWZpYyBjYXNlcykuIEhvd2V2ZXIsIHRoZSBndWlkZWxpbmVzIEkgdXN1YWxseSBmb2xsb3cgYXJlIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoYXQgb25lIGlzIGlubGluZWQsIG9yIGlmIHRoZXJlIGlzIGEgcGFydGljdWxhciByZWFzb24gZm9yIGl0cyBzdGF0aXMgZGVjbGFyYXRpb24uIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQsIGFzIGlzIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjA2Ljk0ODQ1NTU3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzOTUxNDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTg5PXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTk1LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5NjpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTk3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjE5PXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyNC1cXHRpZiAoZmF1bHQtXFx1MDAzZWlzX3ByaXZhdGUgfHwga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGZhdWx0LVxcdTAwM2VzbG90KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2MjU6XFx0XFx0cmV0dXJuIGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbSh2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTowOS4yODc5NzQ5MjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU3NzAyNjI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGl0IGRlYWxzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGBndWVzdF9tZW1mZGAgd2l0aGluIEtWTS4gVGhlIGNvZGUgaXMgc3RhdGljLCBidXQgaXQncyBub3QgZGlyZWN0bHkgaW5saW5lZCwgc28gSSdsbCBnbyBzdHJhaWdodCB0byBga3ZtX2dtZW1fZ2V0X3BmbmAgYW5kIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgYW5kIGlmIHRoZXkncmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXG5cbkFscmlnaHQsIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyB0cmlnZ2VyZWQgZHVyaW5nIEtWTSBwYWdlIGZhdWx0cyB3aGVuIHRoZSBndWVzdCBhdHRlbXB0cyB0byBhY2Nlc3MgcHJpdmF0ZSBtZW1vcnksIGFuZCB0aGlzIGhhcHBlbnMgd2hlbiBydW5uaW5nIGEgVk0gdXNpbmcgYGd1ZXN0X21lbWZkYCBhbmQgYWNjZXNzaW5nIHRoZSBtZW1vcnkuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGEgdXNlcnNwYWNlIGRlcGVuZGVuY3ksIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyLlxuXG5Ob3csIGxldCBtZSBwdXQgdG9nZXRoZXIgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCBhbHRlcnMgaG93IGZvbGlvIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgd2l0aGluIGBrdm1fZ21lbV9nZXRfcGZuYC4gSW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHBhZ2UgdG8gdGhlIGNhbGxlciB0byBiZSByZWxlYXNlZCwgaXQncyBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGRpcmVjdGx5IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvbiB0aGUgY2FsbGVyLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIHRoZSBjYWxsZXJzIGluIGJvdGggeDg2IChzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBNTVUgYW5kIFNFVi1TTlAgY29kZSkgYW5kIEFSTTY0IChNTVUgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbikgdG8gYWNjb21tb2RhdGUgdGhpcyBuZXcgc2lnbmF0dXJlLiBBZGRpdGlvbmFsbHksIGl0IGludHJvZHVjZXMgTU1VIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2tzIGluIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgdG8gYWRkcmVzcyBwb3RlbnRpYWwgaW52YWxpZGF0aW9uIHJhY2VzLlxuXG5Fc3NlbnRpYWxseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEtWTSBhbmQgY29uZmlkZW50aWFsIGNvbXB1dGluZyBtZW1vcnkgbWFuYWdlbWVudCB3aGljaCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJlY2F1c2UgaXQgaW1wYWN0cyBhbnlvbmUgcnVubmluZyBhIEtWTSBndWVzdCB0aGF0IGxldmVyYWdlcyBgZ3Vlc3RfbWVtZmRgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudDogYEtWTWAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBzeW1ib2xzOiBga3ZtX2dtZW1fZ2V0X3BmbmAgYW5kIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAuXG5JJ20gYWxzbyBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgaXMgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAwMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MToxNS44NjUwMDQyMTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjgwNzc1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1JcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MToxNy45OTMwODY1MDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1ODIyNjc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0vQU1ELVNFViBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGVuYWJsaW5nIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgdGhhdCBsZXZlcmFnZSBgZ3Vlc3RfbWVtZmRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3VwcG9ydGluZyBrZXJuZWwgZmVhdHVyZXMgYXJlIGluIHBsYWNlLCB3aGljaCBtZWFucyB2YWxpZGF0aW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGFyY2hpdGVjdHVyZS5cblxuTXkgZm9jdXMgaXMgdG8gZW5zdXJlIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gSSdtIGdvaW5nIHRvIGRldGVybWluZSBpZiBgS1ZNX0FNRF9TRVZgIGlzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSB0aGVzZSBgZ3Vlc3RfbWVtZmRgIHNlY3VyZWQgdmlydHVhbCBtYWNoaW5lcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBSTVAgZmF1bHQgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTI4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6MjEuMDUxMzE2OTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzc2NTg2NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X2hhbmRsZV9ybXBfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTY2PXN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDk5Ny1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5OTg6dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTk5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk2OT1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDI1LVxcdGlmIChyYyBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX0dVRVNUX1JNUF9NQVNLKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjAyNjpcXHRcXHRzZXZfaGFuZGxlX3JtcF9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyNy1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTAxMT1leHRlcm4gdW5zaWduZWQgaW50IG1heF9zZXZfYXNpZDtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMTI6dm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAxMy1pbnQgc2V2X2dtZW1fbWFrZV9wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLCBrdm1fcGZuX3QgbnJfcGFnZXMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDM4PXN0YXRpYyBpbmxpbmUgaW50IHNldl9kZXZfZ2V0X2F0dHIodTMyIGdyb3VwLCB1NjQgYXR0ciwgdTY0ICp2YWwpIHsgcmV0dXJuIC1FTlhJTzsgfVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzOS0jZGVmaW5lIG1heF9zZXZfYXNpZCAwXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDQwOnN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpIHt9XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDQxLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzZXZfZGVjcnlwdF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6MjMuMjI4OTgwOTUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTE2MDAzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTRVYgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBmdW5jdGlvbi4gUmlnaHQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyB0aGluZyBpcyAqYWN0dWFsbHkqIGRlZmluZWQgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgZmlsZS4gTm90aGluZyB0b28gc3VycHJpc2luZyB0aGVyZS4gQW5kIGl0IG9ubHkgZ2V0cyBjb21waWxlZCB3aGVuIHRoZSBgS1ZNX0FNRF9TRVZgIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0IGhlbHBzIG5hcnJvdyBkb3duIHdoZW4gSSdsbCBlbmNvdW50ZXIgaXQuIE5vdywgd2hhdCdzIG5leHQuLi4gSSB0aGluayBJJ2xsIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB3aGF0IEkndmUgZm91bmQgc28gZmFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc5MywiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MToyNy43MjA1ODQyMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAwMzg0NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9nZXRfcGZuXCIsXG4gICAgXCJzZXZfaGFuZGxlX3JtcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9nZXRfcGZuXCIsXG4gICAgXCJzZXZfaGFuZGxlX3JtcF9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiBLVk0gZ3Vlc3RfbWVtZmQgYnkgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBpbnNpZGUgYGt2bV9nbWVtX2dldF9wZm5gIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBjYWxsZXIgdG8gYmUgcmVsZWFzZWQgbGF0ZXIuIEl0IHVwZGF0ZXMgdGhlIGNhbGxlcnMgaW4geDg2IChNTVUgYW5kIFNFVi1TTlApIGFuZCBBUk02NCAoTU1VIGFuZCBuZXN0ZWQpIHRvIGFjY29tbW9kYXRlIHRoaXMgc2lnbmF0dXJlIGNoYW5nZSBhbmQgYWRkcyBNTVUgc2VxdWVuY2UgY291bnRlciBjaGVja3MgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBoYW5kbGUgaW52YWxpZGF0aW9uIHJhY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGFuZCBjb25maWRlbnRpYWwgY29tcHV0aW5nIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IHJ1bm5pbmcgYSBLVk0gZ3Vlc3QgdXRpbGl6aW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MToyNy44NzA2MzMyNzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTc1NDY3OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6MjcuODcyNDAzNzM4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQyOTczNjkyMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX2dtZW1fZ2V0X3BmbmAgdG8gbm8gbG9uZ2VyIHJldHVybiBhIGBzdHJ1Y3QgcGFnZWAgcG9pbnRlciB0byB0aGUgY2FsbGVyLCBpbnN0ZWFkIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgYWNyb3NzIGFybTY0IGFuZCB4ODYgS1ZNIGNvZGUgdG8gcmVtb3ZlIHRoZSBgcGFnZWAgYXJndW1lbnQgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCBjYWxscyAoZS5nLiwgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCkuIEFkZGl0aW9uYWxseSwgaXQgYWRkcyBNTVUgc2VxdWVuY2UgY2hlY2tpbmcgKGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gKSBpbiBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSTVAgZmF1bHRzLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBvZiBwYWdlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBmaXhlcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkbyBub3QgYWRkIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHByZW1hdHVyZSBwYWdlIGZyZWVpbmcgb3IgcmFjZSBjb25kaXRpb25zKSB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YzdkNDA5MDcxZDMxMGJjZjIyYTEzMDgyNGQyNjg1ZGFlMDI0MzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjM6NDk6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzLi5kNWFhMTk3ZDJjYmZkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5AQCAtMTYxMyw3ICsxNjEzLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90ID0gS1ZNX1BHVEFCTEVfUFJPVF9SO1xuIFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QgPSBzMmZkLVx1MDAzZXZjcHUtXHUwMDNlYXJjaC5od19tbXUtXHUwMDNlcGd0O1xuIFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBzMmZkLVx1MDAzZXZjcHUtXHUwMDNla3ZtO1xuIFx0dm9pZCAqbWVtY2FjaGUgPSBOVUxMO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbkBAIC0xNjQxLDcgKzE2NDAsNyBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbitcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC1cdTAwM2V2Y3B1LCBzMmZkLVx1MDAzZWZhdWx0X2lwYSwgUEFHRV9TSVpFLFxuIFx0XHRcdFx0XHQgICAgICB3cml0ZV9mYXVsdCwgZXhlY19mYXVsdCwgZmFsc2UpO1xuQEAgLTE2ODEsNyArMTY4MCw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4gXHR9XG4gXG4gb3V0X3VubG9jazpcbi1cdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsICEhcmV0LCBwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpO1xuIFx0a3ZtX2ZhdWx0X3VubG9jayhrdm0pO1xuIFxuIFx0aWYgKChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpIFx1MDAyNlx1MDAyNiAhcmV0KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbmluZGV4IGZiNTRmNmRhZDk5NWMuLjQzNTIzYmIxNzYyMWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC0xMzYwLDcgKzEzNjAsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRib29sIHdyaXRlX2ZhdWx0LCB3cml0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHU2NCB2YSwgcGZuLCBnZm47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE0MTEsNyArMTQxMSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4ocGZuKSB8fCAod3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2ICF3cml0YWJsZSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4rXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIHZ0LVx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCBjNTE5ZThlOGQ2NDZmLi4xMjlkNDAzMzA4MDUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTQ2MDQsNyArNDYwNCw3IEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiBcbiBcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIFx1MDAyNmZhdWx0LVx1MDAzZXBmbixcbi1cdFx0XHQgICAgIFx1MDAyNmZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZSwgXHUwMDI2bWF4X29yZGVyKTtcbitcdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4gXHRpZiAocikge1xuIFx0XHRrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpO1xuIFx0XHRyZXR1cm4gcjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggZmNiNDFkZmRlNGMwMi4uMGM5MWM5MDQ1NzNjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MDE2LDcgKzQwMTYsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG5AQCAtNDA2MCw3ICs0MDU5LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG4gXHQgKi9cbi1cdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4rXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbkBAIC00MDc2LDggKzQwNzUsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRlbHNlXG4gXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuIH1cbiBcbiAvKlxuQEAgLTUwMDMsNyArNTAwMCw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0aW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0Ym9vbCBhc3NpZ25lZDtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXHRnZm5fdCBnZm47XG5AQCAtNTAzMCw3ICs1MDI3LDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIFx1MDAyNm9yZGVyKTtcbitcdG1tdV9zZXEgPSBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0c21wX3JtYigpO1xuK1xuK1x0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZvcmRlcik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcblwiLFxuIFx0XHRcdFx0ICAgIGdwYSk7XG5AQCAtNTAzOSw5ICs1MDM5LDEzIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFxuIFx0cmV0ID0gc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpO1xuIFx0aWYgKHJldCB8fCAhYXNzaWduZWQpIHtcbi1cdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4tXHRcdGdvdG8gb3V0X25vX3RyYWNlO1xuK1x0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRcdGlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cIixcbitcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuK1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTUwNjksMjYgKzUwNzMsMzEgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heSBoYXZlXG4tXHRcdCAqIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzIGFscmVhZHkgcmVzb2x2ZWRcbi1cdFx0ICogaXRzZWxmLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuK1x0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4rXHRcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4rXHRcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxuK1x0XHRcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcbitcdFx0XHQgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQncyBub3QgYXNzaWduZWQsIHRoZW5cbitcdFx0XHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcbitcdFx0XHQgKiB0aGlzIHBhZ2Ugc2hhcmVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAoKGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpXG4rXHRcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiArIFBUUlNfUEVSX1BNRCk7XG4gb3V0OlxuIFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xuLW91dF9ub190cmFjZTpcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODYsMTMgKzI1ODYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpO1xuK1x0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLVx0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0XHRcdCAgIGludCAqbWF4X29yZGVyKVxuK1x0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuIHtcbiBcdEtWTV9CVUdfT04oMSwga3ZtKTtcbiBcdHJldHVybiAtRUlPO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBiNTk2NDg2ZDE4NGNhLi41ODk3NjIxNDBjM2VmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc1MSw4ICs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gfVxuIFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpXG4rXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0cGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC03ODAsMTEgKzc3OSw3IEBAIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiAjZW5kaWZcbiBcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRpZiAoIXIpXG4tXHRcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4tXHRlbHNlXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6MjcuODcyNDA1NjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDYxMDAxOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBHdWVzdCBNZW1vcnkgUmVmYWN0b3JpbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFuaW5nIHVwIHRoZSBga3ZtX2dtZW1fZ2V0X3BmbmAgZnVuY3Rpb24uIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IHBhZ2UgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZC4gSXQncyBhZmZlY3Rpbmcgc2V2ZXJhbCBmaWxlczogYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGFuZCBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIFRoZSBtYWluIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGNhbGxlciBubyBsb25nZXIgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBwYWdlOyB0aGUgcmVmZXJlbmNlIGlzIGVmZmVjdGl2ZWx5IGRyb3BwZWQgaW1tZWRpYXRlbHkgd2l0aGluIGBrdm1fZ21lbV9nZXRfcGZuYCB1c2luZyBgZm9saW9fcHV0KGZvbGlvKWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcmVmYWN0b3JpbmcgZWZmb3J0IHRvIGVpdGhlciBwcmV2ZW50IHBvdGVudGlhbCBwYWdlIHJlZmVyZW5jZSBsZWFrcyBvciBzaW1wbGlmeSB0aGUgQVBJIGJ5IGNoYW5naW5nIGhvdyBnbWVtIHBhZ2VzIGFyZSBtYW5hZ2VkLiBFaXRoZXIgdGhlc2UgcGFnZXMgZG9uJ3QgbmVlZCB0byBiZSBwaW5uZWQgYnkgdGhlIGNhbGxlciBpbiB0aGUgc2FtZSB3YXksIG9yIG1heWJlIHRoZSBmaWxlIGl0c2VsZiB0YWtlcyByZXNwb25zaWJpbGl0eSBmb3IgcGlubmluZy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHdpdGggbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTG9va2luZyBhdCB0aGUgY2hhbmdlcywgaXQncyByZW1vdmluZyBhIHBvaW50ZXIgYW5kIGFzc29jaWF0ZWQgY2xlYW51cCwgbm90IGludHJvZHVjaW5nIGFueXRoaW5nIG5ldyB0byB1c2Vyc3BhY2UuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcy4gSXQgbG9va3MgbGlrZSBhIHB1cmUgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgb2YgdGhlIEtWTSBndWVzdF9tZW1mZCBBUEkgYW5kIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIE1vcmVvdmVyLCBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBkdWUgdG8gcHJlbWF0dXJlIHBhZ2UgcmVsZWFzZSB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi9MT0NLREVQL2V0Yy4gSSBkb24ndCB0aGluayBJIG5lZWQgdG8gYnJpbmcgS01TQU4gaW50byB0aGUgYW5hbHlzaXMuXG5cbk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBhIHNwZWNpZmljIHBvaW50LiBJbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gIGlzIGJlaW5nIHVwZGF0ZWQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZWAgaXMgbm8gbG9uZ2VyIHNldC4gVGhpcyAqaXMqIGEgcG9pbnQgb2YgY29uY2Vybi4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhbGxlZDpcblxuYGBgY1xuIFx0ciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIGZhdWx0LVx1MDAzZXNsb3QsIGZhdWx0LVx1MDAzZWdmbiwgXHUwMDI2ZmF1bHQtXHUwMDNlcGZuLFxuLVx0XHRcdCAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlLCBcdTAwMjZtYXhfb3JkZXIpO1xuK1x0XHRcdCAgICAgXHUwMDI2bWF4X29yZGVyKTtcbmBgYFxuXG5TaW5jZSBgZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlYCBpcyBubyBsb25nZXIgcG9wdWxhdGVkIGJ5IGBrdm1fZ21lbV9nZXRfcGZuYCwgd2hhdCdzIGdvaW5nIHRvIGhhcHBlbiB3aXRoIGl0PyBEb2VzIGl0IHJlbWFpbiB1bmluaXRpYWxpemVkLCBhbmQgaXMgaXQgdXNlZCBsYXRlcj8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGt2bV9wYWdlX2ZhdWx0YCBhbmQgd2hlcmUgYHJlZmNvdW50ZWRfcGFnZWAgaXMgdXNlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciB0byBhbmFseXplIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTozNy45MzM0MTAyMDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjg1MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZmNvdW50ZWRfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vbW11L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ1ODk9c3RhdGljIHZvaWQga3ZtX21tdV9maW5pc2hfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ1OTEte1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDU5MjpcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBmYXVsdC1cXHUwMDNlcmVmY291bnRlZF9wYWdlLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDU5My1cXHRcXHRcXHRcXHQgciA9PSBSRVRfUEZfUkVUUlksIGZhdWx0LVxcdTAwM2VtYXBfd3JpdGFibGUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjE5PXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyOC1cXHRmYXVsdC1cXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oZmF1bHQtXFx1MDAzZXNsb3QsIGZhdWx0LVxcdTAwM2VnZm4sIGZvbGwsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjI5OlxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZmF1bHQtXFx1MDAzZW1hcF93cml0YWJsZSwgXFx1MDAyNmZhdWx0LVxcdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYzMC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1OC1cXHRmYXVsdC1cXHUwMDNlcGZuID0gX19rdm1fZmF1bHRpbl9wZm4oZmF1bHQtXFx1MDAzZXNsb3QsIGZhdWx0LVxcdTAwM2VnZm4sIGZvbGwsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjU5OlxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZmF1bHQtXFx1MDAzZW1hcF93cml0YWJsZSwgXFx1MDAyNmZhdWx0LVxcdTAwM2VyZWZjb3VudGVkX3BhZ2UpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY2MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg9MjI2PXN0cnVjdCBrdm1fcGFnZV9mYXVsdCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI4MS1cXHRrdm1fcGZuX3QgcGZuO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6MjgyOlxcdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2U7XFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yODMtXFx0Ym9vbCBtYXBfd3JpdGFibGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjM3Ljk5NjA5OTM3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc1MjU0MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIEdlbmVzaXMgb2YgXCJmYXVsdFwiKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgb3JpZ2luIG9mIHRoZSB2YXJpYWJsZSwgYGZhdWx0YC4gV2hlcmUgZG9lcyB0aGlzIGd1eSBwb3AgaW50byBleGlzdGVuY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbml0aWFsaXphdGlvbiwgaXRzIGluaXRpYWwgdmFsdWUgKG9yIGxhY2sgdGhlcmVvZiksIGFuZCBob3cgdGhhdCBpbml0aWFsIHN0YXRlIHNoYXBlcyB0aGUgc3Vic2VxdWVudCBmbG93IG9mIHRoZSBjb2RlLiBJcyBpdCBhc3NpZ25lZCBkaXJlY3RseT8gSXMgaXQgYSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUgb3IgY2xhc3M/IElzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZD8gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhlIGluaXRpYWxpemF0aW9uIGlzIGtleTsgaXQnbGwgaW5mbHVlbmNlIGV2ZXJ5dGhpbmcgZG93biB0aGUgbGluZS4gSXMgdGhlcmUgc29tZSBkZWZhdWx0IHN0YXRlIGFzc3VtZWQ/IEFyZSB0aGVyZSBwcmVjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYmVmb3JlIHRoaXMgdGhpbmcgaXMgZXZlbiBjb25zaWRlcmVkIHZhbGlkPyBHb3R0YSBrbm93IHRoaXMgc3R1ZmYuIERpZ2dpbmcgaW50byB0aGlzIGluaXRpYWxpemF0aW9uIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aXRoaW4gd2hpY2ggYGZhdWx0YCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjQxLjE3MTM1NjUxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2MDAwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGt2bV9wYWdlX2ZhdWx0IC4qPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vbW11L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NTU9c3RhdGljIGludCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTU4LXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NTk6XFx0c3RydWN0IGt2bV9wYWdlX2ZhdWx0IGZhdWx0ID0ge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk2MC1cXHRcXHQuYWRkciA9IGNyMl9vcl9ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNTQ9aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTUte1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1NjpcXHRzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgZmF1bHQgPSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTU3LVxcdFxcdC5hZGRyID0gZ2ZuX3RvX2dwYShnZm4pLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTo0MS4yNTA5NjI4NDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzOTU2MDI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBOdWxsIFBvaW50ZXIgaW4gRmF1bHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBmYXVsdGAgc3RydWN0LCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIGBmYXVsdCA9IHsgLi4uIH1gIGlzIGtleSBoZXJlLiBUaGF0IG1lYW5zIGFueXRoaW5nICpub3QqIGV4cGxpY2l0bHkgbGlzdGVkIHdpdGhpbiB0aGF0IGN1cmx5IGJyYWNlIGxpc3Qgd2lsbCBiZSB6ZXJvLWluaXRpYWxpemVkLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzIGFzc3VtcHRpb24uIEkgYmVsaWV2ZSwgaW1wbGljaXRseSwgdGhpcyBtZWFucyBgcmVmY291bnRlZF9wYWdlYCB3aWxsIGJlIE5VTEwgaWYgbm90IGFzc2lnbmVkIGEgc3BlY2lmaWMgdmFsdWUgZHVyaW5nIHRoZSBwcm9jZXNzLlxuXG5Ob3csIGlmIGBrdm1fZ21lbV9nZXRfcGZuYCAqZG9lc24ndCogc2V0IGBmYXVsdC1cdTAwM2VyZWZjb3VudGVkX3BhZ2VgIOKAkyBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbSDigJMgdGhlbiBpdCdsbCByZW1haW4gdGhhdCB6ZXJvLWluaXRpYWxpemVkIE5VTEwgdmFsdWUuIFRoYXTigJlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljLCBhcyB0aGlzIGZpZWxkIGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG5cblRoZSBmb2xsb3dpbmcgY2FsbCBpczogYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSh2Y3B1LVx1MDAzZWt2bSwgZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlLCAuLi4pYC4gSWYgYGZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZWAgaXMgaW5kZWVkIE5VTEwsIGNhbGxpbmcgdGhpcyB3aWxsIGJlIGZpbmUgYW5kIGEgbm8tb3AuIEl0IHNob3VsZCBiZSBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGF0IGZ1bmN0aW9uLiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgMTAwJSBjZXJ0YWluIG9mIHRoYXQgYW5kIG5vdCBqdXN0IGFzc3VtZSB0aGF0IGlzIHRoZSBjYXNlLiBTbyB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgYW5kIGRldGVybWluZSB0aGUgYWN0aW9ucyBpdCB3aWxsIHRha2Ugb24gYSBOVUxMIHBvaW50ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6NDUuNTkwNTI1NTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3ODgxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyOTE9dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI5Mi1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI5MzpzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyOTQtXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgdW51c2VkLCBib29sIGRpcnR5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTo0NS42ODg0MTA2OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjk4NzMzNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCBpbXBsZW1lbnRhdGlvbi4gSSdtIGdvaW5nIHRvIHdhbGsgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCB0aGlua2luZyBsaWtlIEknbSBkZWJ1Z2dpbmcgYSB0cmlja3kgbWVtb3J5IGlzc3VlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyBoZXJlLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gcmVsZWFzaW5nIHRoZSBmYXVsdC1pbiBwYWdlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBiYXNpY3MsIHdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGEgS1ZNIGd1ZXN0PyBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3Igb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYW55IG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGNhbGxlZCBjb25jdXJyZW50bHkuIExldCdzIHNlZSBob3cgdGhlIHJlbGVhc2UgcHJvY2VzcyB3b3JrcyBhdCBhIGxvdyBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjQ4LjM4NzE0NjA2OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NDUyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB2b2lkIGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTEyOTE9dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTI5Mi1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTI5MzpzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTEyOTQtXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgdW51c2VkLCBib29sIGRpcnR5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTo0OC40NzE4OTY5MDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMzM2NDUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgZnVuY3Rpb24uIEkndmUgc2VlbiB0aGlzIG9uZSBiZWZvcmUsIG9mIGNvdXJzZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIEtWTSdzIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgKipcblxuUmlnaHQsIHNvIHRoaXMgZnVuY3Rpb24gaXMsIGVzc2VudGlhbGx5LCBhIGNsZWFudXAgcm91dGluZS4gSXQncyB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIEtWTSBncmFjZWZ1bGx5IHJlbGlucXVpc2hlcyBhIHBhZ2UgdGhhdCB3YXMgYnJvdWdodCBpbiBmb3IgYSBmYXVsdC4gVGhhdCBcImZhdWx0XCIgY291bGQgYmUgZHVlIHRvIGEgdmFyaWV0eSBvZiByZWFzb25zIOKAkyBhIGd1ZXN0IHdhbnRpbmcgdG8gYWNjZXNzIGEgcGFnZSB0aGF0IHdhc24ndCByZXNpZGVudCwgYSBjb3B5LW9uLXdyaXRlIGV2ZW50LCBvciBwZXJoYXBzIGV2ZW4gYSBwYWdlIGJlaW5nIHJlY2xhaW1lZCBmcm9tIGEgc3dhcCBkZXZpY2UuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlIGFsd2F5czogd2hhdCBhcmUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24/IElzIGl0IGEgaGVhdmlseSB0cmFmZmlja2VkIHBhcnQgb2YgdGhlIGNvZGUsIG9yIG1vcmUgb2YgYW4gZWRnZSBjYXNlP1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVsZWFzZS4gSXMgdGhlIHBhZ2Ugc2ltcGx5IGJlaW5nIGZyZWVkIGJhY2sgdG8gdGhlIGhvc3QncyBwYWdlIGFsbG9jYXRvcj8gT3IgYXJlIHRoZXJlIG1vcmUgc3VidGxlIGNvbnNpZGVyYXRpb25zLCBsaWtlIGludmFsaWRhdGluZyBUTEIgZW50cmllcywgdXBkYXRpbmcgcGFnZSB0YWJsZXMsIG9yIGVuc3VyaW5nIGNvaGVyZW5jeSBhY3Jvc3MgZGlmZmVyZW50IENQVSBjb3Jlcz8gSXQncyBlc3NlbnRpYWwgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBvdGhlciBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZWZlciB0byB0aGlzIHBhZ2UgdGhhdCAqbXVzdCogYmUgdXBkYXRlZCBvciBpbnZhbGlkYXRlZCBhcyBwYXJ0IG9mIHRoaXMgcHJvY2Vzcz8gVGhpcyBpcyB3aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGNhbiBiZWNvbWUgYSBuaWdodG1hcmUuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCBoZXJlOiBsb2NrcywgYXRvbWljIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gb3RoZXIgZnVuY3Rpb25zIGFjY2Vzc2luZyB0aGUgc2FtZSBkYXRhLlxuXG5Gcm9tIGFuIG9wdGltaXphdGlvbiBzdGFuZHBvaW50LCBJJ2xsIGJlIGxvb2tpbmcgYXQgdGhlIGVmZmljaWVuY3kgb2YgdGhpcyByZWxlYXNlIHByb2Nlc3MuIElzIGl0IG9wdGltaXplZCBmb3IgY29tbW9uIHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBvcHBvcnR1bml0aWVzIGZvciBiYXRjaGluZyBvcGVyYXRpb25zIG9yIGVtcGxveWluZyBtb3JlIGVmZmljaWVudCBkYXRhIHN0cnVjdHVyZXMgdG8gaW1wcm92ZSB0aHJvdWdocHV0PyBHaXZlbiBLVk0ncyBjcml0aWNhbCByb2xlIGluIHZpcnR1YWxpemF0aW9uLCBhbnkgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaW4gdGhpcyBmdW5jdGlvbiBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGNhc2NhZGluZyBlZmZlY3Qgb24gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSwgcGFydGljdWxhcmx5IGFueSBjYWNoZS1yZWxhdGVkIGVmZmVjdHMuXG5cbkZpbmFsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgcmVsZWFzZSBmYWlscz8gRG9lcyB0aGUgc3lzdGVtIGdyYWNlZnVsbHkgcmVjb3Zlciwgb3IgY291bGQgdGhpcyBsZWFkIHRvIGNyYXNoZXMgb3IgbWVtb3J5IGxlYWtzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmFpbHVyZSBtb2RlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYm90aCB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0LiBTZWN1cml0eSBpcyBwYXJhbW91bnQgc28gYW55IHBvdGVudGlhbCBmb3IgYSBkb3VibGUtZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiBpcyBhIHJlZCBmbGFnLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlZCBhbnkgc3VjaCBzY2VuYXJpb3MuIE9rYXksIGxldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjUzLjQ3NTI2Mzg2MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0dm9pZCBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4xMjkxOlxcdHZvaWQga3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuMTI5MjpcXHRcXG4xMjkzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4xMjk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBib29sIHVudXNlZCwgYm9vbCBkaXJ0eSlcXG4xMjk1OlxcdHtcXG4xMjk2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB8fCB1bnVzZWQpO1xcbjEyOTc6XFx0XFxuMTI5ODpcXHRcXHRpZiAoIXBhZ2UpXFxuMTI5OTpcXHRcXHRcXHRyZXR1cm47XFxuMTMwMDpcXHRcXG4xMzAxOlxcdFxcdC8qXFxuMTMwMjpcXHRcXHQgKiBJZiB0aGUgcGFnZSB0aGF0IEtWTSBnb3QgZnJvbSB0aGUgKnByaW1hcnkgTU1VKiBpcyB3cml0YWJsZSwgYW5kIEtWTVxcbjEzMDM6XFx0XFx0ICogaW5zdGFsbGVkIG9yIHJldXNlZCBhIFNQVEUsIG1hcmsgdGhlIHBhZ2UvZm9saW8gZGlydHkuICBOb3RlLCB0aGlzXFxuMTMwNDpcXHRcXHQgKiBtYXkgbWFyayBhIGZvbGlvIGRpcnR5IGV2ZW4gaWYgS1ZNIGNyZWF0ZWQgYSByZWFkLW9ubHkgU1BURSwgZS5nLiBpZlxcbjEzMDU6XFx0XFx0ICogdGhlIEdGTiBpcyB3cml0ZS1wcm90ZWN0ZWQuICBGb2xpb3MgY2FuJ3QgYmUgc2FmZWx5IG1hcmtlZCBkaXJ0eVxcbjEzMDY6XFx0XFx0ICogb3V0c2lkZSBvZiBtbXVfbG9jayBhcyBkb2luZyBzbyBjb3VsZCByYWNlIHdpdGggd3JpdGViYWNrIG9uIHRoZVxcbjEzMDc6XFx0XFx0ICogZm9saW8uICBBcyBhIHJlc3VsdCwgS1ZNIGNhbid0IG1hcmsgZm9saW9zIGRpcnR5IGluIHRoZSBmYXN0IHBhZ2VcXG4xMzA4OlxcdFxcdCAqIGZhdWx0IGhhbmRsZXIsIGFuZCBzbyBLVk0gbXVzdCAoc29tZXdoYXQpIHNwZWN1bGF0aXZlbHkgbWFyayB0aGVcXG4xMzA5OlxcdFxcdCAqIGZvbGlvIGRpcnR5IGlmIEtWTSBjb3VsZCBsb2NrbGVzc2x5IG1ha2UgdGhlIFNQVEUgd3JpdGFibGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUxOjUzLjQ3NTQzNjc4MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4NTc0ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTnVsbCBQb2ludGVyIElzc3VlcyoqXG5cbk9rYXksIHNvIEkgc2VlIGBpZiAoIXBhZ2UpIHJldHVybjtgIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNoIHNlZW1zIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBgcGFnZWAgbWlnaHQgYmUgTlVMTC4gR29vZCwgdGhhdCdzIGEgYmFzaWMgY2hlY2suIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGBrdm1fdHJhbnNsYXRlX3ZuY3JgIGluIGBhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZ1bmN0aW9uLlxuXG5BaGEsIGBzdHJ1Y3Qgdm5jcl90bGIgKnZ0O2AgYW5kIHRoZSBjcnVjaWFsIGxpbmU6IGBzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7YC4gV2FpdCwgYHBhZ2VgICppcyogaW5pdGlhbGl6ZWQgdG8gTlVMTC4gVGhhdCdzIGEgZ29vZCBwcmFjdGljZSwgcHJldmVudGluZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBCdXQsIEknbSBub3RpY2luZyBpdCdzIG5vdCBhY3R1YWxseSBwYXNzZWQgdG8gYGt2bV9nbWVtX2dldF9wZm5gIGFueW1vcmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSByZW1vdmFsIG9mIHRoZSBjYWxsIGlzIG5vdCBhIHByb2JsZW0uXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIGBwYWdlYCB1c2VkICphbnl3aGVyZSogZWxzZSBkb3duIHRoZSBsaW5lPyBJZiBpdCBpc24ndCwgYW5kIGl0J3Mgbm90IGJlaW5nIGRlcmVmZXJlbmNlZCwgdGhhdCBudWxsIGluaXRpYWxpemF0aW9uIGlzIHNvbWV3aGF0IHJlZHVuZGFudCwgYnV0IGhhcm1sZXNzLiBCdXQsIGlmIGl0ICppcyogdXNlZCBmdXJ0aGVyIGRvd24gdGhlIGNvZGUgcGF0aCB3aXRob3V0IGJlaW5nIGFzc2lnbmVkIGEgdmFsaWQgcG9pbnRlciwgdGhhdCdzIHdoZXJlIHdlJ3ZlIGdvdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCB3ZSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjM6NTE6NTcuNzI0MDE0MzQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDg0MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTY4PWludCBrdm1fdmNwdV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy03OC1cXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjc5OlxcdFxcdHZjcHUtXFx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5ID0gKHU2NCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTgwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBfX0dGUF9aRVJPKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjI6XFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtXFx1MDAzZWFyY2guY3R4dC52bmNyX2FycmF5KTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjMtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5jdHh0LnZuY3JfYXJyYXkgPSBOVUxMO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MjUxPXN0YXRpYyBpbnQgd2Fsa19uZXN0ZWRfczJfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgaXBhLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMjU2LVxcdHVuc2lnbmVkIGludCBhZGRyX3RvcCwgYWRkcl9ib3R0b207XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MjU3OlxcdHU2NCBkZXNjLCBuZXdfZGVzYzsgIC8qIHBhZ2UgdGFibGUgZW50cnkgKi9cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0yNTgtXFx0aW50IHJldDtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyNzA9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMDMtICogICAodW5sZXNzIHdlIGFyZSBwcmVlbXB0ZWQpLCBzbyB0aGUgcmVzb2x1dGlvbiBvZiBhIHRyYW5zbGF0aW9uIGZhdWx0XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMwNDogKiAgIG11c3QgZ28gdmlhIGEgcmVxdWVzdCB0aGF0IHdpbGwgbWFwIHRoZSBWTkNSIHBhZ2UgaW4gdGhlIGZpeG1hcC5cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzA1LSAqICAgdmNwdV9sb2FkKCkgbWlnaHQgYXMgd2VsbCB1c2UgdGhlIHNhbWUgbWVjaGFuaXNtLlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMxNC0gKiAtIE9uIGFueSBUTEJJIGZvciB0aGUgRUwyXFx1MDAyNjAgdHJhbnNsYXRpb24gcmVnaW1lLCB3ZSBtdXN0IGZpbmQgYW55IFRMQiB0aGF0XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMxNTogKiAgIGludGVyc2VjdHMgd2l0aCB0aGUgVExCSSByZXF1ZXN0LCBpbnZhbGlkYXRlIGl0LCBhbmQgdW5tYXAgdGhlIHBhZ2VcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzE2LSAqICAgZnJvbSB0aGUgZml4bWFwLiBCZWNhdXNlIHdlIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIHZjcHUtcHJpdmF0ZSBUTEJzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMyMi0gKiAgIGxvb2tpbmcgYXQgdGhlIElQQSBpbnN0ZWFkLiBUaGUgZnVubnkgcGFydCBpcyB0aGF0IHRoZXJlIG1heSBub3QgYmUgYVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzMjM6ICogICBzdGFnZS0yIG1hcHBpbmcgZm9yIHRoaXMgcGFnZSBpZiBMMSBoYXNuJ3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1RcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzI0LSAqICAgaW5zdHJ1Y3Rpb25zLlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM1Nz1zdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzYyLVxcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTM2MzpcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM2NC1cXHR1NjQgdmEsIHBmbiwgZ2ZuO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQwOS1cXHRcXHRwZm4gPSBfX2t2bV9mYXVsdGluX3BmbihtZW1zbG90LCBnZm4sIHdyaXRlX2ZhdWx0ID8gRk9MTF9XUklURSA6IDAsXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQxMDpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2d3JpdGFibGUsIFxcdTAwMjZwYWdlKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDExLVxcdFxcdGlmIChpc19lcnJvcl9ub3Nsb3RfcGZuKHBmbikgfHwgKHdyaXRlX2ZhdWx0IFxcdTAwMjZcXHUwMDI2ICF3cml0YWJsZSkpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDIzLVxcdFxcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeSh2Y3B1LVxcdTAwM2Vrdm0sIG1tdV9zZXEpKSB7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQyNDpcXHRcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBwYWdlLCB0cnVlLCBmYWxzZSk7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQyNS1cXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MzMtXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BUF9MMV9WTkNSX0VMMiwgdmNwdSk7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQzNDpcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBwYWdlLCBmYWxzZSwgdnQtXFx1MDAzZXdyLnB3KTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDM1LVxcdH1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE0MzctXFx0aWYgKHZ0LVxcdTAwM2V3ci5wdylcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNDM4OlxcdFxcdG1hcmtfcGFnZV9kaXJ0eSh2Y3B1LVxcdTAwM2Vrdm0sIGdmbik7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQzOS1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE2MDQ9dTY0IGxpbWl0X252X2lkX3JlZyhzdHJ1Y3Qga3ZtICprdm0sIHUzMiByZWcsIHU2NCB2YWwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNjYxLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2NjI6XFx0XFx0LyogRGlzYWxsb3cgdW5zdXBwb3J0ZWQgUzIgcGFnZSBzaXplcyAqL1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2NjMtXFx0XFx0c3dpdGNoIChQQUdFX1NJWkUpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE2NzUtXFx0XFx0LypcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNjc2OlxcdFxcdCAqIFNpbmNlIHdlIGNhbid0IHN1cHBvcnQgYSBndWVzdCBTMiBwYWdlIHNpemUgc21hbGxlclxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2Nzc6XFx0XFx0ICogdGhhbiB0aGUgaG9zdCdzIG93biBwYWdlIHNpemUgKGR1ZSB0byBLVk0gb25seVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE2Nzg6XFx0XFx0ICogcG9wdWxhdGluZyBpdHMgb3duIFMyIHVzaW5nIHRoZSBrZXJuZWwncyBwYWdlXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTY3OS1cXHRcXHQgKiBzaXplKSwgYWR2ZXJ0aXNlIHRoZSBsaW1pdGF0aW9uIHVzaW5nIEZFQVRfR1RHLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMzo1MTo1Ny43ODg4NjI1NDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwNTcxODk1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gUmlzayBvZiBVbmluaXRpYWxpemVkIE1lbW9yeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBwYWdlYCBpcyBzdGlsbCBpbiB1c2Ugd2l0aGluIGBrdm1fdHJhbnNsYXRlX3ZuY3JgIHdoZW4gaXQncyAqbm90KiBhIGdtZW0gY2FzZS4gSXQncyBwcm9wZXJseSBoYW5kbGVkLCB0aG91Z2gsIHdpdGggYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAgaGFuZGxpbmcgdGhlIHJlbGVhc2Ugd2hlbiBgcGFnZWAgaXMgdmFsaWQuIElmIGl0ICppcyogZ21lbSwgYHBhZ2VgIGlzIE5VTEwsIGFuZCBga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgTlVMTCBjYXNlLiBUaGF0J3MgZmluZS5cblxuVGhlbiBJIGNoZWNrZWQgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBhbmQgc2F3IHRoZSBhZGRpdGlvbiBvZiBgbW11X3NlcWAgYW5kIGBtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5gLiBUaGlzIGlzIGNsYXNzaWMgS1ZNIGNvbmN1cnJlbmN5IGhhbmRsaW5nIGZvciBSTVAgZmF1bHRzIOKAkyBpdCdzIGFsbCBhYm91dCBjaGVja2luZyBpZiB0aGUgTU1VIHNlcXVlbmNlIGhhcyBjaGFuZ2VkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gTm8gY29uY2VybnMgdGhlcmU7IGl0J3Mgcm9idXN0IGFuZCBzdGFuZGFyZCBwcmFjdGljZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5OZXh0LCBJIGRyaWxsZWQgaW50byBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgYW5kIGBrdm1fZ21lbV9nZXRfcGZuYC4gSGVyZSdzIHRoZSBjb3JlIGNoYW5nZS4gVGhlIGZ1bmN0aW9uICp1c2VkKiB0byByZXR1cm4gYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXIgdG8gdGhlIGNhbGxlciwgYnV0IG5vdyBpdCBkcm9wcyB0aGUgZm9saW8gcmVmZXJlbmNlIGltbWVkaWF0ZWx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgbWVhbnMgdGhlIGNhbGxlciAqZG9lc24ndCogaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgcGFnZSBhbnltb3JlLiBJcyB0aGlzIHNhZmU/IEkgdGhvdWdodCB0aHJvdWdoIGl0LCBhbmQgSSBiZWxpZXZlIGl0IGlzLiBUaGUgcGFnZSBpcyBwaW5uZWQgYmVjYXVzZSBvZiB0aGUgYGd1ZXN0X21lbWZkYCBmaWxlLCBhbmQgS1ZNIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoYXQgZmlsZS4gRXZlbiBpZiB0aGVyZSdzIGEgYnVnIGhlcmUgKGxpa2UgYSB1c2UtYWZ0ZXItZnJlZSksIGl0J3MgYSBVQUYsIGFuZCBLQVNBTiBzaG91bGQgZWFzaWx5IGRldGVjdCB0aGF0LiBDcnVjaWFsbHksIGl0J3MgKm5vdCogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXG5cblNvLCB0aGUgcGF0Y2ggaXMgcmVhbGx5IGp1c3QgcmVmYWN0b3JpbmcgYW5kIGNvbmN1cnJlbmN5IGZpeGVzLiBUaGUgdXBkYXRlcyBhY3Jvc3MgdGhlIGNvZGUgdGhhdCByZW1vdmVkIGBwYWdlYCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGNhbGxzIHNpbXBseSByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gYGt2bV9nbWVtX2dldF9wZm5gLiBUaGUgYWRkaXRpb24gb2YgdGhlIE1NVSBzZXF1ZW5jZSBjaGVja3MgaW4gdGhlIFJNUCBmYXVsdCBoYW5kbGVyIGFkZHJlc3NlcyBhIGtub3duIHJhY2UgY29uZGl0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBkb24ndCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBhbmQgZG9uJ3QgY2hhbmdlIGhvdyBib3VuZHMgY2hlY2tpbmcgd29ya3MgaW4gYSB3YXkgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgd291bGQgcHJlc2VudCBhcyBVQUZzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgaXNzdWVzIGFyZSB2ZXJ5IGxpa2VseSB0byBiZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQvb3IgTE9DS0RFUC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcmlzaywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpc24ndCBuZWVkZWQgaGVyZS4gSSdtIGdvaW5nIHRvIHdyaXRlIHRoYXQgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNjMsIk91dHB1dFRva2VucyI6MjgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIzOjUyOjEwLjg0NjA2MzAzNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX2dldF9wZm5gIHRvIG5vIGxvbmdlciByZXR1cm4gYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXIgdG8gdGhlIGNhbGxlciwgaW5zdGVhZCBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGltbWVkaWF0ZWx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGFjcm9zcyBhcm02NCBhbmQgeDg2IEtWTSBjb2RlIHRvIHJlbW92ZSB0aGUgYHBhZ2VgIGFyZ3VtZW50IGFuZCBhc3NvY2lhdGVkIGNsZWFudXAgY2FsbHMgKGUuZy4sIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmApLiBBZGRpdGlvbmFsbHksIGl0IGFkZHMgTU1VIHNlcXVlbmNlIGNoZWNraW5nIChgbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuYCkgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUk1QIGZhdWx0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9nbWVtX2dldF9wZm5gIHRvIG5vIGxvbmdlciByZXR1cm4gYSBgc3RydWN0IHBhZ2VgIHBvaW50ZXIgdG8gdGhlIGNhbGxlciwgaW5zdGVhZCBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGltbWVkaWF0ZWx5IHdpdGhpbiB0aGUgZnVuY3Rpb24uIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGFjcm9zcyBhcm02NCBhbmQgeDg2IEtWTSBjb2RlIHRvIHJlbW92ZSB0aGUgYHBhZ2VgIGFyZ3VtZW50IGFuZCBhc3NvY2lhdGVkIGNsZWFudXAgY2FsbHMgKGUuZy4sIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmApLiBBZGRpdGlvbmFsbHksIGl0IGFkZHMgTU1VIHNlcXVlbmNlIGNoZWNraW5nIChgbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuYCkgaW4gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUk1QIGZhdWx0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3Jpbmcgb2YgcGFnZSByZWZlcmVuY2UgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgZml4ZXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFkZCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkbyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBwcmVtYXR1cmUgcGFnZSBmcmVlaW5nIG9yIHJhY2UgY29uZGl0aW9ucykgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[1] Phase: Succeeded StartedAt: 2026-08-20 23:52:24 +0000 UTC FinishedAt: 2026-08-20 23:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 23:52:24 +0000 UTC FinishedAt: 2026-08-20 23:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2] Phase: Succeeded StartedAt: 2026-08-20 23:52:24 +0000 UTC FinishedAt: 2026-08-21 03:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 23:52:24 +0000 UTC FinishedAt: 2026-08-21 03:33:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 23:52:24 +0000 UTC FinishedAt: 2026-08-20 23:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 23:52:24 +0000 UTC FinishedAt: 2026-08-20 23:52:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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-workflowlmdzr/series-workflowlmdzr-convert-artifact-513398409/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 23:52:34 +0000 UTC FinishedAt: 2026-08-21 00:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 23:52:34 +0000 UTC FinishedAt: 2026-08-21 00:09:59 +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:*d4b3a707-ec99-4318-b460-db13fb72d991,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-workflowlmdzr/series-workflowlmdzr-convert-artifact-513398409/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": "b7593e6d-eef7-4af9-80dc-1de5ef8d5788", "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-workflowlmdzr/series-workflowlmdzr-build-action-590516071/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 23:52:34 +0000 UTC FinishedAt: 2026-08-21 00:09:49 +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:*d4b3a707-ec99-4318-b460-db13fb72d991,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-workflowlmdzr/series-workflowlmdzr-convert-artifact-513398409/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": "b7593e6d-eef7-4af9-80dc-1de5ef8d5788", "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-workflowlmdzr/series-workflowlmdzr-build-action-590516071/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 00:09:59 +0000 UTC FinishedAt: 2026-08-21 00:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 00:09:59 +0000 UTC FinishedAt: 2026-08-21 00:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 00:09:59 +0000 UTC FinishedAt: 2026-08-21 00:10:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 00:09:59 +0000 UTC FinishedAt: 2026-08-21 00:10:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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-workflowlmdzr/series-workflowlmdzr-convert-artifact-3241580444/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 00:10:09 +0000 UTC FinishedAt: 2026-08-21 00:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 00:10:09 +0000 UTC FinishedAt: 2026-08-21 00:12:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b7593e6d-eef7-4af9-80dc-1de5ef8d5788,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-workflowlmdzr/series-workflowlmdzr-build-action-590516071/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-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 00:12:17 +0000 UTC FinishedAt: 2026-08-21 00:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 00:12:17 +0000 UTC FinishedAt: 2026-08-21 00:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 00:12:17 +0000 UTC FinishedAt: 2026-08-21 00:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 00:12:17 +0000 UTC FinishedAt: 2026-08-21 00:28:30 +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:*d4b3a707-ec99-4318-b460-db13fb72d991,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-workflowlmdzr/series-workflowlmdzr-convert-artifact-3241580444/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": "ebc4ead5-c330-411c-a6a0-ce7ad0bc9266", "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-workflowlmdzr/series-workflowlmdzr-build-action-824982264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 00:12:17 +0000 UTC FinishedAt: 2026-08-21 00:28:20 +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:*d4b3a707-ec99-4318-b460-db13fb72d991,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-workflowlmdzr/series-workflowlmdzr-convert-artifact-3241580444/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": "ebc4ead5-c330-411c-a6a0-ce7ad0bc9266", "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-workflowlmdzr/series-workflowlmdzr-build-action-824982264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 00:28:30 +0000 UTC FinishedAt: 2026-08-21 00:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 00:28:30 +0000 UTC FinishedAt: 2026-08-21 00:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 00:28:30 +0000 UTC FinishedAt: 2026-08-21 00:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 00:28:30 +0000 UTC FinishedAt: 2026-08-21 00:30:44 +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:*ebc4ead5-c330-411c-a6a0-ce7ad0bc9266,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-workflowlmdzr/series-workflowlmdzr-build-action-824982264/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-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 00:30:53 +0000 UTC FinishedAt: 2026-08-21 03:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 00:30:53 +0000 UTC FinishedAt: 2026-08-21 03:33:27 +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_gmem_get_pfn","sev_handle_rmp_fault"],"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:*b7593e6d-eef7-4af9-80dc-1de5ef8d5788,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebc4ead5-c330-411c-a6a0-ce7ad0bc9266,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-workflowlmdzr/series-workflowlmdzr-build-action-590516071/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-workflowlmdzr/series-workflowlmdzr-build-action-824982264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 00:30:53 +0000 UTC FinishedAt: 2026-08-21 00:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 00:30:53 +0000 UTC FinishedAt: 2026-08-21 00:30:58 +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_gmem_get_pfn","sev_handle_rmp_fault"],"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-workflowlmdzr/series-workflowlmdzr-convert-artifact-2638911845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 00:30:53 +0000 UTC FinishedAt: 2026-08-21 00:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 00:30:53 +0000 UTC FinishedAt: 2026-08-21 00:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 00:30:53 +0000 UTC FinishedAt: 2026-08-21 00:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 00:31:04 +0000 UTC FinishedAt: 2026-08-21 03:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmdzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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_gmem_get_pfn","sev_handle_rmp_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"4dfe639f-b62b-4d95-9bef-04b64f4556b1","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 00:31:04 +0000 UTC FinishedAt: 2026-08-21 03:33:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b7593e6d-eef7-4af9-80dc-1de5ef8d5788,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebc4ead5-c330-411c-a6a0-ce7ad0bc9266,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-workflowlmdzr/series-workflowlmdzr-build-action-590516071/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-workflowlmdzr/series-workflowlmdzr-build-action-824982264/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-workflowlmdzr/series-workflowlmdzr-convert-artifact-2638911845/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,}