Name: series-workflowth4mw Phase: Succeeded StartedAt: 2026-08-12 08:53:52 +0000 UTC FinishedAt: 2026-08-12 12:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[0] Phase: Succeeded StartedAt: 2026-08-12 08:53:52 +0000 UTC FinishedAt: 2026-08-12 08:57:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 08:53:52 +0000 UTC FinishedAt: 2026-08-12 08:57:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_IOAPIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_IOAPIC" ], "series_id": "91484fc2-d0eb-4529-aa80-9b7ee86c4a97" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_ioapic_set_irq", "kvm_ioapic_update_eoi", "ioapic_mmio_write" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU9BUElDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2lvYXBpY19zZXRfaXJxJiMzNDssCiAgICAmIzM0O2t2bV9pb2FwaWNfdXBkYXRlX2VvaSYjMzQ7LAogICAgJiMzNDtpb2FwaWNfbW1pb193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvZ2ljIGJ1Z3MgaW4gdGhlIEtWTSBJT0FQSUMgc3RhdGUgbWFjaGluZSAoc3BlY2lmaWNhbGx5LCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZGVsaXZlcnkgc3RhdGUgYW5kIHJlbW90ZV9pcnIgdHJhY2tpbmcpLiBJdCBtb2RpZmllcyBjb25kaXRpb25hbCBjaGVja3MgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQgc3RhdGUgdmFyaWFibGVzIChsaWtlIGBpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIHdoaWxlIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIElPQVBJQyBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZWlyIGRlbGl2ZXJ5IHN0YXRlIChpcnJfZGVsaXZlcmVkIGFuZCByZW1vdGVfaXJyKSBpcyB1cGRhdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgZGVsaXZlcnkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBjMDAyMGVlNzMyNzg4OGQ2YjMwZDJkMWY1MGU4NTViNzliNjU5MmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODo1NTo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbmluZGV4IDc1NzY2N2ZiMmJmYTAuLjgxZGIwMjVkMmFjOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuQEAgLTIzMCwxMSAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4gXHRvbGRfaXJyID0gaW9hcGljLVx1MDAzZWlycjtcbiBcdGlvYXBpYy1cdTAwM2VpcnIgfD0gbWFzaztcbiBcdGlmIChlZGdlKSB7XG4tXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpIHtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1x0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0fVxuIFxuIFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcbkBAIC0zNzcsOCAmIzQzOzM3NywxNyBAQCBzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbClcbiBcdFx0ICogYXMgZWRnZS10cmlnZ2VyZWQuIFRoaXMgYmVoYXZpb3IgaXMgdXNlZCB0byBzaW11bGF0ZSBhblxuIFx0XHQgKiBleHBsaWNpdCBFT0kgb24gSU9BUElDcyB0aGF0IGRvbiYjMzk7dCBoYXZlIHRoZSBFT0kgcmVnaXN0ZXIuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZS1cdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpXG4mIzQzO1x0XHRpZiAoZS1cdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpIHtcbiBcdFx0XHRlLVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIGlycl9kZWxpdmVyZWQgdHJhY2tzIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgdGhhdFxuJiM0MztcdFx0XHQgKiBoYXZlIGFscmVhZHkgYmVlbiBkZWxpdmVyZWQuICBDbGVhciBzdGFsZSBlZGdlLXRyaWdnZXJlZFxuJiM0MztcdFx0XHQgKiBkZWxpdmVyeSBzdGF0ZSB3aGVuIHRoZSBlbnRyeSBpcyBjb25maWd1cmVkIGZvclxuJiM0MztcdFx0XHQgKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyBpbmRleCk7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG1hc2tfYWZ0ZXIgPSBlLVx1MDAzZWZpZWxkcy5tYXNrO1xuIFx0XHRpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcilcbkBAIC00OTEsNyAmIzQzOzUwMCw3IEBAIHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVx1MDAzZWt2bSwgTlVMTCwgXHUwMDI2aXJxZSk7XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiBcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfZmVhdHVyZXNcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfaXBpXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3N2bV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3RsYl9mbHVzaFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjAyNGY0ZjAxNTcxN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSwxOTAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3RzIGZvciBpbi1rZXJuZWwgSS9PIEFQSUMgc3RhdGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXBpYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dWNhbGxfY29tbW9uLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXHRcdDE2XG4mIzQzOyNkZWZpbmUgVEVTVF9WRUNUT1JcdFx0MHg1MFxuJiM0MzsjZGVmaW5lIE5PX1NVQ0hfQVBJQ19JRFx0XHQweGZlXG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXHQwXG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJR1x0MVxuJiM0MzsjZGVmaW5lIElPQVBJQ19ERUZBVUxUX0dQQVx0MHhmZWMwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIElPQVBJQ19SRUdfU0VMRUNUXHQweDAwXG4mIzQzOyNkZWZpbmUgSU9BUElDX1JFR19XSU5ET1dcdDB4MTBcbiYjNDM7I2RlZmluZSBJT0FQSUNfUlRFX0xPVyhwaW4pXHQoMHgxMCAmIzQzOyAyICogKHBpbikpXG4mIzQzOyNkZWZpbmUgSU9BUElDX1JURV9UUklHX01PREVcdEJJVCgxNSlcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbiYjNDM7e1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpcnFjaGlwLVx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XG4mIzQzO1x0ciA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XG4mIzQzO1x0aWYgKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPKVxuJiM0MztcdFx0X19URVNUX1JFUVVJUkUoMCwgXCYjMzQ7SW4ta2VybmVsIEkvTyBBUElDIG5vdCBhdmFpbGFibGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVCghciwgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfSVJRQ0hJUCwgcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXG4mIzQzO3tcbiYjNDM7XHRpcnFjaGlwLVx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XG4mIzQzO1x0dm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLFxuJiM0MztcdFx0XHQgICAgIHUzMiBkZXN0X2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4mIzQzO1xuJiM0MztcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuJiM0MztcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnZlY3RvciA9XG4mIzQzO1x0XHRURVNUX1ZFQ1RPUjtcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfaWQgPVxuJiM0MztcdFx0ZGVzdF9pZDtcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfbW9kZSA9IDA7XG4mIzQzO1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy50cmlnX21vZGUgPVxuJiM0MztcdFx0bGV2ZWxfdHJpZ2dlcmVkID8gVEVTVF9JT0FQSUNfTEVWRUxfVFJJRyA6XG4mIzQzO1x0XHRcdFx0ICBURVNUX0lPQVBJQ19FREdFX1RSSUc7XG4mIzQzO1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDtcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRzZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW5hYmxlX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7XG4mIzQzO1x0dTY0IGFwaWNiYXNlO1xuJiM0MztcbiYjNDM7XHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XG4mIzQzO1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFLFxuJiM0MztcdFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4mIzQzO1x0Kih1MzIgKikobGFwaWMucmVncyAmIzQzOyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0ge1xuJiM0MztcdFx0LmlycSA9IFRFU1RfSU9BUElDX1BJTixcbiYjNDM7XHRcdC5sZXZlbCA9IGxldmVsLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fSVJRX0xJTkVfU1RBVFVTLCBcdTAwMjZpcnEpO1xuJiM0MztcdHJldHVybiBpcnEuc3RhdHVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbiYjNDM7XG4mIzQzO1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoISEoaXJxY2hpcC5jaGlwLmlvYXBpYy5pcnIgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBURVNUX0lPQVBJQ19QSU4pKSA9PSBleHBlY3RlZCxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBJT0FQSUMgSVJSIGZvciBwaW4gJXUgdG8gYmUgJXUsIGdvdCAweCV4XCYjMzQ7LFxuJiM0MztcdFx0ICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpO1xuJiM0MztcdHZtX2NyZWF0ZV9pcnFjaGlwKHZtKTtcbiYjNDM7XG4mIzQzO1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTtcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIGZhaWxlZCBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFwmIzM0Oywgc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoIWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lycixcbiYjNDM7XHRcdCAgICBcJiMzNDtLVk0gc2V0IHJlbW90ZV9pcnIgZm9yIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCB0aGF0IHdhc24mIzM5O3QgZGVsaXZlcmVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIE5VTEwpO1xuJiM0MztcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXMgXHUwMDNlIDAsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgZWRnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFwmIzM0Oywgc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuJiM0MztcdFRFU1RfQVNTRVJUKCFzdGF0dXMsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkXCYjMzQ7LFxuJiM0MztcdFx0ICAgIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgKmlvYXBpYyA9ICh1MzIgKilJT0FQSUNfREVGQVVMVF9HUEE7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoaW9hcGljW0lPQVBJQ19SRUdfU0VMRUNUIC8gc2l6ZW9mKHUzMildLFxuJiM0MztcdFx0ICAgSU9BUElDX1JURV9MT1coVEVTVF9JT0FQSUNfUElOKSk7XG4mIzQzO1x0V1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19XSU5ET1cgLyBzaXplb2YodTMyKV0sXG4mIzQzO1x0XHQgICBURVNUX1ZFQ1RPUiB8IElPQVBJQ19SVEVfVFJJR19NT0RFKTtcbiYjNDM7XG4mIzQzO1x0R1VFU1RfRE9ORSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9zd2l0Y2hfaW9hcGljX3Bpbl90b19sZXZlbCk7XG4mIzQzO1x0ZW5hYmxlX2xhcGljKHZjcHUpO1xuJiM0MztcdHZpcnRfbWFwKHZtLCBJT0FQSUNfREVGQVVMVF9HUEEsIElPQVBJQ19ERUZBVUxUX0dQQSwgMSk7XG4mIzQzO1xuJiM0MztcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzIFx1MDAzZSAwLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcJiMzNDssIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpO1xuJiM0MztcbiYjNDM7XHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIHRydWUpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCgpO1xuJiM0MztcdHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpO1xuJiM0MztcdHRlc3RfZWRnZV90b19sZXZlbF9jbGVhcnNfZGVsaXZlcnlfc3RhdGUoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JT0FQSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW9hcGljX3NldF9pcnEmIzM0OywKICAgICYjMzQ7a3ZtX2lvYXBpY191cGRhdGVfZW9pJiMzNDssCiAgICAmIzM0O2lvYXBpY19tbWlvX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlaXIgZGVsaXZlcnkgc3RhdGUgKGlycl9kZWxpdmVyZWQgYW5kIHJlbW90ZV9pcnIpIGlzIHVwZGF0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gbG9naWMgdGhhdCBhZmZlY3RzIGludGVycnVwdCBkZWxpdmVyeSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGMwMDIwZWU3MzI3ODg4ZDZiMzBkMmQxZjUwZTg1NWI3OWI2NTkyZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA4OjU1OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jCmluZGV4IDc1NzY2N2ZiMmJmYTAuLjgxZGIwMjVkMmFjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmMKQEAgLTIzMCwxMSAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsCiAJb2xkX2lyciA9IGlvYXBpYy0mZ3Q7aXJyOwogCWlvYXBpYy0mZ3Q7aXJyIHw9IG1hc2s7CiAJaWYgKGVkZ2UpIHsKLQkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzazsKIAkJaWYgKG9sZF9pcnIgPT0gaW9hcGljLSZndDtpcnIpIHsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzazsKIAl9CiAKIAlyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpOwpAQCAtMzc3LDggJiM0MzszNzcsMTcgQEAgc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpCiAJCSAqIGFzIGVkZ2UtdHJpZ2dlcmVkLiBUaGlzIGJlaGF2aW9yIGlzIHVzZWQgdG8gc2ltdWxhdGUgYW4KIAkJICogZXhwbGljaXQgRU9JIG9uIElPQVBJQ3MgdGhhdCBkb24mIzM5O3QgaGF2ZSB0aGUgRU9JIHJlZ2lzdGVyLgogCQkgKi8KLQkJaWYgKGUtJmd0O2ZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0VER0VfVFJJRykKJiM0MzsJCWlmIChlLSZndDtmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpIHsKIAkJCWUtJmd0O2ZpZWxkcy5yZW1vdGVfaXJyID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBpcnJfZGVsaXZlcmVkIHRyYWNrcyBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIHRoYXQKJiM0MzsJCQkgKiBoYXZlIGFscmVhZHkgYmVlbiBkZWxpdmVyZWQuICBDbGVhciBzdGFsZSBlZGdlLXRyaWdnZXJlZAomIzQzOwkJCSAqIGRlbGl2ZXJ5IHN0YXRlIHdoZW4gdGhlIGVudHJ5IGlzIGNvbmZpZ3VyZWQgZm9yCiYjNDM7CQkJICogbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMuCiYjNDM7CQkJICovCiYjNDM7CQkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+KDEgJmx0OyZsdDsgaW5kZXgpOwomIzQzOwkJfQogCiAJCW1hc2tfYWZ0ZXIgPSBlLSZndDtmaWVsZHMubWFzazsKIAkJaWYgKG1hc2tfYmVmb3JlICE9IG1hc2tfYWZ0ZXIpCkBAIC00OTEsNyAmIzQzOzUwMCw3IEBAIHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cykKIAl9IGVsc2UKIAkJcmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy0mZ3Q7a3ZtLCBOVUxMLCAmYW1wO2lycWUpOwogCi0JaWYgKHJldCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQomIzQzOwlpZiAocmV0ICZndDsgMCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQogCQllbnRyeS0mZ3Q7ZmllbGRzLnJlbW90ZV9pcnIgPSAxOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDZmYzM0ZTliZjhlMWIuLjg5ZTNmODJlNzViMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtODYsNiAmIzQzOzg2LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X2ZlYXR1cmVzCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfaXBpCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfc3ZtX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2h5cGVydl90bGJfZmx1c2gKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX2Nsb2NrX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9wdl90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjAyNGY0ZjAxNTcxNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwxOTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3RzIGZvciBpbi1rZXJuZWwgSS9PIEFQSUMgc3RhdGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDthcGljLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt1Y2FsbF9jb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0lPQVBJQ19QSU4JCTE2CiYjNDM7I2RlZmluZSBURVNUX1ZFQ1RPUgkJMHg1MAomIzQzOyNkZWZpbmUgTk9fU1VDSF9BUElDX0lECQkweGZlCiYjNDM7I2RlZmluZSBURVNUX0lPQVBJQ19FREdFX1RSSUcJMAomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJRwkxCiYjNDM7I2RlZmluZSBJT0FQSUNfREVGQVVMVF9HUEEJMHhmZWMwMDAwMFVMTAomIzQzOyNkZWZpbmUgSU9BUElDX1JFR19TRUxFQ1QJMHgwMAomIzQzOyNkZWZpbmUgSU9BUElDX1JFR19XSU5ET1cJMHgxMAomIzQzOyNkZWZpbmUgSU9BUElDX1JURV9MT1cocGluKQkoMHgxMCAmIzQzOyAyICogKHBpbikpCiYjNDM7I2RlZmluZSBJT0FQSUNfUlRFX1RSSUdfTU9ERQlCSVQoMTUpCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKQomIzQzO3sKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWlycWNoaXAtJmd0O2NoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7CiYjNDM7CXIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApOwomIzQzOwlpZiAociAmYW1wOyZhbXA7IGVycm5vID09IEVOWElPKQomIzQzOwkJX19URVNUX1JFUVVJUkUoMCwgJiMzNDtJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZSYjMzQ7KTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKQomIzQzO3sKJiM0MzsJaXJxY2hpcC0mZ3Q7Y2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLAomIzQzOwkJCSAgICAgdTMyIGRlc3RfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDsKJiM0MzsKJiM0MzsJZ2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0MzsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy52ZWN0b3IgPQomIzQzOwkJVEVTVF9WRUNUT1I7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9CiYjNDM7CQlkZXN0X2lkOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfbW9kZSA9IDA7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudHJpZ19tb2RlID0KJiM0MzsJCWxldmVsX3RyaWdnZXJlZCA/IFRFU1RfSU9BUElDX0xFVkVMX1RSSUcgOgomIzQzOwkJCQkgIFRFU1RfSU9BUElDX0VER0VfVFJJRzsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5hYmxlX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7CiYjNDM7CXU2NCBhcGljYmFzZTsKJiM0MzsKJiM0MzsJYXBpY2Jhc2UgPSB2Y3B1X2dldF9tc3IodmNwdSwgTVNSX0lBMzJfQVBJQ0JBU0UpOwomIzQzOwl2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0lBMzJfQVBJQ0JBU0UsCiYjNDM7CQkgICAgIGFwaWNiYXNlIHwgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKTsKJiM0MzsJdmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCAmYW1wO2xhcGljKTsKJiM0MzsJKih1MzIgKikobGFwaWMucmVncyAmIzQzOyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7CiYjNDM7CXZjcHVfaW9jdGwodmNwdSwgS1ZNX1NFVF9MQVBJQywgJmFtcDtsYXBpYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0gewomIzQzOwkJLmlycSA9IFRFU1RfSU9BUElDX1BJTiwKJiM0MzsJCS5sZXZlbCA9IGxldmVsLAomIzQzOwl9OwomIzQzOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgJmFtcDtpcnEpOwomIzQzOwlyZXR1cm4gaXJxLnN0YXR1czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CVRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyICZhbXA7ICgxICZsdDsmbHQ7IFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgSU9BUElDIElSUiBmb3IgcGluICV1IHRvIGJlICV1LCBnb3QgMHgleCYjMzQ7LAomIzQzOwkJICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzKCk7CiYjNDM7CXZtX2NyZWF0ZV9pcnFjaGlwKHZtKTsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTsKJiM0MzsKJiM0MzsJc3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGZhaWxlZCBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwlnZXRfaW9hcGljKHZtLCAmYW1wO2lycWNoaXApOwomIzQzOwlURVNUX0FTU0VSVCghaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyLAomIzQzOwkJICAgICYjMzQ7S1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJiMzOTt0IGRlbGl2ZXJlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBOVUxMKTsKJiM0MzsJZW5hYmxlX2xhcGljKHZjcHUpOwomIzQzOwomIzQzOwlzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS0mZ3Q7aWQpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzICZndDsgMCwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWQmIzM0Oywgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpOwomIzQzOwlURVNUX0FTU0VSVCghc3RhdHVzLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkJiMzNDssCiYjNDM7CQkgICAgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3Rfc3dpdGNoX2lvYXBpY19waW5fdG9fbGV2ZWwodm9pZCkKJiM0Mzt7CiYjNDM7CXUzMiAqaW9hcGljID0gKHUzMiAqKUlPQVBJQ19ERUZBVUxUX0dQQTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19TRUxFQ1QgLyBzaXplb2YodTMyKV0sCiYjNDM7CQkgICBJT0FQSUNfUlRFX0xPVyhURVNUX0lPQVBJQ19QSU4pKTsKJiM0MzsJV1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19XSU5ET1cgLyBzaXplb2YodTMyKV0sCiYjNDM7CQkgICBURVNUX1ZFQ1RPUiB8IElPQVBJQ19SVEVfVFJJR19NT0RFKTsKJiM0MzsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3Rfc3dpdGNoX2lvYXBpY19waW5fdG9fbGV2ZWwpOwomIzQzOwllbmFibGVfbGFwaWModmNwdSk7CiYjNDM7CXZpcnRfbWFwKHZtLCBJT0FQSUNfREVGQVVMVF9HUEEsIElPQVBJQ19ERUZBVUxUX0dQQSwgMSk7CiYjNDM7CiYjNDM7CXNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LSZndDtpZCk7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXMgJmd0OyAwLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgZWRnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwlhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CVRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBOVUxMKSwgVUNBTExfRE9ORSk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgdHJ1ZSk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4odm9pZCkKJiM0Mzt7CiYjNDM7CXRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7CiYjNDM7CXRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpOwomIzQzOwl0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNQoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDU4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIElPQVBJQyBFbXVsYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgdGhlIElPQVBJQyB3b3JrcyBpbiBLVk0sIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseSB0byBldmFsdWF0ZSBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUga2V5IGFyZWFzOgoKMS4gIGBpb2FwaWNfc2V0X2lycWA6IEl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYmVlbiBhIG1vZGlmaWNhdGlvbiByZWxhdGVkIHRvIGhvdyBgaXJyX2RlbGl2ZXJlZGAgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSBmb3IgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cy4gVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgbG9vayBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYW4gZWRnZSBjYXNlIG9yIGEgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBpbnRlcnJ1cHQgZGVsaXZlcnkuCjIuICBgaW9hcGljX3dyaXRlX2luZGlyZWN0YDogQWdhaW4sIHdlIHNlZSBtb3JlIGNoYW5nZXMgcmVsYXRlZCB0byBgaXJyX2RlbGl2ZXJlZGAgYnV0IHRoaXMgdGltZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaW50ZXJydXB0IGVudHJ5IGNvbmZpZ3VyYXRpb25zLiBUaGUgbG9naWMgc2VlbXMgdG8gZW5zdXJlIHRoYXQgc3RhbGUgZWRnZS10cmlnZ2VyZWQgc3RhdGUgaXMgY2xlYXJlZCB3aGVuIHN3aXRjaGluZyBhbiBlbnRyeSB0byBsZXZlbC10cmlnZ2VyZWQuCjMuICBgaW9hcGljX3NlcnZpY2VgOiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgaW4gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGByZW1vdGVfaXJyYCBmbGFnLiBUaGlzIHNlZW1zIHRvIGJlIG1hbmFnaW5nIHRoZSBhY2tub3dsZWRnZW1lbnQgb2YgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgd2l0aGluIHRoZSBJT0FQSUMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCwgd2hpY2ggc3VnZ2VzdHMgYSBtb2RpZmljYXRpb24gb2YgdGhlIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYywgbWF5YmUgaW52b2x2aW5nIGVkZ2UtdHJpZ2dlcmVkIHZzLiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IGhhbmRsaW5nLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkgYW5kIHRhcmdldGVkIGZ1enppbmcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCB3aGVyZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGVzZSBmdW5jdGlvbnM/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHBvdGVudGlhbCBwYXRocyBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBmdXp6LiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBwYXRocyBmb3IgZWZmZWN0aXZlIGZ1enppbmcuIFRpbWUgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLiBJIHdpbGwgZm9jdXMgb24gdGhlIHJlbGF0ZWQgY29kZS4KVGhlIEtWTSBjb25maWcgaXRzZWxmIHdpbGwgYmUgdGhlIGZvY3VzLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8Ym9vbHx1MzJ8dTY0KS4qIGlvYXBpY18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRlYnVnZ2luZyBhIEdyZXAgRXhwcmVzc2lvbioqCgpIbW0sIEkgc3VzcGVjdCBteSBgZ3JlcGAgZXhwcmVzc2lvbiBpc24mIzM5O3QgcXVpdGUgcmlnaHQuIFRoYXQmIzM5O3MgYSBjb21tb24gc25hZyB3aXRoIHRoZXNlIHRoaW5nczsgaXQmIzM5O3MgZWFzeSB0byBnZXQgdGhlIHN5bnRheCBqdXN0IHNsaWdodGx5IG9mZiBhbmQgbWlzcyB3aGF0IHlvdSYjMzk7cmUgbG9va2luZyBmb3IuIEluc3RlYWQgb2Ygc3BlbmRpbmcgbW9yZSB0aW1lIHR3ZWFraW5nIGl0LCBsZXQmIzM5O3MganVzdCBhcHByb2FjaCB0aGlzIG1ldGhvZGljYWxseS4gSSBjYW4gZWl0aGVyIHNpbXBseSByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCB2aXN1YWxseSBzY2FubmluZyBmb3IgdGhlIHBhdHRlcm4sIG9yIEkgY2FuIHJlZmluZSB0aGUgYGdyZXBgIGFwcHJvYWNoLiBQZXJoYXBzIHRyeWluZyB0byBpZGVudGlmeSB0aGUgcGF0dGVybiBgXi4qIGt2bV9pb2FwaWNfLipcKGAgd2lsbCBwcm92ZSBtb3JlIHN1Y2Nlc3NmdWwuIEkga25vdyB0aGF0IEkmIzM5O20gbG9va2luZyBmb3IgYSBsaW5lIHRoYXQgc3RhcnRzIChgXmApIHdpdGggYW55dGhpbmcgKGAuKmApLCBmb2xsb3dlZCBieSB0aGUgc3RyaW5nIGAga3ZtX2lvYXBpY19gLCBmb2xsb3dlZCBieSBhbnl0aGluZyAoYC4qYCksIGFuZCBlbmRzIHdpdGggYW4gb3BlbmluZyBwYXJlbnRoZXNpcyAoYFwoYCkuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBtaWdodCBnZXQgbWUgY2xvc2VyIHRvIHRoZSByZWxldmFudCBsaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteLioga3ZtX2lvYXBpY18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTg3PXN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ2LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0NzpzdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI1OTp2b2lkIGt2bV9pb2FwaWNfc2Nhbl9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nICppb2FwaWNfaGFuZGxlZF92ZWN0b3JzKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI2MC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTQ2Nj1zdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUwOC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1MDk6aW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxMC1cdFx0ICAgICAgIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUyOC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1Mjk6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUzMC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU0Ny0jZGVmaW5lIElPQVBJQ19TVUNDRVNTSVZFX0lSUV9NQVhfQ09VTlQgMTAwMDBcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1NDg6c3RhdGljIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQ5LVx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTk0LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU5NTp2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTk2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NjYzPXN0YXRpYyBpbnQgaW9hcGljX21taW9fd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzA0LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcwNTpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3Jlc2V0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzA2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MjUtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzI2OmludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTcyNy17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc1Mi1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo3NTM6dm9pZCBrdm1faW9hcGljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc1NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYzMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIElPQVBJQyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgaW50byB0aGlzIElPQVBJQyBjb2RlIGZvciB3aGF0ZXZlciBhbmFseXNpcyBJJiMzOTttIGRvaW5nLiBMZXQmIzM5O3Mgc2VlLCBpbml0aWFsbHksIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBJIGlkZW50aWZpZWQgd2VyZSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCAqcG90ZW50aWFsbHkqIGBpb2FwaWNfbW1pb193cml0ZWAuIEhvbGQgb24sIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgc3RhdGljLCByaWdodD8gWWVzLCBpdCBpcy4gQnV0LCBpdCYjMzk7cyBhbiBNTUlPIGhhbmRsZXIsIHNvIGl0JiMzOTtzIGEgY2FsbGJhY2sgYW5kIHBvdGVudGlhbGx5IGEgZ29vZCBlbnRyeSBwb2ludC4gVGhlbiBJIHJlYWxpemVkIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIGNhbGxlZCBmcm9tIGBpb2FwaWNfbW1pb193cml0ZWAgYW5kIGBpb2FwaWNfc2V0X2lycWAgaXMgY2FsbGVkIGZyb20gYGt2bV9pb2FwaWNfc2V0X2lycWAsIGFuZCBmaW5hbGx5LCBgaW9hcGljX3NlcnZpY2VgIGlzIGNhbGxlZCBmcm9tIGBpb2FwaWNfc2V0X2lycWAuCgpBbHJpZ2h0LCB0aGUgY29yZSBtb2RpZmllZCBjb2RlIHNlZW1zIHRvIGJlIHJlYWNoYWJsZSBmcm9tIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gVGhhdCBsb29rcyBnb29kLgoKQnV0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBpbmxpbmVkLiBJdCBsb29rcyBsaWtlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgZGVmaW5lZCB3aXRoaW4gYSBzdHJ1Y3R1cmUsIHNvIGl0JiMzOTtzIG5vdCBpbmxpbmVkLgoKVGhlIGJlc3QgdGhpbmcgdG8gZG8gaXMgdG8gbGlzdCBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAuCgpJIHdpbGwgYWxzbyBjaGVjayBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCBmb3IgY2FsbGVycyBvZiBgaW9hcGljX3dyaXRlX2luZGlyZWN0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2FwaWNfd3JpdGVfaW5kaXJlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTMxND12b2lkIGt2bV9maXJlX21hc2tfbm90aWZpZXJzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluLFxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zMzAtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MzMxOnN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTMzMi17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTY2Mz1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTY5NC1cdGNhc2UgSU9BUElDX1JFR19XSU5ET1c6XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Njk1Olx0XHRpb2FwaWNfd3JpdGVfaW5kaXJlY3QoaW9hcGljLCBkYXRhKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02OTYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgSU9BUElDIFdyaXRlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdyaXRlcyB0byB0aGUgSU9BUElDIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIGNhbGxlZCBmcm9tIGBpb2FwaWNfbW1pb193cml0ZWAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB3aGljaCBtYWtlcyBzZW5zZS4gSSByZWNvZ25pemUgYGlvYXBpY19tbWlvX3dyaXRlYCBhcyBhIGNhbGxiYWNrIHdpdGhpbiB0aGUgYGlvYXBpY19tbWlvX29wc2Agc3RydWN0dXJlLiBTZWVtcyBsaWtlIGEgc3RhbmRhcmQgTU1JTyBhcHByb2FjaC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0aGluZ3MgY2FuIGJlIHdyaXR0ZW4uCgpJJiMzOTttIGNoZWNraW5nIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggd291bGQgaW5kaWNhdGUgdGhleSBoYXZlIGV4dGVybmFsIGxpbmthZ2UuIExvb2tzIGxpa2UgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgbm9uLXN0YXRpYy4gR29vZCwgYSBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgaW50ZXJydXB0cyBhcmUgYWN0dWFsbHkgc2V0LCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkLiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgIGFuZCBzZWFyY2ggZm9yIGNhbGxlcnMgb2YgYGlvYXBpY19zZXRfaXJxYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9hcGljX3NldF9pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTE2NT1zdGF0aWMgdm9pZCBpb2FwaWNfbGF6eV91cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTE4Ni1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoxODc6c3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTE4OC1cdFx0aW50IGlycV9sZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQyLW91dDpcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDM6XHR0cmFjZV9rdm1faW9hcGljX3NldF9pcnEoZW50cnkuYml0cywgaXJxLCByZXQgPT0gMCk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ0LVx0cmV0dXJuIHJldDtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9MjQ3PXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfaW5qZWN0X2FsbChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBsb25nIGlycilcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjUyLVx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIFx1MDAyNmlyciwgSU9BUElDX05VTV9QSU5TKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI1MzpcdFx0aW9hcGljX3NldF9pcnEoaW9hcGljLCBpZHgsIDEsIHRydWUpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI1NC1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NDY2PXN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTA4LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUwOTppbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTEwLVx0XHQgICAgICAgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTIxLVx0XHRcdFx0XHQgaXJxX3NvdXJjZV9pZCwgbGV2ZWwpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUyMjpcdHJldCA9IGlvYXBpY19zZXRfaXJxKGlvYXBpYywgaXJxLCBpcnFfbGV2ZWwsIGxpbmVfc3RhdHVzKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKklkZW50aWZ5aW5nIEtleSBFbnRyeSBQb2ludHMgZm9yIElPQVBJQyBJbnRlcmFjdGlvbiBpbiBLVk0qKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgSU9BUElDIGNvZGUgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEkgc2VlIHRoYXQgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgdGhlIGV4dGVybmFsbHkgdmlzaWJsZSAobm9uLXN0YXRpYykgZnVuY3Rpb24gdGhhdCBlZmZlY3RpdmVseSBhY3RzIGFzIHRoZSBlbnRyeSBwb2ludCBmb3IgYGlvYXBpY19zZXRfaXJxYC4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdCBvbmUuIEFuZCBsb29raW5nIGF0IGBpb2FwaWNfbW1pb193cml0ZWAsIHRoYXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIGNhbGxlZC4gQWgsIGJ1dCBgaW9hcGljX21taW9fd3JpdGVgIGlzICpzdGF0aWMqLCBzbyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3NlZC4gU2luY2UgaXQmIzM5O3MgdGhlcmUgSSYjMzk7bGwgaW5jbHVkZSBpdC4gQWxzbywgSSYjMzk7bGwgYWRkIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIHRvIHRoZSBsaXN0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBjb3ZlciBhbGwgdGhlIGJhc2VzLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8ga25vdyB0aGF0IG9uZSB0b28uCgpOb3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkIHdpdGggdGhpcyBwYXJ0IG9mIHRoZSBjb2RlLgoKTGV0JiMzOTtzIGFsc28gZmluZCB0aGUgc291cmNlIGNvZGUgbG9jYXRpb24sIHdoaWNoIGlzLCBhcyBleHBlY3RlZCwgaW4gYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AuIEFuZCBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoaXMuIFRpbWUgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvYXBpYy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0xMT1rdm0tJChDT05GSUdfWDg2XzY0KSAmIzQzOz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjEyOmt2bS0kKENPTkZJR19LVk1fSU9BUElDKSAmIzQzOz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTMta3ZtLSQoQ09ORklHX0tWTV9IWVBFUlYpICYjNDM7PSBoeXBlcnYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgS1ZNX0lPQVBJQyBSZXF1aXJlbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHdlIG5lZWQgYEtWTV9JT0FQSUNgIGVuYWJsZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoaXMgS1ZNIGZlYXR1cmUuIEl0IGlzIGEgYml0IHN1cnByaXNpbmcgdGhhdCBJIGhhZCB0byB0aGluayBhYm91dCBpdCBhdCB0aGlzIHN0YWdlLCBzbyBJJiMzOTttIGhvcGluZyBJIGRpZG4mIzM5O3Qgb3Zlcmxvb2sgc29tZXRoaW5nIG1vcmUgb2J2aW91cy4gVGltZSB0byBsb29rIGludG8gdGhlIGRldGFpbHMgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBJdCYjMzk7cyB1c3VhbGx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHlvdSBuZXZlciBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lPQVBJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBLVk1fSU9BUElDYCBEZXBlbmRlbmN5KioKCkhtbSwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGEgYml0IHJ1c3R5LCBidXQgdGhpcyBgS1ZNX0lPQVBJQ2Agc2V0dGluZyBmZWVscyBmYW1pbGlhci4gSSB0aG91Z2h0IGl0IHdhcyBhIGJvb2xlYW4sIHJpZ2h0PyBZZXMsIHRoYXQmIzM5O3MgaXQgLSBhIHNpbXBsZSBgYm9vbGAuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBpcyBpdCBkaXJlY3RseSB0aWVkIHRvIGBLVk1gPyBJIG1lYW4sIGRvZXMgYEtWTWAgYWx3YXlzIHNlbGVjdCB0aGlzIG9wdGlvbiwgb3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgbnVhbmNlZCwgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzIG9yIGhhcmR3YXJlIGNhcGFiaWxpdGllcz8KCkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBwcm9iYWJseSBkZWx2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGNyb3NzLXJlZmVyZW5jZSB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24uIEkgbmVlZCBhIGRlZmluaXRpdmUgYW5zd2VyIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgbXkgY3VycmVudCB3b3JrLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBjb250cm9sbGVkLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gY29uZmlybSBpZiB0aGVyZSBpcyBhIGRpcmVjdCBzZWxlY3Rpb24gb3IgbW9yZSBjb21wbGV4aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBLVk1fSU9BUElDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLVk1fSU9BUElDIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aGUgS1ZNIEkvTyBBUElDLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGlzIGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZXMuIFRoZSBtb3N0IHJlbGV2YW50IGxvY2F0aW9uIGZvciBhbnl0aGluZyB4ODYtcmVsYXRlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBLVk0sIGlzIGxpa2VseSB1bmRlciBgYXJjaC94ODZgLiBMZXQgbWUgY29uZmlybSBteSBzdXNwaWNpb247IEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgaW5zaWRlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBLVk1fSU9BUElDYCBpbiB0aGVyZSwgYWxvbmcgd2l0aCBpdHMgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IHJlbGF0ZSB0byBpdHMgYmVoYXZpb3Igb3IgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0lPQVBJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1ODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0ICp0aGUqIGBLVk1gIGNvbmZpZyBpdHNlbGYsIG5vdCBqdXN0IGl0cyB1c2FnZSBvciBhIG1vZHVsZT8gSG1tLCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIGxvb2sgaXMgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEtWTSBvbiB4ODYgYXJjaGl0ZWN0dXJlcyB3b3VsZCByZXNpZGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQga25vYnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgS1ZNX0lPQVBJQ2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGBLVk1fSU9BUElDYC4gVGltZSB0byBnbyBkaWdnaW5nIGludG8gdGhlIGRlZmluaXRpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBzdHJ1Y3R1cmUsIG9yIG1hY3JvLCBvciB3aGF0ZXZlciBpdCBpcywgZml0cyBpbnRvIHRoZSBicm9hZGVyIEtWTSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJT0FQSUMsIGVzcGVjaWFsbHkgaXRzIHJvbGUgaW4gaW50ZXJydXB0IHJvdXRpbmcgYW5kIHZpcnR1YWxpemF0aW9uLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGl0cyBzdHJ1Y3R1cmUgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBkYXRhIGZpZWxkcy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byB0aGlzIHByb2JsZW0uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgaGF2ZSB0byBvZmZlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQgSSB0aGluayBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JT0FQSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEuIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBleGFtaW5lIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLiBNeSBmb2N1cyBpcyBsaWtlbHkgYXJvdW5kIGxpbmUgMTcyLiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgcmVsYXRlZCB0byBLVk0mIzM5O3MgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNvbWUgcGFydGljdWxhciBmZWF0dXJlIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb250cm9sbGVkIGJhc2VkIG9uIG90aGVyIGRlcGVuZGVuY2llcyBvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBjb25uZWN0ZWQsIGFuZCB3aGF0JiMzOTtzIGNvbm5lY3RlZCB0byAqdGhlbSouIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQgYXJvdW5kIHRoYXQgbGluZSB0byByZWZpbmUgYSBjdXJyZW50IGh5cG90aGVzaXMgSSYjMzk7bSB3b3JraW5nIG9uIHJlZ2FyZGluZyBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NjpcdFx0aGVscFxuIDE2NzpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY4Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuIDE3MDpcdFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxuIDE3MTpcdFxuIDE3MjpcdGNvbmZpZyBLVk1fSU9BUElDXG4gMTczOlx0XHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4gMTc0Olx0XHRkZWZhdWx0IHlcbiAxNzU6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDE3NjpcdFx0aGVscFxuIDE3NzpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBhbiBJL08gQVBJQywgUElDLCBhbmQgUElULCBpLmUuXG4gMTc4Olx0XHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cbiAxNzk6XHRcbiAxODA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxODE6XHRcbiAxODI6XHRjb25maWcgS1ZNX1NNTVxuIDE4MzpcdFx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuIDE4NDpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBLVk1fSU9BUElDKioKCkFscmlnaHQsIHNvIGBLVk1fSU9BUElDYCBpcyByZWxpYW50IG9uIGBLVk1fWDg2YC4gQ2xhc3NpYy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBkb3duIHRoZSBsaW5lLCBJIG5lZWQgdG8ga25vdyB0aGUgZW50aXJlIGRlcGVuZGVuY3kgY2hhaW4gb2YgYEtWTV9YODZgLiBXaGF0IGRvZXMgKml0KiBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMgaW4gaXRzIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGluZGlyZWN0bHkgaW1wYWN0IHRoZSBJT0FQSUMgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgcmV2ZWFscyBhYm91dCBgS1ZNX1g4NmAuIEtub3dpbmcgdGhpcyBub3cgd2lsbCBzYXZlIG1lIGhlYWRhY2hlcyBsYXRlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkYXRhIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuXG4gIDE3Olx0XG4gIDE4Olx0aWYgVklSVFVBTElaQVRJT05cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgS1ZNX1g4NlxuICAyMTpcdFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuICAyMjpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjM6XHRcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG4gIDI0Olx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAyNTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxuICAyNzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXG4gIDI4Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gIDI5Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xuICAzMDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gIDMxOlx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDMyOlx0XHRzZWxlY3QgVkhPU1RfVEFTS1xuICAzMzpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxuICAzNDpcdFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXG4gIDM1Olx0XHRzZWxlY3QgS1ZNX01NSU9cbiAgMzY6XHRcdHNlbGVjdCBTQ0hFRF9JTkZPXG4gIDM3Olx0XHRzZWxlY3QgUEVSRl9FVkVOVFNcbiAgMzg6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xuICAzOTpcdFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXG4gIDQwOlx0XHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gIDQxOlx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICA0MjpcdFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiAgNDM6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICA0NDpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuICA0NTpcdFx0c2VsZWN0IEtWTV9WRklPXG4gIDQ2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cbiAgNDc6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuICA0ODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgNDk6XHRcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuICA1MDpcdFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgS1ZNXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NTMKCQkJCQkJCW91dHB1dDogNTkKCQkJCQkJCXRob3VnaHRzOiAzNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIElPQVBJQyBTeW1ib2wgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBLVk0gSU9BUElDIGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhlIGNvcmUgaXMgZGVmaW5pdGVseSBgS1ZNYCwgYW5kIEkmIzM5O2xsIGluY2x1ZGUgYEtWTV9JT0FQSUNgIGFzIHdlbGwuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2Ugc3BlY2lmaWMgc3ltYm9scyBhbmQgZmlndXJlIG91dCB3aGF0IHRvIGluY2x1ZGUuIEkgaW5pdGlhbGx5IGhhZCBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAgb24gbXkgbGlzdCwgd2hpY2ggc2VlbXMgcmlnaHQuIEkgYWxzbyBjb25zaWRlcmVkIGBpb2FwaWNfbW1pb193cml0ZWAsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYyBhbmQgSSYjMzk7bSBzdXBwb3NlZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLgoKV2FpdCBhIHNlY29uZCwgYGlvYXBpY19zZXRfaXJxYCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBga3ZtX2lvYXBpY19zZXRfaXJxYC4gQW5kIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIHRyaWdnZXJlZCBmcm9tIGBpb2FwaWNfbW1pb193cml0ZWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24gYWxzbyBjYWxscyBgaW9hcGljX3dyaXRlX2luZGlyZWN0YC4uLk5vcGUsIGl0JiMzOTtzIGp1c3QgYGlvYXBpY19tbWlvX3dyaXRlYC4gU2luY2UgYGlvYXBpY19tbWlvX3dyaXRlYCBpcyBhIGNhbGxiYWNrLCBpdCBpcyBub3QgaW5saW5lZC4KClRoZSBndWlkZWxpbmVzIHNheSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUuIFNpbmNlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgYSBjYWxsYmFjaywgaXQgaXMgbm90IGlubGluZWQsIHRoZXJlZm9yZSwgSSBjYW4gYWRkIGl0LCBldmVuIGlmIGl0IGhhcyBhIHN0YXRpYyBkZWNsYXJhdGlvbi4gSG93ZXZlciwgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgbm9uLXN0YXRpYy4KClVsdGltYXRlbHksIEkmIzM5O2xsIGFkZCBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIHRoZSByZXN0IG9mIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgSSBtaWdodCBoYXZlIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpfMC05XSYjNDM7IGt2bV9pb2FwaWNfW2Etel8wLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTI0Nz1zdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI1OC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTk6dm9pZCBrdm1faW9hcGljX3NjYW5fZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycylcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNjAte1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NjY9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MDgtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MTAtXHRcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01NDg9c3RhdGljIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU5NC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1OTU6dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU5Ni17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTcyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvYXBpY19tbWlvX29wcyA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzI1LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcyNjppbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03Mjcte1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NTItXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzUzOnZvaWQga3ZtX2lvYXBpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI2MQoJCQkJCQkJb3V0cHV0OiAxNDAKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIElPQVBJQyBFbXVsYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIEtWTSBJT0FQSUMgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBoYW5kbGluZy4gSSB0aGluayBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAgYXJlIGRlZmluaXRlbHkga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlcjsgdGhleSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBpbnRlcnJ1cHQgc2V0dGluZyBhbmQgRU9JIHVwZGF0aW5nIGxvZ2ljLiBJJiMzOTtsbCBpbmNsdWRlIHRob3NlLgoKVGhlbiwgc2luY2UgYGlvYXBpY19tbWlvX3dyaXRlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgLCBpdCYjMzk7cyB3aGVyZSB0aGUgTU1JTyB3cml0ZXMgZ28sIGl0IGlzIGEgdmVyeSByZWxldmFudCBjYWxsc2l0ZS4KCkkgYWxzbyBkb3VibGUgY2hlY2tlZCBpZiBgaW9hcGljX21taW9fd3JpdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzIHN0YXRpYy4gQnV0LCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHNvIHRoZSBjb21waWxlciBpcyB1bmxpa2VseSB0byBpbmxpbmUgaXQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGFuYWx5c2lzLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFwcGVhciB0byBiZSByZWxldmFudCBoZXJlIGFyZSBgS1ZNYCBhbmQgYEtWTV9JT0FQSUNgLiBUaGUgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCBgaW9hcGljX21taW9fd3JpdGVgLgoKTXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgdmVyeSBjb3JlIG9mIEtWTSYjMzk7cyBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtLiBJdCYjMzk7cyB0b3VjaGluZyBob3cgaW50ZXJydXB0cyBhcmUgZGVsaXZlcmVkIHRvIGd1ZXN0IFZNcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIGVkZ2UtdHJpZ2dlcmVkIGJlaGF2aW9yIGFuZCBob3cgdGhlIGRlbGl2ZXJ5IHN0YXRlIGlzIG1hbmFnZWQuIFRoaXMgaXMgZnVuZGFtZW50YWwgS1ZNIGxvZ2ljLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcywgc28gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyB2ZXJ5IHRob3JvdWdobHkuIEkmIzM5O2xsIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JT0FQSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW9hcGljX3NldF9pcnEmIzM0OywKICAgICYjMzQ7a3ZtX2lvYXBpY191cGRhdGVfZW9pJiMzNDssCiAgICAmIzM0O2lvYXBpY19tbWlvX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlaXIgZGVsaXZlcnkgc3RhdGUgKGlycl9kZWxpdmVyZWQgYW5kIHJlbW90ZV9pcnIpIGlzIHVwZGF0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gbG9naWMgdGhhdCBhZmZlY3RzIGludGVycnVwdCBkZWxpdmVyeSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lPQVBJQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9pb2FwaWNfc2V0X2lycSYjMzQ7LAogICAgJiMzNDtrdm1faW9hcGljX3VwZGF0ZV9lb2kmIzM0OywKICAgICYjMzQ7aW9hcGljX21taW9fd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBJT0FQSUMgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgYXJlIGhhbmRsZWQgYW5kIGhvdyB0aGVpciBkZWxpdmVyeSBzdGF0ZSAoaXJyX2RlbGl2ZXJlZCBhbmQgcmVtb3RlX2lycikgaXMgdXBkYXRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSBsb2dpYyB0aGF0IGFmZmVjdHMgaW50ZXJydXB0IGRlbGl2ZXJ5IGFuZCBpcyByZWFjaGFibGUgZnJvbSBndWVzdCBWTXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbG9naWMgYnVncyBpbiB0aGUgS1ZNIElPQVBJQyBzdGF0ZSBtYWNoaW5lIChzcGVjaWZpY2FsbHksIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBkZWxpdmVyeSBzdGF0ZSBhbmQgcmVtb3RlX2lyciB0cmFja2luZykuIEl0IG1vZGlmaWVzIGNvbmRpdGlvbmFsIGNoZWNrcyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBzdGF0ZSB2YXJpYWJsZXMgKGxpa2UgYGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgKS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcywgd2hpbGUgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBjMDAyMGVlNzMyNzg4OGQ2YjMwZDJkMWY1MGU4NTViNzliNjU5MmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwODo1NTo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuYwppbmRleCA3NTc2NjdmYjJiZmEwLi44MWRiMDI1ZDJhYzkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jCkBAIC0yMzAsMTEgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLAogCW9sZF9pcnIgPSBpb2FwaWMtJmd0O2lycjsKIAlpb2FwaWMtJmd0O2lyciB8PSBtYXNrOwogCWlmIChlZGdlKSB7Ci0JCWlvYXBpYy0mZ3Q7aXJyX2RlbGl2ZXJlZCAmYW1wOz0gfm1hc2s7CiAJCWlmIChvbGRfaXJyID09IGlvYXBpYy0mZ3Q7aXJyKSB7CiAJCQlyZXQgPSAwOwogCQkJZ290byBvdXQ7CiAJCX0KJiM0MzsJCWlvYXBpYy0mZ3Q7aXJyX2RlbGl2ZXJlZCAmYW1wOz0gfm1hc2s7CiAJfQogCiAJcmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTsKQEAgLTM3Nyw4ICYjNDM7Mzc3LDE3IEBAIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKQogCQkgKiBhcyBlZGdlLXRyaWdnZXJlZC4gVGhpcyBiZWhhdmlvciBpcyB1c2VkIHRvIHNpbXVsYXRlIGFuCiAJCSAqIGV4cGxpY2l0IEVPSSBvbiBJT0FQSUNzIHRoYXQgZG9uJiMzOTt0IGhhdmUgdGhlIEVPSSByZWdpc3Rlci4KIAkJICovCi0JCWlmIChlLSZndDtmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpCiYjNDM7CQlpZiAoZS0mZ3Q7ZmllbGRzLnRyaWdfbW9kZSA9PSBJT0FQSUNfRURHRV9UUklHKSB7CiAJCQllLSZndDtmaWVsZHMucmVtb3RlX2lyciA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qCiYjNDM7CQkJICogaXJyX2RlbGl2ZXJlZCB0cmFja3MgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyB0aGF0CiYjNDM7CQkJICogaGF2ZSBhbHJlYWR5IGJlZW4gZGVsaXZlcmVkLiAgQ2xlYXIgc3RhbGUgZWRnZS10cmlnZ2VyZWQKJiM0MzsJCQkgKiBkZWxpdmVyeSBzdGF0ZSB3aGVuIHRoZSBlbnRyeSBpcyBjb25maWd1cmVkIGZvcgomIzQzOwkJCSAqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlvYXBpYy0mZ3Q7aXJyX2RlbGl2ZXJlZCAmYW1wOz0gfigxICZsdDsmbHQ7IGluZGV4KTsKJiM0MzsJCX0KIAogCQltYXNrX2FmdGVyID0gZS0mZ3Q7ZmllbGRzLm1hc2s7CiAJCWlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKQpAQCAtNDkxLDcgJiM0Mzs1MDAsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpCiAJfSBlbHNlCiAJCXJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtJmd0O2t2bSwgTlVMTCwgJmFtcDtpcnFlKTsKIAotCWlmIChyZXQgJmFtcDsmYW1wOyBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKJiM0MzsJaWYgKHJldCAmZ3Q7IDAgJmFtcDsmYW1wOyBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKIAkJZW50cnktJmd0O2ZpZWxkcy5yZW1vdGVfaXJyID0gMTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA2ZmMzNGU5YmY4ZTFiLi44OWUzZjgyZTc1YjAxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTg2LDYgJiM0Mzs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2h5cGVydl9mZWF0dXJlcwogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X2lwaQogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3N2bV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoCiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaW9hcGljX3N0YXRlX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fcHZfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX2J1c2xvY2tfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmYwMjRmNGYwMTU3MTcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTkwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YXBpYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dWNhbGxfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOCQkxNgomIzQzOyNkZWZpbmUgVEVTVF9WRUNUT1IJCTB4NTAKJiM0MzsjZGVmaW5lIE5PX1NVQ0hfQVBJQ19JRAkJMHhmZQomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHCTAKJiM0MzsjZGVmaW5lIFRFU1RfSU9BUElDX0xFVkVMX1RSSUcJMQomIzQzOyNkZWZpbmUgSU9BUElDX0RFRkFVTFRfR1BBCTB4ZmVjMDAwMDBVTEwKJiM0MzsjZGVmaW5lIElPQVBJQ19SRUdfU0VMRUNUCTB4MDAKJiM0MzsjZGVmaW5lIElPQVBJQ19SRUdfV0lORE9XCTB4MTAKJiM0MzsjZGVmaW5lIElPQVBJQ19SVEVfTE9XKHBpbikJKDB4MTAgJiM0MzsgMiAqIChwaW4pKQomIzQzOyNkZWZpbmUgSU9BUElDX1JURV9UUklHX01PREUJQklUKDE1KQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcCkKJiM0Mzt7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpcnFjaGlwLSZndDtjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDOwomIzQzOwlyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTsKJiM0MzsJaWYgKHIgJmFtcDsmYW1wOyBlcnJubyA9PSBFTlhJTykKJiM0MzsJCV9fVEVTVF9SRVFVSVJFKDAsICYjMzQ7SW4ta2VybmVsIEkvTyBBUElDIG5vdCBhdmFpbGFibGUmIzM0Oyk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKCFyLCBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9JUlFDSElQLCByKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcCkKJiM0Mzt7CiYjNDM7CWlycWNoaXAtJmd0O2NoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCwKJiM0MzsJCQkgICAgIHUzMiBkZXN0X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID0KJiM0MzsJCVRFU1RfVkVDVE9SOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfaWQgPQomIzQzOwkJZGVzdF9pZDsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X21vZGUgPSAwOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9CiYjNDM7CQlsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDoKJiM0MzsJCQkJICBURVNUX0lPQVBJQ19FREdFX1RSSUc7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7CiYjNDM7CiYjNDM7CXNldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuYWJsZV9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljOwomIzQzOwl1NjQgYXBpY2Jhc2U7CiYjNDM7CiYjNDM7CWFwaWNiYXNlID0gdmNwdV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFKTsKJiM0MzsJdmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFLAomIzQzOwkJICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7CiYjNDM7CXZjcHVfaW9jdGwodmNwdSwgS1ZNX0dFVF9MQVBJQywgJmFtcDtsYXBpYyk7CiYjNDM7CSoodTMyICopKGxhcGljLnJlZ3MgJiM0MzsgQVBJQ19TUElWKSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfTEFQSUMsICZhbXA7bGFwaWMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGt2bV9pcnFfbGluZV9zdGF0dXMoc3RydWN0IGt2bV92bSAqdm0sIGludCBsZXZlbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHsKJiM0MzsJCS5pcnEgPSBURVNUX0lPQVBJQ19QSU4sCiYjNDM7CQkubGV2ZWwgPSBsZXZlbCwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9JUlFfTElORV9TVEFUVVMsICZhbXA7aXJxKTsKJiM0MzsJcmV0dXJuIGlycS5zdGF0dXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFzc2VydF9pb2FwaWNfcGluX2lycihzdHJ1Y3Qga3ZtX3ZtICp2bSwgYm9vbCBleHBlY3RlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwOwomIzQzOwomIzQzOwlnZXRfaW9hcGljKHZtLCAmYW1wO2lycWNoaXApOwomIzQzOwlURVNUX0FTU0VSVCghIShpcnFjaGlwLmNoaXAuaW9hcGljLmlyciAmYW1wOyAoMSAmbHQ7Jmx0OyBURVNUX0lPQVBJQ19QSU4pKSA9PSBleHBlY3RlZCwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIElPQVBJQyBJUlIgZm9yIHBpbiAldSB0byBiZSAldSwgZ290IDB4JXgmIzM0OywKJiM0MzsJCSAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpOwomIzQzOwl2bV9jcmVhdGVfaXJxY2hpcCh2bSk7CiYjNDM7CiYjNDM7CXNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXMgPT0gLTEsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWQmIzM0Oywgc3RhdHVzKTsKJiM0MzsKJiM0MzsJZ2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0MzsJVEVTVF9BU1NFUlQoIWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciwKJiM0MzsJCSAgICAmIzM0O0tWTSBzZXQgcmVtb3RlX2lyciBmb3IgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IHRoYXQgd2FzbiYjMzk7dCBkZWxpdmVyZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgTlVMTCk7CiYjNDM7CWVuYWJsZV9sYXBpYyh2Y3B1KTsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtJmd0O2lkKTsKJiM0MzsKJiM0MzsJc3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1cyAmZ3Q7IDAsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkJiMzNDssIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoIXN0YXR1cywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGR1cGxpY2F0ZSBlZGdlIGludGVycnVwdCB0byBiZSBjb2FsZXNjZWQsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIgKmlvYXBpYyA9ICh1MzIgKilJT0FQSUNfREVGQVVMVF9HUEE7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoaW9hcGljW0lPQVBJQ19SRUdfU0VMRUNUIC8gc2l6ZW9mKHUzMildLAomIzQzOwkJICAgSU9BUElDX1JURV9MT1coVEVTVF9JT0FQSUNfUElOKSk7CiYjNDM7CVdSSVRFX09OQ0UoaW9hcGljW0lPQVBJQ19SRUdfV0lORE9XIC8gc2l6ZW9mKHUzMildLAomIzQzOwkJICAgVEVTVF9WRUNUT1IgfCBJT0FQSUNfUlRFX1RSSUdfTU9ERSk7CiYjNDM7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9lZGdlX3RvX2xldmVsX2NsZWFyc19kZWxpdmVyeV9zdGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKTsKJiM0MzsJZW5hYmxlX2xhcGljKHZjcHUpOwomIzQzOwl2aXJ0X21hcCh2bSwgSU9BUElDX0RFRkFVTFRfR1BBLCBJT0FQSUNfREVGQVVMVF9HUEEsIDEpOwomIzQzOwomIzQzOwlzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS0mZ3Q7aWQpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzICZndDsgMCwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWQmIzM0Oywgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuKHZjcHUpOwomIzQzOwlURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpOwomIzQzOwomIzQzOwlhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIHRydWUpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwl0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCgpOwomIzQzOwl0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTsKJiM0MzsJdGVzdF9lZGdlX3RvX2xldmVsX2NsZWFyc19kZWxpdmVyeV9zdGF0ZSgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjMyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSU9BUElDIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIEtWTSYjMzk7cyBJT0FQSUMgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgLCBhbmQgaXQgYWxzbyBpbmNsdWRlcyBhIG5ldyBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuY2AuIExldCYjMzk7cyBicmVhayBkb3duIHRoZSBsb2dpYyBjaGFuZ2VzLgoKRmlyc3QsIGluIGBpb2FwaWNfc2V0X2lycWAsIHRoZXkmIzM5O3ZlIHR3ZWFrZWQgdGhlIHdheSBgaXJyX2RlbGl2ZXJlZGAgaXMgaGFuZGxlZC4gSXQgc2VlbXMgdGhlIG9yZGVyIG9mIGNsZWFyaW5nIGBpcnJfZGVsaXZlcmVkYCBoYXMgYmVlbiBzaGlmdGVkLiBDcml0aWNhbGx5LCBpdCBub3cgb25seSBjbGVhcnMgYGlycl9kZWxpdmVyZWRgIGlmIHRoZSBJbnRlcnJ1cHQgUmVxdWVzdCBSZWdpc3RlciAoSVJSKSBoYXMgYWN0dWFsbHkgY2hhbmdlZC4gIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbWlzc2VkIGludGVycnVwdCBkZWxpdmVyeSB3YXMgYmVpbmcgYWRkcmVzc2VkLgoKTmV4dCwgaW4gYGlvYXBpY193cml0ZV9pbmRpcmVjdGAsIHRoZXJlJiMzOTtzIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrLiBUaGUgb3JpZ2luYWwgY29kZSBjbGVhcmVkIGByZW1vdGVfaXJyYCBvbmx5IGZvciBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBOb3csIGl0IGV4cGxpY2l0bHkgY2xlYXJzIGBpcnJfZGVsaXZlcmVkYCB3aGVuIGFuIGVudHJ5IGlzICpjb25maWd1cmVkKiBmb3IgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoZSBjb21tZW50IGV4cGxhaW5zIHRoYXQgdGhpcyBhZGRyZXNzZXMgc3RhbGUgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGRlbGl2ZXJ5IHN0YXRlcy4gVGhpcyBtYWtlcyBzZW5zZTsgeW91IHdvdWxkbiYjMzk7dCB3YW50IGxpbmdlcmluZyAmIzM0O2RlbGl2ZXJlZCYjMzQ7IGZsYWdzIGNvbmZ1c2luZyB0aGUgZW11bGF0aW9uIHdoZW4gdHJhbnNpdGlvbmluZyB0byBhIGxldmVsLXRyaWdnZXJlZCBtb2RlLgoKVGhlIHRoaXJkIGNoYW5nZSBpcyBpbiBgaW9hcGljX3NlcnZpY2VgLCB3aGVyZSB0aGUgY29uZGl0aW9uIGZvciBzZXR0aW5nIGByZW1vdGVfaXJyYCBpcyBiZWluZyB0aWdodGVuZWQuIEluc3RlYWQgb2YgYGlmIChyZXQpYCwgaXQmIzM5O3Mgbm93IGBpZiAocmV0ICZndDsgMClgLiBUaGUgYHJldGAgdmFyaWFibGUgcmVmbGVjdHMgdGhlIGludGVycnVwdCBkZWxpdmVyeSBzdGF0dXMuIFRoaXMgc3VnZ2VzdHMgdGhhdCBvbmx5IGEgc3VjY2Vzc2Z1bCBpbnRlcnJ1cHQgZGVsaXZlcnkgc2hvdWxkIHNldCB0aGUgYHJlbW90ZV9pcnJgIGZsYWcgZm9yIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLgoKT3ZlcmFsbCwgaXQmIzM5O3MgY2xlYXIgdGhlc2UgYXJlIGZvY3VzZWQgb24gcmVmaW5pbmcgdGhlIGludGVybmFsIHN0YXRlIHRyYW5zaXRpb25zIHdpdGhpbiB0aGUgSU9BUElDIGVtdWxhdGlvbi4gIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCB3YXJyYW50ZWQgaGVyZTsgdGhlIHBhdGNoIGlzIHByaW1hcmlseSBhYm91dCAqbG9naWNhbCogc3RhdGUgbWFuYWdlbWVudC4KCkJ1dCwgaGFuZyBvbiwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGd1dCBmZWVsaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBpb2FwaWMtJmd0O2lycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmAgYXJlIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdGhleSYjMzk7cmUgdXNlZC4gIGBpb2FwaWNgIGlzIHBhcnQgb2YgYHN0cnVjdCBrdm1faW9hcGljYCwgd2hpY2ggKnNob3VsZCogYmUgemVyb2VkIGF0IGNyZWF0aW9uLiBJJiMzOTt2ZSBzZWVuIHRoYXQgY29kZS4gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcnFlYCBpbiBgaW9hcGljX3NlcnZpY2VgIGlzIHdoYXQgSSB3YW50IHRvIGludmVzdGlnYXRlIG5vdywgYnV0IEkgZG9uJiMzOTt0IHJlbWVtYmVyIHNlZWluZyBpdCBiZWluZyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIGBpb2FwaWNfc2VydmljZWAgaW4gYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AgdG8gbWFrZSBzdXJlIGBpcnFlYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2FwaWNfc2VydmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzYtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Mzc6c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYywgaW50IGlycSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zOC1cdFx0Ym9vbCBsaW5lX3N0YXR1cyk7XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTE4Nz1zdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTIzOS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDA6XHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0MS1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9MzMxPXN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MjUtXHRcdFx0ZWxzZVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQyNjpcdFx0XHRcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MjctXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDY1LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQ2NjpzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDY3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NTI5PXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQxLVx0XHRpZiAoaW9hcGljLVx1MDAzZWlyciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNlx1MDAyNiAhZW50LVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU0MjpcdFx0XHRpb2FwaWNfc2VydmljZShpb2FwaWMsIGksIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDMtXHR9XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTU0OD1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTg3LVx0XHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU4ODpcdFx0XHRpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbiwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU4OS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjg3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9hcGljX3NlcnZpY2VgIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGBpb2FwaWNfc2VydmljZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbW9kdWxlIGlzIGZ1bmN0aW9uaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkYXRhIHN0cnVjdHVyZXMsIHNlcnZpY2Ugcm91dGluZXMsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIEhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCB0aGUgc3BlY2lmaWMgYXJlYSB0aGF0JiMzOTtzIGNhdXNpbmcgdGhlIHByb2JsZW0gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaW50ZXJydXB0IHJvdXRpbmcgbG9naWMsIHJlZ2lzdGVyIGFjY2VzcyBtZWNoYW5pc21zLCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gSXQmIzM5O3MgdGltZSB0byBwdXQgb24gbXkgZGV0ZWN0aXZlIGhhdCBhbmQgc3RhcnQgdGhlIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjY6XHRzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4gNDY3Olx0e1xuIDQ2ODpcdFx0dW5pb24ga3ZtX2lvYXBpY19yZWRpcmVjdF9lbnRyeSAqZW50cnkgPSBcdTAwMjZpb2FwaWMtXHUwMDNlcmVkaXJ0YmxbaXJxXTtcbiA0Njk6XHRcdHN0cnVjdCBrdm1fbGFwaWNfaXJxIGlycWU7XG4gNDcwOlx0XHRpbnQgcmV0O1xuIDQ3MTpcdFxuIDQ3MjpcdFx0aWYgKGVudHJ5LVx1MDAzZWZpZWxkcy5tYXNrIHx8XG4gNDczOlx0XHQgICAgKGVudHJ5LVx1MDAzZWZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcgXHUwMDI2XHUwMDI2XG4gNDc0Olx0XHQgICAgZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIpKVxuIDQ3NTpcdFx0XHRyZXR1cm4gLTE7XG4gNDc2Olx0XG4gNDc3Olx0XHRpcnFlLmRlc3RfaWQgPSBlbnRyeS1cdTAwM2VmaWVsZHMuZGVzdF9pZDtcbiA0Nzg6XHRcdGlycWUudmVjdG9yID0gZW50cnktXHUwMDNlZmllbGRzLnZlY3RvcjtcbiA0Nzk6XHRcdGlycWUuZGVzdF9tb2RlID0ga3ZtX2xhcGljX2lycV9kZXN0X21vZGUoISFlbnRyeS1cdTAwM2VmaWVsZHMuZGVzdF9tb2RlKTtcbiA0ODA6XHRcdGlycWUudHJpZ19tb2RlID0gZW50cnktXHUwMDNlZmllbGRzLnRyaWdfbW9kZTtcbiA0ODE6XHRcdGlycWUuZGVsaXZlcnlfbW9kZSA9IGVudHJ5LVx1MDAzZWZpZWxkcy5kZWxpdmVyeV9tb2RlIFx1MDAzY1x1MDAzYyA4O1xuIDQ4MjpcdFx0aXJxZS5sZXZlbCA9IDE7XG4gNDgzOlx0XHRpcnFlLnNob3J0aGFuZCA9IEFQSUNfREVTVF9OT1NIT1JUO1xuIDQ4NDpcdFx0aXJxZS5tc2lfcmVkaXJfaGludCA9IGZhbHNlO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0aWYgKGlycWUudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpXG4gNDg3Olx0XHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIHw9IDEgXHUwMDNjXHUwMDNjIGlycTtcbiA0ODg6XHRcbiA0ODk6XHRcdGlmIChpcnEgPT0gUlRDX0dTSSBcdTAwMjZcdTAwMjYgbGluZV9zdGF0dXMpIHtcbiA0OTA6XHRcdFx0LypcbiA0OTE6XHRcdFx0ICogcGVuZGluZ19lb2kgY2Fubm90IGV2ZXIgYmVjb21lIG5lZ2F0aXZlIChzZWVcbiA0OTI6XHRcdFx0ICogcnRjX3N0YXR1c19wZW5kaW5nX2VvaV9jaGVja192YWxpZCkgYW5kIHRoZSBjYWxsZXJcbiA0OTM6XHRcdFx0ICogZW5zdXJlcyB0aGF0IGl0IGlzIG9ubHkgY2FsbGVkIGlmIGl0IGlzIFx1MDAzZT0gemVybywgbmFtZWx5XG4gNDk0Olx0XHRcdCAqIGlmIHJ0Y19pcnFfY2hlY2tfY29hbGVzY2VkIHJldHVybnMgZmFsc2UpLlxuIDQ5NTpcdFx0XHQgKi9cbiA0OTY6XHRcdFx0V0FSTl9PTl9PTkNFKGlvYXBpYy1cdTAwM2VydGNfc3RhdHVzLnBlbmRpbmdfZW9pKTtcbiA0OTc6XHRcdFx0cmV0ID0gX19rdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVx1MDAzZWt2bSwgTlVMTCwgXHUwMDI2aXJxZSxcbiA0OTg6XHRcdFx0XHRcdFx0XHQgXHUwMDI2aW9hcGljLVx1MDAzZXJ0Y19zdGF0dXMpO1xuIDQ5OTpcdFx0XHRpb2FwaWMtXHUwMDNlcnRjX3N0YXR1cy5wZW5kaW5nX2VvaSA9IChyZXQgXHUwMDNjIDAgPyAwIDogcmV0KTtcbiA1MDA6XHRcdH0gZWxzZVxuIDUwMTpcdFx0XHRyZXQgPSBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVx1MDAzZWt2bSwgTlVMTCwgXHUwMDI2aXJxZSk7XG4gNTAyOlx0XG4gNTAzOlx0XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiA1MDQ6XHRcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIDUwNTpcdFxuIDUwNjpcdFx0cmV0dXJuIHJldDtcbiA1MDc6XHR9XG4gNTA4Olx0XG4gNTA5Olx0aW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuIDUxMDpcdFx0XHQgICAgICAgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcbiA1MTE6XHR7XG4gNTEyOlx0XHRzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0ga3ZtLVx1MDAzZWFyY2gudmlvYXBpYztcbiA1MTM6XHRcdGludCBpcnEgPSBlLVx1MDAzZWlycWNoaXAucGluO1xuIDUxNDpcdFx0aW50IHJldCwgaXJxX2xldmVsO1xuIDUxNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDQ0CgkJCQkJCQlvdXRwdXQ6IDE1MAoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLVk0gY29kZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIG1hbnVhbGx5IGluaXRpYWxpemluZyB0aGUgYGlycWVgIHN0cnVjdHVyZS4gSSBzZWUgdGhlIGFzc2lnbm1lbnRzIHRvIGl0cyBmaWVsZHMgbGlrZSBgZGVzdF9pZGAsIGB2ZWN0b3JgLCBgZGVzdF9tb2RlYCwgZXRjLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBLVk0gZmFyZTsgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IGhlcmUuIFRoaXMgYGlycWVgIHN0cnVjdCBpcyB0aGVuIHBhc3NlZCB0byBga3ZtX2lycV9kZWxpdmVyeV90b19hcGljYCwgd2hpY2ggaXMsIGFnYWluLCB0eXBpY2FsLgoKVGhlIGFjdHVhbCBwYXRjaCBpcyBhIHZlcnkgc21hbGwsIHNwZWNpZmljIGNoYW5nZTogYHJldCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHYCBpcyB1cGRhdGVkIHRvIGByZXQgJmd0OyAwICZhbXA7JmFtcDsgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUdgLiBBaCwgYSBjbGFzc2ljIGxvZ2ljIGJ1ZyBmaXguIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBmbGF3ZWQgYmVjYXVzZSBgcmV0YCBjb3VsZCBiZSBhIG5lZ2F0aXZlIHZhbHVlIGluZGljYXRpbmcgYW4gZXJyb3IuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgdHJlYXRpbmcgYSBmYWlsdXJlIGluIGludGVycnVwdCBkZWxpdmVyeSBhcyBhIHN1Y2Nlc3MgaWYgYHJldGAgd2FzIHplcm8uIFRoaXMgaXMgY2xlYXJseSBpbmNvcnJlY3QuIFRoZSB1cGRhdGVkIGxvZ2ljIGNvcnJlY3RseSBoYW5kbGVzIG5lZ2F0aXZlIHJldHVybiB2YWx1ZXMsIHdoaWNoIHNpZ25pZnkgZXJyb3JzLiBJZiB0aGUgZGVsaXZlcnkgZmFpbHMsIHRoZW4gYHJlbW90ZV9pcnJgIHNob3VsZCBub3QgYmUgc2V0LgoKVGhpcyBwYXRjaCBpcyBzb2xpZC4gVGhlcmUgYXJlIG5vIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIFRoaXMgaXNuJiMzOTt0IGFib3V0IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIGZpeCBmb3IgSU9BUElDIHN0YXRlIG1hY2hpbmUgbG9naWMsIGZpeGluZyBob3cgYHJlbW90ZV9pcnJgIGlzIHNldCBiYXNlZCBvbiB0aGUgcmV0dXJuIG9mIGBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWNgLiBLQVNBTiB3b3VsZCBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24sIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgaXNzdWUgaGVyZS4gVGhpcyBpcyBhIHB1cmUgbG9naWMgYnVnLCBzbyBLTVNBTiBpcyB1bm5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbG9naWMgYnVncyBpbiB0aGUgS1ZNIElPQVBJQyBzdGF0ZSBtYWNoaW5lIChzcGVjaWZpY2FsbHksIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBkZWxpdmVyeSBzdGF0ZSBhbmQgcmVtb3RlX2lyciB0cmFja2luZykuIEl0IG1vZGlmaWVzIGNvbmRpdGlvbmFsIGNoZWNrcyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBzdGF0ZSB2YXJpYWJsZXMgKGxpa2UgYGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgKS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcywgd2hpbGUgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBsb2dpYyBidWdzIGluIHRoZSBLVk0gSU9BUElDIHN0YXRlIG1hY2hpbmUgKHNwZWNpZmljYWxseSwgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGRlbGl2ZXJ5IHN0YXRlIGFuZCByZW1vdGVfaXJyIHRyYWNraW5nKS4gSXQgbW9kaWZpZXMgY29uZGl0aW9uYWwgY2hlY2tzIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIHN0YXRlIHZhcmlhYmxlcyAobGlrZSBgaW9hcGljLVx1MDAzZWlycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmApLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCB3aGlsZSBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTU6NTIuMTQzNTYzOTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMzk5MTkzMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lPQVBJQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9pb2FwaWNfc2V0X2lycVwiLFxuICAgIFwia3ZtX2lvYXBpY191cGRhdGVfZW9pXCIsXG4gICAgXCJpb2FwaWNfbW1pb193cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9naWMgYnVncyBpbiB0aGUgS1ZNIElPQVBJQyBzdGF0ZSBtYWNoaW5lIChzcGVjaWZpY2FsbHksIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBkZWxpdmVyeSBzdGF0ZSBhbmQgcmVtb3RlX2lyciB0cmFja2luZykuIEl0IG1vZGlmaWVzIGNvbmRpdGlvbmFsIGNoZWNrcyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBzdGF0ZSB2YXJpYWJsZXMgKGxpa2UgYGlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIHdoaWxlIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlaXIgZGVsaXZlcnkgc3RhdGUgKGlycl9kZWxpdmVyZWQgYW5kIHJlbW90ZV9pcnIpIGlzIHVwZGF0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gbG9naWMgdGhhdCBhZmZlY3RzIGludGVycnVwdCBkZWxpdmVyeSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NTo1Mi4xNDM1NjkwOTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDY3ODkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBjMDAyMGVlNzMyNzg4OGQ2YjMwZDJkMWY1MGU4NTViNzliNjU5MmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDg6NTU6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXFxuaW5kZXggNzU3NjY3ZmIyYmZhMC4uODFkYjAyNWQyYWM5MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcXG5AQCAtMjMwLDExICsyMzAsMTEgQEAgc3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxcbiBcXHRvbGRfaXJyID0gaW9hcGljLVxcdTAwM2VpcnI7XFxuIFxcdGlvYXBpYy1cXHUwMDNlaXJyIHw9IG1hc2s7XFxuIFxcdGlmIChlZGdlKSB7XFxuLVxcdFxcdGlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZCBcXHUwMDI2PSB+bWFzaztcXG4gXFx0XFx0aWYgKG9sZF9pcnIgPT0gaW9hcGljLVxcdTAwM2VpcnIpIHtcXG4gXFx0XFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aW9hcGljLVxcdTAwM2VpcnJfZGVsaXZlcmVkIFxcdTAwMjY9IH5tYXNrO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xcbkBAIC0zNzcsOCArMzc3LDE3IEBAIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxcbiBcXHRcXHQgKiBhcyBlZGdlLXRyaWdnZXJlZC4gVGhpcyBiZWhhdmlvciBpcyB1c2VkIHRvIHNpbXVsYXRlIGFuXFxuIFxcdFxcdCAqIGV4cGxpY2l0IEVPSSBvbiBJT0FQSUNzIHRoYXQgZG9uJ3QgaGF2ZSB0aGUgRU9JIHJlZ2lzdGVyLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGUtXFx1MDAzZWZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0VER0VfVFJJRylcXG4rXFx0XFx0aWYgKGUtXFx1MDAzZWZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0VER0VfVFJJRykge1xcbiBcXHRcXHRcXHRlLVxcdTAwM2VmaWVsZHMucmVtb3RlX2lyciA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIGlycl9kZWxpdmVyZWQgdHJhY2tzIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgdGhhdFxcbitcXHRcXHRcXHQgKiBoYXZlIGFscmVhZHkgYmVlbiBkZWxpdmVyZWQuICBDbGVhciBzdGFsZSBlZGdlLXRyaWdnZXJlZFxcbitcXHRcXHRcXHQgKiBkZWxpdmVyeSBzdGF0ZSB3aGVuIHRoZSBlbnRyeSBpcyBjb25maWd1cmVkIGZvclxcbitcXHRcXHRcXHQgKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZCBcXHUwMDI2PSB+KDEgXFx1MDAzY1xcdTAwM2MgaW5kZXgpO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRtYXNrX2FmdGVyID0gZS1cXHUwMDNlZmllbGRzLm1hc2s7XFxuIFxcdFxcdGlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKVxcbkBAIC00OTEsNyArNTAwLDcgQEAgc3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxcbiBcXHR9IGVsc2VcXG4gXFx0XFx0cmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy1cXHUwMDNla3ZtLCBOVUxMLCBcXHUwMDI2aXJxZSk7XFxuIFxcbi1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKVxcbitcXHRpZiAocmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbkBAIC04Niw2ICs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2ZlYXR1cmVzXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2lwaVxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl9zdm1fdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl90bGJfZmx1c2hcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9jbG9ja190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX3B2X3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjAyNGY0ZjAxNTcxN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcXG5AQCAtMCwwICsxLDE5MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIGluLWtlcm5lbCBJL08gQVBJQyBzdGF0ZS5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXFwiYXBpYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3ZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInByb2Nlc3Nvci5oXFxcIlxcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ1Y2FsbF9jb21tb24uaFxcXCJcXG4rXFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXFx0XFx0MTZcXG4rI2RlZmluZSBURVNUX1ZFQ1RPUlxcdFxcdDB4NTBcXG4rI2RlZmluZSBOT19TVUNIX0FQSUNfSURcXHRcXHQweGZlXFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXFx0MFxcbisjZGVmaW5lIFRFU1RfSU9BUElDX0xFVkVMX1RSSUdcXHQxXFxuKyNkZWZpbmUgSU9BUElDX0RFRkFVTFRfR1BBXFx0MHhmZWMwMDAwMFVMTFxcbisjZGVmaW5lIElPQVBJQ19SRUdfU0VMRUNUXFx0MHgwMFxcbisjZGVmaW5lIElPQVBJQ19SRUdfV0lORE9XXFx0MHgxMFxcbisjZGVmaW5lIElPQVBJQ19SVEVfTE9XKHBpbilcXHQoMHgxMCArIDIgKiAocGluKSlcXG4rI2RlZmluZSBJT0FQSUNfUlRFX1RSSUdfTU9ERVxcdEJJVCgxNSlcXG4rXFxuK3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcXG4re1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlycWNoaXAtXFx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XFxuK1xcdHIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApO1xcbitcXHRpZiAociBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTlhJTylcXG4rXFx0XFx0X19URVNUX1JFUVVJUkUoMCwgXFxcIkluLWtlcm5lbCBJL08gQVBJQyBub3QgYXZhaWxhYmxlXFxcIik7XFxuK1xcbitcXHRURVNUX0FTU0VSVCghciwgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfSVJRQ0hJUCwgcikpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXFxuK3tcXG4rXFx0aXJxY2hpcC1cXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLFxcbitcXHRcXHRcXHQgICAgIHUzMiBkZXN0X2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xcbitcXG4rXFx0Z2V0X2lvYXBpYyh2bSwgXFx1MDAyNmlycWNoaXApO1xcbitcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy52ZWN0b3IgPVxcbitcXHRcXHRURVNUX1ZFQ1RPUjtcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X2lkID1cXG4rXFx0XFx0ZGVzdF9pZDtcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X21vZGUgPSAwO1xcbitcXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9XFxuK1xcdFxcdGxldmVsX3RyaWdnZXJlZCA/IFRFU1RfSU9BUElDX0xFVkVMX1RSSUcgOlxcbitcXHRcXHRcXHRcXHQgIFRFU1RfSU9BUElDX0VER0VfVFJJRztcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDtcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyID0gMDtcXG4rXFxuK1xcdHNldF9pb2FwaWModm0sIFxcdTAwMjZpcnFjaGlwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW5hYmxlX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljO1xcbitcXHR1NjQgYXBpY2Jhc2U7XFxuK1xcbitcXHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XFxuK1xcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSxcXG4rXFx0XFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XFxuK1xcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX0dFVF9MQVBJQywgXFx1MDAyNmxhcGljKTtcXG4rXFx0Kih1MzIgKikobGFwaWMucmVncyArIEFQSUNfU1BJVikgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDtcXG4rXFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcXHUwMDI2bGFwaWMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGt2bV9pcnFfbGluZV9zdGF0dXMoc3RydWN0IGt2bV92bSAqdm0sIGludCBsZXZlbClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnEgPSB7XFxuK1xcdFxcdC5pcnEgPSBURVNUX0lPQVBJQ19QSU4sXFxuK1xcdFxcdC5sZXZlbCA9IGxldmVsLFxcbitcXHR9O1xcbitcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9JUlFfTElORV9TVEFUVVMsIFxcdTAwMjZpcnEpO1xcbitcXHRyZXR1cm4gaXJxLnN0YXR1cztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xcbitcXG4rXFx0Z2V0X2lvYXBpYyh2bSwgXFx1MDAyNmlycWNoaXApO1xcbitcXHRURVNUX0FTU0VSVCghIShpcnFjaGlwLmNoaXAuaW9hcGljLmlyciBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIElPQVBJQyBJUlIgZm9yIHBpbiAldSB0byBiZSAldSwgZ290IDB4JXhcXFwiLFxcbitcXHRcXHQgICAgVEVTVF9JT0FQSUNfUElOLCBleHBlY3RlZCwgaXJxY2hpcC5jaGlwLmlvYXBpYy5pcnIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpO1xcbitcXHR2bV9jcmVhdGVfaXJxY2hpcCh2bSk7XFxuK1xcbitcXHRzZXRfaW9hcGljX2VudHJ5KHZtLCB0cnVlLCBOT19TVUNIX0FQSUNfSUQpO1xcbitcXG4rXFx0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcXFwiLCBzdGF0dXMpO1xcbitcXG4rXFx0Z2V0X2lvYXBpYyh2bSwgXFx1MDAyNmlycWNoaXApO1xcbitcXHRURVNUX0FTU0VSVCghaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyLFxcbitcXHRcXHQgICAgXFxcIktWTSBzZXQgcmVtb3RlX2lyciBmb3IgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IHRoYXQgd2Fzbid0IGRlbGl2ZXJlZFxcXCIpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgc3RhdHVzO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgTlVMTCk7XFxuK1xcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcXG4rXFxuK1xcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVxcdTAwM2VpZCk7XFxuK1xcbitcXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcXG4rXFx0VEVTVF9BU1NFUlQoc3RhdHVzIFxcdTAwM2UgMCxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXFxcIiwgc3RhdHVzKTtcXG4rXFxuK1xcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xcbitcXG4rXFx0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XFxuK1xcdFRFU1RfQVNTRVJUKCFzdGF0dXMsXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkXFxcIixcXG4rXFx0XFx0ICAgIHN0YXR1cyk7XFxuK1xcbitcXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcXG4rXFxuK1xcdGt2bV92bV9mcmVlKHZtKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3Rfc3dpdGNoX2lvYXBpY19waW5fdG9fbGV2ZWwodm9pZClcXG4re1xcbitcXHR1MzIgKmlvYXBpYyA9ICh1MzIgKilJT0FQSUNfREVGQVVMVF9HUEE7XFxuK1xcbitcXHRXUklURV9PTkNFKGlvYXBpY1tJT0FQSUNfUkVHX1NFTEVDVCAvIHNpemVvZih1MzIpXSxcXG4rXFx0XFx0ICAgSU9BUElDX1JURV9MT1coVEVTVF9JT0FQSUNfUElOKSk7XFxuK1xcdFdSSVRFX09OQ0UoaW9hcGljW0lPQVBJQ19SRUdfV0lORE9XIC8gc2l6ZW9mKHUzMildLFxcbitcXHRcXHQgICBURVNUX1ZFQ1RPUiB8IElPQVBJQ19SVEVfVFJJR19NT0RFKTtcXG4rXFxuK1xcdEdVRVNUX0RPTkUoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9lZGdlX3RvX2xldmVsX2NsZWFyc19kZWxpdmVyeV9zdGF0ZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF9zd2l0Y2hfaW9hcGljX3Bpbl90b19sZXZlbCk7XFxuK1xcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcXG4rXFx0dmlydF9tYXAodm0sIElPQVBJQ19ERUZBVUxUX0dQQSwgSU9BUElDX0RFRkFVTFRfR1BBLCAxKTtcXG4rXFxuK1xcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVxcdTAwM2VpZCk7XFxuK1xcbitcXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcXG4rXFx0VEVTVF9BU1NFUlQoc3RhdHVzIFxcdTAwM2UgMCxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXFxcIiwgc3RhdHVzKTtcXG4rXFxuK1xcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xcbitcXG4rXFx0dmNwdV9ydW4odmNwdSk7XFxuK1xcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBOVUxMKSwgVUNBTExfRE9ORSk7XFxuK1xcbitcXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIHRydWUpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7XFxuK1xcdHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpO1xcbitcXHR0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NTo1Mi41OTUwNTk5MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MDQ3Njc0OTU4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JT0FQSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW9hcGljX3NldF9pcnFcIixcbiAgICBcImt2bV9pb2FwaWNfdXBkYXRlX2VvaVwiLFxuICAgIFwiaW9hcGljX21taW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIElPQVBJQyBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZWlyIGRlbGl2ZXJ5IHN0YXRlIChpcnJfZGVsaXZlcmVkIGFuZCByZW1vdGVfaXJyKSBpcyB1cGRhdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgZGVsaXZlcnkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGMwMDIwZWU3MzI3ODg4ZDZiMzBkMmQxZjUwZTg1NWI3OWI2NTkyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA4OjU1OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG5pbmRleCA3NTc2NjdmYjJiZmEwLi44MWRiMDI1ZDJhYzkxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbkBAIC0yMzAsMTEgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4gXHRvbGRfaXJyID0gaW9hcGljLVx1MDAzZWlycjtcbiBcdGlvYXBpYy1cdTAwM2VpcnIgfD0gbWFzaztcbiBcdGlmIChlZGdlKSB7XG4tXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpIHtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHR9XG4gXG4gXHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xuQEAgLTM3Nyw4ICszNzcsMTcgQEAgc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpXG4gXHRcdCAqIGFzIGVkZ2UtdHJpZ2dlcmVkLiBUaGlzIGJlaGF2aW9yIGlzIHVzZWQgdG8gc2ltdWxhdGUgYW5cbiBcdFx0ICogZXhwbGljaXQgRU9JIG9uIElPQVBJQ3MgdGhhdCBkb24ndCBoYXZlIHRoZSBFT0kgcmVnaXN0ZXIuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZS1cdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpXG4rXHRcdGlmIChlLVx1MDAzZWZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0VER0VfVFJJRykge1xuIFx0XHRcdGUtXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAwO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogaXJyX2RlbGl2ZXJlZCB0cmFja3MgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyB0aGF0XG4rXHRcdFx0ICogaGF2ZSBhbHJlYWR5IGJlZW4gZGVsaXZlcmVkLiAgQ2xlYXIgc3RhbGUgZWRnZS10cmlnZ2VyZWRcbitcdFx0XHQgKiBkZWxpdmVyeSBzdGF0ZSB3aGVuIHRoZSBlbnRyeSBpcyBjb25maWd1cmVkIGZvclxuK1x0XHRcdCAqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyBpbmRleCk7XG4rXHRcdH1cbiBcbiBcdFx0bWFza19hZnRlciA9IGUtXHUwMDNlZmllbGRzLm1hc2s7XG4gXHRcdGlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKVxuQEAgLTQ5MSw3ICs1MDAsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy1cdTAwM2Vrdm0sIE5VTEwsIFx1MDAyNmlycWUpO1xuIFxuLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXG4rXHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiBcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC04Niw2ICs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2ZlYXR1cmVzXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfaXBpXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfc3ZtX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl90bGJfZmx1c2hcbitURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2lvYXBpY19zdGF0ZV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fY2xvY2tfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9idXNsb2NrX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mMDI0ZjRmMDE1NzE3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcbkBAIC0wLDAgKzEsMTkwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFwiYXBpYy5oXCJcbisjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwidWNhbGxfY29tbW9uLmhcIlxuK1xuKyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXHRcdDE2XG4rI2RlZmluZSBURVNUX1ZFQ1RPUlx0XHQweDUwXG4rI2RlZmluZSBOT19TVUNIX0FQSUNfSURcdFx0MHhmZVxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXHQwXG4rI2RlZmluZSBURVNUX0lPQVBJQ19MRVZFTF9UUklHXHQxXG4rI2RlZmluZSBJT0FQSUNfREVGQVVMVF9HUEFcdDB4ZmVjMDAwMDBVTExcbisjZGVmaW5lIElPQVBJQ19SRUdfU0VMRUNUXHQweDAwXG4rI2RlZmluZSBJT0FQSUNfUkVHX1dJTkRPV1x0MHgxMFxuKyNkZWZpbmUgSU9BUElDX1JURV9MT1cocGluKVx0KDB4MTAgKyAyICogKHBpbikpXG4rI2RlZmluZSBJT0FQSUNfUlRFX1RSSUdfTU9ERVx0QklUKDE1KVxuK1xuK3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbit7XG4rXHRpbnQgcjtcbitcbitcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbitcdHIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApO1xuK1x0aWYgKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPKVxuK1x0XHRfX1RFU1RfUkVRVUlSRSgwLCBcIkluLWtlcm5lbCBJL08gQVBJQyBub3QgYXZhaWxhYmxlXCIpO1xuK1xuK1x0VEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxuK3tcbitcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbitcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCxcbitcdFx0XHQgICAgIHUzMiBkZXN0X2lkKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuK1xuK1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rXG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnZlY3RvciA9XG4rXHRcdFRFU1RfVkVDVE9SO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X2lkID1cbitcdFx0ZGVzdF9pZDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9tb2RlID0gMDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudHJpZ19tb2RlID1cbitcdFx0bGV2ZWxfdHJpZ2dlcmVkID8gVEVTVF9JT0FQSUNfTEVWRUxfVFJJRyA6XG4rXHRcdFx0XHQgIFRFU1RfSU9BUElDX0VER0VfVFJJRztcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIgPSAwO1xuK1xuK1x0c2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuYWJsZV9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IGt2bV9sYXBpY19zdGF0ZSBsYXBpYztcbitcdHU2NCBhcGljYmFzZTtcbitcbitcdGFwaWNiYXNlID0gdmNwdV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFKTtcbitcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSxcbitcdFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9HRVRfTEFQSUMsIFx1MDAyNmxhcGljKTtcbitcdCoodTMyICopKGxhcGljLnJlZ3MgKyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfTEFQSUMsIFx1MDAyNmxhcGljKTtcbit9XG4rXG4rc3RhdGljIGludCBrdm1faXJxX2xpbmVfc3RhdHVzKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbGV2ZWwpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0ge1xuK1x0XHQuaXJxID0gVEVTVF9JT0FQSUNfUElOLFxuK1x0XHQubGV2ZWwgPSBsZXZlbCxcbitcdH07XG4rXG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgXHUwMDI2aXJxKTtcbitcdHJldHVybiBpcnEuc3RhdHVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcdFRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsXG4rXHRcdCAgICBcIkV4cGVjdGVkIElPQVBJQyBJUlIgZm9yIHBpbiAldSB0byBiZSAldSwgZ290IDB4JXhcIixcbitcdFx0ICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpO1xuK1x0dm1fY3JlYXRlX2lycWNoaXAodm0pO1xuK1xuK1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcIiwgc3RhdHVzKTtcbitcbitcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuK1x0VEVTVF9BU1NFUlQoIWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lycixcbitcdFx0ICAgIFwiS1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJ3QgZGVsaXZlcmVkXCIpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBzdGF0dXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIE5VTEwpO1xuK1x0ZW5hYmxlX2xhcGljKHZjcHUpO1xuK1xuK1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtXHUwMDNlaWQpO1xuK1xuK1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXMgXHUwMDNlIDAsXG4rXHRcdCAgICBcIkV4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcIiwgc3RhdHVzKTtcbitcbitcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuK1xuK1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4rXHRURVNUX0FTU0VSVCghc3RhdHVzLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBkdXBsaWNhdGUgZWRnZSBpbnRlcnJ1cHQgdG8gYmUgY29hbGVzY2VkLCBnb3QgJWRcIixcbitcdFx0ICAgIHN0YXR1cyk7XG4rXG4rXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZ3Vlc3Rfc3dpdGNoX2lvYXBpY19waW5fdG9fbGV2ZWwodm9pZClcbit7XG4rXHR1MzIgKmlvYXBpYyA9ICh1MzIgKilJT0FQSUNfREVGQVVMVF9HUEE7XG4rXG4rXHRXUklURV9PTkNFKGlvYXBpY1tJT0FQSUNfUkVHX1NFTEVDVCAvIHNpemVvZih1MzIpXSxcbitcdFx0ICAgSU9BUElDX1JURV9MT1coVEVTVF9JT0FQSUNfUElOKSk7XG4rXHRXUklURV9PTkNFKGlvYXBpY1tJT0FQSUNfUkVHX1dJTkRPVyAvIHNpemVvZih1MzIpXSxcbitcdFx0ICAgVEVTVF9WRUNUT1IgfCBJT0FQSUNfUlRFX1RSSUdfTU9ERSk7XG4rXG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZWRnZV90b19sZXZlbF9jbGVhcnNfZGVsaXZlcnlfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBzdGF0dXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKTtcbitcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcbitcdHZpcnRfbWFwKHZtLCBJT0FQSUNfREVGQVVMVF9HUEEsIElPQVBJQ19ERUZBVUxUX0dQQSwgMSk7XG4rXG4rXHRzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS1cdTAwM2VpZCk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1cyBcdTAwM2UgMCxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZWRnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFwiLCBzdGF0dXMpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4rXG4rXHR2Y3B1X3J1bih2Y3B1KTtcbitcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBOVUxMKSwgVUNBTExfRE9ORSk7XG4rXG4rXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIHRydWUpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7XG4rXHR0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTtcbitcdHRlc3RfZWRnZV90b19sZXZlbF9jbGVhcnNfZGVsaXZlcnlfc3RhdGUoKTtcbitcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU1OjUyLjU5NTA2MTE3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMDA1NjI4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBJT0FQSUMgRW11bGF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGhvdyB0aGUgSU9BUElDIHdvcmtzIGluIEtWTSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYC4gSXQncyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgZnVsbHkgdG8gZXZhbHVhdGUgaXRzIHBvdGVudGlhbCBpbXBhY3QgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IGl0LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUga2V5IGFyZWFzOlxuXG4xLiAgYGlvYXBpY19zZXRfaXJxYDogSXQgc2VlbXMgbGlrZSB0aGVyZSdzIGJlZW4gYSBtb2RpZmljYXRpb24gcmVsYXRlZCB0byBob3cgYGlycl9kZWxpdmVyZWRgIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgZm9yIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoZSBwYXRjaCdzIGNoYW5nZXMgbG9vayBsaWtlIGl0J3MgYWRkcmVzc2luZyBhbiBlZGdlIGNhc2Ugb3IgYSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIGludGVycnVwdCBkZWxpdmVyeS5cbjIuICBgaW9hcGljX3dyaXRlX2luZGlyZWN0YDogQWdhaW4sIHdlIHNlZSBtb3JlIGNoYW5nZXMgcmVsYXRlZCB0byBgaXJyX2RlbGl2ZXJlZGAgYnV0IHRoaXMgdGltZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaW50ZXJydXB0IGVudHJ5IGNvbmZpZ3VyYXRpb25zLiBUaGUgbG9naWMgc2VlbXMgdG8gZW5zdXJlIHRoYXQgc3RhbGUgZWRnZS10cmlnZ2VyZWQgc3RhdGUgaXMgY2xlYXJlZCB3aGVuIHN3aXRjaGluZyBhbiBlbnRyeSB0byBsZXZlbC10cmlnZ2VyZWQuXG4zLiAgYGlvYXBpY19zZXJ2aWNlYDogV2UncmUgc2VlaW5nIGNoYW5nZXMgaW4gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGByZW1vdGVfaXJyYCBmbGFnLiBUaGlzIHNlZW1zIHRvIGJlIG1hbmFnaW5nIHRoZSBhY2tub3dsZWRnZW1lbnQgb2YgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgd2l0aGluIHRoZSBJT0FQSUMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgLCB3aGljaCBzdWdnZXN0cyBhIG1vZGlmaWNhdGlvbiBvZiB0aGUgaW50ZXJydXB0IGRlbGl2ZXJ5IGxvZ2ljLCBtYXliZSBpbnZvbHZpbmcgZWRnZS10cmlnZ2VyZWQgdnMuIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgaGFuZGxpbmcuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBjbG9zZSBzY3J1dGlueSBhbmQgdGFyZ2V0ZWQgZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSwgd2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlc2UgZnVuY3Rpb25zPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBwb3RlbnRpYWwgcGF0aHMgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZnV6ei4gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgcGF0aHMgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoZXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZC4gSSB3aWxsIGZvY3VzIG9uIHRoZSByZWxhdGVkIGNvZGUuXG5UaGUgS1ZNIGNvbmZpZyBpdHNlbGYgd2lsbCBiZSB0aGUgZm9jdXMsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzUsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NjowMS41OTU2Mjc4ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1MzY0NDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbHx1MzJ8dTY0KS4qIGlvYXBpY18uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MDEuNjU5MTcyNTM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTUxMzE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGVidWdnaW5nIGEgR3JlcCBFeHByZXNzaW9uKipcblxuSG1tLCBJIHN1c3BlY3QgbXkgYGdyZXBgIGV4cHJlc3Npb24gaXNuJ3QgcXVpdGUgcmlnaHQuIFRoYXQncyBhIGNvbW1vbiBzbmFnIHdpdGggdGhlc2UgdGhpbmdzOyBpdCdzIGVhc3kgdG8gZ2V0IHRoZSBzeW50YXgganVzdCBzbGlnaHRseSBvZmYgYW5kIG1pc3Mgd2hhdCB5b3UncmUgbG9va2luZyBmb3IuIEluc3RlYWQgb2Ygc3BlbmRpbmcgbW9yZSB0aW1lIHR3ZWFraW5nIGl0LCBsZXQncyBqdXN0IGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LiBJIGNhbiBlaXRoZXIgc2ltcGx5IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIHZpc3VhbGx5IHNjYW5uaW5nIGZvciB0aGUgcGF0dGVybiwgb3IgSSBjYW4gcmVmaW5lIHRoZSBgZ3JlcGAgYXBwcm9hY2guIFBlcmhhcHMgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBwYXR0ZXJuIGBeLioga3ZtX2lvYXBpY18uKlxcKGAgd2lsbCBwcm92ZSBtb3JlIHN1Y2Nlc3NmdWwuIEkga25vdyB0aGF0IEknbSBsb29raW5nIGZvciBhIGxpbmUgdGhhdCBzdGFydHMgKGBeYCkgd2l0aCBhbnl0aGluZyAoYC4qYCksIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmcgYCBrdm1faW9hcGljX2AsIGZvbGxvd2VkIGJ5IGFueXRoaW5nIChgLipgKSwgYW5kIGVuZHMgd2l0aCBhbiBvcGVuaW5nIHBhcmVudGhlc2lzIChgXFwoYCkuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBtaWdodCBnZXQgbWUgY2xvc2VyIHRvIHRoZSByZWxldmFudCBsaW5lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjA1LjE2NDY4ODAwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ5MTgyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeLioga3ZtX2lvYXBpY18uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTg3PXN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0NzpzdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTk6dm9pZCBrdm1faW9hcGljX3NjYW5fZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjYwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NjY9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUwOC1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTEwLVxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUyOC1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTI5OnN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTMwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDctI2RlZmluZSBJT0FQSUNfU1VDQ0VTU0lWRV9JUlFfTUFYX0NPVU5UIDEwMDAwXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU0ODpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQ5LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTk0LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1OTU6dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTYte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTY2Mz1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzA0LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo3MDU6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19yZXNldChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MDYte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTcyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvYXBpY19tbWlvX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MjUtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcyNjppbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzI3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NTItXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjc1Mzp2b2lkIGt2bV9pb2FwaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc1NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjA1LjIxMzE4ODU0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczOTg0NTk3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBJT0FQSUMgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgSU9BUElDIGNvZGUgZm9yIHdoYXRldmVyIGFuYWx5c2lzIEknbSBkb2luZy4gTGV0J3Mgc2VlLCBpbml0aWFsbHksIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBJIGlkZW50aWZpZWQgd2VyZSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCAqcG90ZW50aWFsbHkqIGBpb2FwaWNfbW1pb193cml0ZWAuIEhvbGQgb24sIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgc3RhdGljLCByaWdodD8gWWVzLCBpdCBpcy4gQnV0LCBpdCdzIGFuIE1NSU8gaGFuZGxlciwgc28gaXQncyBhIGNhbGxiYWNrIGFuZCBwb3RlbnRpYWxseSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoZW4gSSByZWFsaXplZCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCBpcyBjYWxsZWQgZnJvbSBgaW9hcGljX21taW9fd3JpdGVgIGFuZCBgaW9hcGljX3NldF9pcnFgIGlzIGNhbGxlZCBmcm9tIGBrdm1faW9hcGljX3NldF9pcnFgLCBhbmQgZmluYWxseSwgYGlvYXBpY19zZXJ2aWNlYCBpcyBjYWxsZWQgZnJvbSBgaW9hcGljX3NldF9pcnFgLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBtb2RpZmllZCBjb2RlIHNlZW1zIHRvIGJlIHJlYWNoYWJsZSBmcm9tIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gVGhhdCBsb29rcyBnb29kLlxuXG5CdXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExldCdzIG1ha2Ugc3VyZSBpdCdzIG5vdCBpbmxpbmVkLiBJdCBsb29rcyBsaWtlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgZGVmaW5lZCB3aXRoaW4gYSBzdHJ1Y3R1cmUsIHNvIGl0J3Mgbm90IGlubGluZWQuXG5cblRoZSBiZXN0IHRoaW5nIHRvIGRvIGlzIHRvIGxpc3QgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLlxuXG5JIHdpbGwgYWxzbyBjaGVjayBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCBmb3IgY2FsbGVycyBvZiBgaW9hcGljX3dyaXRlX2luZGlyZWN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYzMiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NjoxMi42MTE2NTAwOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3OTgxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9hcGljX3dyaXRlX2luZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmM9MzE0PXZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzMwLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzozMzE6c3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTMzMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NjYzPXN0YXRpYyBpbnQgaW9hcGljX21taW9fd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02OTQtXFx0Y2FzZSBJT0FQSUNfUkVHX1dJTkRPVzpcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Njk1OlxcdFxcdGlvYXBpY193cml0ZV9pbmRpcmVjdChpb2FwaWMsIGRhdGEpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02OTYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjEyLjY2MTQ1NDgzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjc5MDE1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgSU9BUElDIFdyaXRlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB3cml0ZXMgdG8gdGhlIElPQVBJQyBhcmUgaGFuZGxlZC4gSSBzZWUgdGhhdCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCBpcyBjYWxsZWQgZnJvbSBgaW9hcGljX21taW9fd3JpdGVgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB3aGljaCBtYWtlcyBzZW5zZS4gSSByZWNvZ25pemUgYGlvYXBpY19tbWlvX3dyaXRlYCBhcyBhIGNhbGxiYWNrIHdpdGhpbiB0aGUgYGlvYXBpY19tbWlvX29wc2Agc3RydWN0dXJlLiBTZWVtcyBsaWtlIGEgc3RhbmRhcmQgTU1JTyBhcHByb2FjaC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyB0aGUgb25seSB3YXkgdGhpbmdzIGNhbiBiZSB3cml0dGVuLlxuXG5JJ20gY2hlY2tpbmcgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYHN0YXRpY2AsIHdoaWNoIHdvdWxkIGluZGljYXRlIHRoZXkgaGF2ZSBleHRlcm5hbCBsaW5rYWdlLiBMb29rcyBsaWtlIGBrdm1faW9hcGljX3NldF9pcnFgIGlzIG5vbi1zdGF0aWMuIEdvb2QsIGEgcG90ZW50aWFsIGFsdGVybmF0aXZlIGVudHJ5IHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IGludGVycnVwdHMgYXJlIGFjdHVhbGx5IHNldCwgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4gTGV0IG1lIGp1bXAgaW50byBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCBhbmQgc2VhcmNoIGZvciBjYWxsZXJzIG9mIGBpb2FwaWNfc2V0X2lycWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MTYuOTg5MzU5OTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzE1NzE4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2FwaWNfc2V0X2lycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jPTE2NT1zdGF0aWMgdm9pZCBpb2FwaWNfbGF6eV91cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMTg2LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoxODc6c3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0xODgtXFx0XFx0aW50IGlycV9sZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDItb3V0OlxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDM6XFx0dHJhY2Vfa3ZtX2lvYXBpY19zZXRfaXJxKGVudHJ5LmJpdHMsIGlycSwgcmV0ID09IDApO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDQtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz0yNDc9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19pbmplY3RfYWxsKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGxvbmcgaXJyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI1Mi1cXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgXFx1MDAyNmlyciwgSU9BUElDX05VTV9QSU5TKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTM6XFx0XFx0aW9hcGljX3NldF9pcnEoaW9hcGljLCBpZHgsIDEsIHRydWUpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NDY2PXN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MDgtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUwOTppbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxMC1cXHRcXHQgICAgICAgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MjEtXFx0XFx0XFx0XFx0XFx0IGlycV9zb3VyY2VfaWQsIGxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTIyOlxcdHJldCA9IGlvYXBpY19zZXRfaXJxKGlvYXBpYywgaXJxLCBpcnFfbGV2ZWwsIGxpbmVfc3RhdHVzKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NjoxNy4xMzI1MjM2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4OTE5MjQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJZGVudGlmeWluZyBLZXkgRW50cnkgUG9pbnRzIGZvciBJT0FQSUMgSW50ZXJhY3Rpb24gaW4gS1ZNKipcblxuQWxyaWdodCwgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBJT0FQSUMgY29kZSB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSBzZWUgdGhhdCBga3ZtX2lvYXBpY19zZXRfaXJxYCBpcyB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIChub24tc3RhdGljKSBmdW5jdGlvbiB0aGF0IGVmZmVjdGl2ZWx5IGFjdHMgYXMgdGhlIGVudHJ5IHBvaW50IGZvciBgaW9hcGljX3NldF9pcnFgLiBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoYXQgb25lLiBBbmQgbG9va2luZyBhdCBgaW9hcGljX21taW9fd3JpdGVgLCB0aGF0J3MgdGhlIHBvaW50IHdoZXJlIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIGNhbGxlZC4gQWgsIGJ1dCBgaW9hcGljX21taW9fd3JpdGVgIGlzICpzdGF0aWMqLCBzbyBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBTaW5jZSBpdCdzIHRoZXJlIEknbGwgaW5jbHVkZSBpdC4gQWxzbywgSSdsbCBhZGQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAgdG8gdGhlIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvdmVyIGFsbCB0aGUgYmFzZXMuIEknbSBnb2luZyB0byB3YW50IHRvIGtub3cgdGhhdCBvbmUgdG9vLlxuXG5Ob3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJ2xsIGRvdWJsZS1jaGVjayB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW52b2x2ZWQgd2l0aCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuXG5cbkxldCdzIGFsc28gZmluZCB0aGUgc291cmNlIGNvZGUgbG9jYXRpb24sIHdoaWNoIGlzLCBhcyBleHBlY3RlZCwgaW4gYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AuIEFuZCBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoaXMuIFRpbWUgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MjIuMjIxNzE4NTk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU1MzE4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2FwaWMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTExPWt2bS0kKENPTkZJR19YODZfNjQpICs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTI6a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICs9IGk4MjU5Lm8gaTgyNTQubyBpb2FwaWMub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMy1rdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MjIuMjY3MjgxMTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NDQ1ODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk1fSU9BUElDIFJlcXVpcmVtZW50KipcblxuQWxyaWdodCwgc28gdGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCB3ZSBuZWVkIGBLVk1fSU9BUElDYCBlbmFibGVkLiBMZXQncyBkaWcgaW4gYW5kIHZlcmlmeSB0aGF0LiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGlzIEtWTSBmZWF0dXJlLiBJdCBpcyBhIGJpdCBzdXJwcmlzaW5nIHRoYXQgSSBoYWQgdG8gdGhpbmsgYWJvdXQgaXQgYXQgdGhpcyBzdGFnZSwgc28gSSdtIGhvcGluZyBJIGRpZG4ndCBvdmVybG9vayBzb21ldGhpbmcgbW9yZSBvYnZpb3VzLiBUaW1lIHRvIGxvb2sgaW50byB0aGUgZGV0YWlscyBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEl0J3MgdXN1YWxseSBzdHJhaWdodGZvcndhcmQsIGJ1dCB5b3UgbmV2ZXIga25vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NjoyNi4zMzE3NDIxOTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU4Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU9BUElDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjI2LjM3ODMwNDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODk5NDQyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYEtWTV9JT0FQSUNgIERlcGVuZGVuY3kqKlxuXG5IbW0sIGxldCBtZSBzZWUuLi4gSSdtIGEgYml0IHJ1c3R5LCBidXQgdGhpcyBgS1ZNX0lPQVBJQ2Agc2V0dGluZyBmZWVscyBmYW1pbGlhci4gSSB0aG91Z2h0IGl0IHdhcyBhIGJvb2xlYW4sIHJpZ2h0PyBZZXMsIHRoYXQncyBpdCAtIGEgc2ltcGxlIGBib29sYC4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IGlzIGl0IGRpcmVjdGx5IHRpZWQgdG8gYEtWTWA/IEkgbWVhbiwgZG9lcyBgS1ZNYCBhbHdheXMgc2VsZWN0IHRoaXMgb3B0aW9uLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSBudWFuY2VkLCBjb25kaXRpb25hbGx5IGVuYWJsZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3Mgb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzP1xuXG5JIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgcHJvYmFibHkgZGVsdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBvciBjcm9zcy1yZWZlcmVuY2UgdGhlIHJlbGV2YW50IGtlcm5lbCBkb2N1bWVudGF0aW9uLiBJIG5lZWQgYSBkZWZpbml0aXZlIGFuc3dlciB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIG15IGN1cnJlbnQgd29yay4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBjb250cm9sbGVkLCBlc3BlY2lhbGx5IGlmIEknbSB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIEtWTSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byBjb25maXJtIGlmIHRoZXJlIGlzIGEgZGlyZWN0IHNlbGVjdGlvbiBvciBtb3JlIGNvbXBsZXhpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTI0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MzEuMjY4MjUwNTkxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgyODc4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9JT0FQSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjMxLjMxNjA4NjAxNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA5OTY1NDAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktWTV9JT0FQSUMgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIEtWTSBJL08gQVBJQy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaXRzIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcyBpcyBpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZXMuIFRoZSBtb3N0IHJlbGV2YW50IGxvY2F0aW9uIGZvciBhbnl0aGluZyB4ODYtcmVsYXRlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBLVk0sIGlzIGxpa2VseSB1bmRlciBgYXJjaC94ODZgLiBMZXQgbWUgY29uZmlybSBteSBzdXNwaWNpb247IEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBpbnNpZGUuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYEtWTV9JT0FQSUNgIGluIHRoZXJlLCBhbG9uZyB3aXRoIGl0cyBjb25kaXRpb25hbCBsb2dpYywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgcmVsYXRlIHRvIGl0cyBiZWhhdmlvciBvciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6NDEuNDE1NzQyODY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcwMjExNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0lPQVBJQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1Njo0MS42ODI3NzQ2MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxODM1MTc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgKnRoZSogYEtWTWAgY29uZmlnIGl0c2VsZiwgbm90IGp1c3QgaXRzIHVzYWdlIG9yIGEgbW9kdWxlPyBIbW0sIGxldCdzIGdldCByaWdodCB0byB0aGUgc291cmNlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBsb29rIGlzIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEtWTSBvbiB4ODYgYXJjaGl0ZWN0dXJlcyB3b3VsZCByZXNpZGUuIFRoYXQncyB0aGUgZmlyc3Qgc3RvcCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBrbm9icyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byBiZSB1c2VkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1Njo0Ny4xMDExMjg3MDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTgwODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6NDcuMTUwMzE0ODI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDUwMTc0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgS1ZNX0lPQVBJQ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgS1ZNX0lPQVBJQ2AuIFRpbWUgdG8gZ28gZGlnZ2luZyBpbnRvIHRoZSBkZWZpbml0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgc3RydWN0dXJlLCBvciBtYWNybywgb3Igd2hhdGV2ZXIgaXQgaXMsIGZpdHMgaW50byB0aGUgYnJvYWRlciBLVk0gYXJjaGl0ZWN0dXJlIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSU9BUElDLCBlc3BlY2lhbGx5IGl0cyByb2xlIGluIGludGVycnVwdCByb3V0aW5nIGFuZCB2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgc3RydWN0dXJlIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgZGF0YSBmaWVsZHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gdGhpcyBwcm9ibGVtLiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgaGF2ZSB0byBvZmZlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQgSSB0aGluayBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1Njo1MS4yNTUzMzU2MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTcxNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU9BUElDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjUxLjMwMjMxMjQxM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkwNDE4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEuIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0uIE15IGZvY3VzIGlzIGxpa2VseSBhcm91bmQgbGluZSAxNzIuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCByZWxhdGVkIHRvIEtWTSdzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzb21lIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29udHJvbGxlZCBiYXNlZCBvbiBvdGhlciBkZXBlbmRlbmNpZXMgb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBzbyBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGNvbm5lY3RlZCwgYW5kIHdoYXQncyBjb25uZWN0ZWQgdG8gKnRoZW0qLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCBhcm91bmQgdGhhdCBsaW5lIHRvIHJlZmluZSBhIGN1cnJlbnQgaHlwb3RoZXNpcyBJJ20gd29ya2luZyBvbiByZWdhcmRpbmcgaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjU1LjQ5MjczMzY4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNjY6XFx0XFx0aGVscFxcbiAxNjc6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXFxuIDE2ODpcXHRcXHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuIDE2OTpcXHRcXHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcbiAxNzA6XFx0XFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxcbiAxNzE6XFx0XFxuIDE3MjpcXHRjb25maWcgS1ZNX0lPQVBJQ1xcbiAxNzM6XFx0XFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuIDE3NDpcXHRcXHRkZWZhdWx0IHlcXG4gMTc1OlxcdFxcdGRlcGVuZHMgb24gS1ZNX1g4NlxcbiAxNzY6XFx0XFx0aGVscFxcbiAxNzc6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBhbiBJL08gQVBJQywgUElDLCBhbmQgUElULCBpLmUuXFxuIDE3ODpcXHRcXHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxODE6XFx0XFxuIDE4MjpcXHRjb25maWcgS1ZNX1NNTVxcbiAxODM6XFx0XFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuIDE4NDpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6NTUuNDkyODE4MjkzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTEwMzY0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBLVk1fSU9BUElDKipcblxuQWxyaWdodCwgc28gYEtWTV9JT0FQSUNgIGlzIHJlbGlhbnQgb24gYEtWTV9YODZgLiBDbGFzc2ljLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgZG93biB0aGUgbGluZSwgSSBuZWVkIHRvIGtub3cgdGhlIGVudGlyZSBkZXBlbmRlbmN5IGNoYWluIG9mIGBLVk1fWDg2YC4gV2hhdCBkb2VzICppdCogZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBnb3RjaGFzIGluIGl0cyBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBpbmRpcmVjdGx5IGltcGFjdCB0aGUgSU9BUElDIGZ1bmN0aW9uYWxpdHk/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgcmV2ZWFscyBhYm91dCBgS1ZNX1g4NmAuIEtub3dpbmcgdGhpcyBub3cgd2lsbCBzYXZlIG1lIGhlYWRhY2hlcyBsYXRlci4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRhdGEgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjU5LjQwMzg1NzI4OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEtWTV9YODZcXG4gIDIxOlxcdFxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4gIDIyOlxcdFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuICAyMzpcXHRcXHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDI1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcXG4gIDI3OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcbiAgMjg6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gIDMwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiAgMzE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiAgMzI6XFx0XFx0c2VsZWN0IFZIT1NUX1RBU0tcXG4gIDMzOlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxcbiAgMzU6XFx0XFx0c2VsZWN0IEtWTV9NTUlPXFxuICAzNjpcXHRcXHRzZWxlY3QgU0NIRURfSU5GT1xcbiAgMzc6XFx0XFx0c2VsZWN0IFBFUkZfRVZFTlRTXFxuICAzODpcXHRcXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcXG4gIDM5OlxcdFxcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxcbiAgNDA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbiAgNDE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4gIDQyOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXFxuICA0MzpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDQ0OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG4gIDQ1OlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgNDY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXFxuICA0NzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG4gIDQ4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuICA0OTpcXHRcXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG4gIDUwOlxcdFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBLVk1cXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjU5LjQwMzkzOTA2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDA3NTkxNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBJT0FQSUMgU3ltYm9sIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIEtWTSBJT0FQSUMgY29uZmlndXJhdGlvbiBoZXJlLiBUaGUgY29yZSBpcyBkZWZpbml0ZWx5IGBLVk1gLCBhbmQgSSdsbCBpbmNsdWRlIGBLVk1fSU9BUElDYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCBmaWd1cmUgb3V0IHdoYXQgdG8gaW5jbHVkZS4gSSBpbml0aWFsbHkgaGFkIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBvbiBteSBsaXN0LCB3aGljaCBzZWVtcyByaWdodC4gSSBhbHNvIGNvbnNpZGVyZWQgYGlvYXBpY19tbWlvX3dyaXRlYCwgYnV0IHRoYXQncyBzdGF0aWMgYW5kIEknbSBzdXBwb3NlZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLlxuXG5XYWl0IGEgc2Vjb25kLCBgaW9hcGljX3NldF9pcnFgIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBrdm1faW9hcGljX3NldF9pcnFgLiBBbmQgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAgaXMgdHJpZ2dlcmVkIGZyb20gYGlvYXBpY19tbWlvX3dyaXRlYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbiBhbHNvIGNhbGxzIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgLi4uTm9wZSwgaXQncyBqdXN0IGBpb2FwaWNfbW1pb193cml0ZWAuIFNpbmNlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgYSBjYWxsYmFjaywgaXQgaXMgbm90IGlubGluZWQuXG5cblRoZSBndWlkZWxpbmVzIHNheSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUuIFNpbmNlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgYSBjYWxsYmFjaywgaXQgaXMgbm90IGlubGluZWQsIHRoZXJlZm9yZSwgSSBjYW4gYWRkIGl0LCBldmVuIGlmIGl0IGhhcyBhIHN0YXRpYyBkZWNsYXJhdGlvbi4gSG93ZXZlciwgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgbm9uLXN0YXRpYy5cblxuVWx0aW1hdGVseSwgSSdsbCBhZGQgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIHRoZSByZXN0IG9mIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgSSBtaWdodCBoYXZlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NTMsIk91dHB1dFRva2VucyI6NTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NzowNi40MTE1MzMxNzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzgzNDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel8wLTldKyBrdm1faW9hcGljX1thLXpfMC05XStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jPTI0Nz1zdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTk6dm9pZCBrdm1faW9hcGljX3NjYW5fZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjYwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NjY9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUwOC1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTEwLVxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTU0OD1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTQtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU5NTp2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU5Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTcyNS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzI2OmludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03Mjcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc1Mi1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzUzOnZvaWQga3ZtX2lvYXBpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTc6MDYuNTY5Mzc2ODk2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MjM0MDM5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIElPQVBJQyBFbXVsYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBLVk0gSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkgdGhpbmsgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIGFyZSBkZWZpbml0ZWx5IGtleSBmdW5jdGlvbnMgdG8gY29uc2lkZXI7IHRoZXkgc2VlbSB0byBiZSB0aGUgY29yZSBvZiB0aGUgaW50ZXJydXB0IHNldHRpbmcgYW5kIEVPSSB1cGRhdGluZyBsb2dpYy4gSSdsbCBpbmNsdWRlIHRob3NlLlxuXG5UaGVuLCBzaW5jZSBgaW9hcGljX21taW9fd3JpdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAsIGl0J3Mgd2hlcmUgdGhlIE1NSU8gd3JpdGVzIGdvLCBpdCBpcyBhIHZlcnkgcmVsZXZhbnQgY2FsbHNpdGUuXG5cbkkgYWxzbyBkb3VibGUgY2hlY2tlZCBpZiBgaW9hcGljX21taW9fd3JpdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzIHN0YXRpYy4gQnV0LCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBzbyB0aGUgY29tcGlsZXIgaXMgdW5saWtlbHkgdG8gaW5saW5lIGl0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBhbmFseXNpcy5cblxuVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFwcGVhciB0byBiZSByZWxldmFudCBoZXJlIGFyZSBgS1ZNYCBhbmQgYEtWTV9JT0FQSUNgLiBUaGUgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYW5kIGBpb2FwaWNfbW1pb193cml0ZWAuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIHZlcnkgY29yZSBvZiBLVk0ncyBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtLiBJdCdzIHRvdWNoaW5nIGhvdyBpbnRlcnJ1cHRzIGFyZSBkZWxpdmVyZWQgdG8gZ3Vlc3QgVk1zLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgZWRnZS10cmlnZ2VyZWQgYmVoYXZpb3IgYW5kIGhvdyB0aGUgZGVsaXZlcnkgc3RhdGUgaXMgbWFuYWdlZC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBLVk0gbG9naWMsIGFuZCB0aGUgY2hhbmdlcyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zLCBzbyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIHZlcnkgdGhvcm91Z2hseS4gSSdsbCBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNjEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjEyLjk5Mjc4MzEyOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDIzNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JT0FQSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW9hcGljX3NldF9pcnFcIixcbiAgICBcImt2bV9pb2FwaWNfdXBkYXRlX2VvaVwiLFxuICAgIFwiaW9hcGljX21taW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIElPQVBJQyBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZWlyIGRlbGl2ZXJ5IHN0YXRlIChpcnJfZGVsaXZlcmVkIGFuZCByZW1vdGVfaXJyKSBpcyB1cGRhdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgZGVsaXZlcnkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JT0FQSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW9hcGljX3NldF9pcnFcIixcbiAgICBcImt2bV9pb2FwaWNfdXBkYXRlX2VvaVwiLFxuICAgIFwiaW9hcGljX21taW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIElPQVBJQyBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZWlyIGRlbGl2ZXJ5IHN0YXRlIChpcnJfZGVsaXZlcmVkIGFuZCByZW1vdGVfaXJyKSBpcyB1cGRhdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgZGVsaXZlcnkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTc6MTMuMDcxODEzODQ5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ3MDkzMzIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjEzLjA3MjQ5MjAxOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMjQ3MDI0OTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9naWMgYnVncyBpbiB0aGUgS1ZNIElPQVBJQyBzdGF0ZSBtYWNoaW5lIChzcGVjaWZpY2FsbHksIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBkZWxpdmVyeSBzdGF0ZSBhbmQgcmVtb3RlX2lyciB0cmFja2luZykuIEl0IG1vZGlmaWVzIGNvbmRpdGlvbmFsIGNoZWNrcyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBzdGF0ZSB2YXJpYWJsZXMgKGxpa2UgYGlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIHdoaWxlIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBjMDAyMGVlNzMyNzg4OGQ2YjMwZDJkMWY1MGU4NTViNzliNjU5MmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODo1NTo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuaW5kZXggNzU3NjY3ZmIyYmZhMC4uODFkYjAyNWQyYWM5MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuKysrIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG5AQCAtMjMwLDExICsyMzAsMTEgQEAgc3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxuIFx0b2xkX2lyciA9IGlvYXBpYy1cdTAwM2VpcnI7XG4gXHRpb2FwaWMtXHUwMDNlaXJyIHw9IG1hc2s7XG4gXHRpZiAoZWRnZSkge1xuLVx0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRpZiAob2xkX2lyciA9PSBpb2FwaWMtXHUwMDNlaXJyKSB7XG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuK1x0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0fVxuIFxuIFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcbkBAIC0zNzcsOCArMzc3LDE3IEBAIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxuIFx0XHQgKiBhcyBlZGdlLXRyaWdnZXJlZC4gVGhpcyBiZWhhdmlvciBpcyB1c2VkIHRvIHNpbXVsYXRlIGFuXG4gXHRcdCAqIGV4cGxpY2l0IEVPSSBvbiBJT0FQSUNzIHRoYXQgZG9uJ3QgaGF2ZSB0aGUgRU9JIHJlZ2lzdGVyLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGUtXHUwMDNlZmllbGRzLnRyaWdfbW9kZSA9PSBJT0FQSUNfRURHRV9UUklHKVxuK1x0XHRpZiAoZS1cdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpIHtcbiBcdFx0XHRlLVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGlycl9kZWxpdmVyZWQgdHJhY2tzIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgdGhhdFxuK1x0XHRcdCAqIGhhdmUgYWxyZWFkeSBiZWVuIGRlbGl2ZXJlZC4gIENsZWFyIHN0YWxlIGVkZ2UtdHJpZ2dlcmVkXG4rXHRcdFx0ICogZGVsaXZlcnkgc3RhdGUgd2hlbiB0aGUgZW50cnkgaXMgY29uZmlndXJlZCBmb3JcbitcdFx0XHQgKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy5cbitcdFx0XHQgKi9cbitcdFx0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH4oMSBcdTAwM2NcdTAwM2MgaW5kZXgpO1xuK1x0XHR9XG4gXG4gXHRcdG1hc2tfYWZ0ZXIgPSBlLVx1MDAzZWZpZWxkcy5tYXNrO1xuIFx0XHRpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcilcbkBAIC00OTEsNyArNTAwLDcgQEAgc3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxuIFx0fSBlbHNlXG4gXHRcdHJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtXHUwMDNla3ZtLCBOVUxMLCBcdTAwMjZpcnFlKTtcbiBcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKVxuK1x0aWYgKHJldCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXG4gXHRcdGVudHJ5LVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLjg5ZTNmODJlNzViMDEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtODYsNiArODYsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl9mZWF0dXJlc1xuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2lwaVxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X3N2bV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2Nsb2NrX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9wdl90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjAyNGY0ZjAxNTcxN1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5AQCAtMCwwICsxLDE5MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIGluLWtlcm5lbCBJL08gQVBJQyBzdGF0ZS5cbisgKi9cbitcbisjaW5jbHVkZSBcImFwaWMuaFwiXG4rI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbisjaW5jbHVkZSBcInRlc3RfdXRpbC5oXCJcbisjaW5jbHVkZSBcInVjYWxsX2NvbW1vbi5oXCJcbitcbisjZGVmaW5lIFRFU1RfSU9BUElDX1BJTlx0XHQxNlxuKyNkZWZpbmUgVEVTVF9WRUNUT1JcdFx0MHg1MFxuKyNkZWZpbmUgTk9fU1VDSF9BUElDX0lEXHRcdDB4ZmVcbisjZGVmaW5lIFRFU1RfSU9BUElDX0VER0VfVFJJR1x0MFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJR1x0MVxuKyNkZWZpbmUgSU9BUElDX0RFRkFVTFRfR1BBXHQweGZlYzAwMDAwVUxMXG4rI2RlZmluZSBJT0FQSUNfUkVHX1NFTEVDVFx0MHgwMFxuKyNkZWZpbmUgSU9BUElDX1JFR19XSU5ET1dcdDB4MTBcbisjZGVmaW5lIElPQVBJQ19SVEVfTE9XKHBpbilcdCgweDEwICsgMiAqIChwaW4pKVxuKyNkZWZpbmUgSU9BUElDX1JURV9UUklHX01PREVcdEJJVCgxNSlcbitcbitzdGF0aWMgdm9pZCBnZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXG4re1xuK1x0aW50IHI7XG4rXG4rXHRpcnFjaGlwLVx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XG4rXHRyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTtcbitcdGlmIChyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTylcbitcdFx0X19URVNUX1JFUVVJUkUoMCwgXCJJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZVwiKTtcbitcbitcdFRFU1RfQVNTRVJUKCFyLCBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9JUlFDSElQLCByKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbit7XG4rXHRpcnFjaGlwLVx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XG4rXHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9JUlFDSElQLCBpcnFjaGlwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2lvYXBpY19lbnRyeShzdHJ1Y3Qga3ZtX3ZtICp2bSwgYm9vbCBsZXZlbF90cmlnZ2VyZWQsXG4rXHRcdFx0ICAgICB1MzIgZGVzdF9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbitcbitcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuK1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy52ZWN0b3IgPVxuK1x0XHRURVNUX1ZFQ1RPUjtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9XG4rXHRcdGRlc3RfaWQ7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfbW9kZSA9IDA7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9XG4rXHRcdGxldmVsX3RyaWdnZXJlZCA/IFRFU1RfSU9BUElDX0xFVkVMX1RSSUcgOlxuK1x0XHRcdFx0ICBURVNUX0lPQVBJQ19FREdFX1RSSUc7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLm1hc2sgPSAwO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyID0gMDtcbitcbitcdHNldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbmFibGVfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7XG4rXHR1NjQgYXBpY2Jhc2U7XG4rXG4rXHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XG4rXHR2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0lBMzJfQVBJQ0JBU0UsXG4rXHRcdCAgICAgYXBpY2Jhc2UgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpO1xuK1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4rXHQqKHUzMiAqKShsYXBpYy5yZWdzICsgQVBJQ19TUElWKSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEO1xuK1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHtcbitcdFx0LmlycSA9IFRFU1RfSU9BUElDX1BJTixcbitcdFx0LmxldmVsID0gbGV2ZWwsXG4rXHR9O1xuK1xuK1x0dm1faW9jdGwodm0sIEtWTV9JUlFfTElORV9TVEFUVVMsIFx1MDAyNmlycSk7XG4rXHRyZXR1cm4gaXJxLnN0YXR1cztcbit9XG4rXG4rc3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuK1xuK1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rXHRURVNUX0FTU0VSVCghIShpcnFjaGlwLmNoaXAuaW9hcGljLmlyciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBJT0FQSUMgSVJSIGZvciBwaW4gJXUgdG8gYmUgJXUsIGdvdCAweCV4XCIsXG4rXHRcdCAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBzdGF0dXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXMoKTtcbitcdHZtX2NyZWF0ZV9pcnFjaGlwKHZtKTtcbitcbitcdHNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZmFpbGVkIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXCIsIHN0YXR1cyk7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcdFRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsXG4rXHRcdCAgICBcIktWTSBzZXQgcmVtb3RlX2lyciBmb3IgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IHRoYXQgd2Fzbid0IGRlbGl2ZXJlZFwiKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBOVUxMKTtcbitcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcbitcbitcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVx1MDAzZWlkKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzIFx1MDAzZSAwLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXCIsIHN0YXR1cyk7XG4rXG4rXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoIXN0YXR1cyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkXCIsXG4rXHRcdCAgICBzdGF0dXMpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4rXG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKHZvaWQpXG4re1xuK1x0dTMyICppb2FwaWMgPSAodTMyICopSU9BUElDX0RFRkFVTFRfR1BBO1xuK1xuK1x0V1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19TRUxFQ1QgLyBzaXplb2YodTMyKV0sXG4rXHRcdCAgIElPQVBJQ19SVEVfTE9XKFRFU1RfSU9BUElDX1BJTikpO1xuK1x0V1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19XSU5ET1cgLyBzaXplb2YodTMyKV0sXG4rXHRcdCAgIFRFU1RfVkVDVE9SIHwgSU9BUElDX1JURV9UUklHX01PREUpO1xuK1xuK1x0R1VFU1RfRE9ORSgpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9zd2l0Y2hfaW9hcGljX3Bpbl90b19sZXZlbCk7XG4rXHRlbmFibGVfbGFwaWModmNwdSk7XG4rXHR2aXJ0X21hcCh2bSwgSU9BUElDX0RFRkFVTFRfR1BBLCBJT0FQSUNfREVGQVVMVF9HUEEsIDEpO1xuK1xuK1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtXHUwMDNlaWQpO1xuK1xuK1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXMgXHUwMDNlIDAsXG4rXHRcdCAgICBcIkV4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcIiwgc3RhdHVzKTtcbitcbitcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCB0cnVlKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4raW50IG1haW4odm9pZClcbit7XG4rXHR0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCgpO1xuK1x0dGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKCk7XG4rXHR0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NzoxMy4wNzI0OTMzOTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk0MTQ3OTI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPQVBJQyBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgS1ZNJ3MgSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCwgYW5kIGl0IGFsc28gaW5jbHVkZXMgYSBuZXcgc2VsZnRlc3QsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNgLiBMZXQncyBicmVhayBkb3duIHRoZSBsb2dpYyBjaGFuZ2VzLlxuXG5GaXJzdCwgaW4gYGlvYXBpY19zZXRfaXJxYCwgdGhleSd2ZSB0d2Vha2VkIHRoZSB3YXkgYGlycl9kZWxpdmVyZWRgIGlzIGhhbmRsZWQuIEl0IHNlZW1zIHRoZSBvcmRlciBvZiBjbGVhcmluZyBgaXJyX2RlbGl2ZXJlZGAgaGFzIGJlZW4gc2hpZnRlZC4gQ3JpdGljYWxseSwgaXQgbm93IG9ubHkgY2xlYXJzIGBpcnJfZGVsaXZlcmVkYCBpZiB0aGUgSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIgKElSUikgaGFzIGFjdHVhbGx5IGNoYW5nZWQuICBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG1pc3NlZCBpbnRlcnJ1cHQgZGVsaXZlcnkgd2FzIGJlaW5nIGFkZHJlc3NlZC5cblxuTmV4dCwgaW4gYGlvYXBpY193cml0ZV9pbmRpcmVjdGAsIHRoZXJlJ3MgYSBuZXcgY29uZGl0aW9uYWwgYmxvY2suIFRoZSBvcmlnaW5hbCBjb2RlIGNsZWFyZWQgYHJlbW90ZV9pcnJgIG9ubHkgZm9yIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMuIE5vdywgaXQgZXhwbGljaXRseSBjbGVhcnMgYGlycl9kZWxpdmVyZWRgIHdoZW4gYW4gZW50cnkgaXMgKmNvbmZpZ3VyZWQqIGZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy4gVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhhdCB0aGlzIGFkZHJlc3NlcyBzdGFsZSBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZGVsaXZlcnkgc3RhdGVzLiBUaGlzIG1ha2VzIHNlbnNlOyB5b3Ugd291bGRuJ3Qgd2FudCBsaW5nZXJpbmcgXCJkZWxpdmVyZWRcIiBmbGFncyBjb25mdXNpbmcgdGhlIGVtdWxhdGlvbiB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYSBsZXZlbC10cmlnZ2VyZWQgbW9kZS5cblxuVGhlIHRoaXJkIGNoYW5nZSBpcyBpbiBgaW9hcGljX3NlcnZpY2VgLCB3aGVyZSB0aGUgY29uZGl0aW9uIGZvciBzZXR0aW5nIGByZW1vdGVfaXJyYCBpcyBiZWluZyB0aWdodGVuZWQuIEluc3RlYWQgb2YgYGlmIChyZXQpYCwgaXQncyBub3cgYGlmIChyZXQgXHUwMDNlIDApYC4gVGhlIGByZXRgIHZhcmlhYmxlIHJlZmxlY3RzIHRoZSBpbnRlcnJ1cHQgZGVsaXZlcnkgc3RhdHVzLiBUaGlzIHN1Z2dlc3RzIHRoYXQgb25seSBhIHN1Y2Nlc3NmdWwgaW50ZXJydXB0IGRlbGl2ZXJ5IHNob3VsZCBzZXQgdGhlIGByZW1vdGVfaXJyYCBmbGFnIGZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy5cblxuT3ZlcmFsbCwgaXQncyBjbGVhciB0aGVzZSBhcmUgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgaW50ZXJuYWwgc3RhdGUgdHJhbnNpdGlvbnMgd2l0aGluIHRoZSBJT0FQSUMgZW11bGF0aW9uLiAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgS01TQU4gaXNuJ3Qgd2FycmFudGVkIGhlcmU7IHRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYWJvdXQgKmxvZ2ljYWwqIHN0YXRlIG1hbmFnZW1lbnQuXG5cbkJ1dCwgaGFuZyBvbiwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGd1dCBmZWVsaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCBhcmUgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGV5J3JlIHVzZWQuICBgaW9hcGljYCBpcyBwYXJ0IG9mIGBzdHJ1Y3Qga3ZtX2lvYXBpY2AsIHdoaWNoICpzaG91bGQqIGJlIHplcm9lZCBhdCBjcmVhdGlvbi4gSSd2ZSBzZWVuIHRoYXQgY29kZS4gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcnFlYCBpbiBgaW9hcGljX3NlcnZpY2VgIGlzIHdoYXQgSSB3YW50IHRvIGludmVzdGlnYXRlIG5vdywgYnV0IEkgZG9uJ3QgcmVtZW1iZXIgc2VlaW5nIGl0IGJlaW5nIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgYGlvYXBpY19zZXJ2aWNlYCBpbiBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCB0byBtYWtlIHN1cmUgYGlycWVgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NzoyMy4wMTM5NzU0NDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTc1MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvYXBpY19zZXJ2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjM3OnN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWMsIGludCBpcnEsXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTM4LVxcdFxcdGJvb2wgbGluZV9zdGF0dXMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTE4Nz1zdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjM5LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDA6XFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQxLVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTMzMT1zdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbClcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MjUtXFx0XFx0XFx0ZWxzZVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo0MjY6XFx0XFx0XFx0XFx0aW9hcGljX3NlcnZpY2UoaW9hcGljLCBpbmRleCwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MjctXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTQ2NS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NDY2OnN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDY3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01Mjk9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU0MS1cXHRcXHRpZiAoaW9hcGljLVxcdTAwM2VpcnIgXFx1MDAyNiAoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2XFx1MDAyNiAhZW50LVxcdTAwM2VmaWVsZHMucmVtb3RlX2lycilcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTQyOlxcdFxcdFxcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDMtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTU0OD1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01ODctXFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTg4OlxcdFxcdFxcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgcGluLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU4OS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjIzLjA2MTk1NjAyNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA1MjEyMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpb2FwaWNfc2VydmljZWAgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGBpb2FwaWNfc2VydmljZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbW9kdWxlIGlzIGZ1bmN0aW9uaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkYXRhIHN0cnVjdHVyZXMsIHNlcnZpY2Ugcm91dGluZXMsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIEhvcGVmdWxseSwgSSdsbCBmaW5kIHRoZSBzcGVjaWZpYyBhcmVhIHRoYXQncyBjYXVzaW5nIHRoZSBwcm9ibGVtIEknbSBpbnZlc3RpZ2F0aW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaW50ZXJydXB0IHJvdXRpbmcgbG9naWMsIHJlZ2lzdGVyIGFjY2VzcyBtZWNoYW5pc21zLCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gSXQncyB0aW1lIHRvIHB1dCBvbiBteSBkZXRlY3RpdmUgaGF0IGFuZCBzdGFydCB0aGUgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjI2LjQ2NzE3MTU5NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY2OlxcdHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcXG4gNDY3OlxcdHtcXG4gNDY4OlxcdFxcdHVuaW9uIGt2bV9pb2FwaWNfcmVkaXJlY3RfZW50cnkgKmVudHJ5ID0gXFx1MDAyNmlvYXBpYy1cXHUwMDNlcmVkaXJ0YmxbaXJxXTtcXG4gNDY5OlxcdFxcdHN0cnVjdCBrdm1fbGFwaWNfaXJxIGlycWU7XFxuIDQ3MDpcXHRcXHRpbnQgcmV0O1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRpZiAoZW50cnktXFx1MDAzZWZpZWxkcy5tYXNrIHx8XFxuIDQ3MzpcXHRcXHQgICAgKGVudHJ5LVxcdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHIFxcdTAwMjZcXHUwMDI2XFxuIDQ3NDpcXHRcXHQgICAgZW50cnktXFx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyKSlcXG4gNDc1OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0aXJxZS5kZXN0X2lkID0gZW50cnktXFx1MDAzZWZpZWxkcy5kZXN0X2lkO1xcbiA0Nzg6XFx0XFx0aXJxZS52ZWN0b3IgPSBlbnRyeS1cXHUwMDNlZmllbGRzLnZlY3RvcjtcXG4gNDc5OlxcdFxcdGlycWUuZGVzdF9tb2RlID0ga3ZtX2xhcGljX2lycV9kZXN0X21vZGUoISFlbnRyeS1cXHUwMDNlZmllbGRzLmRlc3RfbW9kZSk7XFxuIDQ4MDpcXHRcXHRpcnFlLnRyaWdfbW9kZSA9IGVudHJ5LVxcdTAwM2VmaWVsZHMudHJpZ19tb2RlO1xcbiA0ODE6XFx0XFx0aXJxZS5kZWxpdmVyeV9tb2RlID0gZW50cnktXFx1MDAzZWZpZWxkcy5kZWxpdmVyeV9tb2RlIFxcdTAwM2NcXHUwMDNjIDg7XFxuIDQ4MjpcXHRcXHRpcnFlLmxldmVsID0gMTtcXG4gNDgzOlxcdFxcdGlycWUuc2hvcnRoYW5kID0gQVBJQ19ERVNUX05PU0hPUlQ7XFxuIDQ4NDpcXHRcXHRpcnFlLm1zaV9yZWRpcl9oaW50ID0gZmFsc2U7XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmIChpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfRURHRV9UUklHKVxcbiA0ODc6XFx0XFx0XFx0aW9hcGljLVxcdTAwM2VpcnJfZGVsaXZlcmVkIHw9IDEgXFx1MDAzY1xcdTAwM2MgaXJxO1xcbiA0ODg6XFx0XFxuIDQ4OTpcXHRcXHRpZiAoaXJxID09IFJUQ19HU0kgXFx1MDAyNlxcdTAwMjYgbGluZV9zdGF0dXMpIHtcXG4gNDkwOlxcdFxcdFxcdC8qXFxuIDQ5MTpcXHRcXHRcXHQgKiBwZW5kaW5nX2VvaSBjYW5ub3QgZXZlciBiZWNvbWUgbmVnYXRpdmUgKHNlZVxcbiA0OTI6XFx0XFx0XFx0ICogcnRjX3N0YXR1c19wZW5kaW5nX2VvaV9jaGVja192YWxpZCkgYW5kIHRoZSBjYWxsZXJcXG4gNDkzOlxcdFxcdFxcdCAqIGVuc3VyZXMgdGhhdCBpdCBpcyBvbmx5IGNhbGxlZCBpZiBpdCBpcyBcXHUwMDNlPSB6ZXJvLCBuYW1lbHlcXG4gNDk0OlxcdFxcdFxcdCAqIGlmIHJ0Y19pcnFfY2hlY2tfY29hbGVzY2VkIHJldHVybnMgZmFsc2UpLlxcbiA0OTU6XFx0XFx0XFx0ICovXFxuIDQ5NjpcXHRcXHRcXHRXQVJOX09OX09OQ0UoaW9hcGljLVxcdTAwM2VydGNfc3RhdHVzLnBlbmRpbmdfZW9pKTtcXG4gNDk3OlxcdFxcdFxcdHJldCA9IF9fa3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy1cXHUwMDNla3ZtLCBOVUxMLCBcXHUwMDI2aXJxZSxcXG4gNDk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aW9hcGljLVxcdTAwM2VydGNfc3RhdHVzKTtcXG4gNDk5OlxcdFxcdFxcdGlvYXBpYy1cXHUwMDNlcnRjX3N0YXR1cy5wZW5kaW5nX2VvaSA9IChyZXQgXFx1MDAzYyAwID8gMCA6IHJldCk7XFxuIDUwMDpcXHRcXHR9IGVsc2VcXG4gNTAxOlxcdFxcdFxcdHJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtXFx1MDAzZWt2bSwgTlVMTCwgXFx1MDAyNmlycWUpO1xcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcXG4gNTA0OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VmaWVsZHMucmVtb3RlX2lyciA9IDE7XFxuIDUwNTpcXHRcXG4gNTA2OlxcdFxcdHJldHVybiByZXQ7XFxuIDUwNzpcXHR9XFxuIDUwODpcXHRcXG4gNTA5OlxcdGludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG4gNTEwOlxcdFxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbiA1MTE6XFx0e1xcbiA1MTI6XFx0XFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS1cXHUwMDNlYXJjaC52aW9hcGljO1xcbiA1MTM6XFx0XFx0aW50IGlycSA9IGUtXFx1MDAzZWlycWNoaXAucGluO1xcbiA1MTQ6XFx0XFx0aW50IHJldCwgaXJxX2xldmVsO1xcbiA1MTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjI2LjQ2NzI2OTU2NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDc1NDQ3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgS1ZNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gY29kZSwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgbWFudWFsbHkgaW5pdGlhbGl6aW5nIHRoZSBgaXJxZWAgc3RydWN0dXJlLiBJIHNlZSB0aGUgYXNzaWdubWVudHMgdG8gaXRzIGZpZWxkcyBsaWtlIGBkZXN0X2lkYCwgYHZlY3RvcmAsIGBkZXN0X21vZGVgLCBldGMuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIEtWTSBmYXJlOyBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZS4gVGhpcyBgaXJxZWAgc3RydWN0IGlzIHRoZW4gcGFzc2VkIHRvIGBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWNgLCB3aGljaCBpcywgYWdhaW4sIHR5cGljYWwuXG5cblRoZSBhY3R1YWwgcGF0Y2ggaXMgYSB2ZXJ5IHNtYWxsLCBzcGVjaWZpYyBjaGFuZ2U6IGByZXQgXHUwMDI2XHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHYCBpcyB1cGRhdGVkIHRvIGByZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHYC4gQWgsIGEgY2xhc3NpYyBsb2dpYyBidWcgZml4LiBJdCBzZWVtcyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgZmxhd2VkIGJlY2F1c2UgYHJldGAgY291bGQgYmUgYSBuZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0aW5nIGFuIGVycm9yLiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgd2FzIHRyZWF0aW5nIGEgZmFpbHVyZSBpbiBpbnRlcnJ1cHQgZGVsaXZlcnkgYXMgYSBzdWNjZXNzIGlmIGByZXRgIHdhcyB6ZXJvLiBUaGlzIGlzIGNsZWFybHkgaW5jb3JyZWN0LiBUaGUgdXBkYXRlZCBsb2dpYyBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzLCB3aGljaCBzaWduaWZ5IGVycm9ycy4gSWYgdGhlIGRlbGl2ZXJ5IGZhaWxzLCB0aGVuIGByZW1vdGVfaXJyYCBzaG91bGQgbm90IGJlIHNldC5cblxuVGhpcyBwYXRjaCBpcyBzb2xpZC4gVGhlcmUgYXJlIG5vIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIFRoaXMgaXNuJ3QgYWJvdXQgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0J3MgYSBzdHJhaWdodC11cCBmaXggZm9yIElPQVBJQyBzdGF0ZSBtYWNoaW5lIGxvZ2ljLCBmaXhpbmcgaG93IGByZW1vdGVfaXJyYCBpcyBzZXQgYmFzZWQgb24gdGhlIHJldHVybiBvZiBga3ZtX2lycV9kZWxpdmVyeV90b19hcGljYC4gS0FTQU4gd291bGQgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCBidXQgdGhhdCdzIG5vdCB0aGUgaXNzdWUgaGVyZS4gVGhpcyBpcyBhIHB1cmUgbG9naWMgYnVnLCBzbyBLTVNBTiBpcyB1bm5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0NCwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NzozNS41NDI3MTk5NTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGxvZ2ljIGJ1Z3MgaW4gdGhlIEtWTSBJT0FQSUMgc3RhdGUgbWFjaGluZSAoc3BlY2lmaWNhbGx5LCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZGVsaXZlcnkgc3RhdGUgYW5kIHJlbW90ZV9pcnIgdHJhY2tpbmcpLiBJdCBtb2RpZmllcyBjb25kaXRpb25hbCBjaGVja3MgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQgc3RhdGUgdmFyaWFibGVzIChsaWtlIGBpb2FwaWMtXFx1MDAzZWlycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmApLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCB3aGlsZSBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBsb2dpYyBidWdzIGluIHRoZSBLVk0gSU9BUElDIHN0YXRlIG1hY2hpbmUgKHNwZWNpZmljYWxseSwgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGRlbGl2ZXJ5IHN0YXRlIGFuZCByZW1vdGVfaXJyIHRyYWNraW5nKS4gSXQgbW9kaWZpZXMgY29uZGl0aW9uYWwgY2hlY2tzIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIHN0YXRlIHZhcmlhYmxlcyAobGlrZSBgaW9hcGljLVxcdTAwM2VpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgKS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcywgd2hpbGUgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowth4mw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 08:53:52 +0000 UTC FinishedAt: 2026-08-12 08:57:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_IOAPIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_IOAPIC" ], "series_id": "91484fc2-d0eb-4529-aa80-9b7ee86c4a97" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_ioapic_set_irq", "kvm_ioapic_update_eoi", "ioapic_mmio_write" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU9BUElDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2lvYXBpY19zZXRfaXJxJiMzNDssCiAgICAmIzM0O2t2bV9pb2FwaWNfdXBkYXRlX2VvaSYjMzQ7LAogICAgJiMzNDtpb2FwaWNfbW1pb193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGxvZ2ljIGJ1Z3MgaW4gdGhlIEtWTSBJT0FQSUMgc3RhdGUgbWFjaGluZSAoc3BlY2lmaWNhbGx5LCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZGVsaXZlcnkgc3RhdGUgYW5kIHJlbW90ZV9pcnIgdHJhY2tpbmcpLiBJdCBtb2RpZmllcyBjb25kaXRpb25hbCBjaGVja3MgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQgc3RhdGUgdmFyaWFibGVzIChsaWtlIGBpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIHdoaWxlIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIElPQVBJQyBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZWlyIGRlbGl2ZXJ5IHN0YXRlIChpcnJfZGVsaXZlcmVkIGFuZCByZW1vdGVfaXJyKSBpcyB1cGRhdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgZGVsaXZlcnkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBjMDAyMGVlNzMyNzg4OGQ2YjMwZDJkMWY1MGU4NTViNzliNjU5MmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODo1NTo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbmluZGV4IDc1NzY2N2ZiMmJmYTAuLjgxZGIwMjVkMmFjOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuQEAgLTIzMCwxMSAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4gXHRvbGRfaXJyID0gaW9hcGljLVx1MDAzZWlycjtcbiBcdGlvYXBpYy1cdTAwM2VpcnIgfD0gbWFzaztcbiBcdGlmIChlZGdlKSB7XG4tXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpIHtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1x0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0fVxuIFxuIFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcbkBAIC0zNzcsOCAmIzQzOzM3NywxNyBAQCBzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbClcbiBcdFx0ICogYXMgZWRnZS10cmlnZ2VyZWQuIFRoaXMgYmVoYXZpb3IgaXMgdXNlZCB0byBzaW11bGF0ZSBhblxuIFx0XHQgKiBleHBsaWNpdCBFT0kgb24gSU9BUElDcyB0aGF0IGRvbiYjMzk7dCBoYXZlIHRoZSBFT0kgcmVnaXN0ZXIuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZS1cdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpXG4mIzQzO1x0XHRpZiAoZS1cdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpIHtcbiBcdFx0XHRlLVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIGlycl9kZWxpdmVyZWQgdHJhY2tzIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgdGhhdFxuJiM0MztcdFx0XHQgKiBoYXZlIGFscmVhZHkgYmVlbiBkZWxpdmVyZWQuICBDbGVhciBzdGFsZSBlZGdlLXRyaWdnZXJlZFxuJiM0MztcdFx0XHQgKiBkZWxpdmVyeSBzdGF0ZSB3aGVuIHRoZSBlbnRyeSBpcyBjb25maWd1cmVkIGZvclxuJiM0MztcdFx0XHQgKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyBpbmRleCk7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG1hc2tfYWZ0ZXIgPSBlLVx1MDAzZWZpZWxkcy5tYXNrO1xuIFx0XHRpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcilcbkBAIC00OTEsNyAmIzQzOzUwMCw3IEBAIHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVx1MDAzZWt2bSwgTlVMTCwgXHUwMDI2aXJxZSk7XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiBcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfZmVhdHVyZXNcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfaXBpXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3N2bV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3RsYl9mbHVzaFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjAyNGY0ZjAxNTcxN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSwxOTAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3RzIGZvciBpbi1rZXJuZWwgSS9PIEFQSUMgc3RhdGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXBpYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dWNhbGxfY29tbW9uLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXHRcdDE2XG4mIzQzOyNkZWZpbmUgVEVTVF9WRUNUT1JcdFx0MHg1MFxuJiM0MzsjZGVmaW5lIE5PX1NVQ0hfQVBJQ19JRFx0XHQweGZlXG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXHQwXG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJR1x0MVxuJiM0MzsjZGVmaW5lIElPQVBJQ19ERUZBVUxUX0dQQVx0MHhmZWMwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIElPQVBJQ19SRUdfU0VMRUNUXHQweDAwXG4mIzQzOyNkZWZpbmUgSU9BUElDX1JFR19XSU5ET1dcdDB4MTBcbiYjNDM7I2RlZmluZSBJT0FQSUNfUlRFX0xPVyhwaW4pXHQoMHgxMCAmIzQzOyAyICogKHBpbikpXG4mIzQzOyNkZWZpbmUgSU9BUElDX1JURV9UUklHX01PREVcdEJJVCgxNSlcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbiYjNDM7e1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpcnFjaGlwLVx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XG4mIzQzO1x0ciA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XG4mIzQzO1x0aWYgKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPKVxuJiM0MztcdFx0X19URVNUX1JFUVVJUkUoMCwgXCYjMzQ7SW4ta2VybmVsIEkvTyBBUElDIG5vdCBhdmFpbGFibGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVCghciwgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfSVJRQ0hJUCwgcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXG4mIzQzO3tcbiYjNDM7XHRpcnFjaGlwLVx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XG4mIzQzO1x0dm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLFxuJiM0MztcdFx0XHQgICAgIHUzMiBkZXN0X2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4mIzQzO1xuJiM0MztcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuJiM0MztcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnZlY3RvciA9XG4mIzQzO1x0XHRURVNUX1ZFQ1RPUjtcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfaWQgPVxuJiM0MztcdFx0ZGVzdF9pZDtcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfbW9kZSA9IDA7XG4mIzQzO1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy50cmlnX21vZGUgPVxuJiM0MztcdFx0bGV2ZWxfdHJpZ2dlcmVkID8gVEVTVF9JT0FQSUNfTEVWRUxfVFJJRyA6XG4mIzQzO1x0XHRcdFx0ICBURVNUX0lPQVBJQ19FREdFX1RSSUc7XG4mIzQzO1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDtcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRzZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW5hYmxlX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7XG4mIzQzO1x0dTY0IGFwaWNiYXNlO1xuJiM0MztcbiYjNDM7XHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XG4mIzQzO1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFLFxuJiM0MztcdFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4mIzQzO1x0Kih1MzIgKikobGFwaWMucmVncyAmIzQzOyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0ge1xuJiM0MztcdFx0LmlycSA9IFRFU1RfSU9BUElDX1BJTixcbiYjNDM7XHRcdC5sZXZlbCA9IGxldmVsLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fSVJRX0xJTkVfU1RBVFVTLCBcdTAwMjZpcnEpO1xuJiM0MztcdHJldHVybiBpcnEuc3RhdHVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbiYjNDM7XG4mIzQzO1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoISEoaXJxY2hpcC5jaGlwLmlvYXBpYy5pcnIgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBURVNUX0lPQVBJQ19QSU4pKSA9PSBleHBlY3RlZCxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBJT0FQSUMgSVJSIGZvciBwaW4gJXUgdG8gYmUgJXUsIGdvdCAweCV4XCYjMzQ7LFxuJiM0MztcdFx0ICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuJiM0MztcdHN0cnVjdCBrdm1fdm0gKnZtO1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpO1xuJiM0MztcdHZtX2NyZWF0ZV9pcnFjaGlwKHZtKTtcbiYjNDM7XG4mIzQzO1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTtcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIGZhaWxlZCBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFwmIzM0Oywgc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoIWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lycixcbiYjNDM7XHRcdCAgICBcJiMzNDtLVk0gc2V0IHJlbW90ZV9pcnIgZm9yIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCB0aGF0IHdhc24mIzM5O3QgZGVsaXZlcmVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIE5VTEwpO1xuJiM0MztcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXMgXHUwMDNlIDAsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgZWRnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFwmIzM0Oywgc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuJiM0MztcdFRFU1RfQVNTRVJUKCFzdGF0dXMsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkXCYjMzQ7LFxuJiM0MztcdFx0ICAgIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgKmlvYXBpYyA9ICh1MzIgKilJT0FQSUNfREVGQVVMVF9HUEE7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoaW9hcGljW0lPQVBJQ19SRUdfU0VMRUNUIC8gc2l6ZW9mKHUzMildLFxuJiM0MztcdFx0ICAgSU9BUElDX1JURV9MT1coVEVTVF9JT0FQSUNfUElOKSk7XG4mIzQzO1x0V1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19XSU5ET1cgLyBzaXplb2YodTMyKV0sXG4mIzQzO1x0XHQgICBURVNUX1ZFQ1RPUiB8IElPQVBJQ19SVEVfVFJJR19NT0RFKTtcbiYjNDM7XG4mIzQzO1x0R1VFU1RfRE9ORSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4mIzQzO1x0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9zd2l0Y2hfaW9hcGljX3Bpbl90b19sZXZlbCk7XG4mIzQzO1x0ZW5hYmxlX2xhcGljKHZjcHUpO1xuJiM0MztcdHZpcnRfbWFwKHZtLCBJT0FQSUNfREVGQVVMVF9HUEEsIElPQVBJQ19ERUZBVUxUX0dQQSwgMSk7XG4mIzQzO1xuJiM0MztcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzIFx1MDAzZSAwLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcJiMzNDssIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpO1xuJiM0MztcbiYjNDM7XHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIHRydWUpO1xuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCgpO1xuJiM0MztcdHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpO1xuJiM0MztcdHRlc3RfZWRnZV90b19sZXZlbF9jbGVhcnNfZGVsaXZlcnlfc3RhdGUoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JT0FQSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW9hcGljX3NldF9pcnEmIzM0OywKICAgICYjMzQ7a3ZtX2lvYXBpY191cGRhdGVfZW9pJiMzNDssCiAgICAmIzM0O2lvYXBpY19tbWlvX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlaXIgZGVsaXZlcnkgc3RhdGUgKGlycl9kZWxpdmVyZWQgYW5kIHJlbW90ZV9pcnIpIGlzIHVwZGF0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gbG9naWMgdGhhdCBhZmZlY3RzIGludGVycnVwdCBkZWxpdmVyeSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGMwMDIwZWU3MzI3ODg4ZDZiMzBkMmQxZjUwZTg1NWI3OWI2NTkyZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA4OjU1OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jCmluZGV4IDc1NzY2N2ZiMmJmYTAuLjgxZGIwMjVkMmFjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmMKQEAgLTIzMCwxMSAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsCiAJb2xkX2lyciA9IGlvYXBpYy0mZ3Q7aXJyOwogCWlvYXBpYy0mZ3Q7aXJyIHw9IG1hc2s7CiAJaWYgKGVkZ2UpIHsKLQkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzazsKIAkJaWYgKG9sZF9pcnIgPT0gaW9hcGljLSZndDtpcnIpIHsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzazsKIAl9CiAKIAlyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpOwpAQCAtMzc3LDggJiM0MzszNzcsMTcgQEAgc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpCiAJCSAqIGFzIGVkZ2UtdHJpZ2dlcmVkLiBUaGlzIGJlaGF2aW9yIGlzIHVzZWQgdG8gc2ltdWxhdGUgYW4KIAkJICogZXhwbGljaXQgRU9JIG9uIElPQVBJQ3MgdGhhdCBkb24mIzM5O3QgaGF2ZSB0aGUgRU9JIHJlZ2lzdGVyLgogCQkgKi8KLQkJaWYgKGUtJmd0O2ZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0VER0VfVFJJRykKJiM0MzsJCWlmIChlLSZndDtmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpIHsKIAkJCWUtJmd0O2ZpZWxkcy5yZW1vdGVfaXJyID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBpcnJfZGVsaXZlcmVkIHRyYWNrcyBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIHRoYXQKJiM0MzsJCQkgKiBoYXZlIGFscmVhZHkgYmVlbiBkZWxpdmVyZWQuICBDbGVhciBzdGFsZSBlZGdlLXRyaWdnZXJlZAomIzQzOwkJCSAqIGRlbGl2ZXJ5IHN0YXRlIHdoZW4gdGhlIGVudHJ5IGlzIGNvbmZpZ3VyZWQgZm9yCiYjNDM7CQkJICogbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMuCiYjNDM7CQkJICovCiYjNDM7CQkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+KDEgJmx0OyZsdDsgaW5kZXgpOwomIzQzOwkJfQogCiAJCW1hc2tfYWZ0ZXIgPSBlLSZndDtmaWVsZHMubWFzazsKIAkJaWYgKG1hc2tfYmVmb3JlICE9IG1hc2tfYWZ0ZXIpCkBAIC00OTEsNyAmIzQzOzUwMCw3IEBAIHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cykKIAl9IGVsc2UKIAkJcmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy0mZ3Q7a3ZtLCBOVUxMLCAmYW1wO2lycWUpOwogCi0JaWYgKHJldCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQomIzQzOwlpZiAocmV0ICZndDsgMCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQogCQllbnRyeS0mZ3Q7ZmllbGRzLnJlbW90ZV9pcnIgPSAxOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDZmYzM0ZTliZjhlMWIuLjg5ZTNmODJlNzViMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtODYsNiAmIzQzOzg2LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X2ZlYXR1cmVzCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfaXBpCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfc3ZtX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2h5cGVydl90bGJfZmx1c2gKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX2Nsb2NrX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9wdl90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjAyNGY0ZjAxNTcxNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwxOTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3RzIGZvciBpbi1rZXJuZWwgSS9PIEFQSUMgc3RhdGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDthcGljLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt1Y2FsbF9jb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0lPQVBJQ19QSU4JCTE2CiYjNDM7I2RlZmluZSBURVNUX1ZFQ1RPUgkJMHg1MAomIzQzOyNkZWZpbmUgTk9fU1VDSF9BUElDX0lECQkweGZlCiYjNDM7I2RlZmluZSBURVNUX0lPQVBJQ19FREdFX1RSSUcJMAomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJRwkxCiYjNDM7I2RlZmluZSBJT0FQSUNfREVGQVVMVF9HUEEJMHhmZWMwMDAwMFVMTAomIzQzOyNkZWZpbmUgSU9BUElDX1JFR19TRUxFQ1QJMHgwMAomIzQzOyNkZWZpbmUgSU9BUElDX1JFR19XSU5ET1cJMHgxMAomIzQzOyNkZWZpbmUgSU9BUElDX1JURV9MT1cocGluKQkoMHgxMCAmIzQzOyAyICogKHBpbikpCiYjNDM7I2RlZmluZSBJT0FQSUNfUlRFX1RSSUdfTU9ERQlCSVQoMTUpCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKQomIzQzO3sKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWlycWNoaXAtJmd0O2NoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7CiYjNDM7CXIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApOwomIzQzOwlpZiAociAmYW1wOyZhbXA7IGVycm5vID09IEVOWElPKQomIzQzOwkJX19URVNUX1JFUVVJUkUoMCwgJiMzNDtJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZSYjMzQ7KTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKQomIzQzO3sKJiM0MzsJaXJxY2hpcC0mZ3Q7Y2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLAomIzQzOwkJCSAgICAgdTMyIGRlc3RfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDsKJiM0MzsKJiM0MzsJZ2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0MzsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy52ZWN0b3IgPQomIzQzOwkJVEVTVF9WRUNUT1I7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9CiYjNDM7CQlkZXN0X2lkOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfbW9kZSA9IDA7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudHJpZ19tb2RlID0KJiM0MzsJCWxldmVsX3RyaWdnZXJlZCA/IFRFU1RfSU9BUElDX0xFVkVMX1RSSUcgOgomIzQzOwkJCQkgIFRFU1RfSU9BUElDX0VER0VfVFJJRzsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5hYmxlX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7CiYjNDM7CXU2NCBhcGljYmFzZTsKJiM0MzsKJiM0MzsJYXBpY2Jhc2UgPSB2Y3B1X2dldF9tc3IodmNwdSwgTVNSX0lBMzJfQVBJQ0JBU0UpOwomIzQzOwl2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0lBMzJfQVBJQ0JBU0UsCiYjNDM7CQkgICAgIGFwaWNiYXNlIHwgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKTsKJiM0MzsJdmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCAmYW1wO2xhcGljKTsKJiM0MzsJKih1MzIgKikobGFwaWMucmVncyAmIzQzOyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7CiYjNDM7CXZjcHVfaW9jdGwodmNwdSwgS1ZNX1NFVF9MQVBJQywgJmFtcDtsYXBpYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0gewomIzQzOwkJLmlycSA9IFRFU1RfSU9BUElDX1BJTiwKJiM0MzsJCS5sZXZlbCA9IGxldmVsLAomIzQzOwl9OwomIzQzOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgJmFtcDtpcnEpOwomIzQzOwlyZXR1cm4gaXJxLnN0YXR1czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CVRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyICZhbXA7ICgxICZsdDsmbHQ7IFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgSU9BUElDIElSUiBmb3IgcGluICV1IHRvIGJlICV1LCBnb3QgMHgleCYjMzQ7LAomIzQzOwkJICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzKCk7CiYjNDM7CXZtX2NyZWF0ZV9pcnFjaGlwKHZtKTsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTsKJiM0MzsKJiM0MzsJc3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGZhaWxlZCBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwlnZXRfaW9hcGljKHZtLCAmYW1wO2lycWNoaXApOwomIzQzOwlURVNUX0FTU0VSVCghaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyLAomIzQzOwkJICAgICYjMzQ7S1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJiMzOTt0IGRlbGl2ZXJlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBOVUxMKTsKJiM0MzsJZW5hYmxlX2xhcGljKHZjcHUpOwomIzQzOwomIzQzOwlzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS0mZ3Q7aWQpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzICZndDsgMCwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWQmIzM0Oywgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpOwomIzQzOwlURVNUX0FTU0VSVCghc3RhdHVzLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkJiMzNDssCiYjNDM7CQkgICAgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3Rfc3dpdGNoX2lvYXBpY19waW5fdG9fbGV2ZWwodm9pZCkKJiM0Mzt7CiYjNDM7CXUzMiAqaW9hcGljID0gKHUzMiAqKUlPQVBJQ19ERUZBVUxUX0dQQTsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19TRUxFQ1QgLyBzaXplb2YodTMyKV0sCiYjNDM7CQkgICBJT0FQSUNfUlRFX0xPVyhURVNUX0lPQVBJQ19QSU4pKTsKJiM0MzsJV1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19XSU5ET1cgLyBzaXplb2YodTMyKV0sCiYjNDM7CQkgICBURVNUX1ZFQ1RPUiB8IElPQVBJQ19SVEVfVFJJR19NT0RFKTsKJiM0MzsKJiM0MzsJR1VFU1RfRE9ORSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3Rfc3dpdGNoX2lvYXBpY19waW5fdG9fbGV2ZWwpOwomIzQzOwllbmFibGVfbGFwaWModmNwdSk7CiYjNDM7CXZpcnRfbWFwKHZtLCBJT0FQSUNfREVGQVVMVF9HUEEsIElPQVBJQ19ERUZBVUxUX0dQQSwgMSk7CiYjNDM7CiYjNDM7CXNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LSZndDtpZCk7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXMgJmd0OyAwLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgZWRnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwlhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CVRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBOVUxMKSwgVUNBTExfRE9ORSk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgdHJ1ZSk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4odm9pZCkKJiM0Mzt7CiYjNDM7CXRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7CiYjNDM7CXRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpOwomIzQzOwl0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNQoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDU4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIElPQVBJQyBFbXVsYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgdGhlIElPQVBJQyB3b3JrcyBpbiBLVk0sIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseSB0byBldmFsdWF0ZSBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUga2V5IGFyZWFzOgoKMS4gIGBpb2FwaWNfc2V0X2lycWA6IEl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYmVlbiBhIG1vZGlmaWNhdGlvbiByZWxhdGVkIHRvIGhvdyBgaXJyX2RlbGl2ZXJlZGAgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSBmb3IgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cy4gVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgbG9vayBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYW4gZWRnZSBjYXNlIG9yIGEgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBpbnRlcnJ1cHQgZGVsaXZlcnkuCjIuICBgaW9hcGljX3dyaXRlX2luZGlyZWN0YDogQWdhaW4sIHdlIHNlZSBtb3JlIGNoYW5nZXMgcmVsYXRlZCB0byBgaXJyX2RlbGl2ZXJlZGAgYnV0IHRoaXMgdGltZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaW50ZXJydXB0IGVudHJ5IGNvbmZpZ3VyYXRpb25zLiBUaGUgbG9naWMgc2VlbXMgdG8gZW5zdXJlIHRoYXQgc3RhbGUgZWRnZS10cmlnZ2VyZWQgc3RhdGUgaXMgY2xlYXJlZCB3aGVuIHN3aXRjaGluZyBhbiBlbnRyeSB0byBsZXZlbC10cmlnZ2VyZWQuCjMuICBgaW9hcGljX3NlcnZpY2VgOiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgaW4gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGByZW1vdGVfaXJyYCBmbGFnLiBUaGlzIHNlZW1zIHRvIGJlIG1hbmFnaW5nIHRoZSBhY2tub3dsZWRnZW1lbnQgb2YgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgd2l0aGluIHRoZSBJT0FQSUMuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCwgd2hpY2ggc3VnZ2VzdHMgYSBtb2RpZmljYXRpb24gb2YgdGhlIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYywgbWF5YmUgaW52b2x2aW5nIGVkZ2UtdHJpZ2dlcmVkIHZzLiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IGhhbmRsaW5nLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkgYW5kIHRhcmdldGVkIGZ1enppbmcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCB3aGVyZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGVzZSBmdW5jdGlvbnM/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IHBvdGVudGlhbCBwYXRocyBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBmdXp6LiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBwYXRocyBmb3IgZWZmZWN0aXZlIGZ1enppbmcuIFRpbWUgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLiBJIHdpbGwgZm9jdXMgb24gdGhlIHJlbGF0ZWQgY29kZS4KVGhlIEtWTSBjb25maWcgaXRzZWxmIHdpbGwgYmUgdGhlIGZvY3VzLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8Ym9vbHx1MzJ8dTY0KS4qIGlvYXBpY18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRlYnVnZ2luZyBhIEdyZXAgRXhwcmVzc2lvbioqCgpIbW0sIEkgc3VzcGVjdCBteSBgZ3JlcGAgZXhwcmVzc2lvbiBpc24mIzM5O3QgcXVpdGUgcmlnaHQuIFRoYXQmIzM5O3MgYSBjb21tb24gc25hZyB3aXRoIHRoZXNlIHRoaW5nczsgaXQmIzM5O3MgZWFzeSB0byBnZXQgdGhlIHN5bnRheCBqdXN0IHNsaWdodGx5IG9mZiBhbmQgbWlzcyB3aGF0IHlvdSYjMzk7cmUgbG9va2luZyBmb3IuIEluc3RlYWQgb2Ygc3BlbmRpbmcgbW9yZSB0aW1lIHR3ZWFraW5nIGl0LCBsZXQmIzM5O3MganVzdCBhcHByb2FjaCB0aGlzIG1ldGhvZGljYWxseS4gSSBjYW4gZWl0aGVyIHNpbXBseSByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCB2aXN1YWxseSBzY2FubmluZyBmb3IgdGhlIHBhdHRlcm4sIG9yIEkgY2FuIHJlZmluZSB0aGUgYGdyZXBgIGFwcHJvYWNoLiBQZXJoYXBzIHRyeWluZyB0byBpZGVudGlmeSB0aGUgcGF0dGVybiBgXi4qIGt2bV9pb2FwaWNfLipcKGAgd2lsbCBwcm92ZSBtb3JlIHN1Y2Nlc3NmdWwuIEkga25vdyB0aGF0IEkmIzM5O20gbG9va2luZyBmb3IgYSBsaW5lIHRoYXQgc3RhcnRzIChgXmApIHdpdGggYW55dGhpbmcgKGAuKmApLCBmb2xsb3dlZCBieSB0aGUgc3RyaW5nIGAga3ZtX2lvYXBpY19gLCBmb2xsb3dlZCBieSBhbnl0aGluZyAoYC4qYCksIGFuZCBlbmRzIHdpdGggYW4gb3BlbmluZyBwYXJlbnRoZXNpcyAoYFwoYCkuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBtaWdodCBnZXQgbWUgY2xvc2VyIHRvIHRoZSByZWxldmFudCBsaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteLioga3ZtX2lvYXBpY18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTg3PXN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ2LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0NzpzdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI1OTp2b2lkIGt2bV9pb2FwaWNfc2Nhbl9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nICppb2FwaWNfaGFuZGxlZF92ZWN0b3JzKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI2MC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTQ2Nj1zdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUwOC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1MDk6aW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxMC1cdFx0ICAgICAgIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUyOC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1Mjk6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUzMC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU0Ny0jZGVmaW5lIElPQVBJQ19TVUNDRVNTSVZFX0lSUV9NQVhfQ09VTlQgMTAwMDBcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1NDg6c3RhdGljIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQ5LVx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTk0LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU5NTp2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTk2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NjYzPXN0YXRpYyBpbnQgaW9hcGljX21taW9fd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzA0LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcwNTpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3Jlc2V0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzA2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MjUtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzI2OmludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTcyNy17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc1Mi1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo3NTM6dm9pZCBrdm1faW9hcGljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc1NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYzMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIElPQVBJQyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgaW50byB0aGlzIElPQVBJQyBjb2RlIGZvciB3aGF0ZXZlciBhbmFseXNpcyBJJiMzOTttIGRvaW5nLiBMZXQmIzM5O3Mgc2VlLCBpbml0aWFsbHksIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBJIGlkZW50aWZpZWQgd2VyZSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCAqcG90ZW50aWFsbHkqIGBpb2FwaWNfbW1pb193cml0ZWAuIEhvbGQgb24sIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgc3RhdGljLCByaWdodD8gWWVzLCBpdCBpcy4gQnV0LCBpdCYjMzk7cyBhbiBNTUlPIGhhbmRsZXIsIHNvIGl0JiMzOTtzIGEgY2FsbGJhY2sgYW5kIHBvdGVudGlhbGx5IGEgZ29vZCBlbnRyeSBwb2ludC4gVGhlbiBJIHJlYWxpemVkIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIGNhbGxlZCBmcm9tIGBpb2FwaWNfbW1pb193cml0ZWAgYW5kIGBpb2FwaWNfc2V0X2lycWAgaXMgY2FsbGVkIGZyb20gYGt2bV9pb2FwaWNfc2V0X2lycWAsIGFuZCBmaW5hbGx5LCBgaW9hcGljX3NlcnZpY2VgIGlzIGNhbGxlZCBmcm9tIGBpb2FwaWNfc2V0X2lycWAuCgpBbHJpZ2h0LCB0aGUgY29yZSBtb2RpZmllZCBjb2RlIHNlZW1zIHRvIGJlIHJlYWNoYWJsZSBmcm9tIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gVGhhdCBsb29rcyBnb29kLgoKQnV0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBpbmxpbmVkLiBJdCBsb29rcyBsaWtlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgZGVmaW5lZCB3aXRoaW4gYSBzdHJ1Y3R1cmUsIHNvIGl0JiMzOTtzIG5vdCBpbmxpbmVkLgoKVGhlIGJlc3QgdGhpbmcgdG8gZG8gaXMgdG8gbGlzdCBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAuCgpJIHdpbGwgYWxzbyBjaGVjayBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCBmb3IgY2FsbGVycyBvZiBgaW9hcGljX3dyaXRlX2luZGlyZWN0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2FwaWNfd3JpdGVfaW5kaXJlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTMxND12b2lkIGt2bV9maXJlX21hc2tfbm90aWZpZXJzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluLFxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zMzAtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MzMxOnN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTMzMi17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTY2Mz1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTY5NC1cdGNhc2UgSU9BUElDX1JFR19XSU5ET1c6XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Njk1Olx0XHRpb2FwaWNfd3JpdGVfaW5kaXJlY3QoaW9hcGljLCBkYXRhKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02OTYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgSU9BUElDIFdyaXRlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdyaXRlcyB0byB0aGUgSU9BUElDIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIGNhbGxlZCBmcm9tIGBpb2FwaWNfbW1pb193cml0ZWAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB3aGljaCBtYWtlcyBzZW5zZS4gSSByZWNvZ25pemUgYGlvYXBpY19tbWlvX3dyaXRlYCBhcyBhIGNhbGxiYWNrIHdpdGhpbiB0aGUgYGlvYXBpY19tbWlvX29wc2Agc3RydWN0dXJlLiBTZWVtcyBsaWtlIGEgc3RhbmRhcmQgTU1JTyBhcHByb2FjaC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0aGluZ3MgY2FuIGJlIHdyaXR0ZW4uCgpJJiMzOTttIGNoZWNraW5nIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggd291bGQgaW5kaWNhdGUgdGhleSBoYXZlIGV4dGVybmFsIGxpbmthZ2UuIExvb2tzIGxpa2UgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgbm9uLXN0YXRpYy4gR29vZCwgYSBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgaW50ZXJydXB0cyBhcmUgYWN0dWFsbHkgc2V0LCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkLiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgIGFuZCBzZWFyY2ggZm9yIGNhbGxlcnMgb2YgYGlvYXBpY19zZXRfaXJxYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9hcGljX3NldF9pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTE2NT1zdGF0aWMgdm9pZCBpb2FwaWNfbGF6eV91cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTE4Ni1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoxODc6c3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTE4OC1cdFx0aW50IGlycV9sZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQyLW91dDpcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDM6XHR0cmFjZV9rdm1faW9hcGljX3NldF9pcnEoZW50cnkuYml0cywgaXJxLCByZXQgPT0gMCk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ0LVx0cmV0dXJuIHJldDtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9MjQ3PXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfaW5qZWN0X2FsbChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBsb25nIGlycilcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjUyLVx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIFx1MDAyNmlyciwgSU9BUElDX05VTV9QSU5TKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI1MzpcdFx0aW9hcGljX3NldF9pcnEoaW9hcGljLCBpZHgsIDEsIHRydWUpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI1NC1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NDY2PXN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTA4LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUwOTppbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTEwLVx0XHQgICAgICAgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTIxLVx0XHRcdFx0XHQgaXJxX3NvdXJjZV9pZCwgbGV2ZWwpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUyMjpcdHJldCA9IGlvYXBpY19zZXRfaXJxKGlvYXBpYywgaXJxLCBpcnFfbGV2ZWwsIGxpbmVfc3RhdHVzKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKklkZW50aWZ5aW5nIEtleSBFbnRyeSBQb2ludHMgZm9yIElPQVBJQyBJbnRlcmFjdGlvbiBpbiBLVk0qKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgSU9BUElDIGNvZGUgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEkgc2VlIHRoYXQgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgdGhlIGV4dGVybmFsbHkgdmlzaWJsZSAobm9uLXN0YXRpYykgZnVuY3Rpb24gdGhhdCBlZmZlY3RpdmVseSBhY3RzIGFzIHRoZSBlbnRyeSBwb2ludCBmb3IgYGlvYXBpY19zZXRfaXJxYC4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdCBvbmUuIEFuZCBsb29raW5nIGF0IGBpb2FwaWNfbW1pb193cml0ZWAsIHRoYXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIGNhbGxlZC4gQWgsIGJ1dCBgaW9hcGljX21taW9fd3JpdGVgIGlzICpzdGF0aWMqLCBzbyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3NlZC4gU2luY2UgaXQmIzM5O3MgdGhlcmUgSSYjMzk7bGwgaW5jbHVkZSBpdC4gQWxzbywgSSYjMzk7bGwgYWRkIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIHRvIHRoZSBsaXN0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBjb3ZlciBhbGwgdGhlIGJhc2VzLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8ga25vdyB0aGF0IG9uZSB0b28uCgpOb3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGludm9sdmVkIHdpdGggdGhpcyBwYXJ0IG9mIHRoZSBjb2RlLgoKTGV0JiMzOTtzIGFsc28gZmluZCB0aGUgc291cmNlIGNvZGUgbG9jYXRpb24sIHdoaWNoIGlzLCBhcyBleHBlY3RlZCwgaW4gYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AuIEFuZCBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoaXMuIFRpbWUgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvYXBpYy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0xMT1rdm0tJChDT05GSUdfWDg2XzY0KSAmIzQzOz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjEyOmt2bS0kKENPTkZJR19LVk1fSU9BUElDKSAmIzQzOz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTMta3ZtLSQoQ09ORklHX0tWTV9IWVBFUlYpICYjNDM7PSBoeXBlcnYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgS1ZNX0lPQVBJQyBSZXF1aXJlbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHdlIG5lZWQgYEtWTV9JT0FQSUNgIGVuYWJsZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoaXMgS1ZNIGZlYXR1cmUuIEl0IGlzIGEgYml0IHN1cnByaXNpbmcgdGhhdCBJIGhhZCB0byB0aGluayBhYm91dCBpdCBhdCB0aGlzIHN0YWdlLCBzbyBJJiMzOTttIGhvcGluZyBJIGRpZG4mIzM5O3Qgb3Zlcmxvb2sgc29tZXRoaW5nIG1vcmUgb2J2aW91cy4gVGltZSB0byBsb29rIGludG8gdGhlIGRldGFpbHMgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBJdCYjMzk7cyB1c3VhbGx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IHlvdSBuZXZlciBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lPQVBJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBLVk1fSU9BUElDYCBEZXBlbmRlbmN5KioKCkhtbSwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGEgYml0IHJ1c3R5LCBidXQgdGhpcyBgS1ZNX0lPQVBJQ2Agc2V0dGluZyBmZWVscyBmYW1pbGlhci4gSSB0aG91Z2h0IGl0IHdhcyBhIGJvb2xlYW4sIHJpZ2h0PyBZZXMsIHRoYXQmIzM5O3MgaXQgLSBhIHNpbXBsZSBgYm9vbGAuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBpcyBpdCBkaXJlY3RseSB0aWVkIHRvIGBLVk1gPyBJIG1lYW4sIGRvZXMgYEtWTWAgYWx3YXlzIHNlbGVjdCB0aGlzIG9wdGlvbiwgb3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgbnVhbmNlZCwgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzIG9yIGhhcmR3YXJlIGNhcGFiaWxpdGllcz8KCkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBwcm9iYWJseSBkZWx2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGNyb3NzLXJlZmVyZW5jZSB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24uIEkgbmVlZCBhIGRlZmluaXRpdmUgYW5zd2VyIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgbXkgY3VycmVudCB3b3JrLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBjb250cm9sbGVkLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gY29uZmlybSBpZiB0aGVyZSBpcyBhIGRpcmVjdCBzZWxlY3Rpb24gb3IgbW9yZSBjb21wbGV4aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBLVk1fSU9BUElDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLVk1fSU9BUElDIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aGUgS1ZNIEkvTyBBUElDLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGlzIGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZXMuIFRoZSBtb3N0IHJlbGV2YW50IGxvY2F0aW9uIGZvciBhbnl0aGluZyB4ODYtcmVsYXRlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBLVk0sIGlzIGxpa2VseSB1bmRlciBgYXJjaC94ODZgLiBMZXQgbWUgY29uZmlybSBteSBzdXNwaWNpb247IEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgaW5zaWRlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBLVk1fSU9BUElDYCBpbiB0aGVyZSwgYWxvbmcgd2l0aCBpdHMgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IHJlbGF0ZSB0byBpdHMgYmVoYXZpb3Igb3IgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0lPQVBJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1ODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0ICp0aGUqIGBLVk1gIGNvbmZpZyBpdHNlbGYsIG5vdCBqdXN0IGl0cyB1c2FnZSBvciBhIG1vZHVsZT8gSG1tLCBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIGxvb2sgaXMgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEtWTSBvbiB4ODYgYXJjaGl0ZWN0dXJlcyB3b3VsZCByZXNpZGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQga25vYnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgS1ZNX0lPQVBJQ2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGBLVk1fSU9BUElDYC4gVGltZSB0byBnbyBkaWdnaW5nIGludG8gdGhlIGRlZmluaXRpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBzdHJ1Y3R1cmUsIG9yIG1hY3JvLCBvciB3aGF0ZXZlciBpdCBpcywgZml0cyBpbnRvIHRoZSBicm9hZGVyIEtWTSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJT0FQSUMsIGVzcGVjaWFsbHkgaXRzIHJvbGUgaW4gaW50ZXJydXB0IHJvdXRpbmcgYW5kIHZpcnR1YWxpemF0aW9uLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGl0cyBzdHJ1Y3R1cmUgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBkYXRhIGZpZWxkcy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byB0aGlzIHByb2JsZW0uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgaGF2ZSB0byBvZmZlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQgSSB0aGluayBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JT0FQSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEuIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBleGFtaW5lIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLiBNeSBmb2N1cyBpcyBsaWtlbHkgYXJvdW5kIGxpbmUgMTcyLiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgcmVsYXRlZCB0byBLVk0mIzM5O3MgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNvbWUgcGFydGljdWxhciBmZWF0dXJlIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb250cm9sbGVkIGJhc2VkIG9uIG90aGVyIGRlcGVuZGVuY2llcyBvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBjb25uZWN0ZWQsIGFuZCB3aGF0JiMzOTtzIGNvbm5lY3RlZCB0byAqdGhlbSouIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQgYXJvdW5kIHRoYXQgbGluZSB0byByZWZpbmUgYSBjdXJyZW50IGh5cG90aGVzaXMgSSYjMzk7bSB3b3JraW5nIG9uIHJlZ2FyZGluZyBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NjpcdFx0aGVscFxuIDE2NzpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY4Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuIDE3MDpcdFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxuIDE3MTpcdFxuIDE3MjpcdGNvbmZpZyBLVk1fSU9BUElDXG4gMTczOlx0XHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4gMTc0Olx0XHRkZWZhdWx0IHlcbiAxNzU6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDE3NjpcdFx0aGVscFxuIDE3NzpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBhbiBJL08gQVBJQywgUElDLCBhbmQgUElULCBpLmUuXG4gMTc4Olx0XHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cbiAxNzk6XHRcbiAxODA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxODE6XHRcbiAxODI6XHRjb25maWcgS1ZNX1NNTVxuIDE4MzpcdFx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuIDE4NDpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBLVk1fSU9BUElDKioKCkFscmlnaHQsIHNvIGBLVk1fSU9BUElDYCBpcyByZWxpYW50IG9uIGBLVk1fWDg2YC4gQ2xhc3NpYy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBkb3duIHRoZSBsaW5lLCBJIG5lZWQgdG8ga25vdyB0aGUgZW50aXJlIGRlcGVuZGVuY3kgY2hhaW4gb2YgYEtWTV9YODZgLiBXaGF0IGRvZXMgKml0KiBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMgaW4gaXRzIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGluZGlyZWN0bHkgaW1wYWN0IHRoZSBJT0FQSUMgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgcmV2ZWFscyBhYm91dCBgS1ZNX1g4NmAuIEtub3dpbmcgdGhpcyBub3cgd2lsbCBzYXZlIG1lIGhlYWRhY2hlcyBsYXRlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkYXRhIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuXG4gIDE3Olx0XG4gIDE4Olx0aWYgVklSVFVBTElaQVRJT05cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgS1ZNX1g4NlxuICAyMTpcdFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuICAyMjpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjM6XHRcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG4gIDI0Olx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAyNTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxuICAyNzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXG4gIDI4Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gIDI5Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xuICAzMDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gIDMxOlx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDMyOlx0XHRzZWxlY3QgVkhPU1RfVEFTS1xuICAzMzpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxuICAzNDpcdFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXG4gIDM1Olx0XHRzZWxlY3QgS1ZNX01NSU9cbiAgMzY6XHRcdHNlbGVjdCBTQ0hFRF9JTkZPXG4gIDM3Olx0XHRzZWxlY3QgUEVSRl9FVkVOVFNcbiAgMzg6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xuICAzOTpcdFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXG4gIDQwOlx0XHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gIDQxOlx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICA0MjpcdFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiAgNDM6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICA0NDpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuICA0NTpcdFx0c2VsZWN0IEtWTV9WRklPXG4gIDQ2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cbiAgNDc6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuICA0ODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgNDk6XHRcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuICA1MDpcdFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgS1ZNXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NTMKCQkJCQkJCW91dHB1dDogNTkKCQkJCQkJCXRob3VnaHRzOiAzNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIElPQVBJQyBTeW1ib2wgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBLVk0gSU9BUElDIGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhlIGNvcmUgaXMgZGVmaW5pdGVseSBgS1ZNYCwgYW5kIEkmIzM5O2xsIGluY2x1ZGUgYEtWTV9JT0FQSUNgIGFzIHdlbGwuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2Ugc3BlY2lmaWMgc3ltYm9scyBhbmQgZmlndXJlIG91dCB3aGF0IHRvIGluY2x1ZGUuIEkgaW5pdGlhbGx5IGhhZCBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAgb24gbXkgbGlzdCwgd2hpY2ggc2VlbXMgcmlnaHQuIEkgYWxzbyBjb25zaWRlcmVkIGBpb2FwaWNfbW1pb193cml0ZWAsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYyBhbmQgSSYjMzk7bSBzdXBwb3NlZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLgoKV2FpdCBhIHNlY29uZCwgYGlvYXBpY19zZXRfaXJxYCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBga3ZtX2lvYXBpY19zZXRfaXJxYC4gQW5kIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIHRyaWdnZXJlZCBmcm9tIGBpb2FwaWNfbW1pb193cml0ZWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24gYWxzbyBjYWxscyBgaW9hcGljX3dyaXRlX2luZGlyZWN0YC4uLk5vcGUsIGl0JiMzOTtzIGp1c3QgYGlvYXBpY19tbWlvX3dyaXRlYC4gU2luY2UgYGlvYXBpY19tbWlvX3dyaXRlYCBpcyBhIGNhbGxiYWNrLCBpdCBpcyBub3QgaW5saW5lZC4KClRoZSBndWlkZWxpbmVzIHNheSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUuIFNpbmNlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgYSBjYWxsYmFjaywgaXQgaXMgbm90IGlubGluZWQsIHRoZXJlZm9yZSwgSSBjYW4gYWRkIGl0LCBldmVuIGlmIGl0IGhhcyBhIHN0YXRpYyBkZWNsYXJhdGlvbi4gSG93ZXZlciwgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgbm9uLXN0YXRpYy4KClVsdGltYXRlbHksIEkmIzM5O2xsIGFkZCBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIHRoZSByZXN0IG9mIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgSSBtaWdodCBoYXZlIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpfMC05XSYjNDM7IGt2bV9pb2FwaWNfW2Etel8wLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTI0Nz1zdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI1OC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTk6dm9pZCBrdm1faW9hcGljX3NjYW5fZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycylcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNjAte1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NjY9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MDgtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MTAtXHRcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01NDg9c3RhdGljIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU5NC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1OTU6dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU5Ni17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTcyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvYXBpY19tbWlvX29wcyA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzI1LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcyNjppbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03Mjcte1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NTItXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzUzOnZvaWQga3ZtX2lvYXBpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI2MQoJCQkJCQkJb3V0cHV0OiAxNDAKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIElPQVBJQyBFbXVsYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIEtWTSBJT0FQSUMgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBoYW5kbGluZy4gSSB0aGluayBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAgYXJlIGRlZmluaXRlbHkga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlcjsgdGhleSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBpbnRlcnJ1cHQgc2V0dGluZyBhbmQgRU9JIHVwZGF0aW5nIGxvZ2ljLiBJJiMzOTtsbCBpbmNsdWRlIHRob3NlLgoKVGhlbiwgc2luY2UgYGlvYXBpY19tbWlvX3dyaXRlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgLCBpdCYjMzk7cyB3aGVyZSB0aGUgTU1JTyB3cml0ZXMgZ28sIGl0IGlzIGEgdmVyeSByZWxldmFudCBjYWxsc2l0ZS4KCkkgYWxzbyBkb3VibGUgY2hlY2tlZCBpZiBgaW9hcGljX21taW9fd3JpdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzIHN0YXRpYy4gQnV0LCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHNvIHRoZSBjb21waWxlciBpcyB1bmxpa2VseSB0byBpbmxpbmUgaXQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGFuYWx5c2lzLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFwcGVhciB0byBiZSByZWxldmFudCBoZXJlIGFyZSBgS1ZNYCBhbmQgYEtWTV9JT0FQSUNgLiBUaGUgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCBgaW9hcGljX21taW9fd3JpdGVgLgoKTXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgdmVyeSBjb3JlIG9mIEtWTSYjMzk7cyBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtLiBJdCYjMzk7cyB0b3VjaGluZyBob3cgaW50ZXJydXB0cyBhcmUgZGVsaXZlcmVkIHRvIGd1ZXN0IFZNcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIGVkZ2UtdHJpZ2dlcmVkIGJlaGF2aW9yIGFuZCBob3cgdGhlIGRlbGl2ZXJ5IHN0YXRlIGlzIG1hbmFnZWQuIFRoaXMgaXMgZnVuZGFtZW50YWwgS1ZNIGxvZ2ljLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcywgc28gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyB2ZXJ5IHRob3JvdWdobHkuIEkmIzM5O2xsIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JT0FQSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW9hcGljX3NldF9pcnEmIzM0OywKICAgICYjMzQ7a3ZtX2lvYXBpY191cGRhdGVfZW9pJiMzNDssCiAgICAmIzM0O2lvYXBpY19tbWlvX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlaXIgZGVsaXZlcnkgc3RhdGUgKGlycl9kZWxpdmVyZWQgYW5kIHJlbW90ZV9pcnIpIGlzIHVwZGF0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gbG9naWMgdGhhdCBhZmZlY3RzIGludGVycnVwdCBkZWxpdmVyeSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lPQVBJQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9pb2FwaWNfc2V0X2lycSYjMzQ7LAogICAgJiMzNDtrdm1faW9hcGljX3VwZGF0ZV9lb2kmIzM0OywKICAgICYjMzQ7aW9hcGljX21taW9fd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBJT0FQSUMgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgYXJlIGhhbmRsZWQgYW5kIGhvdyB0aGVpciBkZWxpdmVyeSBzdGF0ZSAoaXJyX2RlbGl2ZXJlZCBhbmQgcmVtb3RlX2lycikgaXMgdXBkYXRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSBsb2dpYyB0aGF0IGFmZmVjdHMgaW50ZXJydXB0IGRlbGl2ZXJ5IGFuZCBpcyByZWFjaGFibGUgZnJvbSBndWVzdCBWTXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbG9naWMgYnVncyBpbiB0aGUgS1ZNIElPQVBJQyBzdGF0ZSBtYWNoaW5lIChzcGVjaWZpY2FsbHksIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBkZWxpdmVyeSBzdGF0ZSBhbmQgcmVtb3RlX2lyciB0cmFja2luZykuIEl0IG1vZGlmaWVzIGNvbmRpdGlvbmFsIGNoZWNrcyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBzdGF0ZSB2YXJpYWJsZXMgKGxpa2UgYGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgKS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcywgd2hpbGUgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBjMDAyMGVlNzMyNzg4OGQ2YjMwZDJkMWY1MGU4NTViNzliNjU5MmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwODo1NTo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuYwppbmRleCA3NTc2NjdmYjJiZmEwLi44MWRiMDI1ZDJhYzkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jCkBAIC0yMzAsMTEgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLAogCW9sZF9pcnIgPSBpb2FwaWMtJmd0O2lycjsKIAlpb2FwaWMtJmd0O2lyciB8PSBtYXNrOwogCWlmIChlZGdlKSB7Ci0JCWlvYXBpYy0mZ3Q7aXJyX2RlbGl2ZXJlZCAmYW1wOz0gfm1hc2s7CiAJCWlmIChvbGRfaXJyID09IGlvYXBpYy0mZ3Q7aXJyKSB7CiAJCQlyZXQgPSAwOwogCQkJZ290byBvdXQ7CiAJCX0KJiM0MzsJCWlvYXBpYy0mZ3Q7aXJyX2RlbGl2ZXJlZCAmYW1wOz0gfm1hc2s7CiAJfQogCiAJcmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTsKQEAgLTM3Nyw4ICYjNDM7Mzc3LDE3IEBAIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKQogCQkgKiBhcyBlZGdlLXRyaWdnZXJlZC4gVGhpcyBiZWhhdmlvciBpcyB1c2VkIHRvIHNpbXVsYXRlIGFuCiAJCSAqIGV4cGxpY2l0IEVPSSBvbiBJT0FQSUNzIHRoYXQgZG9uJiMzOTt0IGhhdmUgdGhlIEVPSSByZWdpc3Rlci4KIAkJICovCi0JCWlmIChlLSZndDtmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpCiYjNDM7CQlpZiAoZS0mZ3Q7ZmllbGRzLnRyaWdfbW9kZSA9PSBJT0FQSUNfRURHRV9UUklHKSB7CiAJCQllLSZndDtmaWVsZHMucmVtb3RlX2lyciA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qCiYjNDM7CQkJICogaXJyX2RlbGl2ZXJlZCB0cmFja3MgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyB0aGF0CiYjNDM7CQkJICogaGF2ZSBhbHJlYWR5IGJlZW4gZGVsaXZlcmVkLiAgQ2xlYXIgc3RhbGUgZWRnZS10cmlnZ2VyZWQKJiM0MzsJCQkgKiBkZWxpdmVyeSBzdGF0ZSB3aGVuIHRoZSBlbnRyeSBpcyBjb25maWd1cmVkIGZvcgomIzQzOwkJCSAqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlvYXBpYy0mZ3Q7aXJyX2RlbGl2ZXJlZCAmYW1wOz0gfigxICZsdDsmbHQ7IGluZGV4KTsKJiM0MzsJCX0KIAogCQltYXNrX2FmdGVyID0gZS0mZ3Q7ZmllbGRzLm1hc2s7CiAJCWlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKQpAQCAtNDkxLDcgJiM0Mzs1MDAsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpCiAJfSBlbHNlCiAJCXJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtJmd0O2t2bSwgTlVMTCwgJmFtcDtpcnFlKTsKIAotCWlmIChyZXQgJmFtcDsmYW1wOyBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKJiM0MzsJaWYgKHJldCAmZ3Q7IDAgJmFtcDsmYW1wOyBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKIAkJZW50cnktJmd0O2ZpZWxkcy5yZW1vdGVfaXJyID0gMTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA2ZmMzNGU5YmY4ZTFiLi44OWUzZjgyZTc1YjAxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTg2LDYgJiM0Mzs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2h5cGVydl9mZWF0dXJlcwogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X2lwaQogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3N2bV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoCiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaW9hcGljX3N0YXRlX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fcHZfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX2J1c2xvY2tfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmYwMjRmNGYwMTU3MTcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTkwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YXBpYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dWNhbGxfY29tbW9uLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOCQkxNgomIzQzOyNkZWZpbmUgVEVTVF9WRUNUT1IJCTB4NTAKJiM0MzsjZGVmaW5lIE5PX1NVQ0hfQVBJQ19JRAkJMHhmZQomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHCTAKJiM0MzsjZGVmaW5lIFRFU1RfSU9BUElDX0xFVkVMX1RSSUcJMQomIzQzOyNkZWZpbmUgSU9BUElDX0RFRkFVTFRfR1BBCTB4ZmVjMDAwMDBVTEwKJiM0MzsjZGVmaW5lIElPQVBJQ19SRUdfU0VMRUNUCTB4MDAKJiM0MzsjZGVmaW5lIElPQVBJQ19SRUdfV0lORE9XCTB4MTAKJiM0MzsjZGVmaW5lIElPQVBJQ19SVEVfTE9XKHBpbikJKDB4MTAgJiM0MzsgMiAqIChwaW4pKQomIzQzOyNkZWZpbmUgSU9BUElDX1JURV9UUklHX01PREUJQklUKDE1KQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcCkKJiM0Mzt7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpcnFjaGlwLSZndDtjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDOwomIzQzOwlyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTsKJiM0MzsJaWYgKHIgJmFtcDsmYW1wOyBlcnJubyA9PSBFTlhJTykKJiM0MzsJCV9fVEVTVF9SRVFVSVJFKDAsICYjMzQ7SW4ta2VybmVsIEkvTyBBUElDIG5vdCBhdmFpbGFibGUmIzM0Oyk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKCFyLCBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9JUlFDSElQLCByKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcCkKJiM0Mzt7CiYjNDM7CWlycWNoaXAtJmd0O2NoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCwKJiM0MzsJCQkgICAgIHUzMiBkZXN0X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID0KJiM0MzsJCVRFU1RfVkVDVE9SOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfaWQgPQomIzQzOwkJZGVzdF9pZDsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X21vZGUgPSAwOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9CiYjNDM7CQlsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDoKJiM0MzsJCQkJICBURVNUX0lPQVBJQ19FREdFX1RSSUc7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7CiYjNDM7CiYjNDM7CXNldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuYWJsZV9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljOwomIzQzOwl1NjQgYXBpY2Jhc2U7CiYjNDM7CiYjNDM7CWFwaWNiYXNlID0gdmNwdV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFKTsKJiM0MzsJdmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFLAomIzQzOwkJICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7CiYjNDM7CXZjcHVfaW9jdGwodmNwdSwgS1ZNX0dFVF9MQVBJQywgJmFtcDtsYXBpYyk7CiYjNDM7CSoodTMyICopKGxhcGljLnJlZ3MgJiM0MzsgQVBJQ19TUElWKSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfTEFQSUMsICZhbXA7bGFwaWMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGt2bV9pcnFfbGluZV9zdGF0dXMoc3RydWN0IGt2bV92bSAqdm0sIGludCBsZXZlbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHsKJiM0MzsJCS5pcnEgPSBURVNUX0lPQVBJQ19QSU4sCiYjNDM7CQkubGV2ZWwgPSBsZXZlbCwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9JUlFfTElORV9TVEFUVVMsICZhbXA7aXJxKTsKJiM0MzsJcmV0dXJuIGlycS5zdGF0dXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFzc2VydF9pb2FwaWNfcGluX2lycihzdHJ1Y3Qga3ZtX3ZtICp2bSwgYm9vbCBleHBlY3RlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwOwomIzQzOwomIzQzOwlnZXRfaW9hcGljKHZtLCAmYW1wO2lycWNoaXApOwomIzQzOwlURVNUX0FTU0VSVCghIShpcnFjaGlwLmNoaXAuaW9hcGljLmlyciAmYW1wOyAoMSAmbHQ7Jmx0OyBURVNUX0lPQVBJQ19QSU4pKSA9PSBleHBlY3RlZCwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIElPQVBJQyBJUlIgZm9yIHBpbiAldSB0byBiZSAldSwgZ290IDB4JXgmIzM0OywKJiM0MzsJCSAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CWludCBzdGF0dXM7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpOwomIzQzOwl2bV9jcmVhdGVfaXJxY2hpcCh2bSk7CiYjNDM7CiYjNDM7CXNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXMgPT0gLTEsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWQmIzM0Oywgc3RhdHVzKTsKJiM0MzsKJiM0MzsJZ2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0MzsJVEVTVF9BU1NFUlQoIWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciwKJiM0MzsJCSAgICAmIzM0O0tWTSBzZXQgcmVtb3RlX2lyciBmb3IgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IHRoYXQgd2FzbiYjMzk7dCBkZWxpdmVyZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgTlVMTCk7CiYjNDM7CWVuYWJsZV9sYXBpYyh2Y3B1KTsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtJmd0O2lkKTsKJiM0MzsKJiM0MzsJc3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1cyAmZ3Q7IDAsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkJiMzNDssIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoIXN0YXR1cywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGR1cGxpY2F0ZSBlZGdlIGludGVycnVwdCB0byBiZSBjb2FsZXNjZWQsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIgKmlvYXBpYyA9ICh1MzIgKilJT0FQSUNfREVGQVVMVF9HUEE7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoaW9hcGljW0lPQVBJQ19SRUdfU0VMRUNUIC8gc2l6ZW9mKHUzMildLAomIzQzOwkJICAgSU9BUElDX1JURV9MT1coVEVTVF9JT0FQSUNfUElOKSk7CiYjNDM7CVdSSVRFX09OQ0UoaW9hcGljW0lPQVBJQ19SRUdfV0lORE9XIC8gc2l6ZW9mKHUzMildLAomIzQzOwkJICAgVEVTVF9WRUNUT1IgfCBJT0FQSUNfUlRFX1RSSUdfTU9ERSk7CiYjNDM7CiYjNDM7CUdVRVNUX0RPTkUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9lZGdlX3RvX2xldmVsX2NsZWFyc19kZWxpdmVyeV9zdGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKTsKJiM0MzsJZW5hYmxlX2xhcGljKHZjcHUpOwomIzQzOwl2aXJ0X21hcCh2bSwgSU9BUElDX0RFRkFVTFRfR1BBLCBJT0FQSUNfREVGQVVMVF9HUEEsIDEpOwomIzQzOwomIzQzOwlzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS0mZ3Q7aWQpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzICZndDsgMCwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWQmIzM0Oywgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuKHZjcHUpOwomIzQzOwlURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpOwomIzQzOwomIzQzOwlhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIHRydWUpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwl0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCgpOwomIzQzOwl0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTsKJiM0MzsJdGVzdF9lZGdlX3RvX2xldmVsX2NsZWFyc19kZWxpdmVyeV9zdGF0ZSgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjMyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSU9BUElDIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIEtWTSYjMzk7cyBJT0FQSUMgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgLCBhbmQgaXQgYWxzbyBpbmNsdWRlcyBhIG5ldyBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuY2AuIExldCYjMzk7cyBicmVhayBkb3duIHRoZSBsb2dpYyBjaGFuZ2VzLgoKRmlyc3QsIGluIGBpb2FwaWNfc2V0X2lycWAsIHRoZXkmIzM5O3ZlIHR3ZWFrZWQgdGhlIHdheSBgaXJyX2RlbGl2ZXJlZGAgaXMgaGFuZGxlZC4gSXQgc2VlbXMgdGhlIG9yZGVyIG9mIGNsZWFyaW5nIGBpcnJfZGVsaXZlcmVkYCBoYXMgYmVlbiBzaGlmdGVkLiBDcml0aWNhbGx5LCBpdCBub3cgb25seSBjbGVhcnMgYGlycl9kZWxpdmVyZWRgIGlmIHRoZSBJbnRlcnJ1cHQgUmVxdWVzdCBSZWdpc3RlciAoSVJSKSBoYXMgYWN0dWFsbHkgY2hhbmdlZC4gIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbWlzc2VkIGludGVycnVwdCBkZWxpdmVyeSB3YXMgYmVpbmcgYWRkcmVzc2VkLgoKTmV4dCwgaW4gYGlvYXBpY193cml0ZV9pbmRpcmVjdGAsIHRoZXJlJiMzOTtzIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrLiBUaGUgb3JpZ2luYWwgY29kZSBjbGVhcmVkIGByZW1vdGVfaXJyYCBvbmx5IGZvciBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBOb3csIGl0IGV4cGxpY2l0bHkgY2xlYXJzIGBpcnJfZGVsaXZlcmVkYCB3aGVuIGFuIGVudHJ5IGlzICpjb25maWd1cmVkKiBmb3IgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoZSBjb21tZW50IGV4cGxhaW5zIHRoYXQgdGhpcyBhZGRyZXNzZXMgc3RhbGUgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGRlbGl2ZXJ5IHN0YXRlcy4gVGhpcyBtYWtlcyBzZW5zZTsgeW91IHdvdWxkbiYjMzk7dCB3YW50IGxpbmdlcmluZyAmIzM0O2RlbGl2ZXJlZCYjMzQ7IGZsYWdzIGNvbmZ1c2luZyB0aGUgZW11bGF0aW9uIHdoZW4gdHJhbnNpdGlvbmluZyB0byBhIGxldmVsLXRyaWdnZXJlZCBtb2RlLgoKVGhlIHRoaXJkIGNoYW5nZSBpcyBpbiBgaW9hcGljX3NlcnZpY2VgLCB3aGVyZSB0aGUgY29uZGl0aW9uIGZvciBzZXR0aW5nIGByZW1vdGVfaXJyYCBpcyBiZWluZyB0aWdodGVuZWQuIEluc3RlYWQgb2YgYGlmIChyZXQpYCwgaXQmIzM5O3Mgbm93IGBpZiAocmV0ICZndDsgMClgLiBUaGUgYHJldGAgdmFyaWFibGUgcmVmbGVjdHMgdGhlIGludGVycnVwdCBkZWxpdmVyeSBzdGF0dXMuIFRoaXMgc3VnZ2VzdHMgdGhhdCBvbmx5IGEgc3VjY2Vzc2Z1bCBpbnRlcnJ1cHQgZGVsaXZlcnkgc2hvdWxkIHNldCB0aGUgYHJlbW90ZV9pcnJgIGZsYWcgZm9yIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLgoKT3ZlcmFsbCwgaXQmIzM5O3MgY2xlYXIgdGhlc2UgYXJlIGZvY3VzZWQgb24gcmVmaW5pbmcgdGhlIGludGVybmFsIHN0YXRlIHRyYW5zaXRpb25zIHdpdGhpbiB0aGUgSU9BUElDIGVtdWxhdGlvbi4gIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCB3YXJyYW50ZWQgaGVyZTsgdGhlIHBhdGNoIGlzIHByaW1hcmlseSBhYm91dCAqbG9naWNhbCogc3RhdGUgbWFuYWdlbWVudC4KCkJ1dCwgaGFuZyBvbiwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGd1dCBmZWVsaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBpb2FwaWMtJmd0O2lycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmAgYXJlIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdGhleSYjMzk7cmUgdXNlZC4gIGBpb2FwaWNgIGlzIHBhcnQgb2YgYHN0cnVjdCBrdm1faW9hcGljYCwgd2hpY2ggKnNob3VsZCogYmUgemVyb2VkIGF0IGNyZWF0aW9uLiBJJiMzOTt2ZSBzZWVuIHRoYXQgY29kZS4gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcnFlYCBpbiBgaW9hcGljX3NlcnZpY2VgIGlzIHdoYXQgSSB3YW50IHRvIGludmVzdGlnYXRlIG5vdywgYnV0IEkgZG9uJiMzOTt0IHJlbWVtYmVyIHNlZWluZyBpdCBiZWluZyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIGBpb2FwaWNfc2VydmljZWAgaW4gYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AgdG8gbWFrZSBzdXJlIGBpcnFlYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2FwaWNfc2VydmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzYtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Mzc6c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYywgaW50IGlycSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zOC1cdFx0Ym9vbCBsaW5lX3N0YXR1cyk7XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTE4Nz1zdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTIzOS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDA6XHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0MS1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9MzMxPXN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MjUtXHRcdFx0ZWxzZVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQyNjpcdFx0XHRcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MjctXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDY1LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQ2NjpzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDY3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NTI5PXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQxLVx0XHRpZiAoaW9hcGljLVx1MDAzZWlyciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNlx1MDAyNiAhZW50LVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU0MjpcdFx0XHRpb2FwaWNfc2VydmljZShpb2FwaWMsIGksIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDMtXHR9XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTU0OD1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTg3LVx0XHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU4ODpcdFx0XHRpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbiwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU4OS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjg3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9hcGljX3NlcnZpY2VgIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGBpb2FwaWNfc2VydmljZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbW9kdWxlIGlzIGZ1bmN0aW9uaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkYXRhIHN0cnVjdHVyZXMsIHNlcnZpY2Ugcm91dGluZXMsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIEhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCB0aGUgc3BlY2lmaWMgYXJlYSB0aGF0JiMzOTtzIGNhdXNpbmcgdGhlIHByb2JsZW0gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaW50ZXJydXB0IHJvdXRpbmcgbG9naWMsIHJlZ2lzdGVyIGFjY2VzcyBtZWNoYW5pc21zLCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gSXQmIzM5O3MgdGltZSB0byBwdXQgb24gbXkgZGV0ZWN0aXZlIGhhdCBhbmQgc3RhcnQgdGhlIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjY6XHRzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4gNDY3Olx0e1xuIDQ2ODpcdFx0dW5pb24ga3ZtX2lvYXBpY19yZWRpcmVjdF9lbnRyeSAqZW50cnkgPSBcdTAwMjZpb2FwaWMtXHUwMDNlcmVkaXJ0YmxbaXJxXTtcbiA0Njk6XHRcdHN0cnVjdCBrdm1fbGFwaWNfaXJxIGlycWU7XG4gNDcwOlx0XHRpbnQgcmV0O1xuIDQ3MTpcdFxuIDQ3MjpcdFx0aWYgKGVudHJ5LVx1MDAzZWZpZWxkcy5tYXNrIHx8XG4gNDczOlx0XHQgICAgKGVudHJ5LVx1MDAzZWZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcgXHUwMDI2XHUwMDI2XG4gNDc0Olx0XHQgICAgZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIpKVxuIDQ3NTpcdFx0XHRyZXR1cm4gLTE7XG4gNDc2Olx0XG4gNDc3Olx0XHRpcnFlLmRlc3RfaWQgPSBlbnRyeS1cdTAwM2VmaWVsZHMuZGVzdF9pZDtcbiA0Nzg6XHRcdGlycWUudmVjdG9yID0gZW50cnktXHUwMDNlZmllbGRzLnZlY3RvcjtcbiA0Nzk6XHRcdGlycWUuZGVzdF9tb2RlID0ga3ZtX2xhcGljX2lycV9kZXN0X21vZGUoISFlbnRyeS1cdTAwM2VmaWVsZHMuZGVzdF9tb2RlKTtcbiA0ODA6XHRcdGlycWUudHJpZ19tb2RlID0gZW50cnktXHUwMDNlZmllbGRzLnRyaWdfbW9kZTtcbiA0ODE6XHRcdGlycWUuZGVsaXZlcnlfbW9kZSA9IGVudHJ5LVx1MDAzZWZpZWxkcy5kZWxpdmVyeV9tb2RlIFx1MDAzY1x1MDAzYyA4O1xuIDQ4MjpcdFx0aXJxZS5sZXZlbCA9IDE7XG4gNDgzOlx0XHRpcnFlLnNob3J0aGFuZCA9IEFQSUNfREVTVF9OT1NIT1JUO1xuIDQ4NDpcdFx0aXJxZS5tc2lfcmVkaXJfaGludCA9IGZhbHNlO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0aWYgKGlycWUudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpXG4gNDg3Olx0XHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIHw9IDEgXHUwMDNjXHUwMDNjIGlycTtcbiA0ODg6XHRcbiA0ODk6XHRcdGlmIChpcnEgPT0gUlRDX0dTSSBcdTAwMjZcdTAwMjYgbGluZV9zdGF0dXMpIHtcbiA0OTA6XHRcdFx0LypcbiA0OTE6XHRcdFx0ICogcGVuZGluZ19lb2kgY2Fubm90IGV2ZXIgYmVjb21lIG5lZ2F0aXZlIChzZWVcbiA0OTI6XHRcdFx0ICogcnRjX3N0YXR1c19wZW5kaW5nX2VvaV9jaGVja192YWxpZCkgYW5kIHRoZSBjYWxsZXJcbiA0OTM6XHRcdFx0ICogZW5zdXJlcyB0aGF0IGl0IGlzIG9ubHkgY2FsbGVkIGlmIGl0IGlzIFx1MDAzZT0gemVybywgbmFtZWx5XG4gNDk0Olx0XHRcdCAqIGlmIHJ0Y19pcnFfY2hlY2tfY29hbGVzY2VkIHJldHVybnMgZmFsc2UpLlxuIDQ5NTpcdFx0XHQgKi9cbiA0OTY6XHRcdFx0V0FSTl9PTl9PTkNFKGlvYXBpYy1cdTAwM2VydGNfc3RhdHVzLnBlbmRpbmdfZW9pKTtcbiA0OTc6XHRcdFx0cmV0ID0gX19rdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVx1MDAzZWt2bSwgTlVMTCwgXHUwMDI2aXJxZSxcbiA0OTg6XHRcdFx0XHRcdFx0XHQgXHUwMDI2aW9hcGljLVx1MDAzZXJ0Y19zdGF0dXMpO1xuIDQ5OTpcdFx0XHRpb2FwaWMtXHUwMDNlcnRjX3N0YXR1cy5wZW5kaW5nX2VvaSA9IChyZXQgXHUwMDNjIDAgPyAwIDogcmV0KTtcbiA1MDA6XHRcdH0gZWxzZVxuIDUwMTpcdFx0XHRyZXQgPSBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVx1MDAzZWt2bSwgTlVMTCwgXHUwMDI2aXJxZSk7XG4gNTAyOlx0XG4gNTAzOlx0XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiA1MDQ6XHRcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIDUwNTpcdFxuIDUwNjpcdFx0cmV0dXJuIHJldDtcbiA1MDc6XHR9XG4gNTA4Olx0XG4gNTA5Olx0aW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuIDUxMDpcdFx0XHQgICAgICAgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcbiA1MTE6XHR7XG4gNTEyOlx0XHRzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0ga3ZtLVx1MDAzZWFyY2gudmlvYXBpYztcbiA1MTM6XHRcdGludCBpcnEgPSBlLVx1MDAzZWlycWNoaXAucGluO1xuIDUxNDpcdFx0aW50IHJldCwgaXJxX2xldmVsO1xuIDUxNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDQ0CgkJCQkJCQlvdXRwdXQ6IDE1MAoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLVk0gY29kZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIG1hbnVhbGx5IGluaXRpYWxpemluZyB0aGUgYGlycWVgIHN0cnVjdHVyZS4gSSBzZWUgdGhlIGFzc2lnbm1lbnRzIHRvIGl0cyBmaWVsZHMgbGlrZSBgZGVzdF9pZGAsIGB2ZWN0b3JgLCBgZGVzdF9tb2RlYCwgZXRjLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBLVk0gZmFyZTsgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IGhlcmUuIFRoaXMgYGlycWVgIHN0cnVjdCBpcyB0aGVuIHBhc3NlZCB0byBga3ZtX2lycV9kZWxpdmVyeV90b19hcGljYCwgd2hpY2ggaXMsIGFnYWluLCB0eXBpY2FsLgoKVGhlIGFjdHVhbCBwYXRjaCBpcyBhIHZlcnkgc21hbGwsIHNwZWNpZmljIGNoYW5nZTogYHJldCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHYCBpcyB1cGRhdGVkIHRvIGByZXQgJmd0OyAwICZhbXA7JmFtcDsgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUdgLiBBaCwgYSBjbGFzc2ljIGxvZ2ljIGJ1ZyBmaXguIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBmbGF3ZWQgYmVjYXVzZSBgcmV0YCBjb3VsZCBiZSBhIG5lZ2F0aXZlIHZhbHVlIGluZGljYXRpbmcgYW4gZXJyb3IuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgdHJlYXRpbmcgYSBmYWlsdXJlIGluIGludGVycnVwdCBkZWxpdmVyeSBhcyBhIHN1Y2Nlc3MgaWYgYHJldGAgd2FzIHplcm8uIFRoaXMgaXMgY2xlYXJseSBpbmNvcnJlY3QuIFRoZSB1cGRhdGVkIGxvZ2ljIGNvcnJlY3RseSBoYW5kbGVzIG5lZ2F0aXZlIHJldHVybiB2YWx1ZXMsIHdoaWNoIHNpZ25pZnkgZXJyb3JzLiBJZiB0aGUgZGVsaXZlcnkgZmFpbHMsIHRoZW4gYHJlbW90ZV9pcnJgIHNob3VsZCBub3QgYmUgc2V0LgoKVGhpcyBwYXRjaCBpcyBzb2xpZC4gVGhlcmUgYXJlIG5vIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIFRoaXMgaXNuJiMzOTt0IGFib3V0IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIGZpeCBmb3IgSU9BUElDIHN0YXRlIG1hY2hpbmUgbG9naWMsIGZpeGluZyBob3cgYHJlbW90ZV9pcnJgIGlzIHNldCBiYXNlZCBvbiB0aGUgcmV0dXJuIG9mIGBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWNgLiBLQVNBTiB3b3VsZCBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24sIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgaXNzdWUgaGVyZS4gVGhpcyBpcyBhIHB1cmUgbG9naWMgYnVnLCBzbyBLTVNBTiBpcyB1bm5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbG9naWMgYnVncyBpbiB0aGUgS1ZNIElPQVBJQyBzdGF0ZSBtYWNoaW5lIChzcGVjaWZpY2FsbHksIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBkZWxpdmVyeSBzdGF0ZSBhbmQgcmVtb3RlX2lyciB0cmFja2luZykuIEl0IG1vZGlmaWVzIGNvbmRpdGlvbmFsIGNoZWNrcyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBzdGF0ZSB2YXJpYWJsZXMgKGxpa2UgYGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgKS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcywgd2hpbGUgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBsb2dpYyBidWdzIGluIHRoZSBLVk0gSU9BUElDIHN0YXRlIG1hY2hpbmUgKHNwZWNpZmljYWxseSwgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGRlbGl2ZXJ5IHN0YXRlIGFuZCByZW1vdGVfaXJyIHRyYWNraW5nKS4gSXQgbW9kaWZpZXMgY29uZGl0aW9uYWwgY2hlY2tzIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIHN0YXRlIHZhcmlhYmxlcyAobGlrZSBgaW9hcGljLVx1MDAzZWlycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmApLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCB3aGlsZSBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTU6NTIuMTQzNTYzOTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMzk5MTkzMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lPQVBJQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9pb2FwaWNfc2V0X2lycVwiLFxuICAgIFwia3ZtX2lvYXBpY191cGRhdGVfZW9pXCIsXG4gICAgXCJpb2FwaWNfbW1pb193cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9naWMgYnVncyBpbiB0aGUgS1ZNIElPQVBJQyBzdGF0ZSBtYWNoaW5lIChzcGVjaWZpY2FsbHksIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBkZWxpdmVyeSBzdGF0ZSBhbmQgcmVtb3RlX2lyciB0cmFja2luZykuIEl0IG1vZGlmaWVzIGNvbmRpdGlvbmFsIGNoZWNrcyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBzdGF0ZSB2YXJpYWJsZXMgKGxpa2UgYGlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIHdoaWxlIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlaXIgZGVsaXZlcnkgc3RhdGUgKGlycl9kZWxpdmVyZWQgYW5kIHJlbW90ZV9pcnIpIGlzIHVwZGF0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBLVk0gbG9naWMgdGhhdCBhZmZlY3RzIGludGVycnVwdCBkZWxpdmVyeSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NTo1Mi4xNDM1NjkwOTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDY3ODkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBjMDAyMGVlNzMyNzg4OGQ2YjMwZDJkMWY1MGU4NTViNzliNjU5MmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDg6NTU6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXFxuaW5kZXggNzU3NjY3ZmIyYmZhMC4uODFkYjAyNWQyYWM5MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcXG5AQCAtMjMwLDExICsyMzAsMTEgQEAgc3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxcbiBcXHRvbGRfaXJyID0gaW9hcGljLVxcdTAwM2VpcnI7XFxuIFxcdGlvYXBpYy1cXHUwMDNlaXJyIHw9IG1hc2s7XFxuIFxcdGlmIChlZGdlKSB7XFxuLVxcdFxcdGlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZCBcXHUwMDI2PSB+bWFzaztcXG4gXFx0XFx0aWYgKG9sZF9pcnIgPT0gaW9hcGljLVxcdTAwM2VpcnIpIHtcXG4gXFx0XFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aW9hcGljLVxcdTAwM2VpcnJfZGVsaXZlcmVkIFxcdTAwMjY9IH5tYXNrO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xcbkBAIC0zNzcsOCArMzc3LDE3IEBAIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxcbiBcXHRcXHQgKiBhcyBlZGdlLXRyaWdnZXJlZC4gVGhpcyBiZWhhdmlvciBpcyB1c2VkIHRvIHNpbXVsYXRlIGFuXFxuIFxcdFxcdCAqIGV4cGxpY2l0IEVPSSBvbiBJT0FQSUNzIHRoYXQgZG9uJ3QgaGF2ZSB0aGUgRU9JIHJlZ2lzdGVyLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGUtXFx1MDAzZWZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0VER0VfVFJJRylcXG4rXFx0XFx0aWYgKGUtXFx1MDAzZWZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0VER0VfVFJJRykge1xcbiBcXHRcXHRcXHRlLVxcdTAwM2VmaWVsZHMucmVtb3RlX2lyciA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIGlycl9kZWxpdmVyZWQgdHJhY2tzIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgdGhhdFxcbitcXHRcXHRcXHQgKiBoYXZlIGFscmVhZHkgYmVlbiBkZWxpdmVyZWQuICBDbGVhciBzdGFsZSBlZGdlLXRyaWdnZXJlZFxcbitcXHRcXHRcXHQgKiBkZWxpdmVyeSBzdGF0ZSB3aGVuIHRoZSBlbnRyeSBpcyBjb25maWd1cmVkIGZvclxcbitcXHRcXHRcXHQgKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZCBcXHUwMDI2PSB+KDEgXFx1MDAzY1xcdTAwM2MgaW5kZXgpO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRtYXNrX2FmdGVyID0gZS1cXHUwMDNlZmllbGRzLm1hc2s7XFxuIFxcdFxcdGlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKVxcbkBAIC00OTEsNyArNTAwLDcgQEAgc3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxcbiBcXHR9IGVsc2VcXG4gXFx0XFx0cmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy1cXHUwMDNla3ZtLCBOVUxMLCBcXHUwMDI2aXJxZSk7XFxuIFxcbi1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKVxcbitcXHRpZiAocmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbkBAIC04Niw2ICs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2ZlYXR1cmVzXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2lwaVxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl9zdm1fdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl90bGJfZmx1c2hcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9jbG9ja190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX3B2X3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjAyNGY0ZjAxNTcxN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcXG5AQCAtMCwwICsxLDE5MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIGluLWtlcm5lbCBJL08gQVBJQyBzdGF0ZS5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXFwiYXBpYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3ZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInByb2Nlc3Nvci5oXFxcIlxcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ1Y2FsbF9jb21tb24uaFxcXCJcXG4rXFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXFx0XFx0MTZcXG4rI2RlZmluZSBURVNUX1ZFQ1RPUlxcdFxcdDB4NTBcXG4rI2RlZmluZSBOT19TVUNIX0FQSUNfSURcXHRcXHQweGZlXFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXFx0MFxcbisjZGVmaW5lIFRFU1RfSU9BUElDX0xFVkVMX1RSSUdcXHQxXFxuKyNkZWZpbmUgSU9BUElDX0RFRkFVTFRfR1BBXFx0MHhmZWMwMDAwMFVMTFxcbisjZGVmaW5lIElPQVBJQ19SRUdfU0VMRUNUXFx0MHgwMFxcbisjZGVmaW5lIElPQVBJQ19SRUdfV0lORE9XXFx0MHgxMFxcbisjZGVmaW5lIElPQVBJQ19SVEVfTE9XKHBpbilcXHQoMHgxMCArIDIgKiAocGluKSlcXG4rI2RlZmluZSBJT0FQSUNfUlRFX1RSSUdfTU9ERVxcdEJJVCgxNSlcXG4rXFxuK3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcXG4re1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlycWNoaXAtXFx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XFxuK1xcdHIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApO1xcbitcXHRpZiAociBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTlhJTylcXG4rXFx0XFx0X19URVNUX1JFUVVJUkUoMCwgXFxcIkluLWtlcm5lbCBJL08gQVBJQyBub3QgYXZhaWxhYmxlXFxcIik7XFxuK1xcbitcXHRURVNUX0FTU0VSVCghciwgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfSVJRQ0hJUCwgcikpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXFxuK3tcXG4rXFx0aXJxY2hpcC1cXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLFxcbitcXHRcXHRcXHQgICAgIHUzMiBkZXN0X2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xcbitcXG4rXFx0Z2V0X2lvYXBpYyh2bSwgXFx1MDAyNmlycWNoaXApO1xcbitcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy52ZWN0b3IgPVxcbitcXHRcXHRURVNUX1ZFQ1RPUjtcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X2lkID1cXG4rXFx0XFx0ZGVzdF9pZDtcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X21vZGUgPSAwO1xcbitcXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9XFxuK1xcdFxcdGxldmVsX3RyaWdnZXJlZCA/IFRFU1RfSU9BUElDX0xFVkVMX1RSSUcgOlxcbitcXHRcXHRcXHRcXHQgIFRFU1RfSU9BUElDX0VER0VfVFJJRztcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDtcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyID0gMDtcXG4rXFxuK1xcdHNldF9pb2FwaWModm0sIFxcdTAwMjZpcnFjaGlwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW5hYmxlX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljO1xcbitcXHR1NjQgYXBpY2Jhc2U7XFxuK1xcbitcXHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XFxuK1xcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSxcXG4rXFx0XFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XFxuK1xcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX0dFVF9MQVBJQywgXFx1MDAyNmxhcGljKTtcXG4rXFx0Kih1MzIgKikobGFwaWMucmVncyArIEFQSUNfU1BJVikgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDtcXG4rXFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcXHUwMDI2bGFwaWMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGt2bV9pcnFfbGluZV9zdGF0dXMoc3RydWN0IGt2bV92bSAqdm0sIGludCBsZXZlbClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnEgPSB7XFxuK1xcdFxcdC5pcnEgPSBURVNUX0lPQVBJQ19QSU4sXFxuK1xcdFxcdC5sZXZlbCA9IGxldmVsLFxcbitcXHR9O1xcbitcXG4rXFx0dm1faW9jdGwodm0sIEtWTV9JUlFfTElORV9TVEFUVVMsIFxcdTAwMjZpcnEpO1xcbitcXHRyZXR1cm4gaXJxLnN0YXR1cztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xcbitcXG4rXFx0Z2V0X2lvYXBpYyh2bSwgXFx1MDAyNmlycWNoaXApO1xcbitcXHRURVNUX0FTU0VSVCghIShpcnFjaGlwLmNoaXAuaW9hcGljLmlyciBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIElPQVBJQyBJUlIgZm9yIHBpbiAldSB0byBiZSAldSwgZ290IDB4JXhcXFwiLFxcbitcXHRcXHQgICAgVEVTVF9JT0FQSUNfUElOLCBleHBlY3RlZCwgaXJxY2hpcC5jaGlwLmlvYXBpYy5pcnIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpO1xcbitcXHR2bV9jcmVhdGVfaXJxY2hpcCh2bSk7XFxuK1xcbitcXHRzZXRfaW9hcGljX2VudHJ5KHZtLCB0cnVlLCBOT19TVUNIX0FQSUNfSUQpO1xcbitcXG4rXFx0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcXFwiLCBzdGF0dXMpO1xcbitcXG4rXFx0Z2V0X2lvYXBpYyh2bSwgXFx1MDAyNmlycWNoaXApO1xcbitcXHRURVNUX0FTU0VSVCghaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyLFxcbitcXHRcXHQgICAgXFxcIktWTSBzZXQgcmVtb3RlX2lyciBmb3IgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IHRoYXQgd2Fzbid0IGRlbGl2ZXJlZFxcXCIpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgc3RhdHVzO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgTlVMTCk7XFxuK1xcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcXG4rXFxuK1xcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVxcdTAwM2VpZCk7XFxuK1xcbitcXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcXG4rXFx0VEVTVF9BU1NFUlQoc3RhdHVzIFxcdTAwM2UgMCxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXFxcIiwgc3RhdHVzKTtcXG4rXFxuK1xcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xcbitcXG4rXFx0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XFxuK1xcdFRFU1RfQVNTRVJUKCFzdGF0dXMsXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkXFxcIixcXG4rXFx0XFx0ICAgIHN0YXR1cyk7XFxuK1xcbitcXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcXG4rXFxuK1xcdGt2bV92bV9mcmVlKHZtKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ3Vlc3Rfc3dpdGNoX2lvYXBpY19waW5fdG9fbGV2ZWwodm9pZClcXG4re1xcbitcXHR1MzIgKmlvYXBpYyA9ICh1MzIgKilJT0FQSUNfREVGQVVMVF9HUEE7XFxuK1xcbitcXHRXUklURV9PTkNFKGlvYXBpY1tJT0FQSUNfUkVHX1NFTEVDVCAvIHNpemVvZih1MzIpXSxcXG4rXFx0XFx0ICAgSU9BUElDX1JURV9MT1coVEVTVF9JT0FQSUNfUElOKSk7XFxuK1xcdFdSSVRFX09OQ0UoaW9hcGljW0lPQVBJQ19SRUdfV0lORE9XIC8gc2l6ZW9mKHUzMildLFxcbitcXHRcXHQgICBURVNUX1ZFQ1RPUiB8IElPQVBJQ19SVEVfVFJJR19NT0RFKTtcXG4rXFxuK1xcdEdVRVNUX0RPTkUoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9lZGdlX3RvX2xldmVsX2NsZWFyc19kZWxpdmVyeV9zdGF0ZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBzdGF0dXM7XFxuK1xcbitcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF9zd2l0Y2hfaW9hcGljX3Bpbl90b19sZXZlbCk7XFxuK1xcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcXG4rXFx0dmlydF9tYXAodm0sIElPQVBJQ19ERUZBVUxUX0dQQSwgSU9BUElDX0RFRkFVTFRfR1BBLCAxKTtcXG4rXFxuK1xcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVxcdTAwM2VpZCk7XFxuK1xcbitcXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcXG4rXFx0VEVTVF9BU1NFUlQoc3RhdHVzIFxcdTAwM2UgMCxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXFxcIiwgc3RhdHVzKTtcXG4rXFxuK1xcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xcbitcXG4rXFx0dmNwdV9ydW4odmNwdSk7XFxuK1xcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBOVUxMKSwgVUNBTExfRE9ORSk7XFxuK1xcbitcXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIHRydWUpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7XFxuK1xcdHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpO1xcbitcXHR0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NTo1Mi41OTUwNTk5MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MDQ3Njc0OTU4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JT0FQSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW9hcGljX3NldF9pcnFcIixcbiAgICBcImt2bV9pb2FwaWNfdXBkYXRlX2VvaVwiLFxuICAgIFwiaW9hcGljX21taW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIElPQVBJQyBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZWlyIGRlbGl2ZXJ5IHN0YXRlIChpcnJfZGVsaXZlcmVkIGFuZCByZW1vdGVfaXJyKSBpcyB1cGRhdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgZGVsaXZlcnkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGMwMDIwZWU3MzI3ODg4ZDZiMzBkMmQxZjUwZTg1NWI3OWI2NTkyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA4OjU1OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG5pbmRleCA3NTc2NjdmYjJiZmEwLi44MWRiMDI1ZDJhYzkxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbkBAIC0yMzAsMTEgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4gXHRvbGRfaXJyID0gaW9hcGljLVx1MDAzZWlycjtcbiBcdGlvYXBpYy1cdTAwM2VpcnIgfD0gbWFzaztcbiBcdGlmIChlZGdlKSB7XG4tXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpIHtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHR9XG4gXG4gXHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xuQEAgLTM3Nyw4ICszNzcsMTcgQEAgc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpXG4gXHRcdCAqIGFzIGVkZ2UtdHJpZ2dlcmVkLiBUaGlzIGJlaGF2aW9yIGlzIHVzZWQgdG8gc2ltdWxhdGUgYW5cbiBcdFx0ICogZXhwbGljaXQgRU9JIG9uIElPQVBJQ3MgdGhhdCBkb24ndCBoYXZlIHRoZSBFT0kgcmVnaXN0ZXIuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZS1cdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpXG4rXHRcdGlmIChlLVx1MDAzZWZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0VER0VfVFJJRykge1xuIFx0XHRcdGUtXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAwO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogaXJyX2RlbGl2ZXJlZCB0cmFja3MgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyB0aGF0XG4rXHRcdFx0ICogaGF2ZSBhbHJlYWR5IGJlZW4gZGVsaXZlcmVkLiAgQ2xlYXIgc3RhbGUgZWRnZS10cmlnZ2VyZWRcbitcdFx0XHQgKiBkZWxpdmVyeSBzdGF0ZSB3aGVuIHRoZSBlbnRyeSBpcyBjb25maWd1cmVkIGZvclxuK1x0XHRcdCAqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyBpbmRleCk7XG4rXHRcdH1cbiBcbiBcdFx0bWFza19hZnRlciA9IGUtXHUwMDNlZmllbGRzLm1hc2s7XG4gXHRcdGlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKVxuQEAgLTQ5MSw3ICs1MDAsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy1cdTAwM2Vrdm0sIE5VTEwsIFx1MDAyNmlycWUpO1xuIFxuLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXG4rXHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiBcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC04Niw2ICs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2ZlYXR1cmVzXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfaXBpXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfc3ZtX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl90bGJfZmx1c2hcbitURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2lvYXBpY19zdGF0ZV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fY2xvY2tfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9idXNsb2NrX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mMDI0ZjRmMDE1NzE3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcbkBAIC0wLDAgKzEsMTkwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFwiYXBpYy5oXCJcbisjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuKyNpbmNsdWRlIFwidWNhbGxfY29tbW9uLmhcIlxuK1xuKyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXHRcdDE2XG4rI2RlZmluZSBURVNUX1ZFQ1RPUlx0XHQweDUwXG4rI2RlZmluZSBOT19TVUNIX0FQSUNfSURcdFx0MHhmZVxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXHQwXG4rI2RlZmluZSBURVNUX0lPQVBJQ19MRVZFTF9UUklHXHQxXG4rI2RlZmluZSBJT0FQSUNfREVGQVVMVF9HUEFcdDB4ZmVjMDAwMDBVTExcbisjZGVmaW5lIElPQVBJQ19SRUdfU0VMRUNUXHQweDAwXG4rI2RlZmluZSBJT0FQSUNfUkVHX1dJTkRPV1x0MHgxMFxuKyNkZWZpbmUgSU9BUElDX1JURV9MT1cocGluKVx0KDB4MTAgKyAyICogKHBpbikpXG4rI2RlZmluZSBJT0FQSUNfUlRFX1RSSUdfTU9ERVx0QklUKDE1KVxuK1xuK3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbit7XG4rXHRpbnQgcjtcbitcbitcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbitcdHIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApO1xuK1x0aWYgKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPKVxuK1x0XHRfX1RFU1RfUkVRVUlSRSgwLCBcIkluLWtlcm5lbCBJL08gQVBJQyBub3QgYXZhaWxhYmxlXCIpO1xuK1xuK1x0VEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxuK3tcbitcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbitcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCxcbitcdFx0XHQgICAgIHUzMiBkZXN0X2lkKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuK1xuK1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rXG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnZlY3RvciA9XG4rXHRcdFRFU1RfVkVDVE9SO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X2lkID1cbitcdFx0ZGVzdF9pZDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9tb2RlID0gMDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudHJpZ19tb2RlID1cbitcdFx0bGV2ZWxfdHJpZ2dlcmVkID8gVEVTVF9JT0FQSUNfTEVWRUxfVFJJRyA6XG4rXHRcdFx0XHQgIFRFU1RfSU9BUElDX0VER0VfVFJJRztcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIgPSAwO1xuK1xuK1x0c2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuYWJsZV9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IGt2bV9sYXBpY19zdGF0ZSBsYXBpYztcbitcdHU2NCBhcGljYmFzZTtcbitcbitcdGFwaWNiYXNlID0gdmNwdV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFKTtcbitcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSxcbitcdFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9HRVRfTEFQSUMsIFx1MDAyNmxhcGljKTtcbitcdCoodTMyICopKGxhcGljLnJlZ3MgKyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfTEFQSUMsIFx1MDAyNmxhcGljKTtcbit9XG4rXG4rc3RhdGljIGludCBrdm1faXJxX2xpbmVfc3RhdHVzKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbGV2ZWwpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0ge1xuK1x0XHQuaXJxID0gVEVTVF9JT0FQSUNfUElOLFxuK1x0XHQubGV2ZWwgPSBsZXZlbCxcbitcdH07XG4rXG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgXHUwMDI2aXJxKTtcbitcdHJldHVybiBpcnEuc3RhdHVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcdFRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsXG4rXHRcdCAgICBcIkV4cGVjdGVkIElPQVBJQyBJUlIgZm9yIHBpbiAldSB0byBiZSAldSwgZ290IDB4JXhcIixcbitcdFx0ICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpO1xuK1x0dm1fY3JlYXRlX2lycWNoaXAodm0pO1xuK1xuK1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcIiwgc3RhdHVzKTtcbitcbitcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuK1x0VEVTVF9BU1NFUlQoIWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lycixcbitcdFx0ICAgIFwiS1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJ3QgZGVsaXZlcmVkXCIpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBzdGF0dXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIE5VTEwpO1xuK1x0ZW5hYmxlX2xhcGljKHZjcHUpO1xuK1xuK1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtXHUwMDNlaWQpO1xuK1xuK1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXMgXHUwMDNlIDAsXG4rXHRcdCAgICBcIkV4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcIiwgc3RhdHVzKTtcbitcbitcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuK1xuK1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4rXHRURVNUX0FTU0VSVCghc3RhdHVzLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBkdXBsaWNhdGUgZWRnZSBpbnRlcnJ1cHQgdG8gYmUgY29hbGVzY2VkLCBnb3QgJWRcIixcbitcdFx0ICAgIHN0YXR1cyk7XG4rXG4rXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZ3Vlc3Rfc3dpdGNoX2lvYXBpY19waW5fdG9fbGV2ZWwodm9pZClcbit7XG4rXHR1MzIgKmlvYXBpYyA9ICh1MzIgKilJT0FQSUNfREVGQVVMVF9HUEE7XG4rXG4rXHRXUklURV9PTkNFKGlvYXBpY1tJT0FQSUNfUkVHX1NFTEVDVCAvIHNpemVvZih1MzIpXSxcbitcdFx0ICAgSU9BUElDX1JURV9MT1coVEVTVF9JT0FQSUNfUElOKSk7XG4rXHRXUklURV9PTkNFKGlvYXBpY1tJT0FQSUNfUkVHX1dJTkRPVyAvIHNpemVvZih1MzIpXSxcbitcdFx0ICAgVEVTVF9WRUNUT1IgfCBJT0FQSUNfUlRFX1RSSUdfTU9ERSk7XG4rXG4rXHRHVUVTVF9ET05FKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZWRnZV90b19sZXZlbF9jbGVhcnNfZGVsaXZlcnlfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBzdGF0dXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKTtcbitcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcbitcdHZpcnRfbWFwKHZtLCBJT0FQSUNfREVGQVVMVF9HUEEsIElPQVBJQ19ERUZBVUxUX0dQQSwgMSk7XG4rXG4rXHRzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS1cdTAwM2VpZCk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1cyBcdTAwM2UgMCxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZWRnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFwiLCBzdGF0dXMpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4rXG4rXHR2Y3B1X3J1bih2Y3B1KTtcbitcdFRFU1RfQVNTRVJUX0VRKGdldF91Y2FsbCh2Y3B1LCBOVUxMKSwgVUNBTExfRE9ORSk7XG4rXG4rXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIHRydWUpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7XG4rXHR0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTtcbitcdHRlc3RfZWRnZV90b19sZXZlbF9jbGVhcnNfZGVsaXZlcnlfc3RhdGUoKTtcbitcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU1OjUyLjU5NTA2MTE3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMDA1NjI4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBJT0FQSUMgRW11bGF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGhvdyB0aGUgSU9BUElDIHdvcmtzIGluIEtWTSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYC4gSXQncyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgZnVsbHkgdG8gZXZhbHVhdGUgaXRzIHBvdGVudGlhbCBpbXBhY3QgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IGl0LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUga2V5IGFyZWFzOlxuXG4xLiAgYGlvYXBpY19zZXRfaXJxYDogSXQgc2VlbXMgbGlrZSB0aGVyZSdzIGJlZW4gYSBtb2RpZmljYXRpb24gcmVsYXRlZCB0byBob3cgYGlycl9kZWxpdmVyZWRgIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgZm9yIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoZSBwYXRjaCdzIGNoYW5nZXMgbG9vayBsaWtlIGl0J3MgYWRkcmVzc2luZyBhbiBlZGdlIGNhc2Ugb3IgYSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIGludGVycnVwdCBkZWxpdmVyeS5cbjIuICBgaW9hcGljX3dyaXRlX2luZGlyZWN0YDogQWdhaW4sIHdlIHNlZSBtb3JlIGNoYW5nZXMgcmVsYXRlZCB0byBgaXJyX2RlbGl2ZXJlZGAgYnV0IHRoaXMgdGltZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaW50ZXJydXB0IGVudHJ5IGNvbmZpZ3VyYXRpb25zLiBUaGUgbG9naWMgc2VlbXMgdG8gZW5zdXJlIHRoYXQgc3RhbGUgZWRnZS10cmlnZ2VyZWQgc3RhdGUgaXMgY2xlYXJlZCB3aGVuIHN3aXRjaGluZyBhbiBlbnRyeSB0byBsZXZlbC10cmlnZ2VyZWQuXG4zLiAgYGlvYXBpY19zZXJ2aWNlYDogV2UncmUgc2VlaW5nIGNoYW5nZXMgaW4gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGByZW1vdGVfaXJyYCBmbGFnLiBUaGlzIHNlZW1zIHRvIGJlIG1hbmFnaW5nIHRoZSBhY2tub3dsZWRnZW1lbnQgb2YgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgd2l0aGluIHRoZSBJT0FQSUMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgLCB3aGljaCBzdWdnZXN0cyBhIG1vZGlmaWNhdGlvbiBvZiB0aGUgaW50ZXJydXB0IGRlbGl2ZXJ5IGxvZ2ljLCBtYXliZSBpbnZvbHZpbmcgZWRnZS10cmlnZ2VyZWQgdnMuIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgaGFuZGxpbmcuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBjbG9zZSBzY3J1dGlueSBhbmQgdGFyZ2V0ZWQgZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSwgd2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlc2UgZnVuY3Rpb25zPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBwb3RlbnRpYWwgcGF0aHMgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZnV6ei4gSSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgcGF0aHMgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoZXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZC4gSSB3aWxsIGZvY3VzIG9uIHRoZSByZWxhdGVkIGNvZGUuXG5UaGUgS1ZNIGNvbmZpZyBpdHNlbGYgd2lsbCBiZSB0aGUgZm9jdXMsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzUsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NjowMS41OTU2Mjc4ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1MzY0NDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8Ym9vbHx1MzJ8dTY0KS4qIGlvYXBpY18uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MDEuNjU5MTcyNTM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTUxMzE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGVidWdnaW5nIGEgR3JlcCBFeHByZXNzaW9uKipcblxuSG1tLCBJIHN1c3BlY3QgbXkgYGdyZXBgIGV4cHJlc3Npb24gaXNuJ3QgcXVpdGUgcmlnaHQuIFRoYXQncyBhIGNvbW1vbiBzbmFnIHdpdGggdGhlc2UgdGhpbmdzOyBpdCdzIGVhc3kgdG8gZ2V0IHRoZSBzeW50YXgganVzdCBzbGlnaHRseSBvZmYgYW5kIG1pc3Mgd2hhdCB5b3UncmUgbG9va2luZyBmb3IuIEluc3RlYWQgb2Ygc3BlbmRpbmcgbW9yZSB0aW1lIHR3ZWFraW5nIGl0LCBsZXQncyBqdXN0IGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LiBJIGNhbiBlaXRoZXIgc2ltcGx5IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIHZpc3VhbGx5IHNjYW5uaW5nIGZvciB0aGUgcGF0dGVybiwgb3IgSSBjYW4gcmVmaW5lIHRoZSBgZ3JlcGAgYXBwcm9hY2guIFBlcmhhcHMgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBwYXR0ZXJuIGBeLioga3ZtX2lvYXBpY18uKlxcKGAgd2lsbCBwcm92ZSBtb3JlIHN1Y2Nlc3NmdWwuIEkga25vdyB0aGF0IEknbSBsb29raW5nIGZvciBhIGxpbmUgdGhhdCBzdGFydHMgKGBeYCkgd2l0aCBhbnl0aGluZyAoYC4qYCksIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmcgYCBrdm1faW9hcGljX2AsIGZvbGxvd2VkIGJ5IGFueXRoaW5nIChgLipgKSwgYW5kIGVuZHMgd2l0aCBhbiBvcGVuaW5nIHBhcmVudGhlc2lzIChgXFwoYCkuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBtaWdodCBnZXQgbWUgY2xvc2VyIHRvIHRoZSByZWxldmFudCBsaW5lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjA1LjE2NDY4ODAwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQ5MTgyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeLioga3ZtX2lvYXBpY18uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTg3PXN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0NzpzdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTk6dm9pZCBrdm1faW9hcGljX3NjYW5fZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjYwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NjY9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUwOC1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTEwLVxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUyOC1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTI5OnN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTMwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDctI2RlZmluZSBJT0FQSUNfU1VDQ0VTU0lWRV9JUlFfTUFYX0NPVU5UIDEwMDAwXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU0ODpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQ5LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTk0LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1OTU6dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTYte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTY2Mz1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzA0LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo3MDU6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19yZXNldChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MDYte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTcyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvYXBpY19tbWlvX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MjUtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcyNjppbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzI3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NTItXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjc1Mzp2b2lkIGt2bV9pb2FwaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc1NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjA1LjIxMzE4ODU0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczOTg0NTk3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBJT0FQSUMgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgSU9BUElDIGNvZGUgZm9yIHdoYXRldmVyIGFuYWx5c2lzIEknbSBkb2luZy4gTGV0J3Mgc2VlLCBpbml0aWFsbHksIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBJIGlkZW50aWZpZWQgd2VyZSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCAqcG90ZW50aWFsbHkqIGBpb2FwaWNfbW1pb193cml0ZWAuIEhvbGQgb24sIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgc3RhdGljLCByaWdodD8gWWVzLCBpdCBpcy4gQnV0LCBpdCdzIGFuIE1NSU8gaGFuZGxlciwgc28gaXQncyBhIGNhbGxiYWNrIGFuZCBwb3RlbnRpYWxseSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoZW4gSSByZWFsaXplZCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCBpcyBjYWxsZWQgZnJvbSBgaW9hcGljX21taW9fd3JpdGVgIGFuZCBgaW9hcGljX3NldF9pcnFgIGlzIGNhbGxlZCBmcm9tIGBrdm1faW9hcGljX3NldF9pcnFgLCBhbmQgZmluYWxseSwgYGlvYXBpY19zZXJ2aWNlYCBpcyBjYWxsZWQgZnJvbSBgaW9hcGljX3NldF9pcnFgLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBtb2RpZmllZCBjb2RlIHNlZW1zIHRvIGJlIHJlYWNoYWJsZSBmcm9tIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gVGhhdCBsb29rcyBnb29kLlxuXG5CdXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExldCdzIG1ha2Ugc3VyZSBpdCdzIG5vdCBpbmxpbmVkLiBJdCBsb29rcyBsaWtlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgZGVmaW5lZCB3aXRoaW4gYSBzdHJ1Y3R1cmUsIHNvIGl0J3Mgbm90IGlubGluZWQuXG5cblRoZSBiZXN0IHRoaW5nIHRvIGRvIGlzIHRvIGxpc3QgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLlxuXG5JIHdpbGwgYWxzbyBjaGVjayBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCBmb3IgY2FsbGVycyBvZiBgaW9hcGljX3dyaXRlX2luZGlyZWN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYzMiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NjoxMi42MTE2NTAwOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3OTgxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9hcGljX3dyaXRlX2luZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmM9MzE0PXZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzMwLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzozMzE6c3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTMzMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NjYzPXN0YXRpYyBpbnQgaW9hcGljX21taW9fd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02OTQtXFx0Y2FzZSBJT0FQSUNfUkVHX1dJTkRPVzpcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Njk1OlxcdFxcdGlvYXBpY193cml0ZV9pbmRpcmVjdChpb2FwaWMsIGRhdGEpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02OTYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjEyLjY2MTQ1NDgzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjc5MDE1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgSU9BUElDIFdyaXRlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB3cml0ZXMgdG8gdGhlIElPQVBJQyBhcmUgaGFuZGxlZC4gSSBzZWUgdGhhdCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCBpcyBjYWxsZWQgZnJvbSBgaW9hcGljX21taW9fd3JpdGVgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB3aGljaCBtYWtlcyBzZW5zZS4gSSByZWNvZ25pemUgYGlvYXBpY19tbWlvX3dyaXRlYCBhcyBhIGNhbGxiYWNrIHdpdGhpbiB0aGUgYGlvYXBpY19tbWlvX29wc2Agc3RydWN0dXJlLiBTZWVtcyBsaWtlIGEgc3RhbmRhcmQgTU1JTyBhcHByb2FjaC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyB0aGUgb25seSB3YXkgdGhpbmdzIGNhbiBiZSB3cml0dGVuLlxuXG5JJ20gY2hlY2tpbmcgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYHN0YXRpY2AsIHdoaWNoIHdvdWxkIGluZGljYXRlIHRoZXkgaGF2ZSBleHRlcm5hbCBsaW5rYWdlLiBMb29rcyBsaWtlIGBrdm1faW9hcGljX3NldF9pcnFgIGlzIG5vbi1zdGF0aWMuIEdvb2QsIGEgcG90ZW50aWFsIGFsdGVybmF0aXZlIGVudHJ5IHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IGludGVycnVwdHMgYXJlIGFjdHVhbGx5IHNldCwgSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4gTGV0IG1lIGp1bXAgaW50byBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCBhbmQgc2VhcmNoIGZvciBjYWxsZXJzIG9mIGBpb2FwaWNfc2V0X2lycWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MTYuOTg5MzU5OTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzE1NzE4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2FwaWNfc2V0X2lycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jPTE2NT1zdGF0aWMgdm9pZCBpb2FwaWNfbGF6eV91cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMTg2LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoxODc6c3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0xODgtXFx0XFx0aW50IGlycV9sZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDItb3V0OlxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDM6XFx0dHJhY2Vfa3ZtX2lvYXBpY19zZXRfaXJxKGVudHJ5LmJpdHMsIGlycSwgcmV0ID09IDApO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDQtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz0yNDc9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19pbmplY3RfYWxsKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGxvbmcgaXJyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI1Mi1cXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgXFx1MDAyNmlyciwgSU9BUElDX05VTV9QSU5TKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTM6XFx0XFx0aW9hcGljX3NldF9pcnEoaW9hcGljLCBpZHgsIDEsIHRydWUpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NDY2PXN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MDgtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUwOTppbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxMC1cXHRcXHQgICAgICAgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCwgYm9vbCBsaW5lX3N0YXR1cylcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MjEtXFx0XFx0XFx0XFx0XFx0IGlycV9zb3VyY2VfaWQsIGxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTIyOlxcdHJldCA9IGlvYXBpY19zZXRfaXJxKGlvYXBpYywgaXJxLCBpcnFfbGV2ZWwsIGxpbmVfc3RhdHVzKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NjoxNy4xMzI1MjM2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4OTE5MjQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipJZGVudGlmeWluZyBLZXkgRW50cnkgUG9pbnRzIGZvciBJT0FQSUMgSW50ZXJhY3Rpb24gaW4gS1ZNKipcblxuQWxyaWdodCwgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBJT0FQSUMgY29kZSB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSSBzZWUgdGhhdCBga3ZtX2lvYXBpY19zZXRfaXJxYCBpcyB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIChub24tc3RhdGljKSBmdW5jdGlvbiB0aGF0IGVmZmVjdGl2ZWx5IGFjdHMgYXMgdGhlIGVudHJ5IHBvaW50IGZvciBgaW9hcGljX3NldF9pcnFgLiBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoYXQgb25lLiBBbmQgbG9va2luZyBhdCBgaW9hcGljX21taW9fd3JpdGVgLCB0aGF0J3MgdGhlIHBvaW50IHdoZXJlIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgIGlzIGNhbGxlZC4gQWgsIGJ1dCBgaW9hcGljX21taW9fd3JpdGVgIGlzICpzdGF0aWMqLCBzbyBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBTaW5jZSBpdCdzIHRoZXJlIEknbGwgaW5jbHVkZSBpdC4gQWxzbywgSSdsbCBhZGQgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAgdG8gdGhlIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvdmVyIGFsbCB0aGUgYmFzZXMuIEknbSBnb2luZyB0byB3YW50IHRvIGtub3cgdGhhdCBvbmUgdG9vLlxuXG5Ob3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJ2xsIGRvdWJsZS1jaGVjayB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW52b2x2ZWQgd2l0aCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuXG5cbkxldCdzIGFsc28gZmluZCB0aGUgc291cmNlIGNvZGUgbG9jYXRpb24sIHdoaWNoIGlzLCBhcyBleHBlY3RlZCwgaW4gYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AuIEFuZCBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoaXMuIFRpbWUgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MjIuMjIxNzE4NTk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU1MzE4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2FwaWMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTExPWt2bS0kKENPTkZJR19YODZfNjQpICs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTI6a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICs9IGk4MjU5Lm8gaTgyNTQubyBpb2FwaWMub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMy1rdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MjIuMjY3MjgxMTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NDQ1ODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk1fSU9BUElDIFJlcXVpcmVtZW50KipcblxuQWxyaWdodCwgc28gdGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCB3ZSBuZWVkIGBLVk1fSU9BUElDYCBlbmFibGVkLiBMZXQncyBkaWcgaW4gYW5kIHZlcmlmeSB0aGF0LiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGlzIEtWTSBmZWF0dXJlLiBJdCBpcyBhIGJpdCBzdXJwcmlzaW5nIHRoYXQgSSBoYWQgdG8gdGhpbmsgYWJvdXQgaXQgYXQgdGhpcyBzdGFnZSwgc28gSSdtIGhvcGluZyBJIGRpZG4ndCBvdmVybG9vayBzb21ldGhpbmcgbW9yZSBvYnZpb3VzLiBUaW1lIHRvIGxvb2sgaW50byB0aGUgZGV0YWlscyBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEl0J3MgdXN1YWxseSBzdHJhaWdodGZvcndhcmQsIGJ1dCB5b3UgbmV2ZXIga25vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NjoyNi4zMzE3NDIxOTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU4Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU9BUElDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjI2LjM3ODMwNDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODk5NDQyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYEtWTV9JT0FQSUNgIERlcGVuZGVuY3kqKlxuXG5IbW0sIGxldCBtZSBzZWUuLi4gSSdtIGEgYml0IHJ1c3R5LCBidXQgdGhpcyBgS1ZNX0lPQVBJQ2Agc2V0dGluZyBmZWVscyBmYW1pbGlhci4gSSB0aG91Z2h0IGl0IHdhcyBhIGJvb2xlYW4sIHJpZ2h0PyBZZXMsIHRoYXQncyBpdCAtIGEgc2ltcGxlIGBib29sYC4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IGlzIGl0IGRpcmVjdGx5IHRpZWQgdG8gYEtWTWA/IEkgbWVhbiwgZG9lcyBgS1ZNYCBhbHdheXMgc2VsZWN0IHRoaXMgb3B0aW9uLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSBudWFuY2VkLCBjb25kaXRpb25hbGx5IGVuYWJsZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3Mgb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzP1xuXG5JIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgcHJvYmFibHkgZGVsdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBvciBjcm9zcy1yZWZlcmVuY2UgdGhlIHJlbGV2YW50IGtlcm5lbCBkb2N1bWVudGF0aW9uLiBJIG5lZWQgYSBkZWZpbml0aXZlIGFuc3dlciB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIG15IGN1cnJlbnQgd29yay4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgYSBjb25jcmV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIG9wdGlvbiBpcyBjb250cm9sbGVkLCBlc3BlY2lhbGx5IGlmIEknbSB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIEtWTSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byBjb25maXJtIGlmIHRoZXJlIGlzIGEgZGlyZWN0IHNlbGVjdGlvbiBvciBtb3JlIGNvbXBsZXhpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTI0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6MzEuMjY4MjUwNTkxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgyODc4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9JT0FQSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjMxLjMxNjA4NjAxNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA5OTY1NDAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktWTV9JT0FQSUMgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIEtWTSBJL08gQVBJQy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgaXRzIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcyBpcyBpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZXMuIFRoZSBtb3N0IHJlbGV2YW50IGxvY2F0aW9uIGZvciBhbnl0aGluZyB4ODYtcmVsYXRlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBLVk0sIGlzIGxpa2VseSB1bmRlciBgYXJjaC94ODZgLiBMZXQgbWUgY29uZmlybSBteSBzdXNwaWNpb247IEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBpbnNpZGUuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYEtWTV9JT0FQSUNgIGluIHRoZXJlLCBhbG9uZyB3aXRoIGl0cyBjb25kaXRpb25hbCBsb2dpYywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgcmVsYXRlIHRvIGl0cyBiZWhhdmlvciBvciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6NDEuNDE1NzQyODY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjcwMjExNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0lPQVBJQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1Njo0MS42ODI3NzQ2MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxODM1MTc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgKnRoZSogYEtWTWAgY29uZmlnIGl0c2VsZiwgbm90IGp1c3QgaXRzIHVzYWdlIG9yIGEgbW9kdWxlPyBIbW0sIGxldCdzIGdldCByaWdodCB0byB0aGUgc291cmNlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBsb29rIGlzIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEtWTSBvbiB4ODYgYXJjaGl0ZWN0dXJlcyB3b3VsZCByZXNpZGUuIFRoYXQncyB0aGUgZmlyc3Qgc3RvcCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBrbm9icyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byBiZSB1c2VkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1Njo0Ny4xMDExMjg3MDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTgwODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6NDcuMTUwMzE0ODI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDUwMTc0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgS1ZNX0lPQVBJQ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgS1ZNX0lPQVBJQ2AuIFRpbWUgdG8gZ28gZGlnZ2luZyBpbnRvIHRoZSBkZWZpbml0aW9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgc3RydWN0dXJlLCBvciBtYWNybywgb3Igd2hhdGV2ZXIgaXQgaXMsIGZpdHMgaW50byB0aGUgYnJvYWRlciBLVk0gYXJjaGl0ZWN0dXJlIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSU9BUElDLCBlc3BlY2lhbGx5IGl0cyByb2xlIGluIGludGVycnVwdCByb3V0aW5nIGFuZCB2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgc3RydWN0dXJlIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgZGF0YSBmaWVsZHMuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gdGhpcyBwcm9ibGVtLiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgaGF2ZSB0byBvZmZlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQgSSB0aGluayBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1Njo1MS4yNTUzMzU2MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTcxNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU9BUElDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjUxLjMwMjMxMjQxM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkwNDE4NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEuIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEtWTSBzdWJzeXN0ZW0uIE15IGZvY3VzIGlzIGxpa2VseSBhcm91bmQgbGluZSAxNzIuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCByZWxhdGVkIHRvIEtWTSdzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzb21lIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29udHJvbGxlZCBiYXNlZCBvbiBvdGhlciBkZXBlbmRlbmNpZXMgb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBzbyBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGNvbm5lY3RlZCwgYW5kIHdoYXQncyBjb25uZWN0ZWQgdG8gKnRoZW0qLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCBhcm91bmQgdGhhdCBsaW5lIHRvIHJlZmluZSBhIGN1cnJlbnQgaHlwb3RoZXNpcyBJJ20gd29ya2luZyBvbiByZWdhcmRpbmcgaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjU1LjQ5MjczMzY4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNjY6XFx0XFx0aGVscFxcbiAxNjc6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXFxuIDE2ODpcXHRcXHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuIDE2OTpcXHRcXHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcbiAxNzA6XFx0XFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxcbiAxNzE6XFx0XFxuIDE3MjpcXHRjb25maWcgS1ZNX0lPQVBJQ1xcbiAxNzM6XFx0XFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuIDE3NDpcXHRcXHRkZWZhdWx0IHlcXG4gMTc1OlxcdFxcdGRlcGVuZHMgb24gS1ZNX1g4NlxcbiAxNzY6XFx0XFx0aGVscFxcbiAxNzc6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBhbiBJL08gQVBJQywgUElDLCBhbmQgUElULCBpLmUuXFxuIDE3ODpcXHRcXHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxODE6XFx0XFxuIDE4MjpcXHRjb25maWcgS1ZNX1NNTVxcbiAxODM6XFx0XFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuIDE4NDpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTY6NTUuNDkyODE4MjkzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTEwMzY0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBLVk1fSU9BUElDKipcblxuQWxyaWdodCwgc28gYEtWTV9JT0FQSUNgIGlzIHJlbGlhbnQgb24gYEtWTV9YODZgLiBDbGFzc2ljLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgZG93biB0aGUgbGluZSwgSSBuZWVkIHRvIGtub3cgdGhlIGVudGlyZSBkZXBlbmRlbmN5IGNoYWluIG9mIGBLVk1fWDg2YC4gV2hhdCBkb2VzICppdCogZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBnb3RjaGFzIGluIGl0cyBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBpbmRpcmVjdGx5IGltcGFjdCB0aGUgSU9BUElDIGZ1bmN0aW9uYWxpdHk/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgcmV2ZWFscyBhYm91dCBgS1ZNX1g4NmAuIEtub3dpbmcgdGhpcyBub3cgd2lsbCBzYXZlIG1lIGhlYWRhY2hlcyBsYXRlci4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRhdGEgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjU5LjQwMzg1NzI4OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEtWTV9YODZcXG4gIDIxOlxcdFxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4gIDIyOlxcdFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuICAyMzpcXHRcXHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDI1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcXG4gIDI3OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcbiAgMjg6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gIDMwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiAgMzE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiAgMzI6XFx0XFx0c2VsZWN0IFZIT1NUX1RBU0tcXG4gIDMzOlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxcbiAgMzU6XFx0XFx0c2VsZWN0IEtWTV9NTUlPXFxuICAzNjpcXHRcXHRzZWxlY3QgU0NIRURfSU5GT1xcbiAgMzc6XFx0XFx0c2VsZWN0IFBFUkZfRVZFTlRTXFxuICAzODpcXHRcXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcXG4gIDM5OlxcdFxcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxcbiAgNDA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbiAgNDE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4gIDQyOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXFxuICA0MzpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDQ0OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG4gIDQ1OlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgNDY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXFxuICA0NzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG4gIDQ4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuICA0OTpcXHRcXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG4gIDUwOlxcdFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBLVk1cXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU2OjU5LjQwMzkzOTA2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDA3NTkxNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBJT0FQSUMgU3ltYm9sIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIEtWTSBJT0FQSUMgY29uZmlndXJhdGlvbiBoZXJlLiBUaGUgY29yZSBpcyBkZWZpbml0ZWx5IGBLVk1gLCBhbmQgSSdsbCBpbmNsdWRlIGBLVk1fSU9BUElDYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCBmaWd1cmUgb3V0IHdoYXQgdG8gaW5jbHVkZS4gSSBpbml0aWFsbHkgaGFkIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBvbiBteSBsaXN0LCB3aGljaCBzZWVtcyByaWdodC4gSSBhbHNvIGNvbnNpZGVyZWQgYGlvYXBpY19tbWlvX3dyaXRlYCwgYnV0IHRoYXQncyBzdGF0aWMgYW5kIEknbSBzdXBwb3NlZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLlxuXG5XYWl0IGEgc2Vjb25kLCBgaW9hcGljX3NldF9pcnFgIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBrdm1faW9hcGljX3NldF9pcnFgLiBBbmQgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAgaXMgdHJpZ2dlcmVkIGZyb20gYGlvYXBpY19tbWlvX3dyaXRlYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbiBhbHNvIGNhbGxzIGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgLi4uTm9wZSwgaXQncyBqdXN0IGBpb2FwaWNfbW1pb193cml0ZWAuIFNpbmNlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgYSBjYWxsYmFjaywgaXQgaXMgbm90IGlubGluZWQuXG5cblRoZSBndWlkZWxpbmVzIHNheSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUuIFNpbmNlIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgYSBjYWxsYmFjaywgaXQgaXMgbm90IGlubGluZWQsIHRoZXJlZm9yZSwgSSBjYW4gYWRkIGl0LCBldmVuIGlmIGl0IGhhcyBhIHN0YXRpYyBkZWNsYXJhdGlvbi4gSG93ZXZlciwgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgbm9uLXN0YXRpYy5cblxuVWx0aW1hdGVseSwgSSdsbCBhZGQgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIHRoZSByZXN0IG9mIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgSSBtaWdodCBoYXZlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NTMsIk91dHB1dFRva2VucyI6NTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NzowNi40MTE1MzMxNzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzgzNDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel8wLTldKyBrdm1faW9hcGljX1thLXpfMC05XStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jPTI0Nz1zdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTk6dm9pZCBrdm1faW9hcGljX3NjYW5fZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjYwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NjY9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUwOC1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTEwLVxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTU0OD1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTQtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU5NTp2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU5Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTcyNS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzI2OmludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03Mjcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc1Mi1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzUzOnZvaWQga3ZtX2lvYXBpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTc6MDYuNTY5Mzc2ODk2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MjM0MDM5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIElPQVBJQyBFbXVsYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBLVk0gSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkgdGhpbmsgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIGFyZSBkZWZpbml0ZWx5IGtleSBmdW5jdGlvbnMgdG8gY29uc2lkZXI7IHRoZXkgc2VlbSB0byBiZSB0aGUgY29yZSBvZiB0aGUgaW50ZXJydXB0IHNldHRpbmcgYW5kIEVPSSB1cGRhdGluZyBsb2dpYy4gSSdsbCBpbmNsdWRlIHRob3NlLlxuXG5UaGVuLCBzaW5jZSBgaW9hcGljX21taW9fd3JpdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAsIGl0J3Mgd2hlcmUgdGhlIE1NSU8gd3JpdGVzIGdvLCBpdCBpcyBhIHZlcnkgcmVsZXZhbnQgY2FsbHNpdGUuXG5cbkkgYWxzbyBkb3VibGUgY2hlY2tlZCBpZiBgaW9hcGljX21taW9fd3JpdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzIHN0YXRpYy4gQnV0LCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBzbyB0aGUgY29tcGlsZXIgaXMgdW5saWtlbHkgdG8gaW5saW5lIGl0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBhbmFseXNpcy5cblxuVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFwcGVhciB0byBiZSByZWxldmFudCBoZXJlIGFyZSBgS1ZNYCBhbmQgYEtWTV9JT0FQSUNgLiBUaGUgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYW5kIGBpb2FwaWNfbW1pb193cml0ZWAuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIHZlcnkgY29yZSBvZiBLVk0ncyBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtLiBJdCdzIHRvdWNoaW5nIGhvdyBpbnRlcnJ1cHRzIGFyZSBkZWxpdmVyZWQgdG8gZ3Vlc3QgVk1zLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgZWRnZS10cmlnZ2VyZWQgYmVoYXZpb3IgYW5kIGhvdyB0aGUgZGVsaXZlcnkgc3RhdGUgaXMgbWFuYWdlZC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBLVk0gbG9naWMsIGFuZCB0aGUgY2hhbmdlcyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zLCBzbyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIHZlcnkgdGhvcm91Z2hseS4gSSdsbCBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNjEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjEyLjk5Mjc4MzEyOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDIzNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JT0FQSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW9hcGljX3NldF9pcnFcIixcbiAgICBcImt2bV9pb2FwaWNfdXBkYXRlX2VvaVwiLFxuICAgIFwiaW9hcGljX21taW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIElPQVBJQyBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZWlyIGRlbGl2ZXJ5IHN0YXRlIChpcnJfZGVsaXZlcmVkIGFuZCByZW1vdGVfaXJyKSBpcyB1cGRhdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgZGVsaXZlcnkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JT0FQSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW9hcGljX3NldF9pcnFcIixcbiAgICBcImt2bV9pb2FwaWNfdXBkYXRlX2VvaVwiLFxuICAgIFwiaW9hcGljX21taW9fd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIElPQVBJQyBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBob3cgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZWlyIGRlbGl2ZXJ5IHN0YXRlIChpcnJfZGVsaXZlcmVkIGFuZCByZW1vdGVfaXJyKSBpcyB1cGRhdGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgZGVsaXZlcnkgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDg6NTc6MTMuMDcxODEzODQ5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ3MDkzMzIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjEzLjA3MjQ5MjAxOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMjQ3MDI0OTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbG9naWMgYnVncyBpbiB0aGUgS1ZNIElPQVBJQyBzdGF0ZSBtYWNoaW5lIChzcGVjaWZpY2FsbHksIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBkZWxpdmVyeSBzdGF0ZSBhbmQgcmVtb3RlX2lyciB0cmFja2luZykuIEl0IG1vZGlmaWVzIGNvbmRpdGlvbmFsIGNoZWNrcyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG9uIGV4aXN0aW5nLCBmdWxseSBpbml0aWFsaXplZCBzdGF0ZSB2YXJpYWJsZXMgKGxpa2UgYGlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIHdoaWxlIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBjMDAyMGVlNzMyNzg4OGQ2YjMwZDJkMWY1MGU4NTViNzliNjU5MmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwODo1NTo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuaW5kZXggNzU3NjY3ZmIyYmZhMC4uODFkYjAyNWQyYWM5MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuKysrIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG5AQCAtMjMwLDExICsyMzAsMTEgQEAgc3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxuIFx0b2xkX2lyciA9IGlvYXBpYy1cdTAwM2VpcnI7XG4gXHRpb2FwaWMtXHUwMDNlaXJyIHw9IG1hc2s7XG4gXHRpZiAoZWRnZSkge1xuLVx0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRpZiAob2xkX2lyciA9PSBpb2FwaWMtXHUwMDNlaXJyKSB7XG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuK1x0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0fVxuIFxuIFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcbkBAIC0zNzcsOCArMzc3LDE3IEBAIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxuIFx0XHQgKiBhcyBlZGdlLXRyaWdnZXJlZC4gVGhpcyBiZWhhdmlvciBpcyB1c2VkIHRvIHNpbXVsYXRlIGFuXG4gXHRcdCAqIGV4cGxpY2l0IEVPSSBvbiBJT0FQSUNzIHRoYXQgZG9uJ3QgaGF2ZSB0aGUgRU9JIHJlZ2lzdGVyLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGUtXHUwMDNlZmllbGRzLnRyaWdfbW9kZSA9PSBJT0FQSUNfRURHRV9UUklHKVxuK1x0XHRpZiAoZS1cdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19FREdFX1RSSUcpIHtcbiBcdFx0XHRlLVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGlycl9kZWxpdmVyZWQgdHJhY2tzIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgdGhhdFxuK1x0XHRcdCAqIGhhdmUgYWxyZWFkeSBiZWVuIGRlbGl2ZXJlZC4gIENsZWFyIHN0YWxlIGVkZ2UtdHJpZ2dlcmVkXG4rXHRcdFx0ICogZGVsaXZlcnkgc3RhdGUgd2hlbiB0aGUgZW50cnkgaXMgY29uZmlndXJlZCBmb3JcbitcdFx0XHQgKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy5cbitcdFx0XHQgKi9cbitcdFx0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH4oMSBcdTAwM2NcdTAwM2MgaW5kZXgpO1xuK1x0XHR9XG4gXG4gXHRcdG1hc2tfYWZ0ZXIgPSBlLVx1MDAzZWZpZWxkcy5tYXNrO1xuIFx0XHRpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcilcbkBAIC00OTEsNyArNTAwLDcgQEAgc3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxuIFx0fSBlbHNlXG4gXHRcdHJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtXHUwMDNla3ZtLCBOVUxMLCBcdTAwMjZpcnFlKTtcbiBcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKVxuK1x0aWYgKHJldCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXG4gXHRcdGVudHJ5LVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLjg5ZTNmODJlNzViMDEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtODYsNiArODYsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl9mZWF0dXJlc1xuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2lwaVxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X3N2bV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2Nsb2NrX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9wdl90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjAyNGY0ZjAxNTcxN1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5AQCAtMCwwICsxLDE5MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIGluLWtlcm5lbCBJL08gQVBJQyBzdGF0ZS5cbisgKi9cbitcbisjaW5jbHVkZSBcImFwaWMuaFwiXG4rI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbisjaW5jbHVkZSBcInRlc3RfdXRpbC5oXCJcbisjaW5jbHVkZSBcInVjYWxsX2NvbW1vbi5oXCJcbitcbisjZGVmaW5lIFRFU1RfSU9BUElDX1BJTlx0XHQxNlxuKyNkZWZpbmUgVEVTVF9WRUNUT1JcdFx0MHg1MFxuKyNkZWZpbmUgTk9fU1VDSF9BUElDX0lEXHRcdDB4ZmVcbisjZGVmaW5lIFRFU1RfSU9BUElDX0VER0VfVFJJR1x0MFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJR1x0MVxuKyNkZWZpbmUgSU9BUElDX0RFRkFVTFRfR1BBXHQweGZlYzAwMDAwVUxMXG4rI2RlZmluZSBJT0FQSUNfUkVHX1NFTEVDVFx0MHgwMFxuKyNkZWZpbmUgSU9BUElDX1JFR19XSU5ET1dcdDB4MTBcbisjZGVmaW5lIElPQVBJQ19SVEVfTE9XKHBpbilcdCgweDEwICsgMiAqIChwaW4pKVxuKyNkZWZpbmUgSU9BUElDX1JURV9UUklHX01PREVcdEJJVCgxNSlcbitcbitzdGF0aWMgdm9pZCBnZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXG4re1xuK1x0aW50IHI7XG4rXG4rXHRpcnFjaGlwLVx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XG4rXHRyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTtcbitcdGlmIChyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTlhJTylcbitcdFx0X19URVNUX1JFUVVJUkUoMCwgXCJJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZVwiKTtcbitcbitcdFRFU1RfQVNTRVJUKCFyLCBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9JUlFDSElQLCByKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbit7XG4rXHRpcnFjaGlwLVx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XG4rXHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9JUlFDSElQLCBpcnFjaGlwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2lvYXBpY19lbnRyeShzdHJ1Y3Qga3ZtX3ZtICp2bSwgYm9vbCBsZXZlbF90cmlnZ2VyZWQsXG4rXHRcdFx0ICAgICB1MzIgZGVzdF9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbitcbitcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuK1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy52ZWN0b3IgPVxuK1x0XHRURVNUX1ZFQ1RPUjtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9XG4rXHRcdGRlc3RfaWQ7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfbW9kZSA9IDA7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9XG4rXHRcdGxldmVsX3RyaWdnZXJlZCA/IFRFU1RfSU9BUElDX0xFVkVMX1RSSUcgOlxuK1x0XHRcdFx0ICBURVNUX0lPQVBJQ19FREdFX1RSSUc7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLm1hc2sgPSAwO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyID0gMDtcbitcbitcdHNldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbmFibGVfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7XG4rXHR1NjQgYXBpY2Jhc2U7XG4rXG4rXHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XG4rXHR2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0lBMzJfQVBJQ0JBU0UsXG4rXHRcdCAgICAgYXBpY2Jhc2UgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpO1xuK1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4rXHQqKHUzMiAqKShsYXBpYy5yZWdzICsgQVBJQ19TUElWKSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEO1xuK1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHtcbitcdFx0LmlycSA9IFRFU1RfSU9BUElDX1BJTixcbitcdFx0LmxldmVsID0gbGV2ZWwsXG4rXHR9O1xuK1xuK1x0dm1faW9jdGwodm0sIEtWTV9JUlFfTElORV9TVEFUVVMsIFx1MDAyNmlycSk7XG4rXHRyZXR1cm4gaXJxLnN0YXR1cztcbit9XG4rXG4rc3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuK1xuK1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rXHRURVNUX0FTU0VSVCghIShpcnFjaGlwLmNoaXAuaW9hcGljLmlyciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBJT0FQSUMgSVJSIGZvciBwaW4gJXUgdG8gYmUgJXUsIGdvdCAweCV4XCIsXG4rXHRcdCAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBzdGF0dXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXMoKTtcbitcdHZtX2NyZWF0ZV9pcnFjaGlwKHZtKTtcbitcbitcdHNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZmFpbGVkIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXCIsIHN0YXR1cyk7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcdFRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsXG4rXHRcdCAgICBcIktWTSBzZXQgcmVtb3RlX2lyciBmb3IgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IHRoYXQgd2Fzbid0IGRlbGl2ZXJlZFwiKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBOVUxMKTtcbitcdGVuYWJsZV9sYXBpYyh2Y3B1KTtcbitcbitcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVx1MDAzZWlkKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzIFx1MDAzZSAwLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXCIsIHN0YXR1cyk7XG4rXG4rXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoIXN0YXR1cyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkXCIsXG4rXHRcdCAgICBzdGF0dXMpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4rXG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGd1ZXN0X3N3aXRjaF9pb2FwaWNfcGluX3RvX2xldmVsKHZvaWQpXG4re1xuK1x0dTMyICppb2FwaWMgPSAodTMyICopSU9BUElDX0RFRkFVTFRfR1BBO1xuK1xuK1x0V1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19TRUxFQ1QgLyBzaXplb2YodTMyKV0sXG4rXHRcdCAgIElPQVBJQ19SVEVfTE9XKFRFU1RfSU9BUElDX1BJTikpO1xuK1x0V1JJVEVfT05DRShpb2FwaWNbSU9BUElDX1JFR19XSU5ET1cgLyBzaXplb2YodTMyKV0sXG4rXHRcdCAgIFRFU1RfVkVDVE9SIHwgSU9BUElDX1JURV9UUklHX01PREUpO1xuK1xuK1x0R1VFU1RfRE9ORSgpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9zd2l0Y2hfaW9hcGljX3Bpbl90b19sZXZlbCk7XG4rXHRlbmFibGVfbGFwaWModmNwdSk7XG4rXHR2aXJ0X21hcCh2bSwgSU9BUElDX0RFRkFVTFRfR1BBLCBJT0FQSUNfREVGQVVMVF9HUEEsIDEpO1xuK1xuK1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtXHUwMDNlaWQpO1xuK1xuK1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXMgXHUwMDNlIDAsXG4rXHRcdCAgICBcIkV4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcIiwgc3RhdHVzKTtcbitcbitcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXHRURVNUX0FTU0VSVF9FUShnZXRfdWNhbGwodmNwdSwgTlVMTCksIFVDQUxMX0RPTkUpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCB0cnVlKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4raW50IG1haW4odm9pZClcbit7XG4rXHR0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCgpO1xuK1x0dGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKCk7XG4rXHR0ZXN0X2VkZ2VfdG9fbGV2ZWxfY2xlYXJzX2RlbGl2ZXJ5X3N0YXRlKCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NzoxMy4wNzI0OTMzOTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk0MTQ3OTI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPQVBJQyBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyB0aGUgS1ZNJ3MgSU9BUElDIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCwgYW5kIGl0IGFsc28gaW5jbHVkZXMgYSBuZXcgc2VsZnRlc3QsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNgLiBMZXQncyBicmVhayBkb3duIHRoZSBsb2dpYyBjaGFuZ2VzLlxuXG5GaXJzdCwgaW4gYGlvYXBpY19zZXRfaXJxYCwgdGhleSd2ZSB0d2Vha2VkIHRoZSB3YXkgYGlycl9kZWxpdmVyZWRgIGlzIGhhbmRsZWQuIEl0IHNlZW1zIHRoZSBvcmRlciBvZiBjbGVhcmluZyBgaXJyX2RlbGl2ZXJlZGAgaGFzIGJlZW4gc2hpZnRlZC4gQ3JpdGljYWxseSwgaXQgbm93IG9ubHkgY2xlYXJzIGBpcnJfZGVsaXZlcmVkYCBpZiB0aGUgSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIgKElSUikgaGFzIGFjdHVhbGx5IGNoYW5nZWQuICBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG1pc3NlZCBpbnRlcnJ1cHQgZGVsaXZlcnkgd2FzIGJlaW5nIGFkZHJlc3NlZC5cblxuTmV4dCwgaW4gYGlvYXBpY193cml0ZV9pbmRpcmVjdGAsIHRoZXJlJ3MgYSBuZXcgY29uZGl0aW9uYWwgYmxvY2suIFRoZSBvcmlnaW5hbCBjb2RlIGNsZWFyZWQgYHJlbW90ZV9pcnJgIG9ubHkgZm9yIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMuIE5vdywgaXQgZXhwbGljaXRseSBjbGVhcnMgYGlycl9kZWxpdmVyZWRgIHdoZW4gYW4gZW50cnkgaXMgKmNvbmZpZ3VyZWQqIGZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy4gVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhhdCB0aGlzIGFkZHJlc3NlcyBzdGFsZSBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZGVsaXZlcnkgc3RhdGVzLiBUaGlzIG1ha2VzIHNlbnNlOyB5b3Ugd291bGRuJ3Qgd2FudCBsaW5nZXJpbmcgXCJkZWxpdmVyZWRcIiBmbGFncyBjb25mdXNpbmcgdGhlIGVtdWxhdGlvbiB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYSBsZXZlbC10cmlnZ2VyZWQgbW9kZS5cblxuVGhlIHRoaXJkIGNoYW5nZSBpcyBpbiBgaW9hcGljX3NlcnZpY2VgLCB3aGVyZSB0aGUgY29uZGl0aW9uIGZvciBzZXR0aW5nIGByZW1vdGVfaXJyYCBpcyBiZWluZyB0aWdodGVuZWQuIEluc3RlYWQgb2YgYGlmIChyZXQpYCwgaXQncyBub3cgYGlmIChyZXQgXHUwMDNlIDApYC4gVGhlIGByZXRgIHZhcmlhYmxlIHJlZmxlY3RzIHRoZSBpbnRlcnJ1cHQgZGVsaXZlcnkgc3RhdHVzLiBUaGlzIHN1Z2dlc3RzIHRoYXQgb25seSBhIHN1Y2Nlc3NmdWwgaW50ZXJydXB0IGRlbGl2ZXJ5IHNob3VsZCBzZXQgdGhlIGByZW1vdGVfaXJyYCBmbGFnIGZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy5cblxuT3ZlcmFsbCwgaXQncyBjbGVhciB0aGVzZSBhcmUgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgaW50ZXJuYWwgc3RhdGUgdHJhbnNpdGlvbnMgd2l0aGluIHRoZSBJT0FQSUMgZW11bGF0aW9uLiAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgS01TQU4gaXNuJ3Qgd2FycmFudGVkIGhlcmU7IHRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYWJvdXQgKmxvZ2ljYWwqIHN0YXRlIG1hbmFnZW1lbnQuXG5cbkJ1dCwgaGFuZyBvbiwgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGF0IGd1dCBmZWVsaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCBhcmUgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGV5J3JlIHVzZWQuICBgaW9hcGljYCBpcyBwYXJ0IG9mIGBzdHJ1Y3Qga3ZtX2lvYXBpY2AsIHdoaWNoICpzaG91bGQqIGJlIHplcm9lZCBhdCBjcmVhdGlvbi4gSSd2ZSBzZWVuIHRoYXQgY29kZS4gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcnFlYCBpbiBgaW9hcGljX3NlcnZpY2VgIGlzIHdoYXQgSSB3YW50IHRvIGludmVzdGlnYXRlIG5vdywgYnV0IEkgZG9uJ3QgcmVtZW1iZXIgc2VlaW5nIGl0IGJlaW5nIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gb2YgYGlvYXBpY19zZXJ2aWNlYCBpbiBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCB0byBtYWtlIHN1cmUgYGlycWVgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NzoyMy4wMTM5NzU0NDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTc1MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvYXBpY19zZXJ2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjM3OnN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWMsIGludCBpcnEsXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTM4LVxcdFxcdGJvb2wgbGluZV9zdGF0dXMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTE4Nz1zdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjM5LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDA6XFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQxLVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTMzMT1zdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbClcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MjUtXFx0XFx0XFx0ZWxzZVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo0MjY6XFx0XFx0XFx0XFx0aW9hcGljX3NlcnZpY2UoaW9hcGljLCBpbmRleCwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MjctXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTQ2NS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NDY2OnN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDY3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01Mjk9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU0MS1cXHRcXHRpZiAoaW9hcGljLVxcdTAwM2VpcnIgXFx1MDAyNiAoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2XFx1MDAyNiAhZW50LVxcdTAwM2VmaWVsZHMucmVtb3RlX2lycilcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTQyOlxcdFxcdFxcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDMtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTU0OD1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01ODctXFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTg4OlxcdFxcdFxcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgcGluLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU4OS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjIzLjA2MTk1NjAyNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA1MjEyMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpb2FwaWNfc2VydmljZWAgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGBpb2FwaWNfc2VydmljZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbW9kdWxlIGlzIGZ1bmN0aW9uaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkYXRhIHN0cnVjdHVyZXMsIHNlcnZpY2Ugcm91dGluZXMsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIEhvcGVmdWxseSwgSSdsbCBmaW5kIHRoZSBzcGVjaWZpYyBhcmVhIHRoYXQncyBjYXVzaW5nIHRoZSBwcm9ibGVtIEknbSBpbnZlc3RpZ2F0aW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaW50ZXJydXB0IHJvdXRpbmcgbG9naWMsIHJlZ2lzdGVyIGFjY2VzcyBtZWNoYW5pc21zLCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gSXQncyB0aW1lIHRvIHB1dCBvbiBteSBkZXRlY3RpdmUgaGF0IGFuZCBzdGFydCB0aGUgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjI2LjQ2NzE3MTU5NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY2OlxcdHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcXG4gNDY3OlxcdHtcXG4gNDY4OlxcdFxcdHVuaW9uIGt2bV9pb2FwaWNfcmVkaXJlY3RfZW50cnkgKmVudHJ5ID0gXFx1MDAyNmlvYXBpYy1cXHUwMDNlcmVkaXJ0YmxbaXJxXTtcXG4gNDY5OlxcdFxcdHN0cnVjdCBrdm1fbGFwaWNfaXJxIGlycWU7XFxuIDQ3MDpcXHRcXHRpbnQgcmV0O1xcbiA0NzE6XFx0XFxuIDQ3MjpcXHRcXHRpZiAoZW50cnktXFx1MDAzZWZpZWxkcy5tYXNrIHx8XFxuIDQ3MzpcXHRcXHQgICAgKGVudHJ5LVxcdTAwM2VmaWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHIFxcdTAwMjZcXHUwMDI2XFxuIDQ3NDpcXHRcXHQgICAgZW50cnktXFx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyKSlcXG4gNDc1OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0aXJxZS5kZXN0X2lkID0gZW50cnktXFx1MDAzZWZpZWxkcy5kZXN0X2lkO1xcbiA0Nzg6XFx0XFx0aXJxZS52ZWN0b3IgPSBlbnRyeS1cXHUwMDNlZmllbGRzLnZlY3RvcjtcXG4gNDc5OlxcdFxcdGlycWUuZGVzdF9tb2RlID0ga3ZtX2xhcGljX2lycV9kZXN0X21vZGUoISFlbnRyeS1cXHUwMDNlZmllbGRzLmRlc3RfbW9kZSk7XFxuIDQ4MDpcXHRcXHRpcnFlLnRyaWdfbW9kZSA9IGVudHJ5LVxcdTAwM2VmaWVsZHMudHJpZ19tb2RlO1xcbiA0ODE6XFx0XFx0aXJxZS5kZWxpdmVyeV9tb2RlID0gZW50cnktXFx1MDAzZWZpZWxkcy5kZWxpdmVyeV9tb2RlIFxcdTAwM2NcXHUwMDNjIDg7XFxuIDQ4MjpcXHRcXHRpcnFlLmxldmVsID0gMTtcXG4gNDgzOlxcdFxcdGlycWUuc2hvcnRoYW5kID0gQVBJQ19ERVNUX05PU0hPUlQ7XFxuIDQ4NDpcXHRcXHRpcnFlLm1zaV9yZWRpcl9oaW50ID0gZmFsc2U7XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmIChpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfRURHRV9UUklHKVxcbiA0ODc6XFx0XFx0XFx0aW9hcGljLVxcdTAwM2VpcnJfZGVsaXZlcmVkIHw9IDEgXFx1MDAzY1xcdTAwM2MgaXJxO1xcbiA0ODg6XFx0XFxuIDQ4OTpcXHRcXHRpZiAoaXJxID09IFJUQ19HU0kgXFx1MDAyNlxcdTAwMjYgbGluZV9zdGF0dXMpIHtcXG4gNDkwOlxcdFxcdFxcdC8qXFxuIDQ5MTpcXHRcXHRcXHQgKiBwZW5kaW5nX2VvaSBjYW5ub3QgZXZlciBiZWNvbWUgbmVnYXRpdmUgKHNlZVxcbiA0OTI6XFx0XFx0XFx0ICogcnRjX3N0YXR1c19wZW5kaW5nX2VvaV9jaGVja192YWxpZCkgYW5kIHRoZSBjYWxsZXJcXG4gNDkzOlxcdFxcdFxcdCAqIGVuc3VyZXMgdGhhdCBpdCBpcyBvbmx5IGNhbGxlZCBpZiBpdCBpcyBcXHUwMDNlPSB6ZXJvLCBuYW1lbHlcXG4gNDk0OlxcdFxcdFxcdCAqIGlmIHJ0Y19pcnFfY2hlY2tfY29hbGVzY2VkIHJldHVybnMgZmFsc2UpLlxcbiA0OTU6XFx0XFx0XFx0ICovXFxuIDQ5NjpcXHRcXHRcXHRXQVJOX09OX09OQ0UoaW9hcGljLVxcdTAwM2VydGNfc3RhdHVzLnBlbmRpbmdfZW9pKTtcXG4gNDk3OlxcdFxcdFxcdHJldCA9IF9fa3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy1cXHUwMDNla3ZtLCBOVUxMLCBcXHUwMDI2aXJxZSxcXG4gNDk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aW9hcGljLVxcdTAwM2VydGNfc3RhdHVzKTtcXG4gNDk5OlxcdFxcdFxcdGlvYXBpYy1cXHUwMDNlcnRjX3N0YXR1cy5wZW5kaW5nX2VvaSA9IChyZXQgXFx1MDAzYyAwID8gMCA6IHJldCk7XFxuIDUwMDpcXHRcXHR9IGVsc2VcXG4gNTAxOlxcdFxcdFxcdHJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtXFx1MDAzZWt2bSwgTlVMTCwgXFx1MDAyNmlycWUpO1xcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcXG4gNTA0OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VmaWVsZHMucmVtb3RlX2lyciA9IDE7XFxuIDUwNTpcXHRcXG4gNTA2OlxcdFxcdHJldHVybiByZXQ7XFxuIDUwNzpcXHR9XFxuIDUwODpcXHRcXG4gNTA5OlxcdGludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG4gNTEwOlxcdFxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbiA1MTE6XFx0e1xcbiA1MTI6XFx0XFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS1cXHUwMDNlYXJjaC52aW9hcGljO1xcbiA1MTM6XFx0XFx0aW50IGlycSA9IGUtXFx1MDAzZWlycWNoaXAucGluO1xcbiA1MTQ6XFx0XFx0aW50IHJldCwgaXJxX2xldmVsO1xcbiA1MTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA4OjU3OjI2LjQ2NzI2OTU2NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDc1NDQ3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgS1ZNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gY29kZSwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgbWFudWFsbHkgaW5pdGlhbGl6aW5nIHRoZSBgaXJxZWAgc3RydWN0dXJlLiBJIHNlZSB0aGUgYXNzaWdubWVudHMgdG8gaXRzIGZpZWxkcyBsaWtlIGBkZXN0X2lkYCwgYHZlY3RvcmAsIGBkZXN0X21vZGVgLCBldGMuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIEtWTSBmYXJlOyBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgaGVyZS4gVGhpcyBgaXJxZWAgc3RydWN0IGlzIHRoZW4gcGFzc2VkIHRvIGBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWNgLCB3aGljaCBpcywgYWdhaW4sIHR5cGljYWwuXG5cblRoZSBhY3R1YWwgcGF0Y2ggaXMgYSB2ZXJ5IHNtYWxsLCBzcGVjaWZpYyBjaGFuZ2U6IGByZXQgXHUwMDI2XHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHYCBpcyB1cGRhdGVkIHRvIGByZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHYC4gQWgsIGEgY2xhc3NpYyBsb2dpYyBidWcgZml4LiBJdCBzZWVtcyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgZmxhd2VkIGJlY2F1c2UgYHJldGAgY291bGQgYmUgYSBuZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0aW5nIGFuIGVycm9yLiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgd2FzIHRyZWF0aW5nIGEgZmFpbHVyZSBpbiBpbnRlcnJ1cHQgZGVsaXZlcnkgYXMgYSBzdWNjZXNzIGlmIGByZXRgIHdhcyB6ZXJvLiBUaGlzIGlzIGNsZWFybHkgaW5jb3JyZWN0LiBUaGUgdXBkYXRlZCBsb2dpYyBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzLCB3aGljaCBzaWduaWZ5IGVycm9ycy4gSWYgdGhlIGRlbGl2ZXJ5IGZhaWxzLCB0aGVuIGByZW1vdGVfaXJyYCBzaG91bGQgbm90IGJlIHNldC5cblxuVGhpcyBwYXRjaCBpcyBzb2xpZC4gVGhlcmUgYXJlIG5vIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIFRoaXMgaXNuJ3QgYWJvdXQgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0J3MgYSBzdHJhaWdodC11cCBmaXggZm9yIElPQVBJQyBzdGF0ZSBtYWNoaW5lIGxvZ2ljLCBmaXhpbmcgaG93IGByZW1vdGVfaXJyYCBpcyBzZXQgYmFzZWQgb24gdGhlIHJldHVybiBvZiBga3ZtX2lycV9kZWxpdmVyeV90b19hcGljYC4gS0FTQU4gd291bGQgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uLCBidXQgdGhhdCdzIG5vdCB0aGUgaXNzdWUgaGVyZS4gVGhpcyBpcyBhIHB1cmUgbG9naWMgYnVnLCBzbyBLTVNBTiBpcyB1bm5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0NCwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwODo1NzozNS41NDI3MTk5NTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGxvZ2ljIGJ1Z3MgaW4gdGhlIEtWTSBJT0FQSUMgc3RhdGUgbWFjaGluZSAoc3BlY2lmaWNhbGx5LCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZGVsaXZlcnkgc3RhdGUgYW5kIHJlbW90ZV9pcnIgdHJhY2tpbmcpLiBJdCBtb2RpZmllcyBjb25kaXRpb25hbCBjaGVja3MgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBleGlzdGluZywgZnVsbHkgaW5pdGlhbGl6ZWQgc3RhdGUgdmFyaWFibGVzIChsaWtlIGBpb2FwaWMtXFx1MDAzZWlycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmApLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCB3aGlsZSBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBsb2dpYyBidWdzIGluIHRoZSBLVk0gSU9BUElDIHN0YXRlIG1hY2hpbmUgKHNwZWNpZmljYWxseSwgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGRlbGl2ZXJ5IHN0YXRlIGFuZCByZW1vdGVfaXJyIHRyYWNraW5nKS4gSXQgbW9kaWZpZXMgY29uZGl0aW9uYWwgY2hlY2tzIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcsIGZ1bGx5IGluaXRpYWxpemVkIHN0YXRlIHZhcmlhYmxlcyAobGlrZSBgaW9hcGljLVxcdTAwM2VpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgKS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcywgd2hpbGUgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowth4mw[1] Phase: Succeeded StartedAt: 2026-08-12 08:57:46 +0000 UTC FinishedAt: 2026-08-12 08:57:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 08:57:46 +0000 UTC FinishedAt: 2026-08-12 08:57:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2] Phase: Succeeded StartedAt: 2026-08-12 08:57:46 +0000 UTC FinishedAt: 2026-08-12 12:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 08:57:46 +0000 UTC FinishedAt: 2026-08-12 12:37:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 08:57:46 +0000 UTC FinishedAt: 2026-08-12 08:57:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 08:57:46 +0000 UTC FinishedAt: 2026-08-12 08:57:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowth4mw/series-workflowth4mw-convert-artifact-3639910041/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 08:57:56 +0000 UTC FinishedAt: 2026-08-12 09:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 08:57:56 +0000 UTC FinishedAt: 2026-08-12 09:14:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7257d609-f586-4800-b2ba-e2e8f0225961,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-workflowth4mw/series-workflowth4mw-convert-artifact-3639910041/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": "7e3270b0-e06b-456b-a072-4fe4be17aea1", "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-workflowth4mw/series-workflowth4mw-build-action-3522019895/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 08:57:56 +0000 UTC FinishedAt: 2026-08-12 09:14:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7257d609-f586-4800-b2ba-e2e8f0225961,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-workflowth4mw/series-workflowth4mw-convert-artifact-3639910041/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": "7e3270b0-e06b-456b-a072-4fe4be17aea1", "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-workflowth4mw/series-workflowth4mw-build-action-3522019895/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 09:14:24 +0000 UTC FinishedAt: 2026-08-12 09:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 09:14:24 +0000 UTC FinishedAt: 2026-08-12 09:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 09:14:24 +0000 UTC FinishedAt: 2026-08-12 09:14:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 09:14:24 +0000 UTC FinishedAt: 2026-08-12 09:14:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowth4mw/series-workflowth4mw-convert-artifact-1497884012/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 09:14:34 +0000 UTC FinishedAt: 2026-08-12 09:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 09:14:34 +0000 UTC FinishedAt: 2026-08-12 09:16:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7e3270b0-e06b-456b-a072-4fe4be17aea1,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-workflowth4mw/series-workflowth4mw-build-action-3522019895/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-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 09:16:38 +0000 UTC FinishedAt: 2026-08-12 09:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 09:16:38 +0000 UTC FinishedAt: 2026-08-12 09:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 09:16:38 +0000 UTC FinishedAt: 2026-08-12 09:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 09:16:38 +0000 UTC FinishedAt: 2026-08-12 09:33:36 +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:*7257d609-f586-4800-b2ba-e2e8f0225961,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-workflowth4mw/series-workflowth4mw-convert-artifact-1497884012/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": "e5937bfe-73c8-4d21-8ac5-965deaa6e3dd", "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-workflowth4mw/series-workflowth4mw-build-action-1741601800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 09:16:38 +0000 UTC FinishedAt: 2026-08-12 09:33:26 +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:*7257d609-f586-4800-b2ba-e2e8f0225961,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-workflowth4mw/series-workflowth4mw-convert-artifact-1497884012/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": "e5937bfe-73c8-4d21-8ac5-965deaa6e3dd", "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-workflowth4mw/series-workflowth4mw-build-action-1741601800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 09:33:36 +0000 UTC FinishedAt: 2026-08-12 09:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 09:33:36 +0000 UTC FinishedAt: 2026-08-12 09:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 09:33:36 +0000 UTC FinishedAt: 2026-08-12 09:35:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 09:33:36 +0000 UTC FinishedAt: 2026-08-12 09:35:29 +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:*e5937bfe-73c8-4d21-8ac5-965deaa6e3dd,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-workflowth4mw/series-workflowth4mw-build-action-1741601800/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-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 09:35:39 +0000 UTC FinishedAt: 2026-08-12 12:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 09:35:39 +0000 UTC FinishedAt: 2026-08-12 12:37:05 +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_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"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:*7e3270b0-e06b-456b-a072-4fe4be17aea1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5937bfe-73c8-4d21-8ac5-965deaa6e3dd,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-workflowth4mw/series-workflowth4mw-build-action-3522019895/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-workflowth4mw/series-workflowth4mw-build-action-1741601800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 09:35:39 +0000 UTC FinishedAt: 2026-08-12 09:35:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 09:35:39 +0000 UTC FinishedAt: 2026-08-12 09:35:43 +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_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"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-workflowth4mw/series-workflowth4mw-convert-artifact-2113805909/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 09:35:39 +0000 UTC FinishedAt: 2026-08-12 09:35:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 09:35:39 +0000 UTC FinishedAt: 2026-08-12 09:35:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 09:35:39 +0000 UTC FinishedAt: 2026-08-12 09:35:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 09:35:49 +0000 UTC FinishedAt: 2026-08-12 12:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4mw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","ioapic_mmio_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"91484fc2-d0eb-4529-aa80-9b7ee86c4a97","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 09:35:49 +0000 UTC FinishedAt: 2026-08-12 12:36:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7e3270b0-e06b-456b-a072-4fe4be17aea1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5937bfe-73c8-4d21-8ac5-965deaa6e3dd,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-workflowth4mw/series-workflowth4mw-build-action-3522019895/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-workflowth4mw/series-workflowth4mw-build-action-1741601800/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-workflowth4mw/series-workflowth4mw-convert-artifact-2113805909/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,}