Name: series-workflow8hn5v Phase: Succeeded StartedAt: 2026-09-04 00:21:46 +0000 UTC FinishedAt: 2026-09-04 04:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[0] Phase: Succeeded StartedAt: 2026-09-04 00:21:46 +0000 UTC FinishedAt: 2026-09-04 00:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 00:21:46 +0000 UTC FinishedAt: 2026-09-04 00:24:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e539025ff1f7351a42788c5a88aab59c26f5131b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_LRU_SORT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e539025ff1f7351a42788c5a88aab59c26f5131b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_LRU_SORT" ], "series_id": "760a1dcc-8f93-4c63-b0ce-d1d98d7197b0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_commit_quota_goals", "damos_commit_quota_goal", "damon_commit_ctx", "damos_sysfs_set_quota_scores", "damon_lru_sort_add_quota_goals" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FsJiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIERBTU9OIGNvcmUgcXVvdGEgZ29hbCBjb21taXQgbG9naWMgKGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgKSB0byB2YWxpZGF0ZSB0aGF0IGBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlYCBpcyBub24temVybywgcmV0dXJuaW5nIGAtRUlOVkFMYCBvbiB6ZXJvIHZhbHVlcyBhbmQgcHJvcGFnYXRpbmcgZXJyb3IgY29kZXMgcHJvcGVybHkgKGluY2x1ZGluZyBmcmVlaW5nIG5ld2x5IGFsbG9jYXRlZCBnb2FsIG9iamVjdHMgb24gZmFpbHVyZSkuIEl0IGFsc28gcmVtb3ZlcyByZWR1bmRhbnQgdmFsaWRhdGlvbiBjaGVja3MgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBgc2FtcGxlcy9kYW1vbi9tdGllci5jYC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbGwgc3RydWN0IGZpZWxkcyBtYW5pcHVsYXRlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIHBhc3NlZCBhY3Jvc3MgdXNlci9rZXJuZWwgYm91bmRhcmllcywgYW5kIGFueSBwb3RlbnRpYWwgYWxsb2NhdGlvbi9tZW1vcnkgbWFuYWdlbWVudCBmYWlsdXJlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHF1b3RhIGdvYWwgY29tbWl0IGhhbmRsaW5nIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgaW5wdXQgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgZm9yIHplcm8gdGFyZ2V0IHZhbHVlcyBpbiBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgpIGFuZCBwcm9wYWdhdGluZyBlcnJvcnMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkuIEl0IGFsc28gYWx0ZXJzIHBhcmFtZXRlciBoYW5kbGluZyBpbiBtbS9kYW1vbi9scnVfc29ydC5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgbW9kdWxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MzVlOTA4OGJlNzQyMWQ1ZjIxNGZlYzljNDEwYzRmMTBmMDc1ZTNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMDoyMzoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDg2NTUwYzQxNDZmNTMuLmY1ZTdlZDlmNWUxNTkgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTEyMTEsMTQgJiM0MzsxMjExLDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiYjNDM7c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbiB7XG4mIzQzO1x0aWYgKCFzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlKVxuJiM0MztcdFx0cmV0dXJuICAtRUlOVkFMO1xuIFx0ZHN0LVx1MDAzZW1ldHJpYyA9IHNyYy1cdTAwM2VtZXRyaWM7XG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTEyMzYsMTQgJiM0MzsxMjM5LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuIHtcbiBcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xuLVx0aW50IGkgPSAwLCBqID0gMDtcbiYjNDM7XHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XG4gXG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkmIzQzOyYjNDM7LCBzcmMpO1xuLVx0XHRpZiAoc3JjX2dvYWwpXG4tXHRcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbi1cdFx0ZWxzZVxuJiM0MztcdFx0aWYgKHNyY19nb2FsKSB7XG4mIzQzO1x0XHRcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4gXHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShzcmNfZ29hbCwgbmV4dCwgc3JjKSB7XG4gXHRcdGlmIChqJiM0MzsmIzQzOyBcdTAwM2MgaSlcbkBAIC0xMjUyLDcgJiM0MzsxMjU4LDExIEBAIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuIFx0XHRcdFx0c3JjX2dvYWwtXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuIFx0XHRpZiAoIW5ld19nb2FsKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xuJiM0MztcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZGFtb3NfZnJlZV9xdW90YV9nb2FsKG5ld19nb2FsKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiBcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggYmQ4NDc4MjlhOTkwNy4uN2RmNDVmOWEwYjNhZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0yMzMsOCAmIzQzOzIzMyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbiBcbiBcdGlmICghYWN0aXZlX21lbV9icClcbiBcdFx0cmV0dXJuIDA7XG4tXHRpZiAoMTAwMDAgXHUwMDNjIGFjdGl2ZV9tZW1fYnApXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xuIFx0aWYgKCFnb2FsKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL210aWVyLmMgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbmluZGV4IGJlYTQ1Yzg3Y2M5YmUuLjI3ZGM4OGJkZjdhMGUgMTAwNjQ0XG4tLS0gYS9zYW1wbGVzL2RhbW9uL210aWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuY1xuQEAgLTE2MSw5ICYjNDM7MTYxLDYgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuIFx0aWYgKCFzY2hlbWUpXG4gXHRcdGdvdG8gZnJlZV9vdXQ7XG4gXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG4tXHQvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovXG4tXHRpZiAoIW5vZGUwX21lbV91c2VkX2JwIHx8ICFub2RlMF9tZW1fZnJlZV9icClcbi1cdFx0Z290byBmcmVlX291dDtcbiBcdHF1b3RhX2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbiBcdFx0XHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XG4gXHRcdFx0REFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzM1ZTkwODhiZTc0MjFkNWYyMTRmZWM5YzQxMGM0ZjEwZjA3NWUzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDA6MjM6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggODY1NTBjNDE0NmY1My4uZjVlN2VkOWY1ZTE1OSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMTIxMSwxNCAmIzQzOzEyMTEsMTcgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oCiAJfQogfQogCi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgKJiM0MztzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKQogewomIzQzOwlpZiAoIXNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlKQomIzQzOwkJcmV0dXJuICAtRUlOVkFMOwogCWRzdC0mZ3Q7bWV0cmljID0gc3JjLSZndDttZXRyaWM7CiAJZHN0LSZndDt0YXJnZXRfdmFsdWUgPSBzcmMtJmd0O3RhcmdldF92YWx1ZTsKIAlpZiAoZHN0LSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCkKIAkJZHN0LSZndDtjdXJyZW50X3ZhbHVlID0gc3JjLSZndDtjdXJyZW50X3ZhbHVlOwogCWRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTIzNiwxNCAmIzQzOzEyMzksMTcgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoCiBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYykKIHsKIAlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDsKLQlpbnQgaSA9IDAsIGogPSAwOwomIzQzOwlpbnQgaSA9IDAsIGogPSAwLCBlcnI7CiAKIAlkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkgewogCQlzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkmIzQzOyYjNDM7LCBzcmMpOwotCQlpZiAoc3JjX2dvYWwpCi0JCQlkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpOwotCQllbHNlCiYjNDM7CQlpZiAoc3JjX2dvYWwpIHsKJiM0MzsJCQllcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9IGVsc2UgewogCQkJZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTsKJiM0MzsJCX0KIAl9CiAJZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKHNyY19nb2FsLCBuZXh0LCBzcmMpIHsKIAkJaWYgKGomIzQzOyYjNDM7ICZsdDsgaSkKQEAgLTEyNTIsNyAmIzQzOzEyNTgsMTEgQEAgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpCiAJCQkJc3JjX2dvYWwtJmd0O21ldHJpYywgc3JjX2dvYWwtJmd0O3RhcmdldF92YWx1ZSk7CiAJCWlmICghbmV3X2dvYWwpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTsKJiM0MzsJCWVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGFtb3NfZnJlZV9xdW90YV9nb2FsKG5ld19nb2FsKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQogCQlkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCBiZDg0NzgyOWE5OTA3Li43ZGY0NWY5YTBiM2FlIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmMKQEAgLTIzMyw4ICYjNDM7MjMzLDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLAogCiAJaWYgKCFhY3RpdmVfbWVtX2JwKQogCQlyZXR1cm4gMDsKLQlpZiAoMTAwMDAgJmx0OyBhY3RpdmVfbWVtX2JwKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7CiAJaWYgKCFnb2FsKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vbXRpZXIuYyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuYwppbmRleCBiZWE0NWM4N2NjOWJlLi4yN2RjODhiZGY3YTBlIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RhbW9uL210aWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2FtcGxlcy9kYW1vbi9tdGllci5jCkBAIC0xNjEsOSAmIzQzOzE2MSw2IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSkKIAlpZiAoIXNjaGVtZSkKIAkJZ290byBmcmVlX291dDsKIAlkYW1vbl9zZXRfc2NoZW1lcyhjdHgsICZhbXA7c2NoZW1lLCAxKTsKLQkvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovCi0JaWYgKCFub2RlMF9tZW1fdXNlZF9icCB8fCAhbm9kZTBfbWVtX2ZyZWVfYnApCi0JCWdvdG8gZnJlZV9vdXQ7CiAJcXVvdGFfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKAogCQkJcHJvbW90ZSA/IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlAgOgogCQkJREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc2NvcGUg4oCTIHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIHdoZXJlPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYHJlYWQtZmlsZWAgb3IgZXZlbiBhIGBncmVwcGVyYCBwYXNzLCBqdXN0IHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcgb2YgdGhlIGNoYW5nZXMgb3IgcmVmZXIgdG8gdGhlIHBhdGNoIGRldGFpbHMuCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgcGF0Y2ggaXMgZ29pbmcgdG8gYWZmZWN0IGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gREFNT04uIFNwZWNpZmljYWxseSwgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmc6IGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgc2FtcGxlcy9kYW1vbi9tdGllci5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCBpdCB3aWxsIGludm9sdmUgY2hhbmdlcyB0byB0aGUgZGFtb24gY29yZSBmdW5jdGlvbmFsaXR5LCBscnUgc29ydCBhbmQgdGhlcmUmIzM5O3MgYSBzYW1wbGUuCgpUaW1lIHRvIGRyaWxsIGRvd24uIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGluc3BlY3QgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgYWxnb3JpdGhtaWMgbW9kaWZpY2F0aW9ucyBvciBzdHJ1Y3R1cmFsIGNoYW5nZXMuIEkgc2hvdWxkIGFsc28gdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmb3IgREFNT04gdG8gdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkIG9yIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnOjY6XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy03LVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWc6MTY6XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTk6XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbm1tL2RhbW9uL0tjb25maWc6MjA6XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxubW0vZGFtb24vS2NvbmZpZy0yMS1cdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy0zMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MzE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy0zMi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo0MjpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjQ0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNTAtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NTE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTUyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo1MzpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01NC1cdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZzo1NzpcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTYwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo2MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctNjItXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjY5Olx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZzo3MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNzItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjczOlx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2Vcbm1tL2RhbW9uL0tjb25maWctNzQtXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTgwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo4MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy04Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZzo4OTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo5MjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG5tbS9kYW1vbi9LY29uZmlnOjkzOlx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG5tbS9kYW1vbi9LY29uZmlnLTk0LVx0ICB0aG9zZS5cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTA0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbm1tL2RhbW9uL0tjb25maWctMTA1LVx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTA5Olx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbm1tL2RhbW9uL0tjb25maWc6MTEzOlx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXHQgIG1ldHJpY3MuXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcdGRlZmF1bHQgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cbm1tL2RhbW9uL0tjb25maWctMTIyLVx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjEwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgUXVvdGEgQ29tbWl0IExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIHF1b3RhIGdvYWxzIGFyZSBiZWluZyBjb21taXR0ZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgYXJvdW5kIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBmdW5jdGlvbnMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9uIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbW1pdCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQmIzM5O3MgZHJpdmluZyB0aGUgY2FsbCB0byBjb21taXQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBJJiMzOTttIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSB3aGVyZSB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwMDpcdFx0XHRicmVhaztcbjEyMDE6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxuMTIwMjpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG4xMjAzOlx0XHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuMTIwNDpcdFx0XHRkc3QtXHUwMDNlbWVtY2dfaWQgPSBzcmMtXHUwMDNlbWVtY2dfaWQ7XG4xMjA1Olx0XHRcdGJyZWFrO1xuMTIwNjpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcbjEyMDc6XHRcdFx0ZHN0LVx1MDAzZW5pZCA9IHNyYy1cdTAwM2VuaWQ7XG4xMjA4Olx0XHRcdGJyZWFrO1xuMTIwOTpcdFx0ZGVmYXVsdDpcbjEyMTA6XHRcdFx0YnJlYWs7XG4xMjExOlx0XHR9XG4xMjEyOlx0fVxuMTIxMzpcdFxuMTIxNDpcdHN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4xMjE1Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4xMjE2Olx0e1xuMTIxNzpcdFx0aWYgKCFzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlKVxuMTIxODpcdFx0XHRyZXR1cm4gIC1FSU5WQUw7XG4xMjE5Olx0XHRkc3QtXHUwMDNlbWV0cmljID0gc3JjLVx1MDAzZW1ldHJpYztcbjEyMjA6XHRcdGRzdC1cdTAwM2V0YXJnZXRfdmFsdWUgPSBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuMTIyMTpcdFx0aWYgKGRzdC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcbjEyMjI6XHRcdFx0ZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXHUwMDNlY3VycmVudF92YWx1ZTtcbjEyMjM6XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbjEyMjQ6XHRcdHJldHVybiAwO1xuMTIyNTpcdH1cbjEyMjY6XHRcbjEyMjc6XHQvKipcbjEyMjg6XHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxuMTIyOTpcdCAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxuMTIzMDpcdCAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PUyBxdW90YS5cbjEyMzE6XHQgKlxuMTIzMjpcdCAqIENvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZvciBxdW90YSBnb2FscyBmcm9tIEBzcmMgdG8gQGRzdC4gIFVzZXJzXG4xMjMzOlx0ICogc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIGZvciBxdW90YSBnb2Fscy1sZXZlbCBwYXJhbWV0ZXJzIHVwZGF0ZSBvZiBydW5uaW5nXG4xMjM0Olx0ICogREFNT04gY29udGV4dHMsIGluc3RlYWQgb2YgbWFudWFsIGluLXBsYWNlIHVwZGF0ZXMuXG4xMjM1Olx0ICpcbjEyMzY6XHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2VcbjEyMzc6XHQgKiBkYW1vbl9jYWxsKCkuXG4xMjM4Olx0ICovXG4xMjM5Olx0aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4xMjQwOlx0e1xuMTI0MTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FsLCAqbmV4dCwgKnNyY19nb2FsLCAqbmV3X2dvYWw7XG4xMjQyOlx0XHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XG4xMjQzOlx0XG4xMjQ0Olx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xuMTI0NTpcdFx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkmIzQzOyYjNDM7LCBzcmMpO1xuMTI0NjpcdFx0XHRpZiAoc3JjX2dvYWwpIHtcbjEyNDc6XHRcdFx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xuMTI0ODpcdFx0XHRcdGlmIChlcnIpXG4xMjQ5Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTI1MDpcdFx0XHR9IGVsc2Uge1xuMTI1MTpcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChkc3RfZ29hbCk7XG4xMjUyOlx0XHRcdH1cbjEyNTM6XHRcdH1cbjEyNTQ6XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShzcmNfZ29hbCwgbmV4dCwgc3JjKSB7XG4xMjU1Olx0XHRcdGlmIChqJiM0MzsmIzQzOyBcdTAwM2MgaSlcbjEyNTY6XHRcdFx0XHRjb250aW51ZTtcbjEyNTc6XHRcdFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbjEyNTg6XHRcdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbjEyNTk6XHRcdFx0aWYgKCFuZXdfZ29hbClcbjEyNjA6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEyNjE6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbjEyNjI6XHRcdFx0aWYgKGVycikge1xuMTI2MzpcdFx0XHRcdGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChuZXdfZ29hbCk7XG4xMjY0Olx0XHRcdFx0cmV0dXJuIGVycjtcbjEyNjU6XHRcdFx0fVxuMTI2NjpcdFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbjEyNjc6XHRcdH1cbjEyNjg6XHRcdHJldHVybiAwO1xuMTI2OTpcdH1cbjEyNzA6XHRcbjEyNzE6XHRzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4xMjcyOlx0e1xuMTI3MzpcdFx0aW50IGVycjtcbjEyNzQ6XHRcbjEyNzU6XHRcdGRzdC1cdTAwM2VyZXNldF9pbnRlcnZhbCA9IHNyYy1cdTAwM2VyZXNldF9pbnRlcnZhbDtcbjEyNzY6XHRcdGRzdC1cdTAwM2VtcyA9IHNyYy1cdTAwM2VtcztcbjEyNzc6XHRcdGRzdC1cdTAwM2VzeiA9IHNyYy1cdTAwM2VzejtcbjEyNzg6XHRcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XG4xMjc5Olx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlOgoKKipGaW5kaW5nIHRoZSBTb3VyY2U6IEEgVHJhY2Ugb2YgYGRhbW9zX2NvbW1pdF9xdW90YWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGRhdGEgb3IgZXhlY3V0aW9uIHJlbGF0ZWQgdG8gZWl0aGVyIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIG9yIGBkYW1vc19jb21taXRfcXVvdGFgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHBpdm90YWwgaW4gdGhpcyBzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgaW52b2tlZC4gVGhlIGJlc3Qgd2F5IHRvIHN0YXJ0IGlzIHdpdGggYSBjb21wcmVoZW5zaXZlIHNlYXJjaC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZWJhc2UgZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGVzZSBpZGVudGlmaWVycy4gVGhpcyBzZWFyY2ggd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCBhbmQgdXRpbGl6ZXMgdGhlc2UgcXVvdGEtcmVsYXRlZCBlbGVtZW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gY29uc3RydWN0IGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBkZXNpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19jb21taXRfcXVvdGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTQ9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTU6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwOTYtXG4tLVxubW0vZGFtb24vY29yZS5jPTExNzc9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE4OS1cbm1tL2RhbW9uL2NvcmUuYzoxMTkwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExOTEtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMTMtXG5tbS9kYW1vbi9jb3JlLmM6MTIxNDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTEyMTUtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjItXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG5tbS9kYW1vbi9jb3JlLmM6MTIyMzpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjI0LVx0cmV0dXJuIDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjctLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTIyODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTEyMjktICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMzgtICovXG5tbS9kYW1vbi9jb3JlLmM6MTIzOTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjQwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cdFx0aWYgKHNyY19nb2FsKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTI0NzpcdFx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNDgtXHRcdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI2MC1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxMjYxOlx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNjItXHRcdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI3MC1cbm1tL2RhbW9uL2NvcmUuYzoxMjcxOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjcyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI3Ny1cdGRzdC1cdTAwM2VzeiA9IHNyYy1cdTAwM2Vzejtcbm1tL2RhbW9uL2NvcmUuYzoxMjc4Olx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjc5LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTUzNT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdChzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1NDItXG5tbS9kYW1vbi9jb3JlLmM6MTU0MzpcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YShcdTAwMjZkc3QtXHUwMDNlcXVvdGEsIFx1MDAyNnNyYy1cdTAwM2VxdW90YSk7XG5tbS9kYW1vbi9jb3JlLmMtMTU0NC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjItXHRcdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTIzOlx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZxdW90YSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyNC1cdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgwND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwNy17XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODA4Olx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwOS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODkyPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwNy1cdFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2Fscyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDg6XHRcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwOS1cdFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyMC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MjE6XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2ZHN0LCBcdTAwMjZzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyMi1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9OTgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAwOC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDA5Olx0ZGFtb3NfY29tbWl0X3F1b3RhKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZGFtb3NfY29tbWl0YCBhbmQgU3lzZnMgSW50ZXJmYWNlIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gYGRhbW9zX2NvbW1pdGAgYW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2VzLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gZm9sbG93IHRoZSBjYWxsIHN0YWNrLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGBkYW1vc19jb21taXRgIGlzIGJlaW5nIGludm9rZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBjcml0aWNhbCBwYXRoIG9wZXJhdGlvbj8gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50PyBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyBpdHMgaW1wbGljYXRpb25zLgoKVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IHRoZSBzeXNmcyBpbnRlcmFjdGlvbnMgc3Vycm91bmRpbmcgYGRhbW9zX2NvbW1pdGAuIEFyZSB3ZSByZWFkaW5nLCB3cml0aW5nLCBvciBib3RoPyBXaGF0IGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGFjY2Vzc2VkPyBJcyBpdCBzaW1wbGUgc3RhdHVzIHJlcG9ydGluZywgb3IgYXJlIHdlIGNvbmZpZ3VyaW5nIHBhcmFtZXRlcnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gc3lzdGVtIGZ1bmN0aW9uPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIGJlaW5nIG1vdmVkIGFuZCB3aGF0IGNvbnRyb2wgcGxhbmUgdGhlc2UgY2FsbHMgcmVwcmVzZW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciByZWxpYWJpbGl0eS4gSSB3YW50IHRvIG1hcCB0aGUgZGF0YSBmbG93IGFuZCB1bmRlcnN0YW5kIGhvdyBkYXRhIGFuZCBjb21tYW5kcyB0cmFuc2xhdGUgYWNyb3NzIHRoZSB0d28gaW50ZXJmYWNlcy4gQW55IGNoYW5jZSBvZiBhbiBleHBsb2l0PwoKSeKAmW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvciBhdCB0aGlzIGludGVyZmFjZSBsYXllci4gV2hhdCBlcnJvciBoYW5kbGluZyBpcyBwcmVzZW50PyBJcyBpdCByb2J1c3QgdG8gaW52YWxpZCBpbnB1dD8gQ291bGQgdGhpcyBiZSBhIHZlY3RvciBmb3IgZGVuaWFsLW9mLXNlcnZpY2UsIG9yIGV2ZW4gc29tZXRoaW5nIG1vcmUgbWFsaWNpb3VzPyBUaGF04oCZcyB3aGVyZSBJ4oCZbGwgc3RhcnQgZGlnZ2luZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExNzc9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE4OS1cbm1tL2RhbW9uL2NvcmUuYzoxMTkwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExOTEtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMTMtXG5tbS9kYW1vbi9jb3JlLmM6MTIxNDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTEyMTUtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjItXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG5tbS9kYW1vbi9jb3JlLmM6MTIyMzpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjI0LVx0cmV0dXJuIDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjctLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTIyODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTEyMjktICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMzgtICovXG5tbS9kYW1vbi9jb3JlLmM6MTIzOTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjQwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cdFx0aWYgKHNyY19nb2FsKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTI0NzpcdFx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNDgtXHRcdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI2MC1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxMjYxOlx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNjItXHRcdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI3MC1cbm1tL2RhbW9uL2NvcmUuYzoxMjcxOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjcyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI3Ny1cdGRzdC1cdTAwM2VzeiA9IHNyYy1cdTAwM2Vzejtcbm1tL2RhbW9uL2NvcmUuYzoxMjc4Olx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjc5LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTMwMj1zdGF0aWMgc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbnRoX29wc19maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTMxMy1cbm1tL2RhbW9uL2NvcmUuYzoxMzE0OnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKFxubW0vZGFtb24vY29yZS5jLTEzMTUtXHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzM0LVxubW0vZGFtb24vY29yZS5jOjEzMzU6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcihcbm1tL2RhbW9uL2NvcmUuYy0xMzM2LVx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vc19maWx0ZXIgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM0MC1cdGRzdC1cdTAwM2VhbGxvdyA9IHNyYy1cdTAwM2VhbGxvdztcbm1tL2RhbW9uL2NvcmUuYzoxMzQxOlx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEzNDItfVxubW0vZGFtb24vY29yZS5jLTEzNDMtXG5tbS9kYW1vbi9jb3JlLmM6MTM0NDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9jb3JlX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxubW0vZGFtb24vY29yZS5jLTEzNDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzUxLVx0XHRpZiAoc3JjX2ZpbHRlcilcbm1tL2RhbW9uL2NvcmUuYzoxMzUyOlx0XHRcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmMtMTM1My1cdFx0ZWxzZVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzY1LVx0XHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vY29yZS5jOjEzNjY6XHRcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKG5ld19maWx0ZXIsIHNyY19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEzNjctXHRcdGRhbW9zX2FkZF9maWx0ZXIoZHN0LCBuZXdfZmlsdGVyKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM3MS1cbm1tL2RhbW9uL2NvcmUuYzoxMzcyOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMzczLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM3OS1cdFx0aWYgKHNyY19maWx0ZXIpXG5tbS9kYW1vbi9jb3JlLmM6MTM4MDpcdFx0XHRkYW1vc19jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEzODEtXHRcdGVsc2Vcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM5My1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxMzk0Olx0XHRkYW1vc19jb21taXRfZmlsdGVyX2FyZyhuZXdfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xMzk1LVx0XHRkYW1vc19hZGRfZmlsdGVyKGRzdCwgbmV3X2ZpbHRlcik7XG4tLVxubW0vZGFtb24vY29yZS5jPTE0MjY9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ2MS0vKlxubW0vZGFtb24vY29yZS5jOjE0NjI6ICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuXG5tbS9kYW1vbi9jb3JlLmMtMTQ2My0gKiBAZHN0Olx0RGVzdGluYXRpb24gc3RydWN0dXJlIHRvIHVwZGF0ZS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ3Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxNDc4OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2Rlc3RzKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkc3QsXG5tbS9kYW1vbi9jb3JlLmMtMTQ3OS1cdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTUwOC1cbm1tL2RhbW9uL2NvcmUuYzoxNTA5OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE1MTAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTEyLVxubW0vZGFtb24vY29yZS5jOjE1MTM6XHRlcnIgPSBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xNTE0LVx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xNTE1LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vY29yZS5jOjE1MTY6XHRlcnIgPSBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE1MTctXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTIzPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX250aF9zY2hlbWUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTUzNC1cbm1tL2RhbW9uL2NvcmUuYzoxNTM1OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNTM2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU0Mi1cbm1tL2RhbW9uL2NvcmUuYzoxNTQzOlx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhKFx1MDAyNmRzdC1cdTAwM2VxdW90YSwgXHUwMDI2c3JjLVx1MDAzZXF1b3RhKTtcbm1tL2RhbW9uL2NvcmUuYy0xNTQ0LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU0OS1cbm1tL2RhbW9uL2NvcmUuYzoxNTUwOlx0ZXJyID0gZGFtb3NfY29tbWl0X2Rlc3RzKFx1MDAyNmRzdC1cdTAwM2VtaWdyYXRlX2Rlc3RzLCBcdTAwMjZzcmMtXHUwMDNlbWlncmF0ZV9kZXN0cyk7XG5tbS9kYW1vbi9jb3JlLmMtMTU1MS1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1NTMtXG5tbS9kYW1vbi9jb3JlLmM6MTU1NDpcdGVyciA9IGRhbW9zX2NvbW1pdF9maWx0ZXJzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xNTU1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTU2Mj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTY5LVx0XHRpZiAoc3JjX3NjaGVtZSkge1xubW0vZGFtb24vY29yZS5jOjE1NzA6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0KGRzdF9zY2hlbWUsIHNyY19zY2hlbWUpO1xubW0vZGFtb24vY29yZS5jLTE1NzEtXHRcdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU4Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxNTg4Olx0XHRlcnIgPSBkYW1vc19jb21taXQobmV3X3NjaGVtZSwgc3JjX3NjaGVtZSk7XG5tbS9kYW1vbi9jb3JlLmMtMTU4OS1cdFx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk4PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTIyLVx0XHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkyMzpcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgXHUwMDI2cXVvdGEpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjQtXHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnF1b3RhKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDcte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwODpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDktXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDctXHRcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTA4Olx0XHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDktXHRcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjAtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTIxOlx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjItXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk4MT1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMDgtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTAwOTpcdGRhbW9zX2NvbW1pdF9xdW90YShcdTAwMjZkc3QsIFx1MDAyNnNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAxMC1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA1Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDcxLVx0fVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwNzI6XHRlcnIgPSBkYW1vc19jb21taXRfZGVzdHMoXHUwMDI2ZHN0LCBcdTAwMjZzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNzMtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTE4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTIwLXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTIxOlx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyMi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldHlwZSwgc3JjLVx1MDAzZXR5cGUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMjEwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHN0cnVjdCBkYW1vcyAqZHN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjE3LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEyMTg6XHRlcnIgPSBkYW1vc19jb21taXQoZHN0LCBzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMTktXHRpZiAoZXJyKVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEyMjA6XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZGFtb3NfY29tbWl0IGZhaWxcJiMzNDspO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTM4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGBkYW1vbl9jb21taXRfc2NoZW1lc2AgYW5kIGBkYW1vbl9jb21taXRfY3R4YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoZXNlIHR3by4gS25vd2luZyB3aGVyZSB0aGV5JiMzOTtyZSBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBEQU1PTiYjMzk7cyBjb21taXR0aW5nIG1lY2hhbmlzbSBpcyBvcmNoZXN0cmF0ZWQgYW5kIHdoYXQgY29udGV4dCBpcyBwYXNzZWQgYXJvdW5kLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSDigJMgYXJlIHRoZXNlIGNhbGxzIHdpdGhpbiBhIHRpZ2h0IGxvb3AsIG9yIHRyaWdnZXJlZCBieSBzb21lIGV4dGVybmFsIGV2ZW50PyBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgc2lnbmlmaWNhbnRseSBhbHRlciB0aGUgZmxvdz8gVGhpcyBpcyBhbGwgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuIFRoZSBnb2FsIGlzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb21taXRtZW50IHBoYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9jb21taXRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1MzU9c3RhdGljIGludCBkYW1vc19jb21taXQoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTYxLVxubW0vZGFtb24vY29yZS5jOjE1NjI6c3RhdGljIGludCBkYW1vbl9jb21taXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNTYzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTU5OD1zdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbnRoX3RhcmdldChpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjE2LSAqL1xubW0vZGFtb24vY29yZS5jOjE2MTc6c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxubW0vZGFtb24vY29yZS5jLTE2MTgtXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnNyYywgdW5zaWduZWQgbG9uZyBzcmNfbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTY1MS1cbm1tL2RhbW9uL2NvcmUuYzoxNjUyOnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldChcbm1tL2RhbW9uL2NvcmUuYy0xNjUzLVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsIGJvb2wgZHN0X2hhc19waWQsXG4tLVxubW0vZGFtb24vY29yZS5jLTE2NTgtXG5tbS9kYW1vbi9jb3JlLmM6MTY1OTpcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3QsIHNyYywgc3JjX21pbl9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTE2NjAtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjc1LSAqXG5tbS9kYW1vbi9jb3JlLmM6MTY3NjogKiBSZXZlcnQgdGFyZ2V0IHN0YXRlcyB0aGF0IGNoYW5nZWQgYnkgZGFtb25fY29tbWl0X3RhcmdldCgpLCBhbmQgY2Fubm90IGJlXG5tbS9kYW1vbi9jb3JlLmMtMTY3Ny0gKiBjbGVhbmVkIHVwIGJ5IHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0JiMzOTtzIG9wcy5jbGVhbnVwX3RhcmdldCgpLlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjc5PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE2OTQtXG5tbS9kYW1vbi9jb3JlLmM6MTY5NTpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxubW0vZGFtb24vY29yZS5jLTE2OTYtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzA4LVx0XHRpZiAoc3JjX3RhcmdldCBcdTAwMjZcdTAwMjYgIXNyY190YXJnZXQtXHUwMDNlb2Jzb2xldGUpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNzA5Olx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQoXG5tbS9kYW1vbi9jb3JlLmMtMTcxMC1cdFx0XHRcdFx0ZHN0X3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoZHN0KSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc0My1cdFx0fVxubW0vZGFtb24vY29yZS5jOjE3NDQ6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQobmV3X3RhcmdldCwgZmFsc2UsXG5tbS9kYW1vbi9jb3JlLmMtMTc0NS1cdFx0XHRcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NTktXG5tbS9kYW1vbi9jb3JlLmM6MTc2MDpzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0LCBzdHJ1Y3QgZGFtb25fcHJlcCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE3NjEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzY0LVxubW0vZGFtb24vY29yZS5jOjE3NjU6c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE3NjYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVx0XHRpZiAoc3JjX3ByZXApXG5tbS9kYW1vbi9jb3JlLmM6MTc3MzpcdFx0XHRkYW1vbl9jb21taXRfcHJlcChkc3RfcHJlcCwgc3JjX3ByZXApO1xubW0vZGFtb24vY29yZS5jLTE3NzQtXHRcdGVsc2Vcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc4OS1cbm1tL2RhbW9uL2NvcmUuYzoxNzkwOnN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxubW0vZGFtb24vY29yZS5jLTE3OTEtXHRcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgwNC1cbm1tL2RhbW9uL2NvcmUuYzoxODA1OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG5tbS9kYW1vbi9jb3JlLmMtMTgwNi1cdFx0c3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MTMtXHRcdGlmIChzcmNfZmlsdGVyKVxubW0vZGFtb24vY29yZS5jOjE4MTQ6XHRcdFx0ZGFtb25fY29tbWl0X2ZpbHRlcihkc3RfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xODE1LVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MzgtXG5tbS9kYW1vbi9jb3JlLmM6MTgzOTpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTg0MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NDctXHRcdFx0ZHN0X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmM6MTg0ODpcdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xubW0vZGFtb24vY29yZS5jLTE4NDktXHRcdFx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xODUwLVx0XHRcdFx0cmV0dXJuIGVycjtcbm1tL2RhbW9uL2NvcmUuYzoxODUxOlx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcbm1tL2RhbW9uL2NvcmUuYy0xODUyLVx0XHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NjctXHRcdG5ld19wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xubW0vZGFtb24vY29yZS5jOjE4Njg6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhuZXdfcHJvYmUsIHNyY19wcm9iZSk7XG5tbS9kYW1vbi9jb3JlLmMtMTg2OS1cdFx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xODcwLVx0XHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9jb3JlLmM6MTg3MTpcdFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xubW0vZGFtb24vY29yZS5jLTE4NzItXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NzctXG5tbS9kYW1vbi9jb3JlLmM6MTg3ODpzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xODc5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkwMy1cbm1tL2RhbW9uL2NvcmUuYzoxOTA0Olx0ZXJyID0gZGFtb25fY29tbWl0X3NjaGVtZXMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE5MDUtXHRpZiAoZXJyKVxubW0vZGFtb24vY29yZS5jLTE5MDYtXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9jb3JlLmM6MTkwNzpcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xOTA4LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkyNS1cdGRzdC1cdTAwM2VvcHMgPSBzcmMtXHUwMDNlb3BzO1xubW0vZGFtb24vY29yZS5jOjE5MjY6XHRlcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xOTI3LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkzNj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk0My1cdFx0cmV0dXJuIE5VTEw7XG5tbS9kYW1vbi9jb3JlLmM6MTk0NDpcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcbm1tL2RhbW9uL2NvcmUuYy0xOTQ1LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTUyLS8qKlxubW0vZGFtb24vY29yZS5jOjE5NTM6ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG5tbS9kYW1vbi9jb3JlLmMtMTk1NC0gKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTY0LSAqL1xubW0vZGFtb24vY29yZS5jOjE5NjU6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTk2Ni17XG4tLVxubW0vZGFtb24vY29yZS5jLTE5NzItXHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vY29yZS5jOjE5NzM6XHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTk3NC1cdGlmIChlcnIpXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS1cdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9jb3JlLmM6MTk3NjpcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTk3Ny1vdXQ6XG4tLVxubW0vZGFtb24vY29yZS5jPTIwODU9aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwOTYtXG5tbS9kYW1vbi9jb3JlLmM6MjA5NzpcdFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBjdHhzW2ldKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDk4LVx0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzUtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzozMzY6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzM3LW91dDpcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI2Mi1cdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjYzOlx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjY0LW91dDpcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI0MDE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MTUtXHRcdHJldHVybiBQVFJfRVJSKHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9zeXNmcy5jOjI0MTY6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4LCBwYXJhbV9jdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yNDE3LVx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTMyMD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzM2LVx0fVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEzMzc6XHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMzOC1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTM2Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM2OS17XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTM3MDpcdGRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzNzEtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQyOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ0NC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDQ1Olx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ0Ni1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDg5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MDItXHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUwMzpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNC1cdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTA1Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTA2LVx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk2O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MDctXHRzcmMtXHUwMDNlcGF1c2UgPSB0cnVlO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1MDg6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MDktXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkc3QtXHUwMDNlcGF1c2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBTeXNmcyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgdHJpZ2dlcmVkIHdoZW5ldmVyIHNvbWVvbmUgaW50ZXJhY3RzIHdpdGggREFNT04gdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaGF0IG1ha2VzIGl0IHRoZSBjcml0aWNhbCBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdXNlcnNwYWNlIGNvbnRyb2xzIERBTU9OIHZpYSBzeXNmcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYmFjayB0byBpdHMgcm9vdHMgaW4gdGhlIGNvZGUuCgpNeSBmaXJzdCBwb3J0IG9mIGNhbGwgd2lsbCBiZSBgbW0vZGFtb24vc3lzZnMuY2AgLSB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBsb2NhdGlvbiBmb3IgdGhlIGNvcmUgc3lzZnMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGxpa2VseSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIHRoZXJlLCBhbmQgaG9wZWZ1bGx5IHRoZSBmdW5jdGlvbiB3aGVyZSBpdCBpcyByZWdpc3RlcmVkIHdpdGggc3lzZnMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcmVxdWVzdHMuIEFmdGVyIHRoYXQgSSYjMzk7bGwgbW92ZSBvbiB0byBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBleHBlY3QgdGhpcyB0byBjb250YWluIHRoZSBzcGVjaWZpYyBzY2hlbWVzIHRoYXQgYXJlIGltcGxlbWVudGVkIHdpdGhpbiBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjM5Mj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM5NS0vKlxubW0vZGFtb24vc3lzZnMuYzoyMzk2OiAqIGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCgpIC0gQ29tbWl0IHVzZXIgaW5wdXRzIHRvIGEgcnVubmluZyBrZGFtb25kLlxubW0vZGFtb24vc3lzZnMuYy0yMzk3LSAqIEBrZGFtb25kOlx0VGhlIGtvYmplY3Qgd3JhcHBlciBmb3IgdGhlIGFzc29jaWF0ZWQga2RhbW9uZC5cbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDAtICovXG5tbS9kYW1vbi9zeXNmcy5jOjI0MDE6c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwMi17XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNjMyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNjQ0LVx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmM6MjY0NTpcdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI2NDYtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFF1b3RhIEdvYWwgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyB0cmlnZ2VyZWQuIEl0JiMzOTtzIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvJmx0O25yJmd0Oy9zdGF0ZWAgc3lzZnMgZW50cnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhY3Rpb24uCgpGaXJzdCwgSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgcmVsZXZhbnQgZmlsZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGNoYW5nZXMgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgLiBJIHNlZSB0aGF0IGEgY2hlY2sgaW4gdGhlIGNvZGUgdGhhdCBsaW1pdGVkIHRoZSB2YWx1ZSBvZiBgYWN0aXZlX21lbV9icGAgdG8gYmVsb3cgYDEwMDAwYCBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFzIGl0IGNoYW5nZXMgdGhlIHBlcm1pc3NpYmxlIHZhbHVlcy4KCk5leHQsIEkmIzM5O20gZXhhbWluaW5nIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCwgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLiBJIHNlZSB0aGF0IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgbm93IGNoZWNrcyBgc3JjLSZndDt0YXJnZXRfdmFsdWVgIGZvciBhIG5vbi16ZXJvIHZhbHVlLCBhbmQgcmV0dXJucyBgLUVJTlZBTGAgaWYgemVybywgdG8gcHJldmVudCBjb21taXQuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uLiBGdXJ0aGVyLCB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIGFyZSB1c2VkIGluIHRoZSBwYXJlbnQgZnVuY3Rpb24gbm93LCB3aGljaCBlbnN1cmVzIGVycm9yIHJlcG9ydGluZy4KCkkmIzM5O2xsIGNoZWNrIGZvciBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucywgb3Igb3RoZXIgc3lzZnMgaW50ZXJhY3Rpb25zIHRoYXQgYXJlIGltcG9ydGFudCB0byBEQU1PTi4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBEQU1PTiBvYnZpb3VzbHkgcmVxdWlyZXMgYENPTkZJR19EQU1PTmAsIGJ1dCBhbHNvIEkgc2VlIGl0IG5lZWRzIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9SRUNMQUlNYC4KCkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19xdW90YV9nb2FsYCBhbmQgdGhlaXIgdXNhZ2UgYWNyb3NzIGFsbCBmaWxlcyBpbiBgbW0vZGFtb24vYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldyBmdW5jdGlvbnMgYWZmZWN0IHRoZSBvdmVyYWxsIERBTU9OIGJlaGF2aW9yLiBUaGlzIHdpbGwgcHJvdmlkZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19uZXdfcXVvdGFfZ29hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz02ODI9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02ODctXG5tbS9kYW1vbi9jb3JlLmM6Njg4OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy02ODktXHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMjM5PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjU2LVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjEyNTc6XHRcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtMTI1OC1cdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzUtXHRcdHJldHVybiAwO1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzY6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cdGlmICghZ29hbClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0MC1cdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQxOlx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVx0XHRcdDEwMDAwIC0gYWN0aXZlX21lbV9icCAmIzQzOyAyKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVx0XHRcdFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ0Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTI0NS1cdFx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjU6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChzeXNmc19nb2FsLVx1MDAzZW1ldHJpYyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY2LVx0XHRcdFx0c3lzZnNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTEwLVx0XHQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MTE6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkxMi1cdFx0XHRcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk3MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDcwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIElzc3VlcyBpbiBEQU1PTiBRdW90YSBDb21taXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIG5vdyB2YWxpZGF0ZXMgdGhlIHRhcmdldCB2YWx1ZSB3aXRoIGBpZiAoIXNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlKSByZXR1cm4gLUVJTlZBTDtgLiAgR29vZCwgdGhhdCYjMzk7cyBhIHNhbml0eSBjaGVjay4gIEl0IGxvb2tzIGxpa2UgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgcHJvcGFnYXRlcyBlcnJvcnMgZnJvbSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGFuZCBoYW5kbGVzIHRoZSBjbGVhbnVwIG9mIG5ld2x5IGFsbG9jYXRlZCBnb2FscyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KClRoZSB0aGluZyB0aGF0JiMzOTtzIGJ1Z2dpbmcgbWUgaXMgYSBwb3NzaWJsZSBwYXJ0aWFsIGNvbW1pdCBvciBtZW1vcnkgbGVhayBpc3N1ZSB3aXRoaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUgKDEyNDQtMTI2OCkuIEkgc2VlIHRoZSBuZXN0ZWQgbG9vcHMgdGhlcmUgd2hpY2ggaXRlcmF0ZSB0aHJvdWdoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcXVvdGFzLiBJZiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBlbmNvdW50ZXJzIGFuIGVycm9yIHBhcnR3YXkgdGhyb3VnaCBlaXRoZXIgb2YgdGhvc2UgbG9vcHMsIHRoZSBgZHN0YCBxdW90YSBjb3VsZCBlbmQgdXAgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIOKAkyBzb21lIGdvYWxzIG1pZ2h0IGJlIG1vZGlmaWVkIG9yIGRlc3Ryb3llZCwgb3IgcGFydGlhbGx5IHVwZGF0ZWQuIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGZvbGxvdyB0aGUgZmxvdy4KCldoYXQmIzM5O3MgcmVhbGx5IGNvbmNlcm5pbmcgaXMgdGhhdCBjYWxsZXJzLCBzdWNoIGFzIGBkYW1vbl9jb21taXRfY3R4YCwgdXNlIGEgdGVtcG9yYXJ5IGB0ZXN0X2N0eGAgdG8gdGVzdCBjb21taXRzLiAgVGhhdCBoZWxwcywgYnV0IGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBkaXJlY3RseSBjYWxscyBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBvbiBgc2NoZW1lLSZndDtxdW90YWAuIFNvLCBpZiBhbiBlcnJvciBoYXBwZW5zIGR1cmluZyB0aGUgcXVvdGEgY29tbWl0IHdpdGhpbiB0aGUgc3lzZnMgcGF0aCwgdGhlIGBzY2hlbWUtJmd0O3F1b3RhYCBjYW4gYmVjb21lIGNvcnJ1cHRlZC4gVGhhdCYjMzk7cyBhIGRpcmVjdCBwb3RlbnRpYWwgc291cmNlIG9mIGRhdGEgY29ycnVwdGlvbi4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVycm9ycyBhcmUgaGFuZGxlZCB0aGVyZSBhbmQgaWYgdGhlIHBvdGVudGlhbCBmb3IgdGhpcyBpbmNvbnNpc3RlbnQgc3RhdGUgaXMgYWRkcmVzc2VkIGF0IGFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4OTg6XHRpbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbjI4OTk6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuMjkwMDpcdHtcbjI5MDE6XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuMjkwMjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge307XG4yOTAzOlx0XHRpbnQgaSA9IDA7XG4yOTA0Olx0XG4yOTA1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZxdW90YS5nb2Fscyk7XG4yOTA2Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcbjI5MDc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xuMjkwODpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZywgKmdfbmV4dDtcbjI5MDk6XHRcdFx0aW50IGVycjtcbjI5MTA6XHRcbjI5MTE6XHRcdFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cbjI5MTI6XHRcdFx0aWYgKGkgXHUwMDNlPSBzeXNmc19zY2hlbWVzLVx1MDAzZW5yKVxuMjkxMzpcdFx0XHRcdGJyZWFrO1xuMjkxNDpcdFxuMjkxNTpcdFx0XHRzeXNmc19zY2hlbWUgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldO1xuMjkxNjpcdFx0XHRlcnIgPSBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoc3lzZnNfc2NoZW1lLVx1MDAzZXF1b3Rhcy1cdTAwM2Vnb2FscyxcbjI5MTc6XHRcdFx0XHRcdFx1MDAyNnF1b3RhKTtcbjI5MTg6XHRcdFx0aWYgKGVycikge1xuMjkxOTpcdFx0XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnF1b3RhKVxuMjkyMDpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xuMjkyMTpcdFx0XHRcdHJldHVybiBlcnI7XG4yOTIyOlx0XHRcdH1cbjI5MjM6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgXHUwMDI2cXVvdGEpO1xuMjkyNDpcdFx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcdTAwMjZxdW90YSlcbjI5MjU6XHRcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XG4yOTI2Olx0XHRcdGlmIChlcnIpXG4yOTI3Olx0XHRcdFx0cmV0dXJuIGVycjtcbjI5Mjg6XHRcdFx0aSYjNDM7JiM0Mzs7XG4yOTI5Olx0XHR9XG4yOTMwOlx0XHRyZXR1cm4gMDtcbjI5MzE6XHR9XG4yOTMyOlx0XG4yOTMzOlx0dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcbjI5MzQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4yOTM1Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbjI5MzY6XHR7XG4yOTM3Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUsIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFF1b3RhIFNjb3JlcyBhbmQgQ29tbWl0IEludm9jYXRpb24gd2l0aGluIHN5c2ZzKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGBzeXNmc2Agc2NoZW1lcyBmb3IgcXVvdGEgc2NvcmVzIGFuZCBjb21taXQgYXJlIGFjdHVhbGx5ICp1c2VkKi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGNvbnRleHQgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHF1b3RhIHNjb3JlcyB0aHJvdWdoIHRoZSBgc3lzZnNgIGludGVyZmFjZS4gVGhpcyB0cmFjZSB3aWxsIHRlbGwgbWUgbW9yZSBhYm91dCBob3cgcXVvdGFzIGFyZSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTUxPWludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTMtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTg6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5OS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjQyMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNDM0LVx0c3lzZnNfY3R4ID0gc3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF07XG5tbS9kYW1vbi9zeXNmcy5jOjI0MzU6XHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXHUwMDNlc2NoZW1lcywgY3R4KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjQzNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzU2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBHb2FsIENvbW1pdCBNZWNoYW5pc20qKgoKT2theSwgc28gdGhlIGBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc2AgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHdyaXRpbmcgYERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMU2AgdG8gdGhhdCBzcGVjaWZpYyBzeXNmcyBlbnRyeTogYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLyZsdDtuciZndDsvc3RhdGVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBtYXBwaW5ncyBhcmUgY29ycmVjdCwgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBhdCB0aGUgZGVlcGVyIGltcGxpY2F0aW9ucyBvZiB0aGUgY29tbWl0IHByb2Nlc3MuIEtub3dpbmcgdGhlIHNwZWNpZmljIGZpbGUgYW5kIGNvbW1hbmQgYWxzbyBhbGxvd3MgbWUgdG8gcXVpY2tseSBuYXZpZ2F0ZSB0aGUgY29kZWJhc2UgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT05fU1lTRlNfQ01EX0NPTU1JVF9TQ0hFTUVTX1FVT1RBX0dPQUxTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMDc1PWVudW0gZGFtb25fc3lzZnNfY21kIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwODItXHQvKlxubW0vZGFtb24vc3lzZnMuYzoyMDgzOlx0ICogQERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzogQ29tbWl0IHRoZSBxdW90YSBnb2Fsc1xubW0vZGFtb24vc3lzZnMuYy0yMDg0LVx0ICogdG8gREFNT04uXG5tbS9kYW1vbi9zeXNmcy5jLTIwODUtXHQgKi9cbm1tL2RhbW9uL3N5c2ZzLmM6MjA4NjpcdERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUyxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA4Ny1cdC8qXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNjMyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNjQ1LVx0XHRcdFx0ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0LCBrZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmM6MjY0NjpcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NPTU1JVF9TQ0hFTUVTX1FVT1RBX0dPQUxTOlxubW0vZGFtb24vc3lzZnMuYy0yNjQ3LVx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5OTcKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogMTEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogREFNT04gUXVvdGEgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gSXQmIzM5O3MgdG91Y2hpbmcgY29kZSB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMsIHdoaWNoIGlzIGEgYmlnIHdpbi4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgpGaXJzdCwgdGhlIGFjY2Vzc2liaWxpdHkuIFRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgdGhleSBpbXBhY3QgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AuIFRoZXNlIGFyZSAqZGlyZWN0bHkqIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIHVzaW5nIGNvbW1hbmRzIGxpa2UgYGNvbW1pdGAgYW5kIGBjb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc2AuIFRoZSBjaGFuZ2VzIHRvIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhcmUgYWxzbyByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIG9yIHN5c2ZzLiBUaGlzIGlzIGFsbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBzbyBpdCBjaGVja3Mgb3V0LgoKSXMgaXQgd29ydGggZnV6emluZz8gVGhlIGNyaXRlcmlhIHN0YXRlIHRoYXQgbW9kaWZpY2F0aW9ucyB0byByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgYXJlIGF1dG9tYXRpY2FsbHkgd29ydGggZnV6emluZy4gVGhpcyBwYXRjaCAqZGVmaW5pdGVseSogZml0cyB0aGF0IGRlc2NyaXB0aW9uLiBXZSBoYXZlIGNoYW5nZXMgdG8gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCwgd2hpY2ggbm93IHJldHVybnMgYW4gZXJyb3Igd2hlcmUgaXQgcHJldmlvdXNseSBkaWQgbm90aGluZywgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIHdpdGggZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAuIEFkZGl0aW9uYWxseSwgYGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2Fsc2AgaGFkIGEgY2hlY2sgcmVtb3ZlZC4gU28sIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYFRSVUVgLgoKTm93LCBmb3IgaWRlbnRpZnlpbmcgdGhlIGtleSBgRm9jdXNTeW1ib2xzYC4gV2UgbmVlZCB0byBwaW5wb2ludCB0aGUgYWx0ZXJlZCBvciBkaXJlY3QgZW50cnkgcG9pbnRzLiBJJiMzOTt2ZSBjb21waWxlZCBhIGxpc3Q6CgoqICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYAoqICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AKKiAgIGBkYW1vc19jb21taXRfcXVvdGFgCiogICBgZGFtb3NfY29tbWl0YAoqICAgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYAoqICAgYGRhbW9uX2NvbW1pdF9jdHhgCiogICBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YAoqICAgYGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzYAoqICAgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgCiogICBgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzYAoqICAgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgCgpPZiBhbGwgb2YgdGhvc2UsIEkmIzM5O2xsIHNlbGVjdCB0aGUgbW9zdCBzcGVjaWZpYyBvbmVzIHRvIHRoZSBsb2dpYyBiZWluZyBjaGFuZ2VkLCB0aGF0IGFyZW4mIzM5O3QgdWJpcXVpdG91cyB0aHJvdWdob3V0IHRoZSBzeXN0ZW0uIFNvIHRoZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmU6CgoqICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AKKiAgIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAKKiAgIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYAoqICAgYGRhbW9uX2NvbW1pdF9jdHhgCiogICBgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzYAoKTmV4dCwgdGhlIGBFbmFibGVDb25maWdzYC4gV2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIHRoZSByZWxldmFudCBEQU1PTiBmdW5jdGlvbmFsaXR5LiBMb29raW5nIGF0IGBtbS9kYW1vbi9LY29uZmlnYDoKCiogICBgREFNT05gCiogICBgREFNT05fU1lTRlNgIChkZXBlbmRzIG9uIGBEQU1PTiAmYW1wOyZhbXA7IFNZU0ZTYCkKKiAgIGBEQU1PTl9QQUREUmAgKGRlcGVuZHMgb24gYERBTU9OICZhbXA7JmFtcDsgTU1VYCkKKiAgIGBEQU1PTl9WQUREUmAKKiAgIGBEQU1PTl9MUlVfU09SVGAgKGRlcGVuZHMgb24gYERBTU9OX1BBRERSYCkKKiAgIGBEQU1PTl9SRUNMQUlNYCAoZGVwZW5kcyBvbiBgREFNT05fUEFERFJgKQoKQ29uc2lkZXJpbmcgdGhlIGZlYXR1cmVzIG1vZGlmaWVkLCB3ZSBuZWVkIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9MUlVfU09SVGAgZW5hYmxlZCwgYWxvbmcgd2l0aCB0aGUgcmVxdWlyZWQgU1lTRlMgYW5kIE1NVS4KCkZpbmFsbHksIGxldCYjMzk7cyB2ZXJpZnkgZXZlcnl0aGluZzoKCiogICBgV29ydGhGdXp6aW5nYDogYFRSVUVgCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtEQU1PTiYjMzQ7LCAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssICYjMzQ7REFNT05fUEFERFImIzM0OywgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwmIzM0OywgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LCAmIzM0O2RhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyYjMzQ7XWAKKiAgIGBSZWFzb25pbmdgOiBTb2xpZCBhbmQgY2xlYXIuCgpMb29rcyBnb29kIHRvIG1lLiBSZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBEQU1PTiBjb3JlIHF1b3RhIGdvYWwgY29tbWl0IGxvZ2ljIChgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCkgdG8gdmFsaWRhdGUgdGhhdCBgc3JjLVx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQWxsIHN0cnVjdCBmaWVsZHMgbWFuaXB1bGF0ZWQgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgZXhwb3NlZCBvciBwYXNzZWQgYWNyb3NzIHVzZXIva2VybmVsIGJvdW5kYXJpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGFsbG9jYXRpb24vbWVtb3J5IG1hbmFnZW1lbnQgZmFpbHVyZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRpYWdub3N0aWNzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MzVlOTA4OGJlNzQyMWQ1ZjIxNGZlYzljNDEwYzRmMTBmMDc1ZTNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMDoyMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA4NjU1MGM0MTQ2ZjUzLi5mNWU3ZWQ5ZjVlMTU5IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0xMjExLDE0ICYjNDM7MTIxMSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbigKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKAomIzQzO3N0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoCiAJCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpCiB7CiYjNDM7CWlmICghc3JjLSZndDt0YXJnZXRfdmFsdWUpCiYjNDM7CQlyZXR1cm4gIC1FSU5WQUw7CiAJZHN0LSZndDttZXRyaWMgPSBzcmMtJmd0O21ldHJpYzsKIAlkc3QtJmd0O3RhcmdldF92YWx1ZSA9IHNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlOwogCWlmIChkc3QtJmd0O21ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKQogCQlkc3QtJmd0O2N1cnJlbnRfdmFsdWUgPSBzcmMtJmd0O2N1cnJlbnRfdmFsdWU7CiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xMjM2LDE0ICYjNDM7MTIzOSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgKIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKQogewogCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsOwotCWludCBpID0gMCwgaiA9IDA7CiYjNDM7CWludCBpID0gMCwgaiA9IDAsIGVycjsKIAogCWRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShkc3RfZ29hbCwgbmV4dCwgZHN0KSB7CiAJCXNyY19nb2FsID0gZGFtb3NfbnRoX3F1b3RhX2dvYWwoaSYjNDM7JiM0MzssIHNyYyk7Ci0JCWlmIChzcmNfZ29hbCkKLQkJCWRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7Ci0JCWVsc2UKJiM0MzsJCWlmIChzcmNfZ29hbCkgewomIzQzOwkJCWVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0gZWxzZSB7CiAJCQlkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpOwomIzQzOwkJfQogCX0KIAlkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykgewogCQlpZiAoaiYjNDM7JiM0MzsgJmx0OyBpKQpAQCAtMTI1Miw3ICYjNDM7MTI1OCwxMSBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYykKIAkJCQlzcmNfZ29hbC0mZ3Q7bWV0cmljLCBzcmNfZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlKTsKIAkJaWYgKCFuZXdfZ29hbCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpOwomIzQzOwkJZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlkYW1vc19mcmVlX3F1b3RhX2dvYWwobmV3X2dvYWwpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAJCWRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jCmluZGV4IGJkODQ3ODI5YTk5MDcuLjdkZjQ1ZjlhMGIzYWUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuYwpAQCAtMjMzLDggJiM0MzsyMzMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsCiAKIAlpZiAoIWFjdGl2ZV9tZW1fYnApCiAJCXJldHVybiAwOwotCWlmICgxMDAwMCAmbHQ7IGFjdGl2ZV9tZW1fYnApCi0JCXJldHVybiAtRUlOVkFMOwogCWdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTsKIAlpZiAoIWdvYWwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jCmluZGV4IGJlYTQ1Yzg3Y2M5YmUuLjI3ZGM4OGJkZjdhMGUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGFtb24vbXRpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9zYW1wbGVzL2RhbW9uL210aWVyLmMKQEAgLTE2MSw5ICYjNDM7MTYxLDYgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKQogCWlmICghc2NoZW1lKQogCQlnb3RvIGZyZWVfb3V0OwogCWRhbW9uX3NldF9zY2hlbWVzKGN0eCwgJmFtcDtzY2hlbWUsIDEpOwotCS8qIHplcm8gdGFyZ2V0IHZhbHVlIGNhdXNlcyBkaXZpc2lvbiBieSB6ZXJvIGluIGRhbW9zX3F1b3RhX3N0b3JlKCkgKi8KLQlpZiAoIW5vZGUwX21lbV91c2VkX2JwIHx8ICFub2RlMF9tZW1fZnJlZV9icCkKLQkJZ290byBmcmVlX291dDsKIAlxdW90YV9nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoCiAJCQlwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6CiAJCQlEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgREFNT04gcGF0Y2ggYW5kIHNlZSBpZiB3ZSBoYXZlIGFueSBLTVNBTiBjb25jZXJucyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlczogYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgYW5kIGBzYW1wbGVzL2RhbW9uL210aWVyLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEyMTEuIEkgd2FudCB0byB1bmRlcnN0YW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGA6IGl0cyBmdW5jdGlvbiwgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGgsIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIHBhdGggd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgdXNlZC4gSSYjMzk7bGwgbWV0aWN1bG91c2x5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24sIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHJlYWQgb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWdpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGdvYWwgaXMgY29tbWl0dGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDA6XHRcdFx0YnJlYWs7XG4xMjAxOlx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjEyMDI6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxuMTIwMzpcdFx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbjEyMDQ6XHRcdFx0ZHN0LVx1MDAzZW1lbWNnX2lkID0gc3JjLVx1MDAzZW1lbWNnX2lkO1xuMTIwNTpcdFx0XHRicmVhaztcbjEyMDY6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4xMjA3Olx0XHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuMTIwODpcdFx0XHRicmVhaztcbjEyMDk6XHRcdGRlZmF1bHQ6XG4xMjEwOlx0XHRcdGJyZWFrO1xuMTIxMTpcdFx0fVxuMTIxMjpcdH1cbjEyMTM6XHRcbjEyMTQ6XHRzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuMTIxNTpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuMTIxNjpcdHtcbjEyMTc6XHRcdGlmICghc3JjLVx1MDAzZXRhcmdldF92YWx1ZSlcbjEyMTg6XHRcdFx0cmV0dXJuICAtRUlOVkFMO1xuMTIxOTpcdFx0ZHN0LVx1MDAzZW1ldHJpYyA9IHNyYy1cdTAwM2VtZXRyaWM7XG4xMjIwOlx0XHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbjEyMjE6XHRcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4xMjIyOlx0XHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4xMjIzOlx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4xMjI0Olx0XHRyZXR1cm4gMDtcbjEyMjU6XHR9XG4xMjI2Olx0XG4xMjI3Olx0LyoqXG4xMjI4Olx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cbjEyMjk6XHQgKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cbjEyMzA6XHQgKiBAc3JjOlx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT1MgcXVvdGEuXG4xMjMxOlx0ICpcbjEyMzI6XHQgKiBDb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmb3IgcXVvdGEgZ29hbHMgZnJvbSBAc3JjIHRvIEBkc3QuICBVc2Vyc1xuMTIzMzpcdCAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xuMTIzNDpcdCAqIERBTU9OIGNvbnRleHRzLCBpbnN0ZWFkIG9mIG1hbnVhbCBpbi1wbGFjZSB1cGRhdGVzLlxuMTIzNTpcdCAqXG4xMjM2Olx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG4xMjM3Olx0ICogZGFtb25fY2FsbCgpLlxuMTIzODpcdCAqL1xuMTIzOTpcdGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuMTI0MDpcdHtcbjEyNDE6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xuMTI0MjpcdFx0aW50IGkgPSAwLCBqID0gMCwgZXJyO1xuMTI0MzpcdFxuMTI0NDpcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGRzdF9nb2FsLCBuZXh0LCBkc3QpIHtcbjEyNDU6XHRcdFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpJiM0MzsmIzQzOywgc3JjKTtcbjEyNDY6XHRcdFx0aWYgKHNyY19nb2FsKSB7XG4xMjQ3Olx0XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbjEyNDg6XHRcdFx0XHRpZiAoZXJyKVxuMTI0OTpcdFx0XHRcdFx0cmV0dXJuIGVycjtcbjEyNTA6XHRcdFx0fSBlbHNlIHtcbjEyNTE6XHRcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpO1xuMTI1MjpcdFx0XHR9XG4xMjUzOlx0XHR9XG4xMjU0Olx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xuMTI1NTpcdFx0XHRpZiAoaiYjNDM7JiM0MzsgXHUwMDNjIGkpXG4xMjU2Olx0XHRcdFx0Y29udGludWU7XG4xMjU3Olx0XHRcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4xMjU4Olx0XHRcdFx0XHRzcmNfZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4xMjU5Olx0XHRcdGlmICghbmV3X2dvYWwpXG4xMjYwOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMjYxOlx0XHRcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XG4xMjYyOlx0XHRcdGlmIChlcnIpIHtcbjEyNjM6XHRcdFx0XHRkYW1vc19mcmVlX3F1b3RhX2dvYWwobmV3X2dvYWwpO1xuMTI2NDpcdFx0XHRcdHJldHVybiBlcnI7XG4xMjY1Olx0XHRcdH1cbjEyNjY6XHRcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XG4xMjY3Olx0XHR9XG4xMjY4Olx0XHRyZXR1cm4gMDtcbjEyNjk6XHR9XG4xMjcwOlx0XG4xMjcxOlx0c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuMTI3MjpcdHtcbjEyNzM6XHRcdGludCBlcnI7XG4xMjc0Olx0XG4xMjc1Olx0XHRkc3QtXHUwMDNlcmVzZXRfaW50ZXJ2YWwgPSBzcmMtXHUwMDNlcmVzZXRfaW50ZXJ2YWw7XG4xMjc2Olx0XHRkc3QtXHUwMDNlbXMgPSBzcmMtXHUwMDNlbXM7XG4xMjc3Olx0XHRkc3QtXHUwMDNlc3ogPSBzcmMtXHUwMDNlc3o7XG4xMjc4Olx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xuMTI3OTpcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBRdW90YSBNYW5hZ2VtZW50IExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX3F1b3RhX2dvYWxgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgKm5ldyogcXVvdGEgZ29hbCBnZXRzIHNldCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBob3cgdGhhdCB2YWx1ZSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgZm9yIHVzZSBsYXRlciBvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdmFyaWFibGUmIzM5O3MgbGlmZWN5Y2xlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBpcyBpbml0aWFsbHkgZGVmaW5lZC4gVGhlbiwgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIGBkYW1vc19xdW90YV9nb2FsYC4gV2hlcmUgZG9lcyBpdHMgdmFsdWUgb3JpZ2luYXRlPyBJcyBpdCBhIGNvcHkgb2YgYGRhbW9zX25ld19xdW90YV9nb2FsYD8gSXMgdGhlcmUgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIG9yIHRyYW5zZm9ybWF0aW9uIGludm9sdmVkPyBLbm93aW5nIHRoaXMgd2lsbCByZXZlYWwgdGhlIGVudGlyZSBxdW90YSBhc3NpZ25tZW50IG9yIGNhbGN1bGF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0xMDc5PXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZik7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA4MC1cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDgxOnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDgyLVx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NjgyPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjg3LVxubW0vZGFtb24vY29yZS5jOjY4ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtNjg5LVx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIzOT1pbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI1Ni1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzoxMjU3Olx0XHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTEyNTgtXHRcdFx0XHRzcmNfZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM1LVx0XHRyZXR1cm4gMDtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM2Olx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDAtXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MTpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cdFx0XHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgJiM0MzsgMik7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNy1cdFx0XHRcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI0My1cdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXHRcdGlmICghZ29hbClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODY1Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cdTAwM2VtZXRyaWMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cdFx0XHRcdHN5c2ZzX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODkyPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkxMC1cdFx0ICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTExOlx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoZHN0X2dvYWxzW2ldLm1ldHJpYyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MTItXHRcdFx0XHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9Nzg9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xNjMtXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTY0Olx0cXVvdGFfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE2NS1cdFx0XHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgUXVvdGEgR29hbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9zX25ld19xdW90YV9nb2FsYCBmdW5jdGlvbi4gSXQmIzM5O3MgaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc3RhcnQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIGhhbmRsZXMgbmV3IHF1b3RhIGdvYWxzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBtYWluIG1lbW9yeSBtYW5hZ2VtZW50IHBhcnRzLiBXaGF0IGV4YWN0bHkgYXJlIHRoZSBkZXNpZ24gY2hvaWNlcyBoZXJlPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBhdCBwbGF5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBwcm92aWRlcywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgREFNT04gbW9kdWxlcyBhbmQgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgdGhlIERBTU9OIGxpZmVjeWNsZSwgc28gYW55IGJ1Z3MgaW4gdGhpcyBhcmVhIGNvdWxkIGNyZWF0ZSBtYWpvciBpc3N1ZXMgZG93bnN0cmVhbS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdH1cbiA2ODE6XHRcbiA2ODI6XHR2b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4gNjgzOlx0e1xuIDY4NDpcdFx0ZGFtb3NfZGVsX2ZpbHRlcihmKTtcbiA2ODU6XHRcdGRhbW9zX2ZyZWVfZmlsdGVyKGYpO1xuIDY4NjpcdH1cbiA2ODc6XHRcbiA2ODg6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4gNjg5Olx0XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuIDY5MDpcdFx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcbiA2OTE6XHR7XG4gNjkyOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiA2OTM6XHRcbiA2OTQ6XHRcdGdvYWwgPSBrbWFsbG9jX29iaigqZ29hbCk7XG4gNjk1Olx0XHRpZiAoIWdvYWwpXG4gNjk2Olx0XHRcdHJldHVybiBOVUxMO1xuIDY5NzpcdFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWM7XG4gNjk4Olx0XHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbiA2OTk6XHRcdGlmIChtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuIDcwMDpcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcbiA3MDE6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmdvYWwtXHUwMDNlbGlzdCk7XG4gNzAyOlx0XHRyZXR1cm4gZ29hbDtcbiA3MDM6XHR9XG4gNzA0Olx0XG4gNzA1Olx0dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxuIDcwNjpcdHtcbiA3MDc6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Zy1cdTAwM2VsaXN0LCBcdTAwMjZxLVx1MDAzZWdvYWxzKTtcbiA3MDg6XHR9XG4gNzA5Olx0XG4gNzEwOlx0c3RhdGljIHZvaWQgZGFtb3NfZGVsX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG4gNzExOlx0e1xuIDcxMjpcdFx0bGlzdF9kZWwoXHUwMDI2Zy1cdTAwM2VsaXN0KTtcbiA3MTM6XHR9XG4gNzE0Olx0XG4gNzE1Olx0c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxuIDcxNjpcdHtcbiA3MTc6XHRcdGtmcmVlKGcpO1xuIDcxODpcdH1cbiA3MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFF1b3RhIEdvYWwgU3RydWN0dXJlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGJlYXJpbmdzIHN0cmFpZ2h0LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBkZWZpbml0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcywgcGFydGljdWxhcmx5IGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgd2FudCB0byBjaGVjayB0aGUgbGF5b3V0LCB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgbWVtYmVycywgYW5kIGFueSBwYWRkaW5nIG9yIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGluZGl2aWR1YWwgcXVvdGEgZ29hbCBmaWVsZHMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCBncmFzcCBiZWZvcmUgSSBzdGFydCB0aGUgYW5hbHlzaXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGtleSBwYXJhbWV0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTE2MT1lbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk3LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE5ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk5LVx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERBTU9OJiMzOTtzIENvcmUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE5OC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgdXN1YWwgc3RydWN0dXJlIG9mIHRoZXNlIGhlYWRlcnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBvciBwZXJoYXBzIHNvbWUgbWFjcm8gZGVjbGFyYXRpb25zIHRoYXQgZm9ybSB0aGUgYmFja2JvbmUgb2YgdGhlIERhdGEgQWNjZXNzIE1PTml0b3IgKERBTU9OKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBwcm9iYWJseSByZXNpZGUsIHRob3NlIHdoaWNoIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBtb25pdG9yZWQgcmVnaW9ucywgbW9uaXRvcmluZyBjb250ZXh0cywgYW5kIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobXMuIEkmIzM5O20gaG9waW5nIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04gcmVwcmVzZW50cyBhbmQgaGFuZGxlcyB0aGUgbW9uaXRvcmVkIG1lbW9yeSByZWdpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gRnJvbSB0aGVyZSBJJiMzOTtsbCBsaWtlbHkgYnJhbmNoIG91dCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29yZSBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgc3VjaCBhcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdCAqIElmIEBtZXRyaWMgaXMgREFNT1NfUVVPVEFfTk9ERV9NRU1DR197VVNFRCxGUkVFfV9CUCwgQG5pZCBhbmQgQG1lbWNnX2lkXG4gMTk2Olx0ICogcmVwcmVzZW50cyB0aGUgbm9kZSBpZCBhbmQgdGhlIGNncm91cCB0byBhY2NvdW50IHRoZSB1c2VkIG1lbW9yeSBmb3IuXG4gMTk3Olx0ICovXG4gMTk4Olx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuIDE5OTpcdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XG4gMjAwOlx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcbiAyMDE6XHRcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbiAyMDI6XHRcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXG4gMjAzOlx0XHR1bmlvbiB7XG4gMjA0Olx0XHRcdHN0cnVjdCB7XG4gMjA1Olx0XHRcdFx0aW50IG5pZDtcbiAyMDY6XHRcdFx0XHR1NjQgbWVtY2dfaWQ7XG4gMjA3Olx0XHRcdH07XG4gMjA4Olx0LyogcHJpdmF0ZTogKi9cbiAyMDk6XHRcdFx0LyogTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kgKi9cbiAyMTA6XHRcdFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xuIDIxMTpcdFxuIDIxMjpcdFx0fTtcbiAyMTM6XHQvKiBwcml2YXRlOiAqL1xuIDIxNDpcdFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiAyMTU6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiAyMTY6XHR9O1xuIDIxNzpcdFxuIDIxODpcdC8qKlxuIDIxOTpcdCAqIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciAtIEdvYWwtYmFzZWQgcXVvdGEgdHVuaW5nIGxvZ2ljLlxuIDIyMDpcdCAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q6XHRBaW0gbG9uZyB0ZXJtIGNvbnNpc3RlbnQgcXVvdGEuXG4gMjIxOlx0ICogQERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUw6XHRBaW0gemVybyBxdW90YSBhc2FwLlxuIDIyMjpcdCAqL1xuIDIyMzpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG4gMjI0Olx0XHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QsXG4gMjI1Olx0XHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuIDIyNjpcdH07XG4gMjI3Olx0XG4gMjI4Olx0LyoqXG4gMjI5Olx0ICogc3RydWN0IGRhbW9zX3F1b3RhIC0gQ29udHJvbHMgdGhlIGFnZ3Jlc3NpdmVuZXNzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXG4gMjMwOlx0ICogQHJlc2V0X2ludGVydmFsOlx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbiAyMzE6XHQgKiBAbXM6XHRcdFx0TWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuXG4gMjMyOlx0ICogQHN6Olx0XHRcdE1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC5cbiAyMzM6XHQgKiBAZ29hbF90dW5lcjpcdFx0R29hbC1iYXNlZCBAZXN6IHR1bmluZyBhbGdvcml0aG0gdG8gdXNlLlxuIDIzNDpcdCAqIEBlc3o6XHRcdEVmZmVjdGl2ZSBzaXplIHF1b3RhIGluIGJ5dGVzLlxuIDIzNTpcdCAqIEBmYWlsX2NoYXJnZV9udW06XHRGYWlsZWQgcmVnaW9ucyBjaGFyZ2UgcmF0ZSBudW1lcmF0b3IuXG4gMjM2Olx0ICogQGZhaWxfY2hhcmdlX2Rlbm9tOlx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgZGVub21pbmF0b3IuXG4gMjM3Olx0ICpcbiAyMzg6XHQgKiBAd2VpZ2h0X3N6Olx0XHRXZWlnaHQgb2YgdGhlIHJlZ2lvbiYjMzk7cyBzaXplIGZvciBwcmlvcml0aXphdGlvbi5cbiAyMzk6XHQgKiBAd2VpZ2h0X25yX2FjY2Vzc2VzOlx0V2VpZ2h0IG9mIHRoZSByZWdpb24mIzM5O3MgbnJfYWNjZXNzZXMgZm9yIHByaW9yaXRpemF0aW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFF1b3RhIEdvYWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB1cCBlcnJvciBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiBhcm91bmQgREFNT04mIzM5O3MgcXVvdGEgZ29hbCBtYW5hZ2VtZW50LiBGaXJzdCwgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGFuIGBpbnRgIGFuZCBpbmNsdWRlcyBhIGNydWNpYWwgY2hlY2s6IGBpZiAoIXNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlKSByZXR1cm4gLUVJTlZBTDtgLiAgVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBvciBzaW1pbGFyIGlzc3VlIHdoZXJlIGEgemVybyB0YXJnZXQgdmFsdWUgbWlnaHQgaGF2ZSBjYXVzZWQgcHJvYmxlbXMuIFRoZSBwYXRjaCB0aGVuIHByb3BhZ2F0ZXMgdGhpcyByZXR1cm4gdmFsdWUgdXAgdG8gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZXJyb3JzIGZyb20gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCwgaW5jbHVkaW5nIGZyZWVpbmcgYG5ld19nb2FsYCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGl0cyBjb21taXQuCgpOZXh0LCBpbiBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIHRoYXQgc2VlbWluZ2x5IGFyYml0cmFyeSBjaGVjayAoYGlmICgxMDAwMCAmbHQ7IGFjdGl2ZV9tZW1fYnApIHJldHVybiAtRUlOVkFMO2ApIGluIGBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoKWAgaXMgZ29uZS4gVGhpcyBsaWtlbHkgbWVhbnMgdGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgaGFuZGxlZCBlbHNld2hlcmUgYW5kIHRoZSBjaGVjayBpcyByZWR1bmRhbnQgb3Igbm8gbG9uZ2VyIHJlbGV2YW50LgoKRmluYWxseSwgaW4gYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AsIHRoZSBjaGVjayBmb3IgemVybyBgbm9kZTBfbWVtX3VzZWRfYnBgIG9yIGBub2RlMF9tZW1fZnJlZV9icGAgaXMgcmVtb3ZlZC4gVGhpcyBtYWtlcyBzZW5zZTsgc2luY2UgdGFyZ2V0IHZhbHVlIHZhbGlkYXRpb24gaXMgbm93IGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAsIHRoZXNlIGNoZWNrcyBhdCB0aGUgc2FtcGxlIGxldmVsIGFyZSBzdXBlcmZsdW91cy4gVGhpcyBzaW1wbGlmaWNhdGlvbiBpcyBnZW5lcmFsbHkgZ29vZCBjb2RlIGh5Z2llbmUuCgpOb3csIGZvciB0aGUgcmVhbGx5IGNyaXRpY2FsIHBhcnQ6IHNlY3VyaXR5LiAgSSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSB2dWxuZXJhYmlsaXRpZXMuICBJIG5lZWQgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gIFRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGFwcGVhciB0byBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gcHJvYmxlbXMgdGhlcmUuIEkgYWxzbyBzZWUgbm8gaW5kaWNhdGlvbiBvZiBuZXcgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGRhdGEsIGFuZCB0aGF0IGBzcmMtJmd0O3RhcmdldF92YWx1ZWAgY2hlY2sgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBpcyB2ZXJ5IHJlYXNzdXJpbmcuICBUaGUgYG5ld19nb2FsYCBhbGxvY2F0aW9uIGFuZCBzdWJzZXF1ZW50IGZyZWVpbmcgaW4gdGhlIGVycm9yIHBhdGggb2YgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbHNvIGxvb2tzIHNvdW5kIOKAkyBwcmV2ZW50aW5nIHBvdGVudGlhbCBtZW1vcnkgbGVha3MgdGhhdCB3ZXJlIHByZXNlbnQgYmVmb3JlIHRoaXMgcGF0Y2guCgpJIGFsc28gbXVzdCBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgbGVha3Mgd2hlbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCByZXR1cm5zIGVhcmx5LiBJdCBpcyBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIGNoYW5nZXMgaW4gdGhlIGxvZ2ljIGFuZCB0aGUgYWRkZWQgZXJyb3IgaGFuZGxpbmcgZ2l2ZSBtZSBtb3JlIGNvbmZpZGVuY2UuCgpPdmVyYWxsLCB0aGlzIGlzIGEgY2xlYW4gcGF0Y2guIEl0JiMzOTtzIGZvY3VzZWQsIGFkZHJlc3NlcyBhIHJlYWwgcG90ZW50aWFsIGlzc3VlIHdpdGggdmFsaWRhdGlvbiwgYW5kIGlzIGdlbmVyYWxseSB3ZWxsLXN0cnVjdHVyZWQuICBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCByZWFkcyBvciBwb3RlbnRpYWwgbGVha3MsIGFuZCB0aGUgc2ltcGxpZmljYXRpb24gaXMgYSBib251cy4gSXQgbG9va3MgZ29vZCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFdlIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIGNvZGUgcmV2aWV3IGFuZCBtYWtlIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIGNvbXBsZXRlLCBidXQgSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA5ND12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA5NTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA5Ni1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIxND1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjI3LS8qKlxubW0vZGFtb24vY29yZS5jOjEyMjg6ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cbm1tL2RhbW9uL2NvcmUuYy0xMjI5LSAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjM4LSAqL1xubW0vZGFtb24vY29yZS5jOjEyMzk6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTI0MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTEyNzE9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjc3LVx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jOjEyNzg6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEyNzktXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk4PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTIyLVx0XHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkyMzpcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgXHUwMDI2cXVvdGEpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjQtXHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnF1b3RhKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA3LVx0XHQgKiBXaGVuIG5yX3NyY19nb2FscyBpcyBzbWFsbGVyIHRoYW4gZHN0X2dvYWxzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkwODpcdFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgd2lsbCBrZnJlZSgpIHRoZSBkc3QgZ29hbHMuXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA5LVx0XHQgKiBNYWtlIGl0IGtmcmVlKCktYWJsZS5cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIwLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkyMTpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcdTAwMjZkc3QsIFx1MDAyNnNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI0NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN5c2ZzLXNjaGVtZXMuY2AqKgoKT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBpc3N1ZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBjb2RlIGFuZCBzdGFydCB3aXRoIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBNeSBodW5jaCBpcyBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgc2NoZW1lcy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lIDI5MjAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgc2NoZW1lLXNwZWNpZmljIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgb3Igd2hlcmUgYSBjZXJ0YWluIGFjdGlvbiByZWxhdGluZyB0byBtZW1vcnkgbWFuYWdlbWVudCBoYXBwZW5zLiBUaGF0IHNwZWNpZmljIGxpbmUgc2hvdWxkIGhhdmUgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZSBvciBtZW1vcnkgbWFuYWdlbWVudCBwcm9jZWR1cmUgYW5kIEkmIzM5O20gcmVhZHkgdG8gaW52ZXN0aWdhdGUgYW5kIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkwMDpcdHtcbjI5MDE6XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuMjkwMjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge307XG4yOTAzOlx0XHRpbnQgaSA9IDA7XG4yOTA0Olx0XG4yOTA1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZxdW90YS5nb2Fscyk7XG4yOTA2Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcbjI5MDc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xuMjkwODpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZywgKmdfbmV4dDtcbjI5MDk6XHRcdFx0aW50IGVycjtcbjI5MTA6XHRcbjI5MTE6XHRcdFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cbjI5MTI6XHRcdFx0aWYgKGkgXHUwMDNlPSBzeXNmc19zY2hlbWVzLVx1MDAzZW5yKVxuMjkxMzpcdFx0XHRcdGJyZWFrO1xuMjkxNDpcdFxuMjkxNTpcdFx0XHRzeXNmc19zY2hlbWUgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldO1xuMjkxNjpcdFx0XHRlcnIgPSBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoc3lzZnNfc2NoZW1lLVx1MDAzZXF1b3Rhcy1cdTAwM2Vnb2FscyxcbjI5MTc6XHRcdFx0XHRcdFx1MDAyNnF1b3RhKTtcbjI5MTg6XHRcdFx0aWYgKGVycikge1xuMjkxOTpcdFx0XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnF1b3RhKVxuMjkyMDpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xuMjkyMTpcdFx0XHRcdHJldHVybiBlcnI7XG4yOTIyOlx0XHRcdH1cbjI5MjM6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgXHUwMDI2cXVvdGEpO1xuMjkyNDpcdFx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcdTAwMjZxdW90YSlcbjI5MjU6XHRcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XG4yOTI2Olx0XHRcdGlmIChlcnIpXG4yOTI3Olx0XHRcdFx0cmV0dXJuIGVycjtcbjI5Mjg6XHRcdFx0aSYjNDM7JiM0Mzs7XG4yOTI5Olx0XHR9XG4yOTMwOlx0XHRyZXR1cm4gMDtcbjI5MzE6XHR9XG4yOTMyOlx0XG4yOTMzOlx0dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcbjI5MzQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4yOTM1Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbjI5MzY6XHR7XG4yOTM3Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjI5Mzg6XHRcdGludCBzY2hlbWVzX2lkeCA9IDA7XG4yOTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDU4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBEQU1PTiBCb3R0bGVuZWNrKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGRhbW9zX2NvbW1pdF9xdW90YWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBsb2dpYyBhcm91bmQgbGluZSAxMjcwIG1pZ2h0IGJlIHBsYXlpbmcgYSBrZXkgcm9sZSwgbWF5YmUgcmVsYXRlZCB0byBxdW90YSBtYW5hZ2VtZW50IG9yIHNvbWUgYWxsb2NhdGlvbiBkZWNpc2lvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgYmVjYXVzZSB0aGlzIGNvdWxkIGJlIGEgbWFqb3IgY29uc3RyYWludC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGlzIGFyZWEgYW5kIHRoZW4gd29yayBvdXR3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI2NTpcdFx0XHR9XG4xMjY2Olx0XHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xuMTI2NzpcdFx0fVxuMTI2ODpcdFx0cmV0dXJuIDA7XG4xMjY5Olx0fVxuMTI3MDpcdFxuMTI3MTpcdHN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbjEyNzI6XHR7XG4xMjczOlx0XHRpbnQgZXJyO1xuMTI3NDpcdFxuMTI3NTpcdFx0ZHN0LVx1MDAzZXJlc2V0X2ludGVydmFsID0gc3JjLVx1MDAzZXJlc2V0X2ludGVydmFsO1xuMTI3NjpcdFx0ZHN0LVx1MDAzZW1zID0gc3JjLVx1MDAzZW1zO1xuMTI3NzpcdFx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xuMTI3ODpcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcbjEyNzk6XHRcdGlmIChlcnIpXG4xMjgwOlx0XHRcdHJldHVybiBlcnI7XG4xMjgxOlx0XHRkc3QtXHUwMDNlZ29hbF90dW5lciA9IHNyYy1cdTAwM2Vnb2FsX3R1bmVyO1xuMTI4MjpcdFx0ZHN0LVx1MDAzZWZhaWxfY2hhcmdlX251bSA9IHNyYy1cdTAwM2VmYWlsX2NoYXJnZV9udW07XG4xMjgzOlx0XHRkc3QtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20gPSBzcmMtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub207XG4xMjg0Olx0XHRkc3QtXHUwMDNld2VpZ2h0X3N6ID0gc3JjLVx1MDAzZXdlaWdodF9zejtcbjEyODU6XHRcdGRzdC1cdTAwM2V3ZWlnaHRfbnJfYWNjZXNzZXMgPSBzcmMtXHUwMDNld2VpZ2h0X25yX2FjY2Vzc2VzO1xuMTI4NjpcdFx0ZHN0LVx1MDAzZXdlaWdodF9hZ2UgPSBzcmMtXHUwMDNld2VpZ2h0X2FnZTtcbjEyODc6XHRcdHJldHVybiAwO1xuMTI4ODpcdH1cbjEyODk6XHRcbjEyOTA6XHRzdGF0aWMgc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbnRoX2NvcmVfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb3MgKnMpXG4xMjkxOlx0e1xuMTI5MjpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xuMTI5MzpcdFx0aW50IGkgPSAwO1xuMTI5NDpcdFxuMTI5NTpcdFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXIoZmlsdGVyLCBzKSB7XG4xMjk2Olx0XHRcdGlmIChpJiM0MzsmIzQzOyA9PSBuKVxuMTI5NzpcdFx0XHRcdHJldHVybiBmaWx0ZXI7XG4xMjk4Olx0XHR9XG4xMjk5Olx0XHRyZXR1cm4gTlVMTDtcbjEzMDA6XHR9XG4xMzAxOlx0XG4xMzAyOlx0c3RhdGljIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX250aF9vcHNfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb3MgKnMpXG4xMzAzOlx0e1xuMTMwNDpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg0NAoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT1MgUXVvdGEgR29hbCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSBjaGFuZ2VzOiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIG5vdyBjb3JyZWN0bHkgdmFsaWRhdGVzIGAhc3JjLSZndDt0YXJnZXRfdmFsdWVgIGFuZCByZXR1cm5zIGAtRUlOVkFMYC4gU21hcnQgbW92ZS4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgaGFuZGxlcyBlcnJvcnMgZnJvbSB0aGF0IGZ1bmN0aW9uIHByb3Blcmx5IG5vdywgaW5zdGVhZCBvZiBqdXN0IGhvcGluZyBmb3IgdGhlIGJlc3QuIEFuZCB0aGV5JiMzOTt2ZSBjbGVhbmVkIHVwIHJlZHVuZGFudCBjaGVja3MgaW4gYGxydV9zb3J0LmNgIGFuZCBgbXRpZXIuY2AuIEFsbCBzZW5zaWJsZSByZWZhY3RvcmluZy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBzb3J0IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgREFNT04gc3Vic3lzdGVtLCBzbyB3ZSBuZWVkIHRvIGJlIHZpZ2lsYW50IGFib3V0IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciBjcmFzaGVzLgoKTGV0IG1lIHRoaW5r4oCmCgoqICAgQXJlIHdlIGNvcHlpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/IE5vcGUuIEdvb2QuCiogICBBcmUgd2UgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEV2ZXJ5dGhpbmcgbG9va3Mgc291bmQuCiogICBBcmUgd2UgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHM/IFN0aWxsIG5vLgoqICAgTWVtb3J5IG1hbmFnZW1lbnQ/IFN0YW5kYXJkIGRldGVjdG9ycywgS0FTQU4sIGFuZCBLTUVNTEVBSyBzaG91bGQgY2F0Y2ggYW55IGVycm9ycy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBleHBsaWNpdCBLTVNBTiBjcml0ZXJpYSBhZ2FpbiBqdXN0IHRvIGJlIHN1cmU6CgoqICAgS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8gTmVnYXRpdmUuCiogICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCiogICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vdCBoZXJlLgoqICAgQnVmZmVyIGFjY2VzcyB0aGF0IG1pZ2h0IGludm9sdmUgdW5pbml0aWFsaXplZCBieXRlcz8gRG9lc24mIzM5O3QgbG9vayBsaWtlIGl0LgoKSW4gc3VtbWFyeSwgdGhpcyBzZWVtcyB0byBiZSBzdHJpY3RseSBpbnRlcm5hbCB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIERBTU9TIHF1b3RhIGdvYWwgbG9naWMuIFNvbGlkLgoKVGltZSB0byBwcmVwYXJlIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgREFNT04gY29yZSBxdW90YSBnb2FsIGNvbW1pdCBsb2dpYyAoYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2ApIHRvIHZhbGlkYXRlIHRoYXQgYHNyYy1cdTAwM2V0YXJnZXRfdmFsdWVgIGlzIG5vbi16ZXJvLCByZXR1cm5pbmcgYC1FSU5WQUxgIG9uIHplcm8gdmFsdWVzIGFuZCBwcm9wYWdhdGluZyBlcnJvciBjb2RlcyBwcm9wZXJseSAoaW5jbHVkaW5nIGZyZWVpbmcgbmV3bHkgYWxsb2NhdGVkIGdvYWwgb2JqZWN0cyBvbiBmYWlsdXJlKS4gSXQgYWxzbyByZW1vdmVzIHJlZHVuZGFudCB2YWxpZGF0aW9uIGNoZWNrcyBpbiBgbW0vZGFtb24vbHJ1X3NvcnQuY2AgYW5kIGBzYW1wbGVzL2RhbW9uL210aWVyLmNgLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFsbCBzdHJ1Y3QgZmllbGRzIG1hbmlwdWxhdGVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGV4cG9zZWQgb3IgcGFzc2VkIGFjcm9zcyB1c2VyL2tlcm5lbCBib3VuZGFyaWVzLCBhbmQgYW55IHBvdGVudGlhbCBhbGxvY2F0aW9uL21lbW9yeSBtYW5hZ2VtZW50IGZhaWx1cmVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBEQU1PTiBjb3JlIHF1b3RhIGdvYWwgY29tbWl0IGxvZ2ljIChgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCkgdG8gdmFsaWRhdGUgdGhhdCBgc3JjLVx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQWxsIHN0cnVjdCBmaWVsZHMgbWFuaXB1bGF0ZWQgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgZXhwb3NlZCBvciBwYXNzZWQgYWNyb3NzIHVzZXIva2VybmVsIGJvdW5kYXJpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGFsbG9jYXRpb24vbWVtb3J5IG1hbmFnZW1lbnQgZmFpbHVyZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRpYWdub3N0aWNzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjIyLjMyNjc5NzkyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzY0Mjk4MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiLFxuICAgIFwiZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIERBTU9OIGNvcmUgcXVvdGEgZ29hbCBjb21taXQgbG9naWMgKGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgKSB0byB2YWxpZGF0ZSB0aGF0IGBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbGwgc3RydWN0IGZpZWxkcyBtYW5pcHVsYXRlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIHBhc3NlZCBhY3Jvc3MgdXNlci9rZXJuZWwgYm91bmRhcmllcywgYW5kIGFueSBwb3RlbnRpYWwgYWxsb2NhdGlvbi9tZW1vcnkgbWFuYWdlbWVudCBmYWlsdXJlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgcXVvdGEgZ29hbCBjb21taXQgaGFuZGxpbmcgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgemVybyB0YXJnZXQgdmFsdWVzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKCkgYW5kIHByb3BhZ2F0aW5nIGVycm9ycyBpbiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKS4gSXQgYWxzbyBhbHRlcnMgcGFyYW1ldGVyIGhhbmRsaW5nIGluIG1tL2RhbW9uL2xydV9zb3J0LmMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGFuZCBtb2R1bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MjIuMzI2ODAyMDIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDIyMTM5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MzVlOTA4OGJlNzQyMWQ1ZjIxNGZlYzljNDEwYzRmMTBmMDc1ZTNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDA6MjM6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggODY1NTBjNDE0NmY1My4uZjVlN2VkOWY1ZTE1OSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMTIxMSwxNCArMTIxMSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4rc3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4gXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4ge1xcbitcXHRpZiAoIXNyYy1cXHUwMDNldGFyZ2V0X3ZhbHVlKVxcbitcXHRcXHRyZXR1cm4gIC1FSU5WQUw7XFxuIFxcdGRzdC1cXHUwMDNlbWV0cmljID0gc3JjLVxcdTAwM2VtZXRyaWM7XFxuIFxcdGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuIFxcdGlmIChkc3QtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbiBcXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxuIFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xMjM2LDE0ICsxMjM5LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbiBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcXG4tXFx0aW50IGkgPSAwLCBqID0gMDtcXG4rXFx0aW50IGkgPSAwLCBqID0gMCwgZXJyO1xcbiBcXG4gXFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGRzdF9nb2FsLCBuZXh0LCBkc3QpIHtcXG4gXFx0XFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpKyssIHNyYyk7XFxuLVxcdFxcdGlmIChzcmNfZ29hbClcXG4tXFx0XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcXG4tXFx0XFx0ZWxzZVxcbitcXHRcXHRpZiAoc3JjX2dvYWwpIHtcXG4rXFx0XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShzcmNfZ29hbCwgbmV4dCwgc3JjKSB7XFxuIFxcdFxcdGlmIChqKysgXFx1MDAzYyBpKVxcbkBAIC0xMjUyLDcgKzEyNTgsMTEgQEAgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxuIFxcdFxcdFxcdFxcdHNyY19nb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbiBcXHRcXHRpZiAoIW5ld19nb2FsKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcXG4rXFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkYW1vc19mcmVlX3F1b3RhX2dvYWwobmV3X2dvYWwpO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuIFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbmluZGV4IGJkODQ3ODI5YTk5MDcuLjdkZjQ1ZjlhMGIzYWUgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5AQCAtMjMzLDggKzIzMyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4gXFxuIFxcdGlmICghYWN0aXZlX21lbV9icClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdGlmICgxMDAwMCBcXHUwMDNjIGFjdGl2ZV9tZW1fYnApXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7XFxuIFxcdGlmICghZ29hbClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vbXRpZXIuYyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuY1xcbmluZGV4IGJlYTQ1Yzg3Y2M5YmUuLjI3ZGM4OGJkZjdhMGUgMTAwNjQ0XFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXFxuKysrIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXFxuQEAgLTE2MSw5ICsxNjEsNiBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXFxuIFxcdGlmICghc2NoZW1lKVxcbiBcXHRcXHRnb3RvIGZyZWVfb3V0O1xcbiBcXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFxcdTAwMjZzY2hlbWUsIDEpO1xcbi1cXHQvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovXFxuLVxcdGlmICghbm9kZTBfbWVtX3VzZWRfYnAgfHwgIW5vZGUwX21lbV9mcmVlX2JwKVxcbi1cXHRcXHRnb3RvIGZyZWVfb3V0O1xcbiBcXHRxdW90YV9nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuIFxcdFxcdFxcdHByb21vdGUgPyBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQIDpcXG4gXFx0XFx0XFx0REFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MjIuNzY5ODY2MjIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDYyMDIwNTUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2Fsc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczNWU5MDg4YmU3NDIxZDVmMjE0ZmVjOWM0MTBjNGYxMGYwNzVlM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAwOjIzOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA4NjU1MGM0MTQ2ZjUzLi5mNWU3ZWQ5ZjVlMTU5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xMjExLDE0ICsxMjExLDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbitzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbitcdGlmICghc3JjLVx1MDAzZXRhcmdldF92YWx1ZSlcbitcdFx0cmV0dXJuICAtRUlOVkFMO1xuIFx0ZHN0LVx1MDAzZW1ldHJpYyA9IHNyYy1cdTAwM2VtZXRyaWM7XG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMTIzNiwxNCArMTIzOSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcbi1cdGludCBpID0gMCwgaiA9IDA7XG4rXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XG4gXG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkrKywgc3JjKTtcbi1cdFx0aWYgKHNyY19nb2FsKVxuLVx0XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XG4tXHRcdGVsc2VcbitcdFx0aWYgKHNyY19nb2FsKSB7XG4rXHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpO1xuK1x0XHR9XG4gXHR9XG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xuIFx0XHRpZiAoaisrIFx1MDAzYyBpKVxuQEAgLTEyNTIsNyArMTI1OCwxMSBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbiBcdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbiBcdFx0aWYgKCFuZXdfZ29hbClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChuZXdfZ29hbCk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuIFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5pbmRleCBiZDg0NzgyOWE5OTA3Li43ZGY0NWY5YTBiM2FlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuQEAgLTIzMyw4ICsyMzMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4gXG4gXHRpZiAoIWFjdGl2ZV9tZW1fYnApXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKDEwMDAwIFx1MDAzYyBhY3RpdmVfbWVtX2JwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbiBcdGlmICghZ29hbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXG5pbmRleCBiZWE0NWM4N2NjOWJlLi4yN2RjODhiZGY3YTBlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXG4rKysgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbkBAIC0xNjEsOSArMTYxLDYgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuIFx0aWYgKCFzY2hlbWUpXG4gXHRcdGdvdG8gZnJlZV9vdXQ7XG4gXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG4tXHQvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovXG4tXHRpZiAoIW5vZGUwX21lbV91c2VkX2JwIHx8ICFub2RlMF9tZW1fZnJlZV9icClcbi1cdFx0Z290byBmcmVlX291dDtcbiBcdHF1b3RhX2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbiBcdFx0XHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XG4gXHRcdFx0REFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjIyLjc2OTg2NzkxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5ODg2MDc0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSDigJMgd2hhdCdzIGJlZW4gbW9kaWZpZWQsIGFuZCB3aGVyZT8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYHJlYWQtZmlsZWAgb3IgZXZlbiBhIGBncmVwcGVyYCBwYXNzLCBqdXN0IHRvIGdldCBhIGJpcmQncy1leWUgdmlldyBvZiB0aGUgY2hhbmdlcyBvciByZWZlciB0byB0aGUgcGF0Y2ggZGV0YWlscy5cblxuQWxyaWdodCwgdGhlIGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIHBhdGNoIGlzIGdvaW5nIHRvIGFmZmVjdCBhIGZldyBrZXkgYXJlYXMgd2l0aGluIERBTU9OLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0J3MgdG91Y2hpbmc6IGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgc2FtcGxlcy9kYW1vbi9tdGllci5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkgZXhwZWN0IGl0IHdpbGwgaW52b2x2ZSBjaGFuZ2VzIHRvIHRoZSBkYW1vbiBjb3JlIGZ1bmN0aW9uYWxpdHksIGxydSBzb3J0IGFuZCB0aGVyZSdzIGEgc2FtcGxlLlxuXG5UaW1lIHRvIGRyaWxsIGRvd24uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgaW5zcGVjdCBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBhbGdvcml0aG1pYyBtb2RpZmljYXRpb25zIG9yIHN0cnVjdHVyYWwgY2hhbmdlcy4gSSBzaG91bGQgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZvciBEQU1PTiB0byB1bmRlcnN0YW5kIGFueSBwb3RlbnRpYWwgYnVpbGQgb3IgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzoyNy43NTg0Nzc5NzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODE1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWc6NjpcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxubW0vZGFtb24vS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZzoxNjpcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTE4LVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjE5OlxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbm1tL2RhbW9uL0tjb25maWc6MjA6XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG5tbS9kYW1vbi9LY29uZmlnLTIxLVxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjI4OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctMjktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTMwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjMxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy0zMi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy00MS1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG5tbS9kYW1vbi9LY29uZmlnOjQyOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTQzLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjQ0OlxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDUtXFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy01MC1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG5tbS9kYW1vbi9LY29uZmlnOjUxOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTUyLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjUzOlxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTQtXFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnOjU3OlxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjU4OlxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNTktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTYwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjYxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTYyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWc6Njk6XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NzA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbm1tL2RhbW9uL0tjb25maWc6NzE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNzItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NzM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG5tbS9kYW1vbi9LY29uZmlnLTc0LVxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNzktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTgwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjgxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctODItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnOjg5OlxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctOTEtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6OTI6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG5tbS9kYW1vbi9LY29uZmlnOjkzOlxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbm1tL2RhbW9uL0tjb25maWctOTQtXFx0ICB0aG9zZS5cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZzoxMDE6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTA0OlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXFxubW0vZGFtb24vS2NvbmZpZy0xMDUtXFx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnOjEwOTpcXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXFxubW0vZGFtb24vS2NvbmZpZzoxMTM6XFx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxcbm1tL2RhbW9uL0tjb25maWctMTE0LVxcdCAgbWV0cmljcy5cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnOjExNzpcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTE4OlxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTE5OlxcdGRlZmF1bHQgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTIwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcXHQgIFdoZXRoZXIgdG8gZW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdC4gIFVzZXJzIGNhbiBkaXNhYmxlIGl0IGluXFxubW0vZGFtb24vS2NvbmZpZy0xMjItXFx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICdlbmFibGVkJyBwYXJhbWV0ZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjI3LjgwNDM2MjY3NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTI3NzgzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFF1b3RhIENvbW1pdCBMb2dpYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIHF1b3RhIGdvYWxzIGFyZSBiZWluZyBjb21taXR0ZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgYXJvdW5kIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBmdW5jdGlvbnMuIEknbSBndWVzc2luZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29tbWl0IHByb2Nlc3MuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBXaGF0J3MgZHJpdmluZyB0aGUgY2FsbCB0byBjb21taXQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBJJ20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIHdoZXJlIHRoaXMgcGllY2UgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MjkuNDk3MTQ3MDAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjAwOlxcdFxcdFxcdGJyZWFrO1xcbjEyMDE6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlA6XFxuMTIwMjpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG4xMjAzOlxcdFxcdFxcdGRzdC1cXHUwMDNlbmlkID0gc3JjLVxcdTAwM2VuaWQ7XFxuMTIwNDpcXHRcXHRcXHRkc3QtXFx1MDAzZW1lbWNnX2lkID0gc3JjLVxcdTAwM2VtZW1jZ19pZDtcXG4xMjA1OlxcdFxcdFxcdGJyZWFrO1xcbjEyMDY6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcXG4xMjA3OlxcdFxcdFxcdGRzdC1cXHUwMDNlbmlkID0gc3JjLVxcdTAwM2VuaWQ7XFxuMTIwODpcXHRcXHRcXHRicmVhaztcXG4xMjA5OlxcdFxcdGRlZmF1bHQ6XFxuMTIxMDpcXHRcXHRcXHRicmVhaztcXG4xMjExOlxcdFxcdH1cXG4xMjEyOlxcdH1cXG4xMjEzOlxcdFxcbjEyMTQ6XFx0c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4xMjE1OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuMTIxNjpcXHR7XFxuMTIxNzpcXHRcXHRpZiAoIXNyYy1cXHUwMDNldGFyZ2V0X3ZhbHVlKVxcbjEyMTg6XFx0XFx0XFx0cmV0dXJuICAtRUlOVkFMO1xcbjEyMTk6XFx0XFx0ZHN0LVxcdTAwM2VtZXRyaWMgPSBzcmMtXFx1MDAzZW1ldHJpYztcXG4xMjIwOlxcdFxcdGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuMTIyMTpcXHRcXHRpZiAoZHN0LVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcXG4xMjIyOlxcdFxcdFxcdGRzdC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG4xMjIzOlxcdFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG4xMjI0OlxcdFxcdHJldHVybiAwO1xcbjEyMjU6XFx0fVxcbjEyMjY6XFx0XFxuMTIyNzpcXHQvKipcXG4xMjI4OlxcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxuMTIyOTpcXHQgKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXFxuMTIzMDpcXHQgKiBAc3JjOlxcdFRoZSBjb21taXQgc291cmNlIERBTU9TIHF1b3RhLlxcbjEyMzE6XFx0ICpcXG4xMjMyOlxcdCAqIENvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZvciBxdW90YSBnb2FscyBmcm9tIEBzcmMgdG8gQGRzdC4gIFVzZXJzXFxuMTIzMzpcXHQgKiBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24gZm9yIHF1b3RhIGdvYWxzLWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmdcXG4xMjM0OlxcdCAqIERBTU9OIGNvbnRleHRzLCBpbnN0ZWFkIG9mIG1hbnVhbCBpbi1wbGFjZSB1cGRhdGVzLlxcbjEyMzU6XFx0ICpcXG4xMjM2OlxcdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxcbjEyMzc6XFx0ICogZGFtb25fY2FsbCgpLlxcbjEyMzg6XFx0ICovXFxuMTIzOTpcXHRpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4xMjQwOlxcdHtcXG4xMjQxOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xcbjEyNDI6XFx0XFx0aW50IGkgPSAwLCBqID0gMCwgZXJyO1xcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xcbjEyNDU6XFx0XFx0XFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpKyssIHNyYyk7XFxuMTI0NjpcXHRcXHRcXHRpZiAoc3JjX2dvYWwpIHtcXG4xMjQ3OlxcdFxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XFxuMTI0ODpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjEyNDk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjUwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTI1MTpcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpO1xcbjEyNTI6XFx0XFx0XFx0fVxcbjEyNTM6XFx0XFx0fVxcbjEyNTQ6XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKHNyY19nb2FsLCBuZXh0LCBzcmMpIHtcXG4xMjU1OlxcdFxcdFxcdGlmIChqKysgXFx1MDAzYyBpKVxcbjEyNTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTI1NzpcXHRcXHRcXHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxcbjEyNTg6XFx0XFx0XFx0XFx0XFx0c3JjX2dvYWwtXFx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuMTI1OTpcXHRcXHRcXHRpZiAoIW5ld19nb2FsKVxcbjEyNjA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTI2MTpcXHRcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xcbjEyNjI6XFx0XFx0XFx0aWYgKGVycikge1xcbjEyNjM6XFx0XFx0XFx0XFx0ZGFtb3NfZnJlZV9xdW90YV9nb2FsKG5ld19nb2FsKTtcXG4xMjY0OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTI2NTpcXHRcXHRcXHR9XFxuMTI2NjpcXHRcXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcXG4xMjY3OlxcdFxcdH1cXG4xMjY4OlxcdFxcdHJldHVybiAwO1xcbjEyNjk6XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHRzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxuMTI3MjpcXHR7XFxuMTI3MzpcXHRcXHRpbnQgZXJyO1xcbjEyNzQ6XFx0XFxuMTI3NTpcXHRcXHRkc3QtXFx1MDAzZXJlc2V0X2ludGVydmFsID0gc3JjLVxcdTAwM2VyZXNldF9pbnRlcnZhbDtcXG4xMjc2OlxcdFxcdGRzdC1cXHUwMDNlbXMgPSBzcmMtXFx1MDAzZW1zO1xcbjEyNzc6XFx0XFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxuMTI3ODpcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xcbjEyNzk6XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MjkuNDk3Mzk4MjMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5NzM0NDI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgZGl2aW5nIGludG8gdGhlIGNvZGU6XG5cbioqRmluZGluZyB0aGUgU291cmNlOiBBIFRyYWNlIG9mIGBkYW1vc19jb21taXRfcXVvdGFgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGRhdGEgb3IgZXhlY3V0aW9uIHJlbGF0ZWQgdG8gZWl0aGVyIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIG9yIGBkYW1vc19jb21taXRfcXVvdGFgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHBpdm90YWwgaW4gdGhpcyBzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhleSdyZSBiZWluZyBpbnZva2VkLiBUaGUgYmVzdCB3YXkgdG8gc3RhcnQgaXMgd2l0aCBhIGNvbXByZWhlbnNpdmUgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGViYXNlIGZvciBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlc2UgaWRlbnRpZmllcnMuIFRoaXMgc2VhcmNoIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggYW5kIHV0aWxpemVzIHRoZXNlIHF1b3RhLXJlbGF0ZWQgZWxlbWVudHMuIEZyb20gdGhlcmUsIEkgY2FuIGNvbnN0cnVjdCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHN5c3RlbSBpcyBjdXJyZW50bHkgZGVzaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjMxLjY5NDc0NTM1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5NzE2MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA5ND12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcyk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTU6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExNzc9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTg5LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTkwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTkxLVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIxMy1cXG5tbS9kYW1vbi9jb3JlLmM6MTIxNDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMjE1LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIyMi1cXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vY29yZS5jOjEyMjM6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjI0LVxcdHJldHVybiAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMjctLyoqXFxubW0vZGFtb24vY29yZS5jOjEyMjg6ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cXG5tbS9kYW1vbi9jb3JlLmMtMTIyOS0gKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIzOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTIzOTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTI0MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cXHRcXHRpZiAoc3JjX2dvYWwpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTI0NzpcXHRcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjQ4LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI2MC1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9jb3JlLmM6MTI2MTpcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjYyLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjcwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMjcxOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTI3Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI3Ny1cXHRkc3QtXFx1MDAzZXN6ID0gc3JjLVxcdTAwM2VzejtcXG5tbS9kYW1vbi9jb3JlLmM6MTI3ODpcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjc5LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTUzNT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdChzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU0Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MTU0MzpcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdC1cXHUwMDNlcXVvdGEsIFxcdTAwMjZzcmMtXFx1MDAzZXF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTU0NC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMi1cXHRcXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MjM6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI0LVxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZxdW90YSlcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwNy17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwODpcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwOS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDctXFx0XFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2FscyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTA4OlxcdFxcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDktXFx0XFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIwLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MjE6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjItXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9OTgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDA4LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDA5OlxcdGRhbW9zX2NvbW1pdF9xdW90YShcXHUwMDI2ZHN0LCBcXHUwMDI2c3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MzMuMzM0NDY4ODg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1MDgzNzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGRhbW9zX2NvbW1pdGAgYW5kIFN5c2ZzIEludGVyZmFjZSBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gYGRhbW9zX2NvbW1pdGAgYW5kIGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIHN5c2ZzIGludGVyZmFjZXMuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBmb2xsb3cgdGhlIGNhbGwgc3RhY2suIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aGVyZSogYGRhbW9zX2NvbW1pdGAgaXMgYmVpbmcgaW52b2tlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNyaXRpY2FsIHBhdGggb3BlcmF0aW9uPyBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnQ/IEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIGl0cyBpbXBsaWNhdGlvbnMuXG5cblRoZW4sIEknbGwgbmVlZCB0byBkaXNzZWN0IHRoZSBzeXNmcyBpbnRlcmFjdGlvbnMgc3Vycm91bmRpbmcgYGRhbW9zX2NvbW1pdGAuIEFyZSB3ZSByZWFkaW5nLCB3cml0aW5nLCBvciBib3RoPyBXaGF0IGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGFjY2Vzc2VkPyBJcyBpdCBzaW1wbGUgc3RhdHVzIHJlcG9ydGluZywgb3IgYXJlIHdlIGNvbmZpZ3VyaW5nIHBhcmFtZXRlcnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gc3lzdGVtIGZ1bmN0aW9uPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIGJlaW5nIG1vdmVkIGFuZCB3aGF0IGNvbnRyb2wgcGxhbmUgdGhlc2UgY2FsbHMgcmVwcmVzZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIG9yIHJlbGlhYmlsaXR5LiBJIHdhbnQgdG8gbWFwIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgaG93IGRhdGEgYW5kIGNvbW1hbmRzIHRyYW5zbGF0ZSBhY3Jvc3MgdGhlIHR3byBpbnRlcmZhY2VzLiBBbnkgY2hhbmNlIG9mIGFuIGV4cGxvaXQ/XG5cbknigJltIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgYXQgdGhpcyBpbnRlcmZhY2UgbGF5ZXIuIFdoYXQgZXJyb3IgaGFuZGxpbmcgaXMgcHJlc2VudD8gSXMgaXQgcm9idXN0IHRvIGludmFsaWQgaW5wdXQ/IENvdWxkIHRoaXMgYmUgYSB2ZWN0b3IgZm9yIGRlbmlhbC1vZi1zZXJ2aWNlLCBvciBldmVuIHNvbWV0aGluZyBtb3JlIG1hbGljaW91cz8gVGhhdOKAmXMgd2hlcmUgSeKAmWxsIHN0YXJ0IGRpZ2dpbmcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzozNS44ODUzMDk5ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDg4OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTE3Nz1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX250aF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExODktXFxubW0vZGFtb24vY29yZS5jOjExOTA6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXFxubW0vZGFtb24vY29yZS5jLTExOTEtXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjEzLVxcbm1tL2RhbW9uL2NvcmUuYzoxMjE0OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTEyMTUtXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjIyLVxcdFxcdGRzdC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTIyMzpcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTEyMjQtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIyNy0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTIyODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYy0xMjI5LSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjM4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMjM5OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjQwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjQ2LVxcdFxcdGlmIChzcmNfZ29hbCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxMjQ3OlxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTEyNDgtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjYwLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxMjYxOlxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTEyNjItXFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNzAtXFxubW0vZGFtb24vY29yZS5jOjEyNzE6c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjcyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjc3LVxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzoxMjc4OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTEyNzktXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzAyPXN0YXRpYyBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19udGhfb3BzX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMTMtXFxubW0vZGFtb24vY29yZS5jOjEzMTQ6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXFxubW0vZGFtb24vY29yZS5jLTEzMTUtXFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTMzNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTMzNTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xMzM2LVxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNDAtXFx0ZHN0LVxcdTAwM2VhbGxvdyA9IHNyYy1cXHUwMDNlYWxsb3c7XFxubW0vZGFtb24vY29yZS5jOjEzNDE6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzQyLX1cXG5tbS9kYW1vbi9jb3JlLmMtMTM0My1cXG5tbS9kYW1vbi9jb3JlLmM6MTM0NDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9jb3JlX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzQ1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzUxLVxcdFxcdGlmIChzcmNfZmlsdGVyKVxcbm1tL2RhbW9uL2NvcmUuYzoxMzUyOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzNTMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNjUtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjEzNjY6XFx0XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzNjctXFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNzEtXFxubW0vZGFtb24vY29yZS5jOjEzNzI6c3RhdGljIGludCBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzczLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzc5LVxcdFxcdGlmIChzcmNfZmlsdGVyKVxcbm1tL2RhbW9uL2NvcmUuYzoxMzgwOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzODEtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzOTMtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjEzOTQ6XFx0XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzOTUtXFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE0MjY9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDYxLS8qXFxubW0vZGFtb24vY29yZS5jOjE0NjI6ICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuXFxubW0vZGFtb24vY29yZS5jLTE0NjMtICogQGRzdDpcXHREZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgdG8gdXBkYXRlLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0NzctICovXFxubW0vZGFtb24vY29yZS5jOjE0Nzg6c3RhdGljIGludCBkYW1vc19jb21taXRfZGVzdHMoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKmRzdCxcXG5tbS9kYW1vbi9jb3JlLmMtMTQ3OS1cXHRcXHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1MDgtXFxubW0vZGFtb24vY29yZS5jOjE1MDk6c3RhdGljIGludCBkYW1vc19jb21taXRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE1MTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1MTItXFxubW0vZGFtb24vY29yZS5jOjE1MTM6XFx0ZXJyID0gZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE1MTQtXFx0aWYgKGVycilcXG5tbS9kYW1vbi9jb3JlLmMtMTUxNS1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2NvcmUuYzoxNTE2OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9vcHNfZmlsdGVycyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE1MTctXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTIzPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX250aF9zY2hlbWUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTM0LVxcbm1tL2RhbW9uL2NvcmUuYzoxNTM1OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTUzNi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU0Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MTU0MzpcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdC1cXHUwMDNlcXVvdGEsIFxcdTAwMjZzcmMtXFx1MDAzZXF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTU0NC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1NDktXFxubW0vZGFtb24vY29yZS5jOjE1NTA6XFx0ZXJyID0gZGFtb3NfY29tbWl0X2Rlc3RzKFxcdTAwMjZkc3QtXFx1MDAzZW1pZ3JhdGVfZGVzdHMsIFxcdTAwMjZzcmMtXFx1MDAzZW1pZ3JhdGVfZGVzdHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNTUxLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU1My1cXG5tbS9kYW1vbi9jb3JlLmM6MTU1NDpcXHRlcnIgPSBkYW1vc19jb21taXRfZmlsdGVycyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE1NTUtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTYyPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU2OS1cXHRcXHRpZiAoc3JjX3NjaGVtZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNTcwOlxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdChkc3Rfc2NoZW1lLCBzcmNfc2NoZW1lKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTU3MS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1ODctXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE1ODg6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0KG5ld19zY2hlbWUsIHNyY19zY2hlbWUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNTg5LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk4PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjItXFx0XFx0fVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTIzOlxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YSwgXFx1MDAyNnF1b3RhKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyNC1cXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDcte1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MDg6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDktXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODkyPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA3LVxcdFxcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkwODpcXHRcXHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA5LVxcdFxcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyMC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTIxOlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcXHUwMDI2ZHN0LCBcXHUwMDI2c3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIyLVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk4MT1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAwOC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTAwOTpcXHRkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMTAtXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA1Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNzEtXFx0fVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDcyOlxcdGVyciA9IGRhbW9zX2NvbW1pdF9kZXN0cyhcXHUwMDI2ZHN0LCBcXHUwMDI2c3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTA3My1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTExMTg9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyMC17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExMjE6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjItXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNldHlwZSwgc3JjLVxcdTAwM2V0eXBlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMjEwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHN0cnVjdCBkYW1vcyAqZHN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMTctXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEyMTg6XFx0ZXJyID0gZGFtb3NfY29tbWl0KGRzdCwgc3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIxOS1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMjIwOlxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImRhbW9zX2NvbW1pdCBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjM1LjkzMDQwNjEzN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzc5NTMxODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENhbGwgU2l0ZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgZGFtb25fY29tbWl0X3NjaGVtZXNgIGFuZCBgZGFtb25fY29tbWl0X2N0eGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIGZvciB0aGVzZSB0d28uIEtub3dpbmcgd2hlcmUgdGhleSdyZSBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBEQU1PTidzIGNvbW1pdHRpbmcgbWVjaGFuaXNtIGlzIG9yY2hlc3RyYXRlZCBhbmQgd2hhdCBjb250ZXh0IGlzIHBhc3NlZCBhcm91bmQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUg4oCTIGFyZSB0aGVzZSBjYWxscyB3aXRoaW4gYSB0aWdodCBsb29wLCBvciB0cmlnZ2VyZWQgYnkgc29tZSBleHRlcm5hbCBldmVudD8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IHNpZ25pZmljYW50bHkgYWx0ZXIgdGhlIGZsb3c/IFRoaXMgaXMgYWxsIGNydWNpYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLiBUaGUgZ29hbCBpcyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29tbWl0bWVudCBwaGFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzozOC43MDk5NDE0MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDI4MDE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9jb21taXRfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNTM1PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTYxLVxcbm1tL2RhbW9uL2NvcmUuYzoxNTYyOnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE1NjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1OTg9c3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX250aF90YXJnZXQoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjE2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNjE3OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdCxcXG5tbS9kYW1vbi9jb3JlLmMtMTYxOC1cXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzcmMsIHVuc2lnbmVkIGxvbmcgc3JjX21pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY1MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTY1MjpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXQoXFxubW0vZGFtb24vY29yZS5jLTE2NTMtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LCBib29sIGRzdF9oYXNfcGlkLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2NTgtXFxubW0vZGFtb24vY29yZS5jOjE2NTk6XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKGRzdCwgc3JjLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTE2NjAtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjc1LSAqXFxubW0vZGFtb24vY29yZS5jOjE2NzY6ICogUmV2ZXJ0IHRhcmdldCBzdGF0ZXMgdGhhdCBjaGFuZ2VkIGJ5IGRhbW9uX2NvbW1pdF90YXJnZXQoKSwgYW5kIGNhbm5vdCBiZVxcbm1tL2RhbW9uL2NvcmUuYy0xNjc3LSAqIGNsZWFuZWQgdXAgYnkgdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBvcHMuY2xlYW51cF90YXJnZXQoKS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjc5PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY5NC1cXG5tbS9kYW1vbi9jb3JlLmM6MTY5NTpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbm1tL2RhbW9uL2NvcmUuYy0xNjk2LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3MDgtXFx0XFx0aWYgKHNyY190YXJnZXQgXFx1MDAyNlxcdTAwMjYgIXNyY190YXJnZXQtXFx1MDAzZW9ic29sZXRlKSB7XFxubW0vZGFtb24vY29yZS5jOjE3MDk6XFx0XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChcXG5tbS9kYW1vbi9jb3JlLmMtMTcxMC1cXHRcXHRcXHRcXHRcXHRkc3RfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChkc3QpLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NDMtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoxNzQ0OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQobmV3X3RhcmdldCwgZmFsc2UsXFxubW0vZGFtb24vY29yZS5jLTE3NDUtXFx0XFx0XFx0XFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzU5LVxcbm1tL2RhbW9uL2NvcmUuYzoxNzYwOnN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpkc3QsIHN0cnVjdCBkYW1vbl9wcmVwICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE3NjEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NjQtXFxubW0vZGFtb24vY29yZS5jOjE3NjU6c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNzY2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVxcdFxcdGlmIChzcmNfcHJlcClcXG5tbS9kYW1vbi9jb3JlLmM6MTc3MzpcXHRcXHRcXHRkYW1vbl9jb21taXRfcHJlcChkc3RfcHJlcCwgc3JjX3ByZXApO1xcbm1tL2RhbW9uL2NvcmUuYy0xNzc0LVxcdFxcdGVsc2VcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzg5LVxcbm1tL2RhbW9uL2NvcmUuYzoxNzkwOnN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxcbm1tL2RhbW9uL2NvcmUuYy0xNzkxLVxcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODA0LVxcbm1tL2RhbW9uL2NvcmUuYzoxODA1OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXFxubW0vZGFtb24vY29yZS5jLTE4MDYtXFx0XFx0c3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgxMy1cXHRcXHRpZiAoc3JjX2ZpbHRlcilcXG5tbS9kYW1vbi9jb3JlLmM6MTgxNDpcXHRcXHRcXHRkYW1vbl9jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODE1LVxcdFxcdGVsc2VcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODM4LVxcbm1tL2RhbW9uL2NvcmUuYzoxODM5OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTg0MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg0Ny1cXHRcXHRcXHRkc3RfcHJvYmUtXFx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cXHUwMDNld2VpZ2h0O1xcbm1tL2RhbW9uL2NvcmUuYzoxODQ4OlxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhkc3RfcHJvYmUsIHNyY19wcm9iZSk7XFxubW0vZGFtb24vY29yZS5jLTE4NDktXFx0XFx0XFx0aWYgKGVycilcXG5tbS9kYW1vbi9jb3JlLmMtMTg1MC1cXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2NvcmUuYzoxODUxOlxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg1Mi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NjctXFx0XFx0bmV3X3Byb2JlLVxcdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmM6MTg2ODpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODY5LVxcdFxcdGlmIChlcnIpXFxubW0vZGFtb24vY29yZS5jLTE4NzAtXFx0XFx0XFx0cmV0dXJuIGVycjtcXG5tbS9kYW1vbi9jb3JlLmM6MTg3MTpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfZmlsdGVycyhuZXdfcHJvYmUsIHNyY19wcm9iZSk7XFxubW0vZGFtb24vY29yZS5jLTE4NzItXFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODc3LVxcbm1tL2RhbW9uL2NvcmUuYzoxODc4OnN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xODc5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTAzLVxcbm1tL2RhbW9uL2NvcmUuYzoxOTA0OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTkwNS1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTA2LVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE5MDc6XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xOTA4LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNS1cXHRkc3QtXFx1MDAzZW9wcyA9IHNyYy1cXHUwMDNlb3BzO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTI2OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xOTI3LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkzNj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTQzLVxcdFxcdHJldHVybiBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTQ0OlxcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTk0NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk1Mi0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTk1MzogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cXG5tbS9kYW1vbi9jb3JlLmMtMTk1NC0gKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTY0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTY1OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTY2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTcyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTczOlxcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTk3NC1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc1LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL2NvcmUuYzoxOTc2OlxcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE5Nzctb3V0Olxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwODU9aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MjA5NzpcXHRcXHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMDk4LVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzUtXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozMzY6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzctb3V0Olxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI2Mi1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjYzOlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNjQtb3V0Olxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDAxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MTUtXFx0XFx0cmV0dXJuIFBUUl9FUlIocGFyYW1fY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jOjI0MTY6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNDE3LVxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTMyMD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMzYtXFx0fVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzM3OlxcdGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3RfdGFyZ2V0LCBzcmNfdGFyZ2V0LCAxKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMzOC1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMzY3PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzNjkte1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzcwOlxcdGRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzcxLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXR5cGUsIHNyYy1cXHUwMDNldHlwZSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQyOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQ0LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDQ1OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQ2LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0ODk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTAyLVxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1MDM6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAwKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNC1cXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTA1OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MDYtXFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NjtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNy1cXHRzcmMtXFx1MDAzZXBhdXNlID0gdHJ1ZTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUwODpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTA5LVxcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRzdC1cXHUwMDNlcGF1c2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzozOC44NTQyMjczNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MDE0NTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIFN5c2ZzIEludGVyYWN0aW9uKipcblxuT2theSwgc28gYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIHRyaWdnZXJlZCB3aGVuZXZlciBzb21lb25lIGludGVyYWN0cyB3aXRoIERBTU9OIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCBtYWtlcyBpdCB0aGUgY3JpdGljYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHVzZXJzcGFjZSBjb250cm9scyBEQU1PTiB2aWEgc3lzZnMuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGJhY2sgdG8gaXRzIHJvb3RzIGluIHRoZSBjb2RlLlxuXG5NeSBmaXJzdCBwb3J0IG9mIGNhbGwgd2lsbCBiZSBgbW0vZGFtb24vc3lzZnMuY2AgLSB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBsb2NhdGlvbiBmb3IgdGhlIGNvcmUgc3lzZnMgaW1wbGVtZW50YXRpb24uIEknbGwgbGlrZWx5IGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgdGhlcmUsIGFuZCBob3BlZnVsbHkgdGhlIGZ1bmN0aW9uIHdoZXJlIGl0IGlzIHJlZ2lzdGVyZWQgd2l0aCBzeXNmcywgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCByZXF1ZXN0cy4gQWZ0ZXIgdGhhdCBJJ2xsIG1vdmUgb24gdG8gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEkgZXhwZWN0IHRoaXMgdG8gY29udGFpbiB0aGUgc3BlY2lmaWMgc2NoZW1lcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB3aXRoaW4gREFNT04ncyBzeXNmcyBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODE0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NDAuOTQ0Mzc1NTYyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAxMjk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19jb21taXRfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTUtLypcXG5tbS9kYW1vbi9zeXNmcy5jOjIzOTY6ICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXFxubW0vZGFtb24vc3lzZnMuYy0yMzk3LSAqIEBrZGFtb25kOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDAtICovXFxubW0vZGFtb24vc3lzZnMuYzoyNDAxOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxubW0vZGFtb24vc3lzZnMuYy0yNDAyLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjYzMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNjQ0LVxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjY0NTpcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjY0Ni1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NDAuOTg5MzkxODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA5MjEzNDQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBRdW90YSBHb2FsIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgdHJpZ2dlcmVkLiBJdCdzIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjbnJcdTAwM2Uvc3RhdGVgIHN5c2ZzIGVudHJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYWN0aW9uLlxuXG5GaXJzdCwgSSdsbCBnbyB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcy4gSSdsbCBzdGFydCB3aXRoIHRoZSBjaGFuZ2VzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYC4gSSBzZWUgdGhhdCBhIGNoZWNrIGluIHRoZSBjb2RlIHRoYXQgbGltaXRlZCB0aGUgdmFsdWUgb2YgYGFjdGl2ZV9tZW1fYnBgIHRvIGJlbG93IGAxMDAwMGAgaGFzIGJlZW4gcmVtb3ZlZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBhcyBpdCBjaGFuZ2VzIHRoZSBwZXJtaXNzaWJsZSB2YWx1ZXMuXG5cbk5leHQsIEknbSBleGFtaW5pbmcgYG1tL2RhbW9uL2NvcmUuY2AuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgLCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AuIEkgc2VlIHRoYXQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBub3cgY2hlY2tzIGBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlYCBmb3IgYSBub24temVybyB2YWx1ZSwgYW5kIHJldHVybnMgYC1FSU5WQUxgIGlmIHplcm8sIHRvIHByZXZlbnQgY29tbWl0LiBUaGlzIGlzIGFuIGltcG9ydGFudCBhZGRpdGlvbi4gRnVydGhlciwgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBmdW5jdGlvbiBhcmUgdXNlZCBpbiB0aGUgcGFyZW50IGZ1bmN0aW9uIG5vdywgd2hpY2ggZW5zdXJlcyBlcnJvciByZXBvcnRpbmcuXG5cbkknbGwgY2hlY2sgZm9yIGFueSBzeXprYWxsZXIgZGVzY3JpcHRpb25zLCBvciBvdGhlciBzeXNmcyBpbnRlcmFjdGlvbnMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIERBTU9OLlxuXG5JIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gREFNT04gb2J2aW91c2x5IHJlcXVpcmVzIGBDT05GSUdfREFNT05gLCBidXQgYWxzbyBJIHNlZSBpdCBuZWVkcyBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9MUlVfU09SVGAsIGBDT05GSUdfREFNT05fUEFERFJgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUkVDTEFJTWAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19xdW90YV9nb2FsYCBhbmQgdGhlaXIgdXNhZ2UgYWNyb3NzIGFsbCBmaWxlcyBpbiBgbW0vZGFtb24vYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldyBmdW5jdGlvbnMgYWZmZWN0IHRoZSBvdmVyYWxsIERBTU9OIGJlaGF2aW9yLiBUaGlzIHdpbGwgcHJvdmlkZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NDYuMDgxNTI5MDIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwNzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19uZXdfcXVvdGFfZ29hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NjgyPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02ODctXFxubW0vZGFtb24vY29yZS5jOjY4ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTY4OS1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMjM5PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNTYtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjEyNTc6XFx0XFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTI1OC1cXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM1LVxcdFxcdHJldHVybiAwO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM2OlxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0MC1cXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDE6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cXHRcXHRcXHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgKyAyKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXFx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVxcdFxcdFxcdFxcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVxcdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVxcdFxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjU6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXFx1MDAzZW1ldHJpYyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cXHRcXHRcXHRcXHRzeXNmc19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkxMC1cXHRcXHQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTExOlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MTItXFx0XFx0XFx0XFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjQ2LjEyNjc0MDM0OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODUzODg0NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSXNzdWVzIGluIERBTU9OIFF1b3RhIENvbW1pdHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIG5vdyB2YWxpZGF0ZXMgdGhlIHRhcmdldCB2YWx1ZSB3aXRoIGBpZiAoIXNyYy1cdTAwM2V0YXJnZXRfdmFsdWUpIHJldHVybiAtRUlOVkFMO2AuICBHb29kLCB0aGF0J3MgYSBzYW5pdHkgY2hlY2suICBJdCBsb29rcyBsaWtlIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIHByb3BhZ2F0ZXMgZXJyb3JzIGZyb20gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgaGFuZGxlcyB0aGUgY2xlYW51cCBvZiBuZXdseSBhbGxvY2F0ZWQgZ29hbHMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuXG5cblRoZSB0aGluZyB0aGF0J3MgYnVnZ2luZyBtZSBpcyBhIHBvc3NpYmxlIHBhcnRpYWwgY29tbWl0IG9yIG1lbW9yeSBsZWFrIGlzc3VlIHdpdGhpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYC4gTGV0J3MgemVybyBpbiBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlICgxMjQ0LTEyNjgpLiBJIHNlZSB0aGUgbmVzdGVkIGxvb3BzIHRoZXJlIHdoaWNoIGl0ZXJhdGUgdGhyb3VnaCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHF1b3Rhcy4gSWYgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgZW5jb3VudGVycyBhbiBlcnJvciBwYXJ0d2F5IHRocm91Z2ggZWl0aGVyIG9mIHRob3NlIGxvb3BzLCB0aGUgYGRzdGAgcXVvdGEgY291bGQgZW5kIHVwIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSDigJMgc29tZSBnb2FscyBtaWdodCBiZSBtb2RpZmllZCBvciBkZXN0cm95ZWQsIG9yIHBhcnRpYWxseSB1cGRhdGVkLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBmb2xsb3cgdGhlIGZsb3cuXG5cbldoYXQncyByZWFsbHkgY29uY2VybmluZyBpcyB0aGF0IGNhbGxlcnMsIHN1Y2ggYXMgYGRhbW9uX2NvbW1pdF9jdHhgLCB1c2UgYSB0ZW1wb3JhcnkgYHRlc3RfY3R4YCB0byB0ZXN0IGNvbW1pdHMuICBUaGF0IGhlbHBzLCBidXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGRpcmVjdGx5IGNhbGxzIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIG9uIGBzY2hlbWUtXHUwMDNlcXVvdGFgLiBTbywgaWYgYW4gZXJyb3IgaGFwcGVucyBkdXJpbmcgdGhlIHF1b3RhIGNvbW1pdCB3aXRoaW4gdGhlIHN5c2ZzIHBhdGgsIHRoZSBgc2NoZW1lLVx1MDAzZXF1b3RhYCBjYW4gYmVjb21lIGNvcnJ1cHRlZC4gVGhhdCdzIGEgZGlyZWN0IHBvdGVudGlhbCBzb3VyY2Ugb2YgZGF0YSBjb3JydXB0aW9uLlxuXG5JJ20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVycm9ycyBhcmUgaGFuZGxlZCB0aGVyZSBhbmQgaWYgdGhlIHBvdGVudGlhbCBmb3IgdGhpcyBpbmNvbnNpc3RlbnQgc3RhdGUgaXMgYWRkcmVzc2VkIGF0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NTAuOTgwNjI3NDExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg5OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg5ODpcXHRpbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4yODk5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4yOTAwOlxcdHtcXG4yOTAxOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbjI5MDI6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge307XFxuMjkwMzpcXHRcXHRpbnQgaSA9IDA7XFxuMjkwNDpcXHRcXG4yOTA1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZxdW90YS5nb2Fscyk7XFxuMjkwNjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcXG4yOTA3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZTtcXG4yOTA4OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xcbjI5MDk6XFx0XFx0XFx0aW50IGVycjtcXG4yOTEwOlxcdFxcbjI5MTE6XFx0XFx0XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cXG4yOTEyOlxcdFxcdFxcdGlmIChpIFxcdTAwM2U9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZW5yKVxcbjI5MTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjkxNDpcXHRcXG4yOTE1OlxcdFxcdFxcdHN5c2ZzX3NjaGVtZSA9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZXNjaGVtZXNfYXJyW2ldO1xcbjI5MTY6XFx0XFx0XFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3NjaGVtZS1cXHUwMDNlcXVvdGFzLVxcdTAwM2Vnb2FscyxcXG4yOTE3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZxdW90YSk7XFxuMjkxODpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMjkxOTpcXHRcXHRcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuMjkyMDpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XFxuMjkyMTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI5MjI6XFx0XFx0XFx0fVxcbjI5MjM6XFx0XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbjI5MjQ6XFx0XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXFx1MDAyNnF1b3RhKVxcbjI5MjU6XFx0XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xcbjI5MjY6XFx0XFx0XFx0aWYgKGVycilcXG4yOTI3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjkyODpcXHRcXHRcXHRpKys7XFxuMjkyOTpcXHRcXHR9XFxuMjkzMDpcXHRcXHRyZXR1cm4gMDtcXG4yOTMxOlxcdH1cXG4yOTMyOlxcdFxcbjI5MzM6XFx0dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG4yOTM0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbjI5MzU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjI5MzY6XFx0e1xcbjI5Mzc6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjUwLjk4MDgzMTc4MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTcxNjI5NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgY29kZSwgdGhpbmtpbmcgbGlrZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBRdW90YSBTY29yZXMgYW5kIENvbW1pdCBJbnZvY2F0aW9uIHdpdGhpbiBzeXNmcyoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGBzeXNmc2Agc2NoZW1lcyBmb3IgcXVvdGEgc2NvcmVzIGFuZCBjb21taXQgYXJlIGFjdHVhbGx5ICp1c2VkKi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFRoYXQncyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgY29udGV4dCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgcXVvdGEgc2NvcmVzIHRocm91Z2ggdGhlIGBzeXNmc2AgaW50ZXJmYWNlLiBUaGlzIHRyYWNlIHdpbGwgdGVsbCBtZSBtb3JlIGFib3V0IGhvdyBxdW90YXMgYXJlIG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NTIuOTUyNDY0MjA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkxNTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTUxPWludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5ODppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5OS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI0MjE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNDM0LVxcdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF07XFxubW0vZGFtb24vc3lzZnMuYzoyNDM1OlxcdHJldHVybiBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN5c2ZzX2N0eC1cXHUwMDNlc2NoZW1lcywgY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI0MzYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzo1Mi45OTczODQ4NzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MTY4MzYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBHb2FsIENvbW1pdCBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyB0aGUgYGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgYnkgd3JpdGluZyBgREFNT05fU1lTRlNfQ01EX0NPTU1JVF9TQ0hFTUVTX1FVT1RBX0dPQUxTYCB0byB0aGF0IHNwZWNpZmljIHN5c2ZzIGVudHJ5OiBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjbnJcdTAwM2Uvc3RhdGVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBtYXBwaW5ncyBhcmUgY29ycmVjdCwgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBhdCB0aGUgZGVlcGVyIGltcGxpY2F0aW9ucyBvZiB0aGUgY29tbWl0IHByb2Nlc3MuIEtub3dpbmcgdGhlIHNwZWNpZmljIGZpbGUgYW5kIGNvbW1hbmQgYWxzbyBhbGxvd3MgbWUgdG8gcXVpY2tseSBuYXZpZ2F0ZSB0aGUgY29kZWJhc2UgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzU2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NTQuOTU5MDcyNDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDQ0Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTIwNzU9ZW51bSBkYW1vbl9zeXNmc19jbWQge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDgyLVxcdC8qXFxubW0vZGFtb24vc3lzZnMuYzoyMDgzOlxcdCAqIEBEQU1PTl9TWVNGU19DTURfQ09NTUlUX1NDSEVNRVNfUVVPVEFfR09BTFM6IENvbW1pdCB0aGUgcXVvdGEgZ29hbHNcXG5tbS9kYW1vbi9zeXNmcy5jLTIwODQtXFx0ICogdG8gREFNT04uXFxubW0vZGFtb24vc3lzZnMuYy0yMDg1LVxcdCAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjA4NjpcXHREQU1PTl9TWVNGU19DTURfQ09NTUlUX1NDSEVNRVNfUVVPVEFfR09BTFMsXFxubW0vZGFtb24vc3lzZnMuYy0yMDg3LVxcdC8qXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI2MzI9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjY0NS1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjY0NjpcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5tbS9kYW1vbi9zeXNmcy5jLTI2NDctXFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjU1LjAwNTEyMTQ1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MzA4NzkwNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29kZSB0aGF0J3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgd2hpY2ggaXMgYSBiaWcgd2luLiBMZXQncyBicmVhayBpdCBkb3duOlxuXG5GaXJzdCwgdGhlIGFjY2Vzc2liaWxpdHkuIFRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgdGhleSBpbXBhY3QgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AuIFRoZXNlIGFyZSAqZGlyZWN0bHkqIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIHVzaW5nIGNvbW1hbmRzIGxpa2UgYGNvbW1pdGAgYW5kIGBjb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc2AuIFRoZSBjaGFuZ2VzIHRvIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhcmUgYWxzbyByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIG9yIHN5c2ZzLiBUaGlzIGlzIGFsbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBzbyBpdCBjaGVja3Mgb3V0LlxuXG5JcyBpdCB3b3J0aCBmdXp6aW5nPyBUaGUgY3JpdGVyaWEgc3RhdGUgdGhhdCBtb2RpZmljYXRpb25zIHRvIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyBhcmUgYXV0b21hdGljYWxseSB3b3J0aCBmdXp6aW5nLiBUaGlzIHBhdGNoICpkZWZpbml0ZWx5KiBmaXRzIHRoYXQgZGVzY3JpcHRpb24uIFdlIGhhdmUgY2hhbmdlcyB0byBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgLCB3aGljaCBub3cgcmV0dXJucyBhbiBlcnJvciB3aGVyZSBpdCBwcmV2aW91c2x5IGRpZCBub3RoaW5nLCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2Agd2l0aCBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cC4gQWRkaXRpb25hbGx5LCBgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzYCBoYWQgYSBjaGVjayByZW1vdmVkLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgVFJVRWAuXG5cbk5vdywgZm9yIGlkZW50aWZ5aW5nIHRoZSBrZXkgYEZvY3VzU3ltYm9sc2AuIFdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGFsdGVyZWQgb3IgZGlyZWN0IGVudHJ5IHBvaW50cy4gSSd2ZSBjb21waWxlZCBhIGxpc3Q6XG5cbiogICBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgXG4qICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2BcbiogICBgZGFtb3NfY29tbWl0X3F1b3RhYFxuKiAgIGBkYW1vc19jb21taXRgXG4qICAgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYFxuKiAgIGBkYW1vbl9jb21taXRfY3R4YFxuKiAgIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgXG4qICAgYGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzYFxuKiAgIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYFxuKiAgIGBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHNgXG4qICAgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgXG5cbk9mIGFsbCBvZiB0aG9zZSwgSSdsbCBzZWxlY3QgdGhlIG1vc3Qgc3BlY2lmaWMgb25lcyB0byB0aGUgbG9naWMgYmVpbmcgY2hhbmdlZCwgdGhhdCBhcmVuJ3QgdWJpcXVpdG91cyB0aHJvdWdob3V0IHRoZSBzeXN0ZW0uIFNvIHRoZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmU6XG5cbiogICBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYFxuKiAgIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGBcbiogICBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2BcbiogICBgZGFtb25fY29tbWl0X2N0eGBcbiogICBgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzYFxuXG5OZXh0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBuZWVkIHRvIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBlbmFibGUgdGhlIHJlbGV2YW50IERBTU9OIGZ1bmN0aW9uYWxpdHkuIExvb2tpbmcgYXQgYG1tL2RhbW9uL0tjb25maWdgOlxuXG4qICAgYERBTU9OYFxuKiAgIGBEQU1PTl9TWVNGU2AgKGRlcGVuZHMgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU2ApXG4qICAgYERBTU9OX1BBRERSYCAoZGVwZW5kcyBvbiBgREFNT04gXHUwMDI2XHUwMDI2IE1NVWApXG4qICAgYERBTU9OX1ZBRERSYFxuKiAgIGBEQU1PTl9MUlVfU09SVGAgKGRlcGVuZHMgb24gYERBTU9OX1BBRERSYClcbiogICBgREFNT05fUkVDTEFJTWAgKGRlcGVuZHMgb24gYERBTU9OX1BBRERSYClcblxuQ29uc2lkZXJpbmcgdGhlIGZlYXR1cmVzIG1vZGlmaWVkLCB3ZSBuZWVkIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9MUlVfU09SVGAgZW5hYmxlZCwgYWxvbmcgd2l0aCB0aGUgcmVxdWlyZWQgU1lTRlMgYW5kIE1NVS5cblxuRmluYWxseSwgbGV0J3MgdmVyaWZ5IGV2ZXJ5dGhpbmc6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYFRSVUVgXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiREFNT05cIiwgXCJEQU1PTl9TWVNGU1wiLCBcIkRBTU9OX1BBRERSXCIsIFwiREFNT05fTFJVX1NPUlRcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIiwgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbFwiLCBcImRhbW9uX2NvbW1pdF9jdHhcIiwgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCIsIFwiZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzXCJdYFxuKiAgIGBSZWFzb25pbmdgOiBTb2xpZCBhbmQgY2xlYXIuXG5cbkxvb2tzIGdvb2QgdG8gbWUuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5OTcsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDowMy4zMTM5MTQzMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjE1Mzg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2FsXCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgcXVvdGEgZ29hbCBjb21taXQgaGFuZGxpbmcgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgemVybyB0YXJnZXQgdmFsdWVzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKCkgYW5kIHByb3BhZ2F0aW5nIGVycm9ycyBpbiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKS4gSXQgYWxzbyBhbHRlcnMgcGFyYW1ldGVyIGhhbmRsaW5nIGluIG1tL2RhbW9uL2xydV9zb3J0LmMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGFuZCBtb2R1bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2Fsc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDowMy4zOTAwNzU5NTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzAxMDA3NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MDMuMzkwNjk4MDE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ3MDAzNzkyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgREFNT04gY29yZSBxdW90YSBnb2FsIGNvbW1pdCBsb2dpYyAoYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2ApIHRvIHZhbGlkYXRlIHRoYXQgYHNyYy1cXHUwMDNldGFyZ2V0X3ZhbHVlYCBpcyBub24temVybywgcmV0dXJuaW5nIGAtRUlOVkFMYCBvbiB6ZXJvIHZhbHVlcyBhbmQgcHJvcGFnYXRpbmcgZXJyb3IgY29kZXMgcHJvcGVybHkgKGluY2x1ZGluZyBmcmVlaW5nIG5ld2x5IGFsbG9jYXRlZCBnb2FsIG9iamVjdHMgb24gZmFpbHVyZSkuIEl0IGFsc28gcmVtb3ZlcyByZWR1bmRhbnQgdmFsaWRhdGlvbiBjaGVja3MgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBgc2FtcGxlcy9kYW1vbi9tdGllci5jYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFsbCBzdHJ1Y3QgZmllbGRzIG1hbmlwdWxhdGVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGV4cG9zZWQgb3IgcGFzc2VkIGFjcm9zcyB1c2VyL2tlcm5lbCBib3VuZGFyaWVzLCBhbmQgYW55IHBvdGVudGlhbCBhbGxvY2F0aW9uL21lbW9yeSBtYW5hZ2VtZW50IGZhaWx1cmVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczNWU5MDg4YmU3NDIxZDVmMjE0ZmVjOWM0MTBjNGYxMGYwNzVlM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAwOjIzOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA4NjU1MGM0MTQ2ZjUzLi5mNWU3ZWQ5ZjVlMTU5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xMjExLDE0ICsxMjExLDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbitzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbitcdGlmICghc3JjLVx1MDAzZXRhcmdldF92YWx1ZSlcbitcdFx0cmV0dXJuICAtRUlOVkFMO1xuIFx0ZHN0LVx1MDAzZW1ldHJpYyA9IHNyYy1cdTAwM2VtZXRyaWM7XG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMTIzNiwxNCArMTIzOSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcbi1cdGludCBpID0gMCwgaiA9IDA7XG4rXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XG4gXG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkrKywgc3JjKTtcbi1cdFx0aWYgKHNyY19nb2FsKVxuLVx0XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XG4tXHRcdGVsc2VcbitcdFx0aWYgKHNyY19nb2FsKSB7XG4rXHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpO1xuK1x0XHR9XG4gXHR9XG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xuIFx0XHRpZiAoaisrIFx1MDAzYyBpKVxuQEAgLTEyNTIsNyArMTI1OCwxMSBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbiBcdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbiBcdFx0aWYgKCFuZXdfZ29hbClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChuZXdfZ29hbCk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuIFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5pbmRleCBiZDg0NzgyOWE5OTA3Li43ZGY0NWY5YTBiM2FlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuQEAgLTIzMyw4ICsyMzMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4gXG4gXHRpZiAoIWFjdGl2ZV9tZW1fYnApXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKDEwMDAwIFx1MDAzYyBhY3RpdmVfbWVtX2JwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbiBcdGlmICghZ29hbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXG5pbmRleCBiZWE0NWM4N2NjOWJlLi4yN2RjODhiZGY3YTBlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXG4rKysgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbkBAIC0xNjEsOSArMTYxLDYgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuIFx0aWYgKCFzY2hlbWUpXG4gXHRcdGdvdG8gZnJlZV9vdXQ7XG4gXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG4tXHQvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovXG4tXHRpZiAoIW5vZGUwX21lbV91c2VkX2JwIHx8ICFub2RlMF9tZW1fZnJlZV9icClcbi1cdFx0Z290byBmcmVlX291dDtcbiBcdHF1b3RhX2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbiBcdFx0XHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XG4gXHRcdFx0REFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjAzLjM5MDY5OTY2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjcxNDI2MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgREFNT04gcGF0Y2ggYW5kIHNlZSBpZiB3ZSBoYXZlIGFueSBLTVNBTiBjb25jZXJucyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuIFRoZSBmaXJzdCB0aGluZyBJJ2xsIGRvIGlzIHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZpbGVzOiBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIG15IGluaXRpYWwgZm9jdXMgaXMgb24gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMjExLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgOiBpdHMgZnVuY3Rpb24sIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGl0IGludGVyYWN0cyB3aXRoLCBhbmQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gc2VlIGlmIHRoZXJlJ3MgYSBwb3RlbnRpYWwgcGF0aCB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSB1c2VkLiBJJ2xsIG1ldGljdWxvdXNseSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSByZWFkIG9wZXJhdGlvbnMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVnaW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGdvYWwgaXMgY29tbWl0dGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjA5LjA2MjEyOTM0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0XFx0XFx0YnJlYWs7XFxuMTIwMTpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcXG4xMjAyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxcbjEyMDM6XFx0XFx0XFx0ZHN0LVxcdTAwM2VuaWQgPSBzcmMtXFx1MDAzZW5pZDtcXG4xMjA0OlxcdFxcdFxcdGRzdC1cXHUwMDNlbWVtY2dfaWQgPSBzcmMtXFx1MDAzZW1lbWNnX2lkO1xcbjEyMDU6XFx0XFx0XFx0YnJlYWs7XFxuMTIwNjpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxcbjEyMDc6XFx0XFx0XFx0ZHN0LVxcdTAwM2VuaWQgPSBzcmMtXFx1MDAzZW5pZDtcXG4xMjA4OlxcdFxcdFxcdGJyZWFrO1xcbjEyMDk6XFx0XFx0ZGVmYXVsdDpcXG4xMjEwOlxcdFxcdFxcdGJyZWFrO1xcbjEyMTE6XFx0XFx0fVxcbjEyMTI6XFx0fVxcbjEyMTM6XFx0XFxuMTIxNDpcXHRzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbjEyMTU6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4xMjE2OlxcdHtcXG4xMjE3OlxcdFxcdGlmICghc3JjLVxcdTAwM2V0YXJnZXRfdmFsdWUpXFxuMTIxODpcXHRcXHRcXHRyZXR1cm4gIC1FSU5WQUw7XFxuMTIxOTpcXHRcXHRkc3QtXFx1MDAzZW1ldHJpYyA9IHNyYy1cXHUwMDNlbWV0cmljO1xcbjEyMjA6XFx0XFx0ZHN0LVxcdTAwM2V0YXJnZXRfdmFsdWUgPSBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZTtcXG4xMjIxOlxcdFxcdGlmIChkc3QtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbjEyMjI6XFx0XFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbjEyMjM6XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xcbjEyMjQ6XFx0XFx0cmV0dXJuIDA7XFxuMTIyNTpcXHR9XFxuMTIyNjpcXHRcXG4xMjI3OlxcdC8qKlxcbjEyMjg6XFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cXG4xMjI5OlxcdCAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4xMjMwOlxcdCAqIEBzcmM6XFx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT1MgcXVvdGEuXFxuMTIzMTpcXHQgKlxcbjEyMzI6XFx0ICogQ29waWVzIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlcnMgZm9yIHF1b3RhIGdvYWxzIGZyb20gQHNyYyB0byBAZHN0LiAgVXNlcnNcXG4xMjMzOlxcdCAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xcbjEyMzQ6XFx0ICogREFNT04gY29udGV4dHMsIGluc3RlYWQgb2YgbWFudWFsIGluLXBsYWNlIHVwZGF0ZXMuXFxuMTIzNTpcXHQgKlxcbjEyMzY6XFx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxuMTIzNzpcXHQgKiBkYW1vbl9jYWxsKCkuXFxuMTIzODpcXHQgKi9cXG4xMjM5OlxcdGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbjEyNDA6XFx0e1xcbjEyNDE6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FsLCAqbmV4dCwgKnNyY19nb2FsLCAqbmV3X2dvYWw7XFxuMTI0MjpcXHRcXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XFxuMTI0MzpcXHRcXG4xMjQ0OlxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShkc3RfZ29hbCwgbmV4dCwgZHN0KSB7XFxuMTI0NTpcXHRcXHRcXHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkrKywgc3JjKTtcXG4xMjQ2OlxcdFxcdFxcdGlmIChzcmNfZ29hbCkge1xcbjEyNDc6XFx0XFx0XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcXG4xMjQ4OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTI0OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNTA6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMjUxOlxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChkc3RfZ29hbCk7XFxuMTI1MjpcXHRcXHRcXHR9XFxuMTI1MzpcXHRcXHR9XFxuMTI1NDpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xcbjEyNTU6XFx0XFx0XFx0aWYgKGorKyBcXHUwMDNjIGkpXFxuMTI1NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjU3OlxcdFxcdFxcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuMTI1ODpcXHRcXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4xMjU5OlxcdFxcdFxcdGlmICghbmV3X2dvYWwpXFxuMTI2MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMjYxOlxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XFxuMTI2MjpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMTI2MzpcXHRcXHRcXHRcXHRkYW1vc19mcmVlX3F1b3RhX2dvYWwobmV3X2dvYWwpO1xcbjEyNjQ6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjY1OlxcdFxcdFxcdH1cXG4xMjY2OlxcdFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xcbjEyNjc6XFx0XFx0fVxcbjEyNjg6XFx0XFx0cmV0dXJuIDA7XFxuMTI2OTpcXHR9XFxuMTI3MDpcXHRcXG4xMjcxOlxcdHN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4xMjcyOlxcdHtcXG4xMjczOlxcdFxcdGludCBlcnI7XFxuMTI3NDpcXHRcXG4xMjc1OlxcdFxcdGRzdC1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwgPSBzcmMtXFx1MDAzZXJlc2V0X2ludGVydmFsO1xcbjEyNzY6XFx0XFx0ZHN0LVxcdTAwM2VtcyA9IHNyYy1cXHUwMDNlbXM7XFxuMTI3NzpcXHRcXHRkc3QtXFx1MDAzZXN6ID0gc3JjLVxcdTAwM2VzejtcXG4xMjc4OlxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxuMTI3OTpcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDowOS4wNjIzNjk5MDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2MDI3NzY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFF1b3RhIE1hbmFnZW1lbnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19xdW90YV9nb2FsYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlICpuZXcqIHF1b3RhIGdvYWwgZ2V0cyBzZXQgYW5kIHRoZW4sIGNydWNpYWxseSwgaG93IHRoYXQgdmFsdWUgaXMgYWN0dWFsbHkgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGZvciB1c2UgbGF0ZXIgb24uIEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlJ3MgbGlmZWN5Y2xlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGlzIGluaXRpYWxseSBkZWZpbmVkLiBUaGVuLCBteSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgYGRhbW9zX3F1b3RhX2dvYWxgLiBXaGVyZSBkb2VzIGl0cyB2YWx1ZSBvcmlnaW5hdGU/IElzIGl0IGEgY29weSBvZiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgPyBJcyB0aGVyZSBzb21lIGFkZGl0aW9uYWwgbG9naWMgb3IgdHJhbnNmb3JtYXRpb24gaW52b2x2ZWQ/IEtub3dpbmcgdGhpcyB3aWxsIHJldmVhbCB0aGUgZW50aXJlIHF1b3RhIGFzc2lnbm1lbnQgb3IgY2FsY3VsYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MTAuOTIyNjUwMDU2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4NjU5ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX25ld19xdW90YV9nb2FsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDc5PXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZik7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwODAtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwODE6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDgyLVxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTY4Mj12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjg3LVxcbm1tL2RhbW9uL2NvcmUuYzo2ODg6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy02ODktXFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTIzOT1pbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjU2LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxMjU3OlxcdFxcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTEyNTgtXFx0XFx0XFx0XFx0c3JjX2dvYWwtXFx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNS1cXHRcXHRyZXR1cm4gMDtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjIzNjpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXFx0aWYgKCFnb2FsKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDAtXFx0LyogYWltIDAuMiAlIGdvYWwgY29uZmxpY3QsIHRvIGtlZXAgbGl0dGxlIHBpbmcgcG9uZyAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQxOlxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDItXFx0XFx0XFx0MTAwMDAgLSBhY3RpdmVfbWVtX2JwICsgMik7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVxcdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNy1cXHRcXHRcXHRcXHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI0My1cXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ0OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI0NS1cXHRcXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODY1OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChzeXNmc19nb2FsLVxcdTAwM2VtZXRyaWMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjYtXFx0XFx0XFx0XFx0c3lzZnNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MTAtXFx0XFx0ICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkxMTpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoZHN0X2dvYWxzW2ldLm1ldHJpYyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTEyLVxcdFxcdFxcdFxcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTc4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xNjMtXFx0ZGFtb25fc2V0X3NjaGVtZXMoY3R4LCBcXHUwMDI2c2NoZW1lLCAxKTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTY0OlxcdHF1b3RhX2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTY1LVxcdFxcdFxcdHByb21vdGUgPyBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQIDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MTMuMTgxMzE4NTQ4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTQxNzA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRdW90YSBHb2FsIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgZnVuY3Rpb24uIEl0J3MgaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBoYW5kbGVzIG5ldyBxdW90YSBnb2FscywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgbWFpbiBtZW1vcnkgbWFuYWdlbWVudCBwYXJ0cy4gV2hhdCBleGFjdGx5IGFyZSB0aGUgZGVzaWduIGNob2ljZXMgaGVyZT8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgYXQgcGxheT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgaW1tZWRpYXRlbHkgYXdhcmUgb2Y/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBwcm92aWRlcywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgREFNT04gbW9kdWxlcyBhbmQgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBEQU1PTiBsaWZlY3ljbGUsIHNvIGFueSBidWdzIGluIHRoaXMgYXJlYSBjb3VsZCBjcmVhdGUgbWFqb3IgaXNzdWVzIGRvd25zdHJlYW0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjE1LjY3NTQ5MTU3MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MDpcXHR9XFxuIDY4MTpcXHRcXG4gNjgyOlxcdHZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4gNjgzOlxcdHtcXG4gNjg0OlxcdFxcdGRhbW9zX2RlbF9maWx0ZXIoZik7XFxuIDY4NTpcXHRcXHRkYW1vc19mcmVlX2ZpbHRlcihmKTtcXG4gNjg2OlxcdH1cXG4gNjg3OlxcdFxcbiA2ODg6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbiA2ODk6XFx0XFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXFxuIDY5MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcXG4gNjkxOlxcdHtcXG4gNjkyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xcbiA2OTU6XFx0XFx0aWYgKCFnb2FsKVxcbiA2OTY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY5NzpcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPSBtZXRyaWM7XFxuIDY5ODpcXHRcXHRnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XFxuIDY5OTpcXHRcXHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4gNzAwOlxcdFxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4gNzAxOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZnb2FsLVxcdTAwM2VsaXN0KTtcXG4gNzAyOlxcdFxcdHJldHVybiBnb2FsO1xcbiA3MDM6XFx0fVxcbiA3MDQ6XFx0XFxuIDcwNTpcXHR2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxuIDcwNjpcXHR7XFxuIDcwNzpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZnLVxcdTAwM2VsaXN0LCBcXHUwMDI2cS1cXHUwMDNlZ29hbHMpO1xcbiA3MDg6XFx0fVxcbiA3MDk6XFx0XFxuIDcxMDpcXHRzdGF0aWMgdm9pZCBkYW1vc19kZWxfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG4gNzExOlxcdHtcXG4gNzEyOlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZnLVxcdTAwM2VsaXN0KTtcXG4gNzEzOlxcdH1cXG4gNzE0OlxcdFxcbiA3MTU6XFx0c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbiA3MTY6XFx0e1xcbiA3MTc6XFx0XFx0a2ZyZWUoZyk7XFxuIDcxODpcXHR9XFxuIDcxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MTUuNjc1NjUyMjUyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzE5MzU1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFF1b3RhIEdvYWwgU3RydWN0dXJlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgYmVhcmluZ3Mgc3RyYWlnaHQuIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbGAgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MsIHBhcnRpY3VsYXJseSBob3cgaXQncyBzdHJ1Y3R1cmVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgd2FudCB0byBjaGVjayB0aGUgbGF5b3V0LCB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgbWVtYmVycywgYW5kIGFueSBwYWRkaW5nIG9yIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgaW5kaXZpZHVhbCBxdW90YSBnb2FsIGZpZWxkcy4gSSdtIGxvb2tpbmcgZm9yIGEgc29saWQgZ3Jhc3AgYmVmb3JlIEkgc3RhcnQgdGhlIGFuYWx5c2lzLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGtleSBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDoxNy4zNDc1OTA1NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjUxOTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYxPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTk4OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk5LVxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDoxOS44ODAxMTg1NTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwOTA4ODgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTguIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgdXN1YWwgc3RydWN0dXJlIG9mIHRoZXNlIGhlYWRlcnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3RydWN0dXJlIGRlZmluaXRpb25zIG9yIHBlcmhhcHMgc29tZSBtYWNybyBkZWNsYXJhdGlvbnMgdGhhdCBmb3JtIHRoZSBiYWNrYm9uZSBvZiB0aGUgRGF0YSBBY2Nlc3MgTU9OaXRvciAoREFNT04pIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHByb2JhYmx5IHJlc2lkZSwgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgdG8gcmVwcmVzZW50IG1vbml0b3JlZCByZWdpb25zLCBtb25pdG9yaW5nIGNvbnRleHRzLCBhbmQgdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtcy4gSSdtIGhvcGluZyB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIHJlcHJlc2VudHMgYW5kIGhhbmRsZXMgdGhlIG1vbml0b3JlZCBtZW1vcnkgcmVnaW9ucywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQuIEZyb20gdGhlcmUgSSdsbCBsaWtlbHkgYnJhbmNoIG91dCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29yZSBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgc3VjaCBhcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjIyLjE4OTIxMDE4MloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHQgKiBJZiBAbWV0cmljIGlzIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfe1VTRUQsRlJFRX1fQlAsIEBuaWQgYW5kIEBtZW1jZ19pZFxcbiAxOTY6XFx0ICogcmVwcmVzZW50cyB0aGUgbm9kZSBpZCBhbmQgdGhlIGNncm91cCB0byBhY2NvdW50IHRoZSB1c2VkIG1lbW9yeSBmb3IuXFxuIDE5NzpcXHQgKi9cXG4gMTk4OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcXG4gMTk5OlxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xcbiAyMDA6XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxuIDIwMTpcXHRcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XFxuIDIwMjpcXHRcXHQvKiBtZXRyaWMtZGVwZW5kZW50IGZpZWxkcyAqL1xcbiAyMDM6XFx0XFx0dW5pb24ge1xcbiAyMDQ6XFx0XFx0XFx0c3RydWN0IHtcXG4gMjA1OlxcdFxcdFxcdFxcdGludCBuaWQ7XFxuIDIwNjpcXHRcXHRcXHRcXHR1NjQgbWVtY2dfaWQ7XFxuIDIwNzpcXHRcXHRcXHR9O1xcbiAyMDg6XFx0LyogcHJpdmF0ZTogKi9cXG4gMjA5OlxcdFxcdFxcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXFxuIDIxMDpcXHRcXHRcXHR1NjQgbGFzdF9wc2lfdG90YWw7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdH07XFxuIDIxMzpcXHQvKiBwcml2YXRlOiAqL1xcbiAyMTQ6XFx0XFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cXG4gMjE1OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gMjE2OlxcdH07XFxuIDIxNzpcXHRcXG4gMjE4OlxcdC8qKlxcbiAyMTk6XFx0ICogZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIC0gR29hbC1iYXNlZCBxdW90YSB0dW5pbmcgbG9naWMuXFxuIDIyMDpcXHQgKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlxcdEFpbSBsb25nIHRlcm0gY29uc2lzdGVudCBxdW90YS5cXG4gMjIxOlxcdCAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMOlxcdEFpbSB6ZXJvIHF1b3RhIGFzYXAuXFxuIDIyMjpcXHQgKi9cXG4gMjIzOlxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XFxuIDIyNDpcXHRcXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QsXFxuIDIyNTpcXHRcXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxcbiAyMjY6XFx0fTtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0LyoqXFxuIDIyOTpcXHQgKiBzdHJ1Y3QgZGFtb3NfcXVvdGEgLSBDb250cm9scyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cXG4gMjMwOlxcdCAqIEByZXNldF9pbnRlcnZhbDpcXHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxcbiAyMzE6XFx0ICogQG1zOlxcdFxcdFxcdE1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLlxcbiAyMzI6XFx0ICogQHN6OlxcdFxcdFxcdE1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC5cXG4gMjMzOlxcdCAqIEBnb2FsX3R1bmVyOlxcdFxcdEdvYWwtYmFzZWQgQGVzeiB0dW5pbmcgYWxnb3JpdGhtIHRvIHVzZS5cXG4gMjM0OlxcdCAqIEBlc3o6XFx0XFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXFxuIDIzNTpcXHQgKiBAZmFpbF9jaGFyZ2VfbnVtOlxcdEZhaWxlZCByZWdpb25zIGNoYXJnZSByYXRlIG51bWVyYXRvci5cXG4gMjM2OlxcdCAqIEBmYWlsX2NoYXJnZV9kZW5vbTpcXHRGYWlsZWQgcmVnaW9ucyBjaGFyZ2UgcmF0ZSBkZW5vbWluYXRvci5cXG4gMjM3OlxcdCAqXFxuIDIzODpcXHQgKiBAd2VpZ2h0X3N6OlxcdFxcdFdlaWdodCBvZiB0aGUgcmVnaW9uJ3Mgc2l6ZSBmb3IgcHJpb3JpdGl6YXRpb24uXFxuIDIzOTpcXHQgKiBAd2VpZ2h0X25yX2FjY2Vzc2VzOlxcdFdlaWdodCBvZiB0aGUgcmVnaW9uJ3MgbnJfYWNjZXNzZXMgZm9yIHByaW9yaXRpemF0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDoyMi4xODkzMzIwNDJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIwNTg4OTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBRdW90YSBHb2FsIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRpZ2h0ZW5pbmcgdXAgZXJyb3IgaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24gYXJvdW5kIERBTU9OJ3MgcXVvdGEgZ29hbCBtYW5hZ2VtZW50LiBGaXJzdCwgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGFuIGBpbnRgIGFuZCBpbmNsdWRlcyBhIGNydWNpYWwgY2hlY2s6IGBpZiAoIXNyYy1cdTAwM2V0YXJnZXRfdmFsdWUpIHJldHVybiAtRUlOVkFMO2AuICBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZGl2aWRlLWJ5LXplcm8gb3Igc2ltaWxhciBpc3N1ZSB3aGVyZSBhIHplcm8gdGFyZ2V0IHZhbHVlIG1pZ2h0IGhhdmUgY2F1c2VkIHByb2JsZW1zLiBUaGUgcGF0Y2ggdGhlbiBwcm9wYWdhdGVzIHRoaXMgcmV0dXJuIHZhbHVlIHVwIHRvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLCBhbmQgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGVycm9ycyBmcm9tIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAsIGluY2x1ZGluZyBmcmVlaW5nIGBuZXdfZ29hbGAgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBpdHMgY29tbWl0LlxuXG5OZXh0LCBpbiBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIHRoYXQgc2VlbWluZ2x5IGFyYml0cmFyeSBjaGVjayAoYGlmICgxMDAwMCBcdTAwM2MgYWN0aXZlX21lbV9icCkgcmV0dXJuIC1FSU5WQUw7YCkgaW4gYGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscygpYCBpcyBnb25lLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgdW5kZXJseWluZyBpc3N1ZSBpcyBoYW5kbGVkIGVsc2V3aGVyZSBhbmQgdGhlIGNoZWNrIGlzIHJlZHVuZGFudCBvciBubyBsb25nZXIgcmVsZXZhbnQuXG5cbkZpbmFsbHksIGluIGBzYW1wbGVzL2RhbW9uL210aWVyLmNgLCB0aGUgY2hlY2sgZm9yIHplcm8gYG5vZGUwX21lbV91c2VkX2JwYCBvciBgbm9kZTBfbWVtX2ZyZWVfYnBgIGlzIHJlbW92ZWQuIFRoaXMgbWFrZXMgc2Vuc2U7IHNpbmNlIHRhcmdldCB2YWx1ZSB2YWxpZGF0aW9uIGlzIG5vdyBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgLCB0aGVzZSBjaGVja3MgYXQgdGhlIHNhbXBsZSBsZXZlbCBhcmUgc3VwZXJmbHVvdXMuIFRoaXMgc2ltcGxpZmljYXRpb24gaXMgZ2VuZXJhbGx5IGdvb2QgY29kZSBoeWdpZW5lLlxuXG5Ob3csIGZvciB0aGUgcmVhbGx5IGNyaXRpY2FsIHBhcnQ6IHNlY3VyaXR5LiAgSSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBpbnRyb2R1Y2UgYW55IHZ1bG5lcmFiaWxpdGllcy4gIEkgbmVlZCB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiAgVGhlIHBhdGNoICpkb2Vzbid0KiBhcHBlYXIgdG8gaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHNvIG5vIHByb2JsZW1zIHRoZXJlLiBJIGFsc28gc2VlIG5vIGluZGljYXRpb24gb2YgbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBkYXRhLCBhbmQgdGhhdCBgc3JjLVx1MDAzZXRhcmdldF92YWx1ZWAgY2hlY2sgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBpcyB2ZXJ5IHJlYXNzdXJpbmcuICBUaGUgYG5ld19nb2FsYCBhbGxvY2F0aW9uIGFuZCBzdWJzZXF1ZW50IGZyZWVpbmcgaW4gdGhlIGVycm9yIHBhdGggb2YgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbHNvIGxvb2tzIHNvdW5kIOKAkyBwcmV2ZW50aW5nIHBvdGVudGlhbCBtZW1vcnkgbGVha3MgdGhhdCB3ZXJlIHByZXNlbnQgYmVmb3JlIHRoaXMgcGF0Y2guXG5cbkkgYWxzbyBtdXN0IGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBsZWFrcyB3aGVuIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIHJldHVybnMgZWFybHkuIEl0IGlzIGltcG9ydGFudCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGUgY2hhbmdlcyBpbiB0aGUgbG9naWMgYW5kIHRoZSBhZGRlZCBlcnJvciBoYW5kbGluZyBnaXZlIG1lIG1vcmUgY29uZmlkZW5jZS5cblxuT3ZlcmFsbCwgdGhpcyBpcyBhIGNsZWFuIHBhdGNoLiBJdCdzIGZvY3VzZWQsIGFkZHJlc3NlcyBhIHJlYWwgcG90ZW50aWFsIGlzc3VlIHdpdGggdmFsaWRhdGlvbiwgYW5kIGlzIGdlbmVyYWxseSB3ZWxsLXN0cnVjdHVyZWQuICBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIHJlYWRzIG9yIHBvdGVudGlhbCBsZWFrcywgYW5kIHRoZSBzaW1wbGlmaWNhdGlvbiBpcyBhIGJvbnVzLiBJdCBsb29rcyBnb29kIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gV2Ugc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgY29kZSByZXZpZXcgYW5kIG1ha2Ugc3VyZSB0aGUgZXJyb3IgaGFuZGxpbmcgaXMgY29tcGxldGUsIGJ1dCBJJ20gY29tZm9ydGFibGUgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MjcuMzk1MjI0ODU5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4Nzg0NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA5ND12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcyk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTU6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMTQ9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjI3LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMjI4OiAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTEyMjktICogQGRzdDpcXHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMzgtICovXFxubW0vZGFtb24vY29yZS5jOjEyMzk6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTEyNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyNzE9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNzctXFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jOjEyNzg6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI3OS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMi1cXHRcXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MjM6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI0LVxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZxdW90YSlcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDctXFx0XFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2FscyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTA4OlxcdFxcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDktXFx0XFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIwLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MjE6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjI5LjY1NDAxNTgzMloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDcxODA2ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzeXNmcy1zY2hlbWVzLmNgKipcblxuT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBpc3N1ZS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHN0YXJ0IHdpdGggYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIE15IGh1bmNoIGlzIGl0J3MgcmVsYXRlZCB0byB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCBob3cgd2UncmUgaGFuZGxpbmcgc2NoZW1lcy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSByZWdpb24gYXJvdW5kIGxpbmUgMjkyMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIHNjaGVtZS1zcGVjaWZpYyBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIG9yIHdoZXJlIGEgY2VydGFpbiBhY3Rpb24gcmVsYXRpbmcgdG8gbWVtb3J5IG1hbmFnZW1lbnQgaGFwcGVucy4gVGhhdCBzcGVjaWZpYyBsaW5lIHNob3VsZCBoYXZlIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcHJvY2VkdXJlIGFuZCBJJ20gcmVhZHkgdG8gaW52ZXN0aWdhdGUgYW5kIHNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI0NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjMxLjcyNTgyNjgyM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5MDA6XFx0e1xcbjI5MDE6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuMjkwMjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGEgPSB7fTtcXG4yOTAzOlxcdFxcdGludCBpID0gMDtcXG4yOTA0OlxcdFxcbjI5MDU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnF1b3RhLmdvYWxzKTtcXG4yOTA2OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xcbjI5MDc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xcbjI5MDg6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcsICpnX25leHQ7XFxuMjkwOTpcXHRcXHRcXHRpbnQgZXJyO1xcbjI5MTA6XFx0XFxuMjkxMTpcXHRcXHRcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGUgc2NoZW1lIHN5c2ZzIGRpciAqL1xcbjI5MTI6XFx0XFx0XFx0aWYgKGkgXFx1MDAzZT0gc3lzZnNfc2NoZW1lcy1cXHUwMDNlbnIpXFxuMjkxMzpcXHRcXHRcXHRcXHRicmVhaztcXG4yOTE0OlxcdFxcbjI5MTU6XFx0XFx0XFx0c3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy1cXHUwMDNlc2NoZW1lc19hcnJbaV07XFxuMjkxNjpcXHRcXHRcXHRlcnIgPSBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoc3lzZnNfc2NoZW1lLVxcdTAwM2VxdW90YXMtXFx1MDAzZWdvYWxzLFxcbjI5MTc6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnF1b3RhKTtcXG4yOTE4OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4yOTE5OlxcdFxcdFxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZxdW90YSlcXG4yOTIwOlxcdFxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChnKTtcXG4yOTIxOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjkyMjpcXHRcXHRcXHR9XFxuMjkyMzpcXHRcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEsIFxcdTAwMjZxdW90YSk7XFxuMjkyNDpcXHRcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuMjkyNTpcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XFxuMjkyNjpcXHRcXHRcXHRpZiAoZXJyKVxcbjI5Mjc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yOTI4OlxcdFxcdFxcdGkrKztcXG4yOTI5OlxcdFxcdH1cXG4yOTMwOlxcdFxcdHJldHVybiAwO1xcbjI5MzE6XFx0fVxcbjI5MzI6XFx0XFxuMjkzMzpcXHR2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbjI5MzQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuMjkzNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuMjkzNjpcXHR7XFxuMjkzNzpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4yOTM4OlxcdFxcdGludCBzY2hlbWVzX2lkeCA9IDA7XFxuMjkzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MzEuNzI2MDEwNDEzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDkwOTQ5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgREFNT04gQm90dGxlbmVjayoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGRhbW9zX2NvbW1pdF9xdW90YWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBsb2dpYyBhcm91bmQgbGluZSAxMjcwIG1pZ2h0IGJlIHBsYXlpbmcgYSBrZXkgcm9sZSwgbWF5YmUgcmVsYXRlZCB0byBxdW90YSBtYW5hZ2VtZW50IG9yIHNvbWUgYWxsb2NhdGlvbiBkZWNpc2lvbnMuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBiZWNhdXNlIHRoaXMgY291bGQgYmUgYSBtYWpvciBjb25zdHJhaW50LiBJJ2xsIHN0YXJ0IHdpdGggdGhpcyBhcmVhIGFuZCB0aGVuIHdvcmsgb3V0d2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjMzLjk3NTEwODE5NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjU6XFx0XFx0XFx0fVxcbjEyNjY6XFx0XFx0XFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XFxuMTI2NzpcXHRcXHR9XFxuMTI2ODpcXHRcXHRyZXR1cm4gMDtcXG4xMjY5OlxcdH1cXG4xMjcwOlxcdFxcbjEyNzE6XFx0c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbjEyNzI6XFx0e1xcbjEyNzM6XFx0XFx0aW50IGVycjtcXG4xMjc0OlxcdFxcbjEyNzU6XFx0XFx0ZHN0LVxcdTAwM2VyZXNldF9pbnRlcnZhbCA9IHNyYy1cXHUwMDNlcmVzZXRfaW50ZXJ2YWw7XFxuMTI3NjpcXHRcXHRkc3QtXFx1MDAzZW1zID0gc3JjLVxcdTAwM2VtcztcXG4xMjc3OlxcdFxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbjEyNzg6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG4xMjc5OlxcdFxcdGlmIChlcnIpXFxuMTI4MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyODE6XFx0XFx0ZHN0LVxcdTAwM2Vnb2FsX3R1bmVyID0gc3JjLVxcdTAwM2Vnb2FsX3R1bmVyO1xcbjEyODI6XFx0XFx0ZHN0LVxcdTAwM2VmYWlsX2NoYXJnZV9udW0gPSBzcmMtXFx1MDAzZWZhaWxfY2hhcmdlX251bTtcXG4xMjgzOlxcdFxcdGRzdC1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20gPSBzcmMtXFx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tO1xcbjEyODQ6XFx0XFx0ZHN0LVxcdTAwM2V3ZWlnaHRfc3ogPSBzcmMtXFx1MDAzZXdlaWdodF9zejtcXG4xMjg1OlxcdFxcdGRzdC1cXHUwMDNld2VpZ2h0X25yX2FjY2Vzc2VzID0gc3JjLVxcdTAwM2V3ZWlnaHRfbnJfYWNjZXNzZXM7XFxuMTI4NjpcXHRcXHRkc3QtXFx1MDAzZXdlaWdodF9hZ2UgPSBzcmMtXFx1MDAzZXdlaWdodF9hZ2U7XFxuMTI4NzpcXHRcXHRyZXR1cm4gMDtcXG4xMjg4OlxcdH1cXG4xMjg5OlxcdFxcbjEyOTA6XFx0c3RhdGljIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX250aF9jb3JlX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxcbjEyOTE6XFx0e1xcbjEyOTI6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbjEyOTM6XFx0XFx0aW50IGkgPSAwO1xcbjEyOTQ6XFx0XFxuMTI5NTpcXHRcXHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcXG4xMjk2OlxcdFxcdFxcdGlmIChpKysgPT0gbilcXG4xMjk3OlxcdFxcdFxcdFxcdHJldHVybiBmaWx0ZXI7XFxuMTI5ODpcXHRcXHR9XFxuMTI5OTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzAwOlxcdH1cXG4xMzAxOlxcdFxcbjEzMDI6XFx0c3RhdGljIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX250aF9vcHNfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuMTMwMzpcXHR7XFxuMTMwNDpcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjMzLjk3NTI3MTczNloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTE1Nzc1MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9TIFF1b3RhIEdvYWwgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIGNoYW5nZXM6IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgbm93IGNvcnJlY3RseSB2YWxpZGF0ZXMgYCFzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlYCBhbmQgcmV0dXJucyBgLUVJTlZBTGAuIFNtYXJ0IG1vdmUuIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGhhbmRsZXMgZXJyb3JzIGZyb20gdGhhdCBmdW5jdGlvbiBwcm9wZXJseSBub3csIGluc3RlYWQgb2YganVzdCBob3BpbmcgZm9yIHRoZSBiZXN0LiBBbmQgdGhleSd2ZSBjbGVhbmVkIHVwIHJlZHVuZGFudCBjaGVja3MgaW4gYGxydV9zb3J0LmNgIGFuZCBgbXRpZXIuY2AuIEFsbCBzZW5zaWJsZSByZWZhY3RvcmluZy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHNvcnQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSBkZWFsaW5nIHdpdGggdGhlIERBTU9OIHN1YnN5c3RlbSwgc28gd2UgbmVlZCB0byBiZSB2aWdpbGFudCBhYm91dCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3Mgb3IgY3Jhc2hlcy5cblxuTGV0IG1lIHRoaW5r4oCmXG5cbiogICBBcmUgd2UgY29weWluZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8gTm9wZS4gR29vZC5cbiogICBBcmUgd2UgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEV2ZXJ5dGhpbmcgbG9va3Mgc291bmQuXG4qICAgQXJlIHdlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzPyBTdGlsbCBuby5cbiogICBNZW1vcnkgbWFuYWdlbWVudD8gU3RhbmRhcmQgZGV0ZWN0b3JzLCBLQVNBTiwgYW5kIEtNRU1MRUFLIHNob3VsZCBjYXRjaCBhbnkgZXJyb3JzLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgcnVuIHRocm91Z2ggdGhlIGV4cGxpY2l0IEtNU0FOIGNyaXRlcmlhIGFnYWluIGp1c3QgdG8gYmUgc3VyZTpcblxuKiAgIEtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/IE5lZ2F0aXZlLlxuKiAgIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS5cbiogICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vdCBoZXJlLlxuKiAgIEJ1ZmZlciBhY2Nlc3MgdGhhdCBtaWdodCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IERvZXNuJ3QgbG9vayBsaWtlIGl0LlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHNlZW1zIHRvIGJlIHN0cmljdGx5IGludGVybmFsIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgREFNT1MgcXVvdGEgZ29hbCBsb2dpYy4gU29saWQuXG5cblRpbWUgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg0NCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDozOC4wOTEwNTA2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIERBTU9OIGNvcmUgcXVvdGEgZ29hbCBjb21taXQgbG9naWMgKGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgKSB0byB2YWxpZGF0ZSB0aGF0IGBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbGwgc3RydWN0IGZpZWxkcyBtYW5pcHVsYXRlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIHBhc3NlZCBhY3Jvc3MgdXNlci9rZXJuZWwgYm91bmRhcmllcywgYW5kIGFueSBwb3RlbnRpYWwgYWxsb2NhdGlvbi9tZW1vcnkgbWFuYWdlbWVudCBmYWlsdXJlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIERBTU9OIGNvcmUgcXVvdGEgZ29hbCBjb21taXQgbG9naWMgKGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgKSB0byB2YWxpZGF0ZSB0aGF0IGBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbGwgc3RydWN0IGZpZWxkcyBtYW5pcHVsYXRlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIHBhc3NlZCBhY3Jvc3MgdXNlci9rZXJuZWwgYm91bmRhcmllcywgYW5kIGFueSBwb3RlbnRpYWwgYWxsb2NhdGlvbi9tZW1vcnkgbWFuYWdlbWVudCBmYWlsdXJlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 00:21:46 +0000 UTC FinishedAt: 2026-09-04 00:24:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e539025ff1f7351a42788c5a88aab59c26f5131b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_LRU_SORT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e539025ff1f7351a42788c5a88aab59c26f5131b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_LRU_SORT" ], "series_id": "760a1dcc-8f93-4c63-b0ce-d1d98d7197b0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_commit_quota_goals", "damos_commit_quota_goal", "damon_commit_ctx", "damos_sysfs_set_quota_scores", "damon_lru_sort_add_quota_goals" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FsJiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIERBTU9OIGNvcmUgcXVvdGEgZ29hbCBjb21taXQgbG9naWMgKGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgKSB0byB2YWxpZGF0ZSB0aGF0IGBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlYCBpcyBub24temVybywgcmV0dXJuaW5nIGAtRUlOVkFMYCBvbiB6ZXJvIHZhbHVlcyBhbmQgcHJvcGFnYXRpbmcgZXJyb3IgY29kZXMgcHJvcGVybHkgKGluY2x1ZGluZyBmcmVlaW5nIG5ld2x5IGFsbG9jYXRlZCBnb2FsIG9iamVjdHMgb24gZmFpbHVyZSkuIEl0IGFsc28gcmVtb3ZlcyByZWR1bmRhbnQgdmFsaWRhdGlvbiBjaGVja3MgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBgc2FtcGxlcy9kYW1vbi9tdGllci5jYC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbGwgc3RydWN0IGZpZWxkcyBtYW5pcHVsYXRlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIHBhc3NlZCBhY3Jvc3MgdXNlci9rZXJuZWwgYm91bmRhcmllcywgYW5kIGFueSBwb3RlbnRpYWwgYWxsb2NhdGlvbi9tZW1vcnkgbWFuYWdlbWVudCBmYWlsdXJlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIHF1b3RhIGdvYWwgY29tbWl0IGhhbmRsaW5nIGluIG1tL2RhbW9uL2NvcmUuYyBieSBhZGRpbmcgaW5wdXQgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgZm9yIHplcm8gdGFyZ2V0IHZhbHVlcyBpbiBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgpIGFuZCBwcm9wYWdhdGluZyBlcnJvcnMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkuIEl0IGFsc28gYWx0ZXJzIHBhcmFtZXRlciBoYW5kbGluZyBpbiBtbS9kYW1vbi9scnVfc29ydC5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgbW9kdWxlIHBhcmFtZXRlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MzVlOTA4OGJlNzQyMWQ1ZjIxNGZlYzljNDEwYzRmMTBmMDc1ZTNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMDoyMzoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDg2NTUwYzQxNDZmNTMuLmY1ZTdlZDlmNWUxNTkgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTEyMTEsMTQgJiM0MzsxMjExLDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiYjNDM7c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbiB7XG4mIzQzO1x0aWYgKCFzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlKVxuJiM0MztcdFx0cmV0dXJuICAtRUlOVkFMO1xuIFx0ZHN0LVx1MDAzZW1ldHJpYyA9IHNyYy1cdTAwM2VtZXRyaWM7XG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTEyMzYsMTQgJiM0MzsxMjM5LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuIHtcbiBcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xuLVx0aW50IGkgPSAwLCBqID0gMDtcbiYjNDM7XHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XG4gXG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkmIzQzOyYjNDM7LCBzcmMpO1xuLVx0XHRpZiAoc3JjX2dvYWwpXG4tXHRcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbi1cdFx0ZWxzZVxuJiM0MztcdFx0aWYgKHNyY19nb2FsKSB7XG4mIzQzO1x0XHRcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4gXHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShzcmNfZ29hbCwgbmV4dCwgc3JjKSB7XG4gXHRcdGlmIChqJiM0MzsmIzQzOyBcdTAwM2MgaSlcbkBAIC0xMjUyLDcgJiM0MzsxMjU4LDExIEBAIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuIFx0XHRcdFx0c3JjX2dvYWwtXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuIFx0XHRpZiAoIW5ld19nb2FsKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xuJiM0MztcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZGFtb3NfZnJlZV9xdW90YV9nb2FsKG5ld19nb2FsKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiBcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggYmQ4NDc4MjlhOTkwNy4uN2RmNDVmOWEwYjNhZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0yMzMsOCAmIzQzOzIzMyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcbiBcbiBcdGlmICghYWN0aXZlX21lbV9icClcbiBcdFx0cmV0dXJuIDA7XG4tXHRpZiAoMTAwMDAgXHUwMDNjIGFjdGl2ZV9tZW1fYnApXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xuIFx0aWYgKCFnb2FsKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9zYW1wbGVzL2RhbW9uL210aWVyLmMgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbmluZGV4IGJlYTQ1Yzg3Y2M5YmUuLjI3ZGM4OGJkZjdhMGUgMTAwNjQ0XG4tLS0gYS9zYW1wbGVzL2RhbW9uL210aWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuY1xuQEAgLTE2MSw5ICYjNDM7MTYxLDYgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuIFx0aWYgKCFzY2hlbWUpXG4gXHRcdGdvdG8gZnJlZV9vdXQ7XG4gXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG4tXHQvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovXG4tXHRpZiAoIW5vZGUwX21lbV91c2VkX2JwIHx8ICFub2RlMF9tZW1fZnJlZV9icClcbi1cdFx0Z290byBmcmVlX291dDtcbiBcdHF1b3RhX2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbiBcdFx0XHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XG4gXHRcdFx0REFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzM1ZTkwODhiZTc0MjFkNWYyMTRmZWM5YzQxMGM0ZjEwZjA3NWUzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDA6MjM6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggODY1NTBjNDE0NmY1My4uZjVlN2VkOWY1ZTE1OSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMTIxMSwxNCAmIzQzOzEyMTEsMTcgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oCiAJfQogfQogCi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgKJiM0MztzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKQogewomIzQzOwlpZiAoIXNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlKQomIzQzOwkJcmV0dXJuICAtRUlOVkFMOwogCWRzdC0mZ3Q7bWV0cmljID0gc3JjLSZndDttZXRyaWM7CiAJZHN0LSZndDt0YXJnZXRfdmFsdWUgPSBzcmMtJmd0O3RhcmdldF92YWx1ZTsKIAlpZiAoZHN0LSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCkKIAkJZHN0LSZndDtjdXJyZW50X3ZhbHVlID0gc3JjLSZndDtjdXJyZW50X3ZhbHVlOwogCWRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTIzNiwxNCAmIzQzOzEyMzksMTcgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoCiBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYykKIHsKIAlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDsKLQlpbnQgaSA9IDAsIGogPSAwOwomIzQzOwlpbnQgaSA9IDAsIGogPSAwLCBlcnI7CiAKIAlkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkgewogCQlzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkmIzQzOyYjNDM7LCBzcmMpOwotCQlpZiAoc3JjX2dvYWwpCi0JCQlkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpOwotCQllbHNlCiYjNDM7CQlpZiAoc3JjX2dvYWwpIHsKJiM0MzsJCQllcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9IGVsc2UgewogCQkJZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTsKJiM0MzsJCX0KIAl9CiAJZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKHNyY19nb2FsLCBuZXh0LCBzcmMpIHsKIAkJaWYgKGomIzQzOyYjNDM7ICZsdDsgaSkKQEAgLTEyNTIsNyAmIzQzOzEyNTgsMTEgQEAgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpCiAJCQkJc3JjX2dvYWwtJmd0O21ldHJpYywgc3JjX2dvYWwtJmd0O3RhcmdldF92YWx1ZSk7CiAJCWlmICghbmV3X2dvYWwpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTsKJiM0MzsJCWVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGFtb3NfZnJlZV9xdW90YV9nb2FsKG5ld19nb2FsKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQogCQlkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCBiZDg0NzgyOWE5OTA3Li43ZGY0NWY5YTBiM2FlIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2xydV9zb3J0LmMKQEAgLTIzMyw4ICYjNDM7MjMzLDYgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLAogCiAJaWYgKCFhY3RpdmVfbWVtX2JwKQogCQlyZXR1cm4gMDsKLQlpZiAoMTAwMDAgJmx0OyBhY3RpdmVfbWVtX2JwKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7CiAJaWYgKCFnb2FsKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vbXRpZXIuYyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuYwppbmRleCBiZWE0NWM4N2NjOWJlLi4yN2RjODhiZGY3YTBlIDEwMDY0NAotLS0gYS9zYW1wbGVzL2RhbW9uL210aWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2FtcGxlcy9kYW1vbi9tdGllci5jCkBAIC0xNjEsOSAmIzQzOzE2MSw2IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSkKIAlpZiAoIXNjaGVtZSkKIAkJZ290byBmcmVlX291dDsKIAlkYW1vbl9zZXRfc2NoZW1lcyhjdHgsICZhbXA7c2NoZW1lLCAxKTsKLQkvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovCi0JaWYgKCFub2RlMF9tZW1fdXNlZF9icCB8fCAhbm9kZTBfbWVtX2ZyZWVfYnApCi0JCWdvdG8gZnJlZV9vdXQ7CiAJcXVvdGFfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKAogCQkJcHJvbW90ZSA/IERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlAgOgogCQkJREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc2NvcGUg4oCTIHdoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIHdoZXJlPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYHJlYWQtZmlsZWAgb3IgZXZlbiBhIGBncmVwcGVyYCBwYXNzLCBqdXN0IHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcgb2YgdGhlIGNoYW5nZXMgb3IgcmVmZXIgdG8gdGhlIHBhdGNoIGRldGFpbHMuCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgcGF0Y2ggaXMgZ29pbmcgdG8gYWZmZWN0IGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gREFNT04uIFNwZWNpZmljYWxseSwgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmc6IGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgc2FtcGxlcy9kYW1vbi9tdGllci5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCBpdCB3aWxsIGludm9sdmUgY2hhbmdlcyB0byB0aGUgZGFtb24gY29yZSBmdW5jdGlvbmFsaXR5LCBscnUgc29ydCBhbmQgdGhlcmUmIzM5O3MgYSBzYW1wbGUuCgpUaW1lIHRvIGRyaWxsIGRvd24uIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGluc3BlY3QgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgYWxnb3JpdGhtaWMgbW9kaWZpY2F0aW9ucyBvciBzdHJ1Y3R1cmFsIGNoYW5nZXMuIEkgc2hvdWxkIGFsc28gdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmb3IgREFNT04gdG8gdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkIG9yIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnOjY6XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy03LVx0aGVscFxuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWc6MTY6XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy0xOC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTk6XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbm1tL2RhbW9uL0tjb25maWc6MjA6XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxubW0vZGFtb24vS2NvbmZpZy0yMS1cdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbm1tL2RhbW9uL0tjb25maWctMjktXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xubW0vZGFtb24vS2NvbmZpZy0zMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MzE6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy0zMi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy00MS1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo0MjpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDMtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjQ0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTQ1LVx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbm1tL2RhbW9uL0tjb25maWctNTAtXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbm1tL2RhbW9uL0tjb25maWc6NTE6XHRkZWZhdWx0IERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTUyLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo1MzpcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy01NC1cdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZzo1NzpcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjU4Olx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy01OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTYwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo2MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbm1tL2RhbW9uL0tjb25maWctNjItXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjY5Olx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xubW0vZGFtb24vS2NvbmZpZzo3MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNzItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjczOlx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2Vcbm1tL2RhbW9uL0tjb25maWctNzQtXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy03OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTgwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo4MTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy04Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZzo4OTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6OTA6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTkxLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzo5MjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG5tbS9kYW1vbi9LY29uZmlnOjkzOlx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG5tbS9kYW1vbi9LY29uZmlnLTk0LVx0ICB0aG9zZS5cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMDI6XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTA0Olx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbm1tL2RhbW9uL0tjb25maWctMTA1LVx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTA5Olx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjExMDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTExLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbm1tL2RhbW9uL0tjb25maWc6MTEzOlx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXHQgIG1ldHJpY3MuXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZzoxMTc6XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTE4Olx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnOjExOTpcdGRlZmF1bHQgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cbm1tL2RhbW9uL0tjb25maWctMTIyLVx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjEwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgUXVvdGEgQ29tbWl0IExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIHF1b3RhIGdvYWxzIGFyZSBiZWluZyBjb21taXR0ZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgYXJvdW5kIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBmdW5jdGlvbnMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9uIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbW1pdCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoYXQmIzM5O3MgZHJpdmluZyB0aGUgY2FsbCB0byBjb21taXQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBJJiMzOTttIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSB3aGVyZSB0aGlzIHBpZWNlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwMDpcdFx0XHRicmVhaztcbjEyMDE6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19VU0VEX0JQOlxuMTIwMjpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX0ZSRUVfQlA6XG4xMjAzOlx0XHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuMTIwNDpcdFx0XHRkc3QtXHUwMDNlbWVtY2dfaWQgPSBzcmMtXHUwMDNlbWVtY2dfaWQ7XG4xMjA1Olx0XHRcdGJyZWFrO1xuMTIwNjpcdFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcbjEyMDc6XHRcdFx0ZHN0LVx1MDAzZW5pZCA9IHNyYy1cdTAwM2VuaWQ7XG4xMjA4Olx0XHRcdGJyZWFrO1xuMTIwOTpcdFx0ZGVmYXVsdDpcbjEyMTA6XHRcdFx0YnJlYWs7XG4xMjExOlx0XHR9XG4xMjEyOlx0fVxuMTIxMzpcdFxuMTIxNDpcdHN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4xMjE1Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4xMjE2Olx0e1xuMTIxNzpcdFx0aWYgKCFzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlKVxuMTIxODpcdFx0XHRyZXR1cm4gIC1FSU5WQUw7XG4xMjE5Olx0XHRkc3QtXHUwMDNlbWV0cmljID0gc3JjLVx1MDAzZW1ldHJpYztcbjEyMjA6XHRcdGRzdC1cdTAwM2V0YXJnZXRfdmFsdWUgPSBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlO1xuMTIyMTpcdFx0aWYgKGRzdC1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcbjEyMjI6XHRcdFx0ZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXHUwMDNlY3VycmVudF92YWx1ZTtcbjEyMjM6XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbjEyMjQ6XHRcdHJldHVybiAwO1xuMTIyNTpcdH1cbjEyMjY6XHRcbjEyMjc6XHQvKipcbjEyMjg6XHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxuMTIyOTpcdCAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxuMTIzMDpcdCAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PUyBxdW90YS5cbjEyMzE6XHQgKlxuMTIzMjpcdCAqIENvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZvciBxdW90YSBnb2FscyBmcm9tIEBzcmMgdG8gQGRzdC4gIFVzZXJzXG4xMjMzOlx0ICogc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIGZvciBxdW90YSBnb2Fscy1sZXZlbCBwYXJhbWV0ZXJzIHVwZGF0ZSBvZiBydW5uaW5nXG4xMjM0Olx0ICogREFNT04gY29udGV4dHMsIGluc3RlYWQgb2YgbWFudWFsIGluLXBsYWNlIHVwZGF0ZXMuXG4xMjM1Olx0ICpcbjEyMzY6XHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2VcbjEyMzc6XHQgKiBkYW1vbl9jYWxsKCkuXG4xMjM4Olx0ICovXG4xMjM5Olx0aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4xMjQwOlx0e1xuMTI0MTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FsLCAqbmV4dCwgKnNyY19nb2FsLCAqbmV3X2dvYWw7XG4xMjQyOlx0XHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XG4xMjQzOlx0XG4xMjQ0Olx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xuMTI0NTpcdFx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkmIzQzOyYjNDM7LCBzcmMpO1xuMTI0NjpcdFx0XHRpZiAoc3JjX2dvYWwpIHtcbjEyNDc6XHRcdFx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xuMTI0ODpcdFx0XHRcdGlmIChlcnIpXG4xMjQ5Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTI1MDpcdFx0XHR9IGVsc2Uge1xuMTI1MTpcdFx0XHRcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChkc3RfZ29hbCk7XG4xMjUyOlx0XHRcdH1cbjEyNTM6XHRcdH1cbjEyNTQ6XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShzcmNfZ29hbCwgbmV4dCwgc3JjKSB7XG4xMjU1Olx0XHRcdGlmIChqJiM0MzsmIzQzOyBcdTAwM2MgaSlcbjEyNTY6XHRcdFx0XHRjb250aW51ZTtcbjEyNTc6XHRcdFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbjEyNTg6XHRcdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbjEyNTk6XHRcdFx0aWYgKCFuZXdfZ29hbClcbjEyNjA6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEyNjE6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbjEyNjI6XHRcdFx0aWYgKGVycikge1xuMTI2MzpcdFx0XHRcdGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChuZXdfZ29hbCk7XG4xMjY0Olx0XHRcdFx0cmV0dXJuIGVycjtcbjEyNjU6XHRcdFx0fVxuMTI2NjpcdFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbjEyNjc6XHRcdH1cbjEyNjg6XHRcdHJldHVybiAwO1xuMTI2OTpcdH1cbjEyNzA6XHRcbjEyNzE6XHRzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4xMjcyOlx0e1xuMTI3MzpcdFx0aW50IGVycjtcbjEyNzQ6XHRcbjEyNzU6XHRcdGRzdC1cdTAwM2VyZXNldF9pbnRlcnZhbCA9IHNyYy1cdTAwM2VyZXNldF9pbnRlcnZhbDtcbjEyNzY6XHRcdGRzdC1cdTAwM2VtcyA9IHNyYy1cdTAwM2VtcztcbjEyNzc6XHRcdGRzdC1cdTAwM2VzeiA9IHNyYy1cdTAwM2VzejtcbjEyNzg6XHRcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XG4xMjc5Olx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlOgoKKipGaW5kaW5nIHRoZSBTb3VyY2U6IEEgVHJhY2Ugb2YgYGRhbW9zX2NvbW1pdF9xdW90YWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGRhdGEgb3IgZXhlY3V0aW9uIHJlbGF0ZWQgdG8gZWl0aGVyIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIG9yIGBkYW1vc19jb21taXRfcXVvdGFgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHBpdm90YWwgaW4gdGhpcyBzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgaW52b2tlZC4gVGhlIGJlc3Qgd2F5IHRvIHN0YXJ0IGlzIHdpdGggYSBjb21wcmVoZW5zaXZlIHNlYXJjaC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZWJhc2UgZm9yIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGVzZSBpZGVudGlmaWVycy4gVGhpcyBzZWFyY2ggd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCBhbmQgdXRpbGl6ZXMgdGhlc2UgcXVvdGEtcmVsYXRlZCBlbGVtZW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gY29uc3RydWN0IGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBkZXNpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19jb21taXRfcXVvdGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTQ9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTU6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwOTYtXG4tLVxubW0vZGFtb24vY29yZS5jPTExNzc9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE4OS1cbm1tL2RhbW9uL2NvcmUuYzoxMTkwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExOTEtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMTMtXG5tbS9kYW1vbi9jb3JlLmM6MTIxNDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTEyMTUtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjItXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG5tbS9kYW1vbi9jb3JlLmM6MTIyMzpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjI0LVx0cmV0dXJuIDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjctLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTIyODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTEyMjktICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMzgtICovXG5tbS9kYW1vbi9jb3JlLmM6MTIzOTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjQwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cdFx0aWYgKHNyY19nb2FsKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTI0NzpcdFx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNDgtXHRcdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI2MC1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxMjYxOlx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNjItXHRcdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI3MC1cbm1tL2RhbW9uL2NvcmUuYzoxMjcxOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjcyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI3Ny1cdGRzdC1cdTAwM2VzeiA9IHNyYy1cdTAwM2Vzejtcbm1tL2RhbW9uL2NvcmUuYzoxMjc4Olx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjc5LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTUzNT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdChzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1NDItXG5tbS9kYW1vbi9jb3JlLmM6MTU0MzpcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YShcdTAwMjZkc3QtXHUwMDNlcXVvdGEsIFx1MDAyNnNyYy1cdTAwM2VxdW90YSk7XG5tbS9kYW1vbi9jb3JlLmMtMTU0NC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjItXHRcdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTIzOlx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZxdW90YSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyNC1cdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgwND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwNy17XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODA4Olx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwOS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODkyPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwNy1cdFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2Fscyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MDg6XHRcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkwOS1cdFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyMC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MjE6XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2ZHN0LCBcdTAwMjZzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyMi1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9OTgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAwOC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDA5Olx0ZGFtb3NfY29tbWl0X3F1b3RhKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZGFtb3NfY29tbWl0YCBhbmQgU3lzZnMgSW50ZXJmYWNlIFVzYWdlKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gYGRhbW9zX2NvbW1pdGAgYW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2VzLiBNeSBpbml0aWFsIGFwcHJvYWNoIHdpbGwgYmUgdG8gZm9sbG93IHRoZSBjYWxsIHN0YWNrLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGBkYW1vc19jb21taXRgIGlzIGJlaW5nIGludm9rZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBjcml0aWNhbCBwYXRoIG9wZXJhdGlvbj8gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50PyBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyBpdHMgaW1wbGljYXRpb25zLgoKVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IHRoZSBzeXNmcyBpbnRlcmFjdGlvbnMgc3Vycm91bmRpbmcgYGRhbW9zX2NvbW1pdGAuIEFyZSB3ZSByZWFkaW5nLCB3cml0aW5nLCBvciBib3RoPyBXaGF0IGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGFjY2Vzc2VkPyBJcyBpdCBzaW1wbGUgc3RhdHVzIHJlcG9ydGluZywgb3IgYXJlIHdlIGNvbmZpZ3VyaW5nIHBhcmFtZXRlcnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gc3lzdGVtIGZ1bmN0aW9uPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIGJlaW5nIG1vdmVkIGFuZCB3aGF0IGNvbnRyb2wgcGxhbmUgdGhlc2UgY2FsbHMgcmVwcmVzZW50LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciByZWxpYWJpbGl0eS4gSSB3YW50IHRvIG1hcCB0aGUgZGF0YSBmbG93IGFuZCB1bmRlcnN0YW5kIGhvdyBkYXRhIGFuZCBjb21tYW5kcyB0cmFuc2xhdGUgYWNyb3NzIHRoZSB0d28gaW50ZXJmYWNlcy4gQW55IGNoYW5jZSBvZiBhbiBleHBsb2l0PwoKSeKAmW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvciBhdCB0aGlzIGludGVyZmFjZSBsYXllci4gV2hhdCBlcnJvciBoYW5kbGluZyBpcyBwcmVzZW50PyBJcyBpdCByb2J1c3QgdG8gaW52YWxpZCBpbnB1dD8gQ291bGQgdGhpcyBiZSBhIHZlY3RvciBmb3IgZGVuaWFsLW9mLXNlcnZpY2UsIG9yIGV2ZW4gc29tZXRoaW5nIG1vcmUgbWFsaWNpb3VzPyBUaGF04oCZcyB3aGVyZSBJ4oCZbGwgc3RhcnQgZGlnZ2luZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExNzc9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE4OS1cbm1tL2RhbW9uL2NvcmUuYzoxMTkwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExOTEtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMTMtXG5tbS9kYW1vbi9jb3JlLmM6MTIxNDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTEyMTUtXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjItXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG5tbS9kYW1vbi9jb3JlLmM6MTIyMzpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjI0LVx0cmV0dXJuIDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTEyMjctLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTIyODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTEyMjktICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTEyMzgtICovXG5tbS9kYW1vbi9jb3JlLmM6MTIzOTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjQwLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cdFx0aWYgKHNyY19nb2FsKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTI0NzpcdFx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNDgtXHRcdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI2MC1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxMjYxOlx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xubW0vZGFtb24vY29yZS5jLTEyNjItXHRcdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI3MC1cbm1tL2RhbW9uL2NvcmUuYzoxMjcxOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMjcyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI3Ny1cdGRzdC1cdTAwM2VzeiA9IHNyYy1cdTAwM2Vzejtcbm1tL2RhbW9uL2NvcmUuYzoxMjc4Olx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMjc5LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTMwMj1zdGF0aWMgc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbnRoX29wc19maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTMxMy1cbm1tL2RhbW9uL2NvcmUuYzoxMzE0OnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKFxubW0vZGFtb24vY29yZS5jLTEzMTUtXHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzM0LVxubW0vZGFtb24vY29yZS5jOjEzMzU6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcihcbm1tL2RhbW9uL2NvcmUuYy0xMzM2LVx0XHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkc3QsIHN0cnVjdCBkYW1vc19maWx0ZXIgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM0MC1cdGRzdC1cdTAwM2VhbGxvdyA9IHNyYy1cdTAwM2VhbGxvdztcbm1tL2RhbW9uL2NvcmUuYzoxMzQxOlx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEzNDItfVxubW0vZGFtb24vY29yZS5jLTEzNDMtXG5tbS9kYW1vbi9jb3JlLmM6MTM0NDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9jb3JlX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxubW0vZGFtb24vY29yZS5jLTEzNDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzUxLVx0XHRpZiAoc3JjX2ZpbHRlcilcbm1tL2RhbW9uL2NvcmUuYzoxMzUyOlx0XHRcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XG5tbS9kYW1vbi9jb3JlLmMtMTM1My1cdFx0ZWxzZVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMzY1LVx0XHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vY29yZS5jOjEzNjY6XHRcdGRhbW9zX2NvbW1pdF9maWx0ZXJfYXJnKG5ld19maWx0ZXIsIHNyY19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEzNjctXHRcdGRhbW9zX2FkZF9maWx0ZXIoZHN0LCBuZXdfZmlsdGVyKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM3MS1cbm1tL2RhbW9uL2NvcmUuYzoxMzcyOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X29wc19maWx0ZXJzKHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMzczLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM3OS1cdFx0aWYgKHNyY19maWx0ZXIpXG5tbS9kYW1vbi9jb3JlLmM6MTM4MDpcdFx0XHRkYW1vc19jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEzODEtXHRcdGVsc2Vcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM5My1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxMzk0Olx0XHRkYW1vc19jb21taXRfZmlsdGVyX2FyZyhuZXdfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xMzk1LVx0XHRkYW1vc19hZGRfZmlsdGVyKGRzdCwgbmV3X2ZpbHRlcik7XG4tLVxubW0vZGFtb24vY29yZS5jPTE0MjY9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ2MS0vKlxubW0vZGFtb24vY29yZS5jOjE0NjI6ICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuXG5tbS9kYW1vbi9jb3JlLmMtMTQ2My0gKiBAZHN0Olx0RGVzdGluYXRpb24gc3RydWN0dXJlIHRvIHVwZGF0ZS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ3Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxNDc4OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2Rlc3RzKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzICpkc3QsXG5tbS9kYW1vbi9jb3JlLmMtMTQ3OS1cdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTUwOC1cbm1tL2RhbW9uL2NvcmUuYzoxNTA5OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE1MTAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTEyLVxubW0vZGFtb24vY29yZS5jOjE1MTM6XHRlcnIgPSBkYW1vc19jb21taXRfY29yZV9maWx0ZXJzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xNTE0LVx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xNTE1LVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vY29yZS5jOjE1MTY6XHRlcnIgPSBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE1MTctXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTIzPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX250aF9zY2hlbWUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTUzNC1cbm1tL2RhbW9uL2NvcmUuYzoxNTM1OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNTM2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU0Mi1cbm1tL2RhbW9uL2NvcmUuYzoxNTQzOlx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhKFx1MDAyNmRzdC1cdTAwM2VxdW90YSwgXHUwMDI2c3JjLVx1MDAzZXF1b3RhKTtcbm1tL2RhbW9uL2NvcmUuYy0xNTQ0LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU0OS1cbm1tL2RhbW9uL2NvcmUuYzoxNTUwOlx0ZXJyID0gZGFtb3NfY29tbWl0X2Rlc3RzKFx1MDAyNmRzdC1cdTAwM2VtaWdyYXRlX2Rlc3RzLCBcdTAwMjZzcmMtXHUwMDNlbWlncmF0ZV9kZXN0cyk7XG5tbS9kYW1vbi9jb3JlLmMtMTU1MS1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1NTMtXG5tbS9kYW1vbi9jb3JlLmM6MTU1NDpcdGVyciA9IGRhbW9zX2NvbW1pdF9maWx0ZXJzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xNTU1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTU2Mj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTY5LVx0XHRpZiAoc3JjX3NjaGVtZSkge1xubW0vZGFtb24vY29yZS5jOjE1NzA6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0KGRzdF9zY2hlbWUsIHNyY19zY2hlbWUpO1xubW0vZGFtb24vY29yZS5jLTE1NzEtXHRcdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU4Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL2NvcmUuYzoxNTg4Olx0XHRlcnIgPSBkYW1vc19jb21taXQobmV3X3NjaGVtZSwgc3JjX3NjaGVtZSk7XG5tbS9kYW1vbi9jb3JlLmMtMTU4OS1cdFx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk4PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTIyLVx0XHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkyMzpcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgXHUwMDI2cXVvdGEpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjQtXHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnF1b3RhKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDcte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwODpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDktXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDctXHRcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTA4Olx0XHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDktXHRcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjAtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTIxOlx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjItXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk4MT1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMDgtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTAwOTpcdGRhbW9zX2NvbW1pdF9xdW90YShcdTAwMjZkc3QsIFx1MDAyNnNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAxMC1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA1Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDcxLVx0fVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEwNzI6XHRlcnIgPSBkYW1vc19jb21taXRfZGVzdHMoXHUwMDI2ZHN0LCBcdTAwMjZzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNzMtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTE4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTIwLXtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTIxOlx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyMi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNldHlwZSwgc3JjLVx1MDAzZXR5cGUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMjEwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHN0cnVjdCBkYW1vcyAqZHN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjE3LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEyMTg6XHRlcnIgPSBkYW1vc19jb21taXQoZHN0LCBzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMTktXHRpZiAoZXJyKVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEyMjA6XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7ZGFtb3NfY29tbWl0IGZhaWxcJiMzNDspO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTM4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGBkYW1vbl9jb21taXRfc2NoZW1lc2AgYW5kIGBkYW1vbl9jb21taXRfY3R4YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoZXNlIHR3by4gS25vd2luZyB3aGVyZSB0aGV5JiMzOTtyZSBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBEQU1PTiYjMzk7cyBjb21taXR0aW5nIG1lY2hhbmlzbSBpcyBvcmNoZXN0cmF0ZWQgYW5kIHdoYXQgY29udGV4dCBpcyBwYXNzZWQgYXJvdW5kLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSDigJMgYXJlIHRoZXNlIGNhbGxzIHdpdGhpbiBhIHRpZ2h0IGxvb3AsIG9yIHRyaWdnZXJlZCBieSBzb21lIGV4dGVybmFsIGV2ZW50PyBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgc2lnbmlmaWNhbnRseSBhbHRlciB0aGUgZmxvdz8gVGhpcyBpcyBhbGwgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuIFRoZSBnb2FsIGlzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb21taXRtZW50IHBoYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9jb21taXRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1MzU9c3RhdGljIGludCBkYW1vc19jb21taXQoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTYxLVxubW0vZGFtb24vY29yZS5jOjE1NjI6c3RhdGljIGludCBkYW1vbl9jb21taXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNTYzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTU5OD1zdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbnRoX3RhcmdldChpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjE2LSAqL1xubW0vZGFtb24vY29yZS5jOjE2MTc6c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxubW0vZGFtb24vY29yZS5jLTE2MTgtXHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnNyYywgdW5zaWduZWQgbG9uZyBzcmNfbWluX3JlZ2lvbl9zeilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTY1MS1cbm1tL2RhbW9uL2NvcmUuYzoxNjUyOnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldChcbm1tL2RhbW9uL2NvcmUuYy0xNjUzLVx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkc3QsIGJvb2wgZHN0X2hhc19waWQsXG4tLVxubW0vZGFtb24vY29yZS5jLTE2NTgtXG5tbS9kYW1vbi9jb3JlLmM6MTY1OTpcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3QsIHNyYywgc3JjX21pbl9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTE2NjAtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjc1LSAqXG5tbS9kYW1vbi9jb3JlLmM6MTY3NjogKiBSZXZlcnQgdGFyZ2V0IHN0YXRlcyB0aGF0IGNoYW5nZWQgYnkgZGFtb25fY29tbWl0X3RhcmdldCgpLCBhbmQgY2Fubm90IGJlXG5tbS9kYW1vbi9jb3JlLmMtMTY3Ny0gKiBjbGVhbmVkIHVwIGJ5IHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0JiMzOTtzIG9wcy5jbGVhbnVwX3RhcmdldCgpLlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjc5PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE2OTQtXG5tbS9kYW1vbi9jb3JlLmM6MTY5NTpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxubW0vZGFtb24vY29yZS5jLTE2OTYtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzA4LVx0XHRpZiAoc3JjX3RhcmdldCBcdTAwMjZcdTAwMjYgIXNyY190YXJnZXQtXHUwMDNlb2Jzb2xldGUpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNzA5Olx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQoXG5tbS9kYW1vbi9jb3JlLmMtMTcxMC1cdFx0XHRcdFx0ZHN0X3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoZHN0KSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc0My1cdFx0fVxubW0vZGFtb24vY29yZS5jOjE3NDQ6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQobmV3X3RhcmdldCwgZmFsc2UsXG5tbS9kYW1vbi9jb3JlLmMtMTc0NS1cdFx0XHRcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXG4tLVxubW0vZGFtb24vY29yZS5jLTE3NTktXG5tbS9kYW1vbi9jb3JlLmM6MTc2MDpzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0LCBzdHJ1Y3QgZGFtb25fcHJlcCAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE3NjEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzY0LVxubW0vZGFtb24vY29yZS5jOjE3NjU6c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxubW0vZGFtb24vY29yZS5jLTE3NjYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVx0XHRpZiAoc3JjX3ByZXApXG5tbS9kYW1vbi9jb3JlLmM6MTc3MzpcdFx0XHRkYW1vbl9jb21taXRfcHJlcChkc3RfcHJlcCwgc3JjX3ByZXApO1xubW0vZGFtb24vY29yZS5jLTE3NzQtXHRcdGVsc2Vcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc4OS1cbm1tL2RhbW9uL2NvcmUuYzoxNzkwOnN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxubW0vZGFtb24vY29yZS5jLTE3OTEtXHRcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgwNC1cbm1tL2RhbW9uL2NvcmUuYzoxODA1OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG5tbS9kYW1vbi9jb3JlLmMtMTgwNi1cdFx0c3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MTMtXHRcdGlmIChzcmNfZmlsdGVyKVxubW0vZGFtb24vY29yZS5jOjE4MTQ6XHRcdFx0ZGFtb25fY29tbWl0X2ZpbHRlcihkc3RfZmlsdGVyLCBzcmNfZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy0xODE1LVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MzgtXG5tbS9kYW1vbi9jb3JlLmM6MTgzOTpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTg0MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NDctXHRcdFx0ZHN0X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmM6MTg0ODpcdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xubW0vZGFtb24vY29yZS5jLTE4NDktXHRcdFx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xODUwLVx0XHRcdFx0cmV0dXJuIGVycjtcbm1tL2RhbW9uL2NvcmUuYzoxODUxOlx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcbm1tL2RhbW9uL2NvcmUuYy0xODUyLVx0XHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NjctXHRcdG5ld19wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xubW0vZGFtb24vY29yZS5jOjE4Njg6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhuZXdfcHJvYmUsIHNyY19wcm9iZSk7XG5tbS9kYW1vbi9jb3JlLmMtMTg2OS1cdFx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xODcwLVx0XHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9jb3JlLmM6MTg3MTpcdFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xubW0vZGFtb24vY29yZS5jLTE4NzItXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NzctXG5tbS9kYW1vbi9jb3JlLmM6MTg3ODpzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xODc5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkwMy1cbm1tL2RhbW9uL2NvcmUuYzoxOTA0Olx0ZXJyID0gZGFtb25fY29tbWl0X3NjaGVtZXMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE5MDUtXHRpZiAoZXJyKVxubW0vZGFtb24vY29yZS5jLTE5MDYtXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9jb3JlLmM6MTkwNzpcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xOTA4LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkyNS1cdGRzdC1cdTAwM2VvcHMgPSBzcmMtXHUwMDNlb3BzO1xubW0vZGFtb24vY29yZS5jOjE5MjY6XHRlcnIgPSBkYW1vbl9jb21taXRfcHJvYmVzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xOTI3LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkzNj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk0My1cdFx0cmV0dXJuIE5VTEw7XG5tbS9kYW1vbi9jb3JlLmM6MTk0NDpcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcbm1tL2RhbW9uL2NvcmUuYy0xOTQ1LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTUyLS8qKlxubW0vZGFtb24vY29yZS5jOjE5NTM6ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG5tbS9kYW1vbi9jb3JlLmMtMTk1NC0gKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTY0LSAqL1xubW0vZGFtb24vY29yZS5jOjE5NjU6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTk2Ni17XG4tLVxubW0vZGFtb24vY29yZS5jLTE5NzItXHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vY29yZS5jOjE5NzM6XHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTk3NC1cdGlmIChlcnIpXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS1cdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9jb3JlLmM6MTk3NjpcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTk3Ny1vdXQ6XG4tLVxubW0vZGFtb24vY29yZS5jPTIwODU9aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwOTYtXG5tbS9kYW1vbi9jb3JlLmM6MjA5NzpcdFx0ZXJyID0gX19kYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBjdHhzW2ldKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDk4LVx0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzUtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzozMzY6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzM3LW91dDpcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI2Mi1cdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjYzOlx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjY0LW91dDpcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI0MDE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MTUtXHRcdHJldHVybiBQVFJfRVJSKHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9zeXNmcy5jOjI0MTY6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4LCBwYXJhbV9jdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yNDE3LVx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTMyMD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzM2LVx0fVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEzMzc6XHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMzOC1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTM2Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM2OS17XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTM3MDpcdGRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzNzEtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZXR5cGUsIHNyYy1cdTAwM2V0eXBlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQyOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ0NC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDQ1Olx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQ0Ni1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDg5PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2N0eChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MDItXHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUwMzpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNC1cdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTA1Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTA2LVx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk2O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MDctXHRzcmMtXHUwMDNlcGF1c2UgPSB0cnVlO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1MDg6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MDktXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkc3QtXHUwMDNlcGF1c2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBTeXNmcyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgdHJpZ2dlcmVkIHdoZW5ldmVyIHNvbWVvbmUgaW50ZXJhY3RzIHdpdGggREFNT04gdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaGF0IG1ha2VzIGl0IHRoZSBjcml0aWNhbCBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdXNlcnNwYWNlIGNvbnRyb2xzIERBTU9OIHZpYSBzeXNmcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYmFjayB0byBpdHMgcm9vdHMgaW4gdGhlIGNvZGUuCgpNeSBmaXJzdCBwb3J0IG9mIGNhbGwgd2lsbCBiZSBgbW0vZGFtb24vc3lzZnMuY2AgLSB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBsb2NhdGlvbiBmb3IgdGhlIGNvcmUgc3lzZnMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGxpa2VseSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIHRoZXJlLCBhbmQgaG9wZWZ1bGx5IHRoZSBmdW5jdGlvbiB3aGVyZSBpdCBpcyByZWdpc3RlcmVkIHdpdGggc3lzZnMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcmVxdWVzdHMuIEFmdGVyIHRoYXQgSSYjMzk7bGwgbW92ZSBvbiB0byBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBleHBlY3QgdGhpcyB0byBjb250YWluIHRoZSBzcGVjaWZpYyBzY2hlbWVzIHRoYXQgYXJlIGltcGxlbWVudGVkIHdpdGhpbiBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjM5Mj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM5NS0vKlxubW0vZGFtb24vc3lzZnMuYzoyMzk2OiAqIGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCgpIC0gQ29tbWl0IHVzZXIgaW5wdXRzIHRvIGEgcnVubmluZyBrZGFtb25kLlxubW0vZGFtb24vc3lzZnMuYy0yMzk3LSAqIEBrZGFtb25kOlx0VGhlIGtvYmplY3Qgd3JhcHBlciBmb3IgdGhlIGFzc29jaWF0ZWQga2RhbW9uZC5cbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDAtICovXG5tbS9kYW1vbi9zeXNmcy5jOjI0MDE6c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwMi17XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNjMyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNjQ0LVx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmM6MjY0NTpcdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI2NDYtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFF1b3RhIEdvYWwgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyB0cmlnZ2VyZWQuIEl0JiMzOTtzIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvJmx0O25yJmd0Oy9zdGF0ZWAgc3lzZnMgZW50cnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhY3Rpb24uCgpGaXJzdCwgSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgcmVsZXZhbnQgZmlsZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGNoYW5nZXMgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgLiBJIHNlZSB0aGF0IGEgY2hlY2sgaW4gdGhlIGNvZGUgdGhhdCBsaW1pdGVkIHRoZSB2YWx1ZSBvZiBgYWN0aXZlX21lbV9icGAgdG8gYmVsb3cgYDEwMDAwYCBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFzIGl0IGNoYW5nZXMgdGhlIHBlcm1pc3NpYmxlIHZhbHVlcy4KCk5leHQsIEkmIzM5O20gZXhhbWluaW5nIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCwgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLiBJIHNlZSB0aGF0IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgbm93IGNoZWNrcyBgc3JjLSZndDt0YXJnZXRfdmFsdWVgIGZvciBhIG5vbi16ZXJvIHZhbHVlLCBhbmQgcmV0dXJucyBgLUVJTlZBTGAgaWYgemVybywgdG8gcHJldmVudCBjb21taXQuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uLiBGdXJ0aGVyLCB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIGFyZSB1c2VkIGluIHRoZSBwYXJlbnQgZnVuY3Rpb24gbm93LCB3aGljaCBlbnN1cmVzIGVycm9yIHJlcG9ydGluZy4KCkkmIzM5O2xsIGNoZWNrIGZvciBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucywgb3Igb3RoZXIgc3lzZnMgaW50ZXJhY3Rpb25zIHRoYXQgYXJlIGltcG9ydGFudCB0byBEQU1PTi4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBEQU1PTiBvYnZpb3VzbHkgcmVxdWlyZXMgYENPTkZJR19EQU1PTmAsIGJ1dCBhbHNvIEkgc2VlIGl0IG5lZWRzIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fVkFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9SRUNMQUlNYC4KCkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19xdW90YV9nb2FsYCBhbmQgdGhlaXIgdXNhZ2UgYWNyb3NzIGFsbCBmaWxlcyBpbiBgbW0vZGFtb24vYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldyBmdW5jdGlvbnMgYWZmZWN0IHRoZSBvdmVyYWxsIERBTU9OIGJlaGF2aW9yLiBUaGlzIHdpbGwgcHJvdmlkZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19uZXdfcXVvdGFfZ29hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz02ODI9dm9pZCBkYW1vc19kZXN0cm95X2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy02ODctXG5tbS9kYW1vbi9jb3JlLmM6Njg4OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy02ODktXHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMjM5PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjU2LVx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjEyNTc6XHRcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtMTI1OC1cdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzUtXHRcdHJldHVybiAwO1xubW0vZGFtb24vbHJ1X3NvcnQuYzoyMzY6XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cdGlmICghZ29hbClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0MC1cdC8qIGFpbSAwLjIgJSBnb2FsIGNvbmZsaWN0LCB0byBrZWVwIGxpdHRsZSBwaW5nIHBvbmcgKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQxOlx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjQyLVx0XHRcdDEwMDAwIC0gYWN0aXZlX21lbV9icCAmIzQzOyAyKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTIzNS1cdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVx0XHRcdFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ0Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTI0NS1cdFx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjU6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChzeXNmc19nb2FsLVx1MDAzZW1ldHJpYyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY2LVx0XHRcdFx0c3lzZnNfZ29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTEwLVx0XHQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MTE6XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkxMi1cdFx0XHRcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk3MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDcwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIElzc3VlcyBpbiBEQU1PTiBRdW90YSBDb21taXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIG5vdyB2YWxpZGF0ZXMgdGhlIHRhcmdldCB2YWx1ZSB3aXRoIGBpZiAoIXNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlKSByZXR1cm4gLUVJTlZBTDtgLiAgR29vZCwgdGhhdCYjMzk7cyBhIHNhbml0eSBjaGVjay4gIEl0IGxvb2tzIGxpa2UgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgcHJvcGFnYXRlcyBlcnJvcnMgZnJvbSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGFuZCBoYW5kbGVzIHRoZSBjbGVhbnVwIG9mIG5ld2x5IGFsbG9jYXRlZCBnb2FscyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KClRoZSB0aGluZyB0aGF0JiMzOTtzIGJ1Z2dpbmcgbWUgaXMgYSBwb3NzaWJsZSBwYXJ0aWFsIGNvbW1pdCBvciBtZW1vcnkgbGVhayBpc3N1ZSB3aXRoaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUgKDEyNDQtMTI2OCkuIEkgc2VlIHRoZSBuZXN0ZWQgbG9vcHMgdGhlcmUgd2hpY2ggaXRlcmF0ZSB0aHJvdWdoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcXVvdGFzLiBJZiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBlbmNvdW50ZXJzIGFuIGVycm9yIHBhcnR3YXkgdGhyb3VnaCBlaXRoZXIgb2YgdGhvc2UgbG9vcHMsIHRoZSBgZHN0YCBxdW90YSBjb3VsZCBlbmQgdXAgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIOKAkyBzb21lIGdvYWxzIG1pZ2h0IGJlIG1vZGlmaWVkIG9yIGRlc3Ryb3llZCwgb3IgcGFydGlhbGx5IHVwZGF0ZWQuIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGZvbGxvdyB0aGUgZmxvdy4KCldoYXQmIzM5O3MgcmVhbGx5IGNvbmNlcm5pbmcgaXMgdGhhdCBjYWxsZXJzLCBzdWNoIGFzIGBkYW1vbl9jb21taXRfY3R4YCwgdXNlIGEgdGVtcG9yYXJ5IGB0ZXN0X2N0eGAgdG8gdGVzdCBjb21taXRzLiAgVGhhdCBoZWxwcywgYnV0IGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBkaXJlY3RseSBjYWxscyBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBvbiBgc2NoZW1lLSZndDtxdW90YWAuIFNvLCBpZiBhbiBlcnJvciBoYXBwZW5zIGR1cmluZyB0aGUgcXVvdGEgY29tbWl0IHdpdGhpbiB0aGUgc3lzZnMgcGF0aCwgdGhlIGBzY2hlbWUtJmd0O3F1b3RhYCBjYW4gYmVjb21lIGNvcnJ1cHRlZC4gVGhhdCYjMzk7cyBhIGRpcmVjdCBwb3RlbnRpYWwgc291cmNlIG9mIGRhdGEgY29ycnVwdGlvbi4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVycm9ycyBhcmUgaGFuZGxlZCB0aGVyZSBhbmQgaWYgdGhlIHBvdGVudGlhbCBmb3IgdGhpcyBpbmNvbnNpc3RlbnQgc3RhdGUgaXMgYWRkcmVzc2VkIGF0IGFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4OTg6XHRpbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbjI4OTk6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuMjkwMDpcdHtcbjI5MDE6XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuMjkwMjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge307XG4yOTAzOlx0XHRpbnQgaSA9IDA7XG4yOTA0Olx0XG4yOTA1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZxdW90YS5nb2Fscyk7XG4yOTA2Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcbjI5MDc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xuMjkwODpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZywgKmdfbmV4dDtcbjI5MDk6XHRcdFx0aW50IGVycjtcbjI5MTA6XHRcbjI5MTE6XHRcdFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cbjI5MTI6XHRcdFx0aWYgKGkgXHUwMDNlPSBzeXNmc19zY2hlbWVzLVx1MDAzZW5yKVxuMjkxMzpcdFx0XHRcdGJyZWFrO1xuMjkxNDpcdFxuMjkxNTpcdFx0XHRzeXNmc19zY2hlbWUgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldO1xuMjkxNjpcdFx0XHRlcnIgPSBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoc3lzZnNfc2NoZW1lLVx1MDAzZXF1b3Rhcy1cdTAwM2Vnb2FscyxcbjI5MTc6XHRcdFx0XHRcdFx1MDAyNnF1b3RhKTtcbjI5MTg6XHRcdFx0aWYgKGVycikge1xuMjkxOTpcdFx0XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnF1b3RhKVxuMjkyMDpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xuMjkyMTpcdFx0XHRcdHJldHVybiBlcnI7XG4yOTIyOlx0XHRcdH1cbjI5MjM6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgXHUwMDI2cXVvdGEpO1xuMjkyNDpcdFx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcdTAwMjZxdW90YSlcbjI5MjU6XHRcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XG4yOTI2Olx0XHRcdGlmIChlcnIpXG4yOTI3Olx0XHRcdFx0cmV0dXJuIGVycjtcbjI5Mjg6XHRcdFx0aSYjNDM7JiM0Mzs7XG4yOTI5Olx0XHR9XG4yOTMwOlx0XHRyZXR1cm4gMDtcbjI5MzE6XHR9XG4yOTMyOlx0XG4yOTMzOlx0dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcbjI5MzQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4yOTM1Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbjI5MzY6XHR7XG4yOTM3Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUsIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFF1b3RhIFNjb3JlcyBhbmQgQ29tbWl0IEludm9jYXRpb24gd2l0aGluIHN5c2ZzKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGBzeXNmc2Agc2NoZW1lcyBmb3IgcXVvdGEgc2NvcmVzIGFuZCBjb21taXQgYXJlIGFjdHVhbGx5ICp1c2VkKi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIGNvbnRleHQgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHF1b3RhIHNjb3JlcyB0aHJvdWdoIHRoZSBgc3lzZnNgIGludGVyZmFjZS4gVGhpcyB0cmFjZSB3aWxsIHRlbGwgbWUgbW9yZSBhYm91dCBob3cgcXVvdGFzIGFyZSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTUxPWludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTMtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk3LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTg6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5OS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjQyMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNDM0LVx0c3lzZnNfY3R4ID0gc3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF07XG5tbS9kYW1vbi9zeXNmcy5jOjI0MzU6XHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXHUwMDNlc2NoZW1lcywgY3R4KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjQzNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzU2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBHb2FsIENvbW1pdCBNZWNoYW5pc20qKgoKT2theSwgc28gdGhlIGBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc2AgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHdyaXRpbmcgYERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMU2AgdG8gdGhhdCBzcGVjaWZpYyBzeXNmcyBlbnRyeTogYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLyZsdDtuciZndDsvc3RhdGVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBtYXBwaW5ncyBhcmUgY29ycmVjdCwgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBhdCB0aGUgZGVlcGVyIGltcGxpY2F0aW9ucyBvZiB0aGUgY29tbWl0IHByb2Nlc3MuIEtub3dpbmcgdGhlIHNwZWNpZmljIGZpbGUgYW5kIGNvbW1hbmQgYWxzbyBhbGxvd3MgbWUgdG8gcXVpY2tseSBuYXZpZ2F0ZSB0aGUgY29kZWJhc2UgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT05fU1lTRlNfQ01EX0NPTU1JVF9TQ0hFTUVTX1FVT1RBX0dPQUxTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMDc1PWVudW0gZGFtb25fc3lzZnNfY21kIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwODItXHQvKlxubW0vZGFtb24vc3lzZnMuYzoyMDgzOlx0ICogQERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzogQ29tbWl0IHRoZSBxdW90YSBnb2Fsc1xubW0vZGFtb24vc3lzZnMuYy0yMDg0LVx0ICogdG8gREFNT04uXG5tbS9kYW1vbi9zeXNmcy5jLTIwODUtXHQgKi9cbm1tL2RhbW9uL3N5c2ZzLmM6MjA4NjpcdERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUyxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA4Ny1cdC8qXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNjMyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNjQ1LVx0XHRcdFx0ZGFtb25fc3lzZnNfY29tbWl0X2lucHV0LCBrZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmM6MjY0NjpcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NPTU1JVF9TQ0hFTUVTX1FVT1RBX0dPQUxTOlxubW0vZGFtb24vc3lzZnMuYy0yNjQ3LVx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5OTcKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogMTEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogREFNT04gUXVvdGEgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIHByb21pc2luZyBmb3IgZnV6emluZy4gSXQmIzM5O3MgdG91Y2hpbmcgY29kZSB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMsIHdoaWNoIGlzIGEgYmlnIHdpbi4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgpGaXJzdCwgdGhlIGFjY2Vzc2liaWxpdHkuIFRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgdGhleSBpbXBhY3QgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AuIFRoZXNlIGFyZSAqZGlyZWN0bHkqIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIHVzaW5nIGNvbW1hbmRzIGxpa2UgYGNvbW1pdGAgYW5kIGBjb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc2AuIFRoZSBjaGFuZ2VzIHRvIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhcmUgYWxzbyByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIG9yIHN5c2ZzLiBUaGlzIGlzIGFsbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBzbyBpdCBjaGVja3Mgb3V0LgoKSXMgaXQgd29ydGggZnV6emluZz8gVGhlIGNyaXRlcmlhIHN0YXRlIHRoYXQgbW9kaWZpY2F0aW9ucyB0byByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgYXJlIGF1dG9tYXRpY2FsbHkgd29ydGggZnV6emluZy4gVGhpcyBwYXRjaCAqZGVmaW5pdGVseSogZml0cyB0aGF0IGRlc2NyaXB0aW9uLiBXZSBoYXZlIGNoYW5nZXMgdG8gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCwgd2hpY2ggbm93IHJldHVybnMgYW4gZXJyb3Igd2hlcmUgaXQgcHJldmlvdXNseSBkaWQgbm90aGluZywgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIHdpdGggZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAuIEFkZGl0aW9uYWxseSwgYGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2Fsc2AgaGFkIGEgY2hlY2sgcmVtb3ZlZC4gU28sIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYFRSVUVgLgoKTm93LCBmb3IgaWRlbnRpZnlpbmcgdGhlIGtleSBgRm9jdXNTeW1ib2xzYC4gV2UgbmVlZCB0byBwaW5wb2ludCB0aGUgYWx0ZXJlZCBvciBkaXJlY3QgZW50cnkgcG9pbnRzLiBJJiMzOTt2ZSBjb21waWxlZCBhIGxpc3Q6CgoqICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYAoqICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AKKiAgIGBkYW1vc19jb21taXRfcXVvdGFgCiogICBgZGFtb3NfY29tbWl0YAoqICAgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYAoqICAgYGRhbW9uX2NvbW1pdF9jdHhgCiogICBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YAoqICAgYGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzYAoqICAgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgCiogICBgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzYAoqICAgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgCgpPZiBhbGwgb2YgdGhvc2UsIEkmIzM5O2xsIHNlbGVjdCB0aGUgbW9zdCBzcGVjaWZpYyBvbmVzIHRvIHRoZSBsb2dpYyBiZWluZyBjaGFuZ2VkLCB0aGF0IGFyZW4mIzM5O3QgdWJpcXVpdG91cyB0aHJvdWdob3V0IHRoZSBzeXN0ZW0uIFNvIHRoZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmU6CgoqICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AKKiAgIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAKKiAgIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYAoqICAgYGRhbW9uX2NvbW1pdF9jdHhgCiogICBgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzYAoKTmV4dCwgdGhlIGBFbmFibGVDb25maWdzYC4gV2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIHRoZSByZWxldmFudCBEQU1PTiBmdW5jdGlvbmFsaXR5LiBMb29raW5nIGF0IGBtbS9kYW1vbi9LY29uZmlnYDoKCiogICBgREFNT05gCiogICBgREFNT05fU1lTRlNgIChkZXBlbmRzIG9uIGBEQU1PTiAmYW1wOyZhbXA7IFNZU0ZTYCkKKiAgIGBEQU1PTl9QQUREUmAgKGRlcGVuZHMgb24gYERBTU9OICZhbXA7JmFtcDsgTU1VYCkKKiAgIGBEQU1PTl9WQUREUmAKKiAgIGBEQU1PTl9MUlVfU09SVGAgKGRlcGVuZHMgb24gYERBTU9OX1BBRERSYCkKKiAgIGBEQU1PTl9SRUNMQUlNYCAoZGVwZW5kcyBvbiBgREFNT05fUEFERFJgKQoKQ29uc2lkZXJpbmcgdGhlIGZlYXR1cmVzIG1vZGlmaWVkLCB3ZSBuZWVkIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9MUlVfU09SVGAgZW5hYmxlZCwgYWxvbmcgd2l0aCB0aGUgcmVxdWlyZWQgU1lTRlMgYW5kIE1NVS4KCkZpbmFsbHksIGxldCYjMzk7cyB2ZXJpZnkgZXZlcnl0aGluZzoKCiogICBgV29ydGhGdXp6aW5nYDogYFRSVUVgCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtEQU1PTiYjMzQ7LCAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssICYjMzQ7REFNT05fUEFERFImIzM0OywgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwmIzM0OywgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssICYjMzQ7ZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyYjMzQ7LCAmIzM0O2RhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyYjMzQ7XWAKKiAgIGBSZWFzb25pbmdgOiBTb2xpZCBhbmQgY2xlYXIuCgpMb29rcyBnb29kIHRvIG1lLiBSZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19jb21taXRfcXVvdGFfZ29hbCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBEQU1PTiBjb3JlIHF1b3RhIGdvYWwgY29tbWl0IGxvZ2ljIChgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCkgdG8gdmFsaWRhdGUgdGhhdCBgc3JjLVx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQWxsIHN0cnVjdCBmaWVsZHMgbWFuaXB1bGF0ZWQgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgZXhwb3NlZCBvciBwYXNzZWQgYWNyb3NzIHVzZXIva2VybmVsIGJvdW5kYXJpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGFsbG9jYXRpb24vbWVtb3J5IG1hbmFnZW1lbnQgZmFpbHVyZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRpYWdub3N0aWNzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MzVlOTA4OGJlNzQyMWQ1ZjIxNGZlYzljNDEwYzRmMTBmMDc1ZTNlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMDoyMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA4NjU1MGM0MTQ2ZjUzLi5mNWU3ZWQ5ZjVlMTU5IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0xMjExLDE0ICYjNDM7MTIxMSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbigKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKAomIzQzO3N0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoCiAJCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpCiB7CiYjNDM7CWlmICghc3JjLSZndDt0YXJnZXRfdmFsdWUpCiYjNDM7CQlyZXR1cm4gIC1FSU5WQUw7CiAJZHN0LSZndDttZXRyaWMgPSBzcmMtJmd0O21ldHJpYzsKIAlkc3QtJmd0O3RhcmdldF92YWx1ZSA9IHNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlOwogCWlmIChkc3QtJmd0O21ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKQogCQlkc3QtJmd0O2N1cnJlbnRfdmFsdWUgPSBzcmMtJmd0O2N1cnJlbnRfdmFsdWU7CiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xMjM2LDE0ICYjNDM7MTIzOSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgKIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKQogewogCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsOwotCWludCBpID0gMCwgaiA9IDA7CiYjNDM7CWludCBpID0gMCwgaiA9IDAsIGVycjsKIAogCWRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShkc3RfZ29hbCwgbmV4dCwgZHN0KSB7CiAJCXNyY19nb2FsID0gZGFtb3NfbnRoX3F1b3RhX2dvYWwoaSYjNDM7JiM0MzssIHNyYyk7Ci0JCWlmIChzcmNfZ29hbCkKLQkJCWRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7Ci0JCWVsc2UKJiM0MzsJCWlmIChzcmNfZ29hbCkgewomIzQzOwkJCWVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0gZWxzZSB7CiAJCQlkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpOwomIzQzOwkJfQogCX0KIAlkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykgewogCQlpZiAoaiYjNDM7JiM0MzsgJmx0OyBpKQpAQCAtMTI1Miw3ICYjNDM7MTI1OCwxMSBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYykKIAkJCQlzcmNfZ29hbC0mZ3Q7bWV0cmljLCBzcmNfZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlKTsKIAkJaWYgKCFuZXdfZ29hbCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpOwomIzQzOwkJZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlkYW1vc19mcmVlX3F1b3RhX2dvYWwobmV3X2dvYWwpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAJCWRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jCmluZGV4IGJkODQ3ODI5YTk5MDcuLjdkZjQ1ZjlhMGIzYWUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuYwpAQCAtMjMzLDggJiM0MzsyMzMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsCiAKIAlpZiAoIWFjdGl2ZV9tZW1fYnApCiAJCXJldHVybiAwOwotCWlmICgxMDAwMCAmbHQ7IGFjdGl2ZV9tZW1fYnApCi0JCXJldHVybiAtRUlOVkFMOwogCWdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTsKIAlpZiAoIWdvYWwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jCmluZGV4IGJlYTQ1Yzg3Y2M5YmUuLjI3ZGM4OGJkZjdhMGUgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvZGFtb24vbXRpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9zYW1wbGVzL2RhbW9uL210aWVyLmMKQEAgLTE2MSw5ICYjNDM7MTYxLDYgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKQogCWlmICghc2NoZW1lKQogCQlnb3RvIGZyZWVfb3V0OwogCWRhbW9uX3NldF9zY2hlbWVzKGN0eCwgJmFtcDtzY2hlbWUsIDEpOwotCS8qIHplcm8gdGFyZ2V0IHZhbHVlIGNhdXNlcyBkaXZpc2lvbiBieSB6ZXJvIGluIGRhbW9zX3F1b3RhX3N0b3JlKCkgKi8KLQlpZiAoIW5vZGUwX21lbV91c2VkX2JwIHx8ICFub2RlMF9tZW1fZnJlZV9icCkKLQkJZ290byBmcmVlX291dDsKIAlxdW90YV9nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoCiAJCQlwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6CiAJCQlEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgREFNT04gcGF0Y2ggYW5kIHNlZSBpZiB3ZSBoYXZlIGFueSBLTVNBTiBjb25jZXJucyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlczogYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgYW5kIGBzYW1wbGVzL2RhbW9uL210aWVyLmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEyMTEuIEkgd2FudCB0byB1bmRlcnN0YW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGA6IGl0cyBmdW5jdGlvbiwgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGgsIGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIHBhdGggd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgdXNlZC4gSSYjMzk7bGwgbWV0aWN1bG91c2x5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24sIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHJlYWQgb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWdpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGdvYWwgaXMgY29tbWl0dGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDA6XHRcdFx0YnJlYWs7XG4xMjAxOlx0XHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcbjEyMDI6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxuMTIwMzpcdFx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbjEyMDQ6XHRcdFx0ZHN0LVx1MDAzZW1lbWNnX2lkID0gc3JjLVx1MDAzZW1lbWNnX2lkO1xuMTIwNTpcdFx0XHRicmVhaztcbjEyMDY6XHRcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9FTElHSUJMRV9NRU1fQlA6XG4xMjA3Olx0XHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuMTIwODpcdFx0XHRicmVhaztcbjEyMDk6XHRcdGRlZmF1bHQ6XG4xMjEwOlx0XHRcdGJyZWFrO1xuMTIxMTpcdFx0fVxuMTIxMjpcdH1cbjEyMTM6XHRcbjEyMTQ6XHRzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuMTIxNTpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuMTIxNjpcdHtcbjEyMTc6XHRcdGlmICghc3JjLVx1MDAzZXRhcmdldF92YWx1ZSlcbjEyMTg6XHRcdFx0cmV0dXJuICAtRUlOVkFMO1xuMTIxOTpcdFx0ZHN0LVx1MDAzZW1ldHJpYyA9IHNyYy1cdTAwM2VtZXRyaWM7XG4xMjIwOlx0XHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbjEyMjE6XHRcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4xMjIyOlx0XHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4xMjIzOlx0XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4xMjI0Olx0XHRyZXR1cm4gMDtcbjEyMjU6XHR9XG4xMjI2Olx0XG4xMjI3Olx0LyoqXG4xMjI4Olx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cbjEyMjk6XHQgKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cbjEyMzA6XHQgKiBAc3JjOlx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT1MgcXVvdGEuXG4xMjMxOlx0ICpcbjEyMzI6XHQgKiBDb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmb3IgcXVvdGEgZ29hbHMgZnJvbSBAc3JjIHRvIEBkc3QuICBVc2Vyc1xuMTIzMzpcdCAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xuMTIzNDpcdCAqIERBTU9OIGNvbnRleHRzLCBpbnN0ZWFkIG9mIG1hbnVhbCBpbi1wbGFjZSB1cGRhdGVzLlxuMTIzNTpcdCAqXG4xMjM2Olx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG4xMjM3Olx0ICogZGFtb25fY2FsbCgpLlxuMTIzODpcdCAqL1xuMTIzOTpcdGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuMTI0MDpcdHtcbjEyNDE6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xuMTI0MjpcdFx0aW50IGkgPSAwLCBqID0gMCwgZXJyO1xuMTI0MzpcdFxuMTI0NDpcdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGRzdF9nb2FsLCBuZXh0LCBkc3QpIHtcbjEyNDU6XHRcdFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpJiM0MzsmIzQzOywgc3JjKTtcbjEyNDY6XHRcdFx0aWYgKHNyY19nb2FsKSB7XG4xMjQ3Olx0XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbjEyNDg6XHRcdFx0XHRpZiAoZXJyKVxuMTI0OTpcdFx0XHRcdFx0cmV0dXJuIGVycjtcbjEyNTA6XHRcdFx0fSBlbHNlIHtcbjEyNTE6XHRcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpO1xuMTI1MjpcdFx0XHR9XG4xMjUzOlx0XHR9XG4xMjU0Olx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xuMTI1NTpcdFx0XHRpZiAoaiYjNDM7JiM0MzsgXHUwMDNjIGkpXG4xMjU2Olx0XHRcdFx0Y29udGludWU7XG4xMjU3Olx0XHRcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4xMjU4Olx0XHRcdFx0XHRzcmNfZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4xMjU5Olx0XHRcdGlmICghbmV3X2dvYWwpXG4xMjYwOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMjYxOlx0XHRcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XG4xMjYyOlx0XHRcdGlmIChlcnIpIHtcbjEyNjM6XHRcdFx0XHRkYW1vc19mcmVlX3F1b3RhX2dvYWwobmV3X2dvYWwpO1xuMTI2NDpcdFx0XHRcdHJldHVybiBlcnI7XG4xMjY1Olx0XHRcdH1cbjEyNjY6XHRcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XG4xMjY3Olx0XHR9XG4xMjY4Olx0XHRyZXR1cm4gMDtcbjEyNjk6XHR9XG4xMjcwOlx0XG4xMjcxOlx0c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuMTI3MjpcdHtcbjEyNzM6XHRcdGludCBlcnI7XG4xMjc0Olx0XG4xMjc1Olx0XHRkc3QtXHUwMDNlcmVzZXRfaW50ZXJ2YWwgPSBzcmMtXHUwMDNlcmVzZXRfaW50ZXJ2YWw7XG4xMjc2Olx0XHRkc3QtXHUwMDNlbXMgPSBzcmMtXHUwMDNlbXM7XG4xMjc3Olx0XHRkc3QtXHUwMDNlc3ogPSBzcmMtXHUwMDNlc3o7XG4xMjc4Olx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xuMTI3OTpcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBRdW90YSBNYW5hZ2VtZW50IExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbmQgYGRhbW9zX3F1b3RhX2dvYWxgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgKm5ldyogcXVvdGEgZ29hbCBnZXRzIHNldCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBob3cgdGhhdCB2YWx1ZSBpcyBhY3R1YWxseSBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgZm9yIHVzZSBsYXRlciBvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdmFyaWFibGUmIzM5O3MgbGlmZWN5Y2xlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGRhbW9zX25ld19xdW90YV9nb2FsYCBpcyBpbml0aWFsbHkgZGVmaW5lZC4gVGhlbiwgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIGBkYW1vc19xdW90YV9nb2FsYC4gV2hlcmUgZG9lcyBpdHMgdmFsdWUgb3JpZ2luYXRlPyBJcyBpdCBhIGNvcHkgb2YgYGRhbW9zX25ld19xdW90YV9nb2FsYD8gSXMgdGhlcmUgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIG9yIHRyYW5zZm9ybWF0aW9uIGludm9sdmVkPyBLbm93aW5nIHRoaXMgd2lsbCByZXZlYWwgdGhlIGVudGlyZSBxdW90YSBhc3NpZ25tZW50IG9yIGNhbGN1bGF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX25ld19xdW90YV9nb2FsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0xMDc5PXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZik7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA4MC1cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDgxOnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDgyLVx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NjgyPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjg3LVxubW0vZGFtb24vY29yZS5jOjY4ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtNjg5LVx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIzOT1pbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI1Ni1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzoxMjU3Olx0XHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTEyNTgtXHRcdFx0XHRzcmNfZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM1LVx0XHRyZXR1cm4gMDtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM2Olx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDAtXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MTpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cdFx0XHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgJiM0MzsgMik7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNy1cdFx0XHRcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI0My1cdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXHRcdGlmICghZ29hbClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2NC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODY1Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cdTAwM2VtZXRyaWMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cdFx0XHRcdHN5c2ZzX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODkyPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkxMC1cdFx0ICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTExOlx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoZHN0X2dvYWxzW2ldLm1ldHJpYyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MTItXHRcdFx0XHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9Nzg9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xNjMtXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTY0Olx0cXVvdGFfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE2NS1cdFx0XHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgUXVvdGEgR29hbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9zX25ld19xdW90YV9nb2FsYCBmdW5jdGlvbi4gSXQmIzM5O3MgaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc3RhcnQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIGhhbmRsZXMgbmV3IHF1b3RhIGdvYWxzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBtYWluIG1lbW9yeSBtYW5hZ2VtZW50IHBhcnRzLiBXaGF0IGV4YWN0bHkgYXJlIHRoZSBkZXNpZ24gY2hvaWNlcyBoZXJlPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBhdCBwbGF5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj8gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBwcm92aWRlcywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgREFNT04gbW9kdWxlcyBhbmQgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgdGhlIERBTU9OIGxpZmVjeWNsZSwgc28gYW55IGJ1Z3MgaW4gdGhpcyBhcmVhIGNvdWxkIGNyZWF0ZSBtYWpvciBpc3N1ZXMgZG93bnN0cmVhbS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdH1cbiA2ODE6XHRcbiA2ODI6XHR2b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4gNjgzOlx0e1xuIDY4NDpcdFx0ZGFtb3NfZGVsX2ZpbHRlcihmKTtcbiA2ODU6XHRcdGRhbW9zX2ZyZWVfZmlsdGVyKGYpO1xuIDY4NjpcdH1cbiA2ODc6XHRcbiA2ODg6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4gNjg5Olx0XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuIDY5MDpcdFx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcbiA2OTE6XHR7XG4gNjkyOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiA2OTM6XHRcbiA2OTQ6XHRcdGdvYWwgPSBrbWFsbG9jX29iaigqZ29hbCk7XG4gNjk1Olx0XHRpZiAoIWdvYWwpXG4gNjk2Olx0XHRcdHJldHVybiBOVUxMO1xuIDY5NzpcdFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWM7XG4gNjk4Olx0XHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbiA2OTk6XHRcdGlmIChtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuIDcwMDpcdFx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcbiA3MDE6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmdvYWwtXHUwMDNlbGlzdCk7XG4gNzAyOlx0XHRyZXR1cm4gZ29hbDtcbiA3MDM6XHR9XG4gNzA0Olx0XG4gNzA1Olx0dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxuIDcwNjpcdHtcbiA3MDc6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Zy1cdTAwM2VsaXN0LCBcdTAwMjZxLVx1MDAzZWdvYWxzKTtcbiA3MDg6XHR9XG4gNzA5Olx0XG4gNzEwOlx0c3RhdGljIHZvaWQgZGFtb3NfZGVsX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG4gNzExOlx0e1xuIDcxMjpcdFx0bGlzdF9kZWwoXHUwMDI2Zy1cdTAwM2VsaXN0KTtcbiA3MTM6XHR9XG4gNzE0Olx0XG4gNzE1Olx0c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxuIDcxNjpcdHtcbiA3MTc6XHRcdGtmcmVlKGcpO1xuIDcxODpcdH1cbiA3MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFF1b3RhIEdvYWwgU3RydWN0dXJlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGJlYXJpbmdzIHN0cmFpZ2h0LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBkZWZpbml0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcywgcGFydGljdWxhcmx5IGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgd2FudCB0byBjaGVjayB0aGUgbGF5b3V0LCB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgbWVtYmVycywgYW5kIGFueSBwYWRkaW5nIG9yIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGluZGl2aWR1YWwgcXVvdGEgZ29hbCBmaWVsZHMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCBncmFzcCBiZWZvcmUgSSBzdGFydCB0aGUgYW5hbHlzaXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGtleSBwYXJhbWV0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTE2MT1lbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk3LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE5ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk5LVx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERBTU9OJiMzOTtzIENvcmUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE5OC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgdXN1YWwgc3RydWN0dXJlIG9mIHRoZXNlIGhlYWRlcnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBvciBwZXJoYXBzIHNvbWUgbWFjcm8gZGVjbGFyYXRpb25zIHRoYXQgZm9ybSB0aGUgYmFja2JvbmUgb2YgdGhlIERhdGEgQWNjZXNzIE1PTml0b3IgKERBTU9OKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBwcm9iYWJseSByZXNpZGUsIHRob3NlIHdoaWNoIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBtb25pdG9yZWQgcmVnaW9ucywgbW9uaXRvcmluZyBjb250ZXh0cywgYW5kIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobXMuIEkmIzM5O20gaG9waW5nIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04gcmVwcmVzZW50cyBhbmQgaGFuZGxlcyB0aGUgbW9uaXRvcmVkIG1lbW9yeSByZWdpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gRnJvbSB0aGVyZSBJJiMzOTtsbCBsaWtlbHkgYnJhbmNoIG91dCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29yZSBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgc3VjaCBhcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdCAqIElmIEBtZXRyaWMgaXMgREFNT1NfUVVPVEFfTk9ERV9NRU1DR197VVNFRCxGUkVFfV9CUCwgQG5pZCBhbmQgQG1lbWNnX2lkXG4gMTk2Olx0ICogcmVwcmVzZW50cyB0aGUgbm9kZSBpZCBhbmQgdGhlIGNncm91cCB0byBhY2NvdW50IHRoZSB1c2VkIG1lbW9yeSBmb3IuXG4gMTk3Olx0ICovXG4gMTk4Olx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuIDE5OTpcdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWM7XG4gMjAwOlx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcbiAyMDE6XHRcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbiAyMDI6XHRcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXG4gMjAzOlx0XHR1bmlvbiB7XG4gMjA0Olx0XHRcdHN0cnVjdCB7XG4gMjA1Olx0XHRcdFx0aW50IG5pZDtcbiAyMDY6XHRcdFx0XHR1NjQgbWVtY2dfaWQ7XG4gMjA3Olx0XHRcdH07XG4gMjA4Olx0LyogcHJpdmF0ZTogKi9cbiAyMDk6XHRcdFx0LyogTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kgKi9cbiAyMTA6XHRcdFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xuIDIxMTpcdFxuIDIxMjpcdFx0fTtcbiAyMTM6XHQvKiBwcml2YXRlOiAqL1xuIDIxNDpcdFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiAyMTU6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiAyMTY6XHR9O1xuIDIxNzpcdFxuIDIxODpcdC8qKlxuIDIxOTpcdCAqIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciAtIEdvYWwtYmFzZWQgcXVvdGEgdHVuaW5nIGxvZ2ljLlxuIDIyMDpcdCAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1Q6XHRBaW0gbG9uZyB0ZXJtIGNvbnNpc3RlbnQgcXVvdGEuXG4gMjIxOlx0ICogQERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUw6XHRBaW0gemVybyBxdW90YSBhc2FwLlxuIDIyMjpcdCAqL1xuIDIyMzpcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG4gMjI0Olx0XHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QsXG4gMjI1Olx0XHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxuIDIyNjpcdH07XG4gMjI3Olx0XG4gMjI4Olx0LyoqXG4gMjI5Olx0ICogc3RydWN0IGRhbW9zX3F1b3RhIC0gQ29udHJvbHMgdGhlIGFnZ3Jlc3NpdmVuZXNzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXG4gMjMwOlx0ICogQHJlc2V0X2ludGVydmFsOlx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbiAyMzE6XHQgKiBAbXM6XHRcdFx0TWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuXG4gMjMyOlx0ICogQHN6Olx0XHRcdE1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC5cbiAyMzM6XHQgKiBAZ29hbF90dW5lcjpcdFx0R29hbC1iYXNlZCBAZXN6IHR1bmluZyBhbGdvcml0aG0gdG8gdXNlLlxuIDIzNDpcdCAqIEBlc3o6XHRcdEVmZmVjdGl2ZSBzaXplIHF1b3RhIGluIGJ5dGVzLlxuIDIzNTpcdCAqIEBmYWlsX2NoYXJnZV9udW06XHRGYWlsZWQgcmVnaW9ucyBjaGFyZ2UgcmF0ZSBudW1lcmF0b3IuXG4gMjM2Olx0ICogQGZhaWxfY2hhcmdlX2Rlbm9tOlx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgZGVub21pbmF0b3IuXG4gMjM3Olx0ICpcbiAyMzg6XHQgKiBAd2VpZ2h0X3N6Olx0XHRXZWlnaHQgb2YgdGhlIHJlZ2lvbiYjMzk7cyBzaXplIGZvciBwcmlvcml0aXphdGlvbi5cbiAyMzk6XHQgKiBAd2VpZ2h0X25yX2FjY2Vzc2VzOlx0V2VpZ2h0IG9mIHRoZSByZWdpb24mIzM5O3MgbnJfYWNjZXNzZXMgZm9yIHByaW9yaXRpemF0aW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFF1b3RhIEdvYWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB1cCBlcnJvciBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiBhcm91bmQgREFNT04mIzM5O3MgcXVvdGEgZ29hbCBtYW5hZ2VtZW50LiBGaXJzdCwgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGFuIGBpbnRgIGFuZCBpbmNsdWRlcyBhIGNydWNpYWwgY2hlY2s6IGBpZiAoIXNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlKSByZXR1cm4gLUVJTlZBTDtgLiAgVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBvciBzaW1pbGFyIGlzc3VlIHdoZXJlIGEgemVybyB0YXJnZXQgdmFsdWUgbWlnaHQgaGF2ZSBjYXVzZWQgcHJvYmxlbXMuIFRoZSBwYXRjaCB0aGVuIHByb3BhZ2F0ZXMgdGhpcyByZXR1cm4gdmFsdWUgdXAgdG8gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGFuZCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZXJyb3JzIGZyb20gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCwgaW5jbHVkaW5nIGZyZWVpbmcgYG5ld19nb2FsYCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGl0cyBjb21taXQuCgpOZXh0LCBpbiBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIHRoYXQgc2VlbWluZ2x5IGFyYml0cmFyeSBjaGVjayAoYGlmICgxMDAwMCAmbHQ7IGFjdGl2ZV9tZW1fYnApIHJldHVybiAtRUlOVkFMO2ApIGluIGBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoKWAgaXMgZ29uZS4gVGhpcyBsaWtlbHkgbWVhbnMgdGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgaGFuZGxlZCBlbHNld2hlcmUgYW5kIHRoZSBjaGVjayBpcyByZWR1bmRhbnQgb3Igbm8gbG9uZ2VyIHJlbGV2YW50LgoKRmluYWxseSwgaW4gYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AsIHRoZSBjaGVjayBmb3IgemVybyBgbm9kZTBfbWVtX3VzZWRfYnBgIG9yIGBub2RlMF9tZW1fZnJlZV9icGAgaXMgcmVtb3ZlZC4gVGhpcyBtYWtlcyBzZW5zZTsgc2luY2UgdGFyZ2V0IHZhbHVlIHZhbGlkYXRpb24gaXMgbm93IGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAsIHRoZXNlIGNoZWNrcyBhdCB0aGUgc2FtcGxlIGxldmVsIGFyZSBzdXBlcmZsdW91cy4gVGhpcyBzaW1wbGlmaWNhdGlvbiBpcyBnZW5lcmFsbHkgZ29vZCBjb2RlIGh5Z2llbmUuCgpOb3csIGZvciB0aGUgcmVhbGx5IGNyaXRpY2FsIHBhcnQ6IHNlY3VyaXR5LiAgSSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSB2dWxuZXJhYmlsaXRpZXMuICBJIG5lZWQgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gIFRoZSBwYXRjaCAqZG9lc24mIzM5O3QqIGFwcGVhciB0byBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gcHJvYmxlbXMgdGhlcmUuIEkgYWxzbyBzZWUgbm8gaW5kaWNhdGlvbiBvZiBuZXcgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGRhdGEsIGFuZCB0aGF0IGBzcmMtJmd0O3RhcmdldF92YWx1ZWAgY2hlY2sgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBpcyB2ZXJ5IHJlYXNzdXJpbmcuICBUaGUgYG5ld19nb2FsYCBhbGxvY2F0aW9uIGFuZCBzdWJzZXF1ZW50IGZyZWVpbmcgaW4gdGhlIGVycm9yIHBhdGggb2YgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbHNvIGxvb2tzIHNvdW5kIOKAkyBwcmV2ZW50aW5nIHBvdGVudGlhbCBtZW1vcnkgbGVha3MgdGhhdCB3ZXJlIHByZXNlbnQgYmVmb3JlIHRoaXMgcGF0Y2guCgpJIGFsc28gbXVzdCBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgbGVha3Mgd2hlbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCByZXR1cm5zIGVhcmx5LiBJdCBpcyBpbXBvcnRhbnQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIGNoYW5nZXMgaW4gdGhlIGxvZ2ljIGFuZCB0aGUgYWRkZWQgZXJyb3IgaGFuZGxpbmcgZ2l2ZSBtZSBtb3JlIGNvbmZpZGVuY2UuCgpPdmVyYWxsLCB0aGlzIGlzIGEgY2xlYW4gcGF0Y2guIEl0JiMzOTtzIGZvY3VzZWQsIGFkZHJlc3NlcyBhIHJlYWwgcG90ZW50aWFsIGlzc3VlIHdpdGggdmFsaWRhdGlvbiwgYW5kIGlzIGdlbmVyYWxseSB3ZWxsLXN0cnVjdHVyZWQuICBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCByZWFkcyBvciBwb3RlbnRpYWwgbGVha3MsIGFuZCB0aGUgc2ltcGxpZmljYXRpb24gaXMgYSBib251cy4gSXQgbG9va3MgZ29vZCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFdlIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIGNvZGUgcmV2aWV3IGFuZCBtYWtlIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIGNvbXBsZXRlLCBidXQgSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA5ND12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA5NTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA5Ni1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTIxND1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjI3LS8qKlxubW0vZGFtb24vY29yZS5jOjEyMjg6ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cbm1tL2RhbW9uL2NvcmUuYy0xMjI5LSAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjM4LSAqL1xubW0vZGFtb24vY29yZS5jOjEyMzk6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTI0MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTEyNzE9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjc3LVx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jOjEyNzg6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTEyNzktXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk4PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTIyLVx0XHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkyMzpcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgXHUwMDI2cXVvdGEpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjQtXHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnF1b3RhKVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA3LVx0XHQgKiBXaGVuIG5yX3NyY19nb2FscyBpcyBzbWFsbGVyIHRoYW4gZHN0X2dvYWxzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkwODpcdFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgd2lsbCBrZnJlZSgpIHRoZSBkc3QgZ29hbHMuXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA5LVx0XHQgKiBNYWtlIGl0IGtmcmVlKCktYWJsZS5cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIwLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkyMTpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcdTAwMjZkc3QsIFx1MDAyNnNyYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI0NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN5c2ZzLXNjaGVtZXMuY2AqKgoKT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBpc3N1ZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBjb2RlIGFuZCBzdGFydCB3aXRoIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBNeSBodW5jaCBpcyBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgc2NoZW1lcy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVnaW9uIGFyb3VuZCBsaW5lIDI5MjAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgc2NoZW1lLXNwZWNpZmljIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgb3Igd2hlcmUgYSBjZXJ0YWluIGFjdGlvbiByZWxhdGluZyB0byBtZW1vcnkgbWFuYWdlbWVudCBoYXBwZW5zLiBUaGF0IHNwZWNpZmljIGxpbmUgc2hvdWxkIGhhdmUgdGhlIHNwZWNpZmljIGF0dHJpYnV0ZSBvciBtZW1vcnkgbWFuYWdlbWVudCBwcm9jZWR1cmUgYW5kIEkmIzM5O20gcmVhZHkgdG8gaW52ZXN0aWdhdGUgYW5kIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkwMDpcdHtcbjI5MDE6XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuMjkwMjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge307XG4yOTAzOlx0XHRpbnQgaSA9IDA7XG4yOTA0Olx0XG4yOTA1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZxdW90YS5nb2Fscyk7XG4yOTA2Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcbjI5MDc6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xuMjkwODpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZywgKmdfbmV4dDtcbjI5MDk6XHRcdFx0aW50IGVycjtcbjI5MTA6XHRcbjI5MTE6XHRcdFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cbjI5MTI6XHRcdFx0aWYgKGkgXHUwMDNlPSBzeXNmc19zY2hlbWVzLVx1MDAzZW5yKVxuMjkxMzpcdFx0XHRcdGJyZWFrO1xuMjkxNDpcdFxuMjkxNTpcdFx0XHRzeXNmc19zY2hlbWUgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldO1xuMjkxNjpcdFx0XHRlcnIgPSBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoc3lzZnNfc2NoZW1lLVx1MDAzZXF1b3Rhcy1cdTAwM2Vnb2FscyxcbjI5MTc6XHRcdFx0XHRcdFx1MDAyNnF1b3RhKTtcbjI5MTg6XHRcdFx0aWYgKGVycikge1xuMjkxOTpcdFx0XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFx1MDAyNnF1b3RhKVxuMjkyMDpcdFx0XHRcdFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xuMjkyMTpcdFx0XHRcdHJldHVybiBlcnI7XG4yOTIyOlx0XHRcdH1cbjI5MjM6XHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgXHUwMDI2cXVvdGEpO1xuMjkyNDpcdFx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcdTAwMjZxdW90YSlcbjI5MjU6XHRcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XG4yOTI2Olx0XHRcdGlmIChlcnIpXG4yOTI3Olx0XHRcdFx0cmV0dXJuIGVycjtcbjI5Mjg6XHRcdFx0aSYjNDM7JiM0Mzs7XG4yOTI5Olx0XHR9XG4yOTMwOlx0XHRyZXR1cm4gMDtcbjI5MzE6XHR9XG4yOTMyOlx0XG4yOTMzOlx0dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcbjI5MzQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4yOTM1Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbjI5MzY6XHR7XG4yOTM3Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjI5Mzg6XHRcdGludCBzY2hlbWVzX2lkeCA9IDA7XG4yOTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDU4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBEQU1PTiBCb3R0bGVuZWNrKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGRhbW9zX2NvbW1pdF9xdW90YWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBsb2dpYyBhcm91bmQgbGluZSAxMjcwIG1pZ2h0IGJlIHBsYXlpbmcgYSBrZXkgcm9sZSwgbWF5YmUgcmVsYXRlZCB0byBxdW90YSBtYW5hZ2VtZW50IG9yIHNvbWUgYWxsb2NhdGlvbiBkZWNpc2lvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgYmVjYXVzZSB0aGlzIGNvdWxkIGJlIGEgbWFqb3IgY29uc3RyYWludC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGlzIGFyZWEgYW5kIHRoZW4gd29yayBvdXR3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI2NTpcdFx0XHR9XG4xMjY2Olx0XHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xuMTI2NzpcdFx0fVxuMTI2ODpcdFx0cmV0dXJuIDA7XG4xMjY5Olx0fVxuMTI3MDpcdFxuMTI3MTpcdHN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbjEyNzI6XHR7XG4xMjczOlx0XHRpbnQgZXJyO1xuMTI3NDpcdFxuMTI3NTpcdFx0ZHN0LVx1MDAzZXJlc2V0X2ludGVydmFsID0gc3JjLVx1MDAzZXJlc2V0X2ludGVydmFsO1xuMTI3NjpcdFx0ZHN0LVx1MDAzZW1zID0gc3JjLVx1MDAzZW1zO1xuMTI3NzpcdFx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xuMTI3ODpcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcbjEyNzk6XHRcdGlmIChlcnIpXG4xMjgwOlx0XHRcdHJldHVybiBlcnI7XG4xMjgxOlx0XHRkc3QtXHUwMDNlZ29hbF90dW5lciA9IHNyYy1cdTAwM2Vnb2FsX3R1bmVyO1xuMTI4MjpcdFx0ZHN0LVx1MDAzZWZhaWxfY2hhcmdlX251bSA9IHNyYy1cdTAwM2VmYWlsX2NoYXJnZV9udW07XG4xMjgzOlx0XHRkc3QtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20gPSBzcmMtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub207XG4xMjg0Olx0XHRkc3QtXHUwMDNld2VpZ2h0X3N6ID0gc3JjLVx1MDAzZXdlaWdodF9zejtcbjEyODU6XHRcdGRzdC1cdTAwM2V3ZWlnaHRfbnJfYWNjZXNzZXMgPSBzcmMtXHUwMDNld2VpZ2h0X25yX2FjY2Vzc2VzO1xuMTI4NjpcdFx0ZHN0LVx1MDAzZXdlaWdodF9hZ2UgPSBzcmMtXHUwMDNld2VpZ2h0X2FnZTtcbjEyODc6XHRcdHJldHVybiAwO1xuMTI4ODpcdH1cbjEyODk6XHRcbjEyOTA6XHRzdGF0aWMgc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbnRoX2NvcmVfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb3MgKnMpXG4xMjkxOlx0e1xuMTI5MjpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xuMTI5MzpcdFx0aW50IGkgPSAwO1xuMTI5NDpcdFxuMTI5NTpcdFx0ZGFtb3NfZm9yX2VhY2hfY29yZV9maWx0ZXIoZmlsdGVyLCBzKSB7XG4xMjk2Olx0XHRcdGlmIChpJiM0MzsmIzQzOyA9PSBuKVxuMTI5NzpcdFx0XHRcdHJldHVybiBmaWx0ZXI7XG4xMjk4Olx0XHR9XG4xMjk5Olx0XHRyZXR1cm4gTlVMTDtcbjEzMDA6XHR9XG4xMzAxOlx0XG4xMzAyOlx0c3RhdGljIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX250aF9vcHNfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb3MgKnMpXG4xMzAzOlx0e1xuMTMwNDpcdFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg0NAoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT1MgUXVvdGEgR29hbCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSBjaGFuZ2VzOiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIG5vdyBjb3JyZWN0bHkgdmFsaWRhdGVzIGAhc3JjLSZndDt0YXJnZXRfdmFsdWVgIGFuZCByZXR1cm5zIGAtRUlOVkFMYC4gU21hcnQgbW92ZS4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgaGFuZGxlcyBlcnJvcnMgZnJvbSB0aGF0IGZ1bmN0aW9uIHByb3Blcmx5IG5vdywgaW5zdGVhZCBvZiBqdXN0IGhvcGluZyBmb3IgdGhlIGJlc3QuIEFuZCB0aGV5JiMzOTt2ZSBjbGVhbmVkIHVwIHJlZHVuZGFudCBjaGVja3MgaW4gYGxydV9zb3J0LmNgIGFuZCBgbXRpZXIuY2AuIEFsbCBzZW5zaWJsZSByZWZhY3RvcmluZy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBzb3J0IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgREFNT04gc3Vic3lzdGVtLCBzbyB3ZSBuZWVkIHRvIGJlIHZpZ2lsYW50IGFib3V0IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciBjcmFzaGVzLgoKTGV0IG1lIHRoaW5r4oCmCgoqICAgQXJlIHdlIGNvcHlpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/IE5vcGUuIEdvb2QuCiogICBBcmUgd2UgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEV2ZXJ5dGhpbmcgbG9va3Mgc291bmQuCiogICBBcmUgd2UgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHM/IFN0aWxsIG5vLgoqICAgTWVtb3J5IG1hbmFnZW1lbnQ/IFN0YW5kYXJkIGRldGVjdG9ycywgS0FTQU4sIGFuZCBLTUVNTEVBSyBzaG91bGQgY2F0Y2ggYW55IGVycm9ycy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBleHBsaWNpdCBLTVNBTiBjcml0ZXJpYSBhZ2FpbiBqdXN0IHRvIGJlIHN1cmU6CgoqICAgS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8gTmVnYXRpdmUuCiogICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCiogICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vdCBoZXJlLgoqICAgQnVmZmVyIGFjY2VzcyB0aGF0IG1pZ2h0IGludm9sdmUgdW5pbml0aWFsaXplZCBieXRlcz8gRG9lc24mIzM5O3QgbG9vayBsaWtlIGl0LgoKSW4gc3VtbWFyeSwgdGhpcyBzZWVtcyB0byBiZSBzdHJpY3RseSBpbnRlcm5hbCB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIERBTU9TIHF1b3RhIGdvYWwgbG9naWMuIFNvbGlkLgoKVGltZSB0byBwcmVwYXJlIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgREFNT04gY29yZSBxdW90YSBnb2FsIGNvbW1pdCBsb2dpYyAoYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2ApIHRvIHZhbGlkYXRlIHRoYXQgYHNyYy1cdTAwM2V0YXJnZXRfdmFsdWVgIGlzIG5vbi16ZXJvLCByZXR1cm5pbmcgYC1FSU5WQUxgIG9uIHplcm8gdmFsdWVzIGFuZCBwcm9wYWdhdGluZyBlcnJvciBjb2RlcyBwcm9wZXJseSAoaW5jbHVkaW5nIGZyZWVpbmcgbmV3bHkgYWxsb2NhdGVkIGdvYWwgb2JqZWN0cyBvbiBmYWlsdXJlKS4gSXQgYWxzbyByZW1vdmVzIHJlZHVuZGFudCB2YWxpZGF0aW9uIGNoZWNrcyBpbiBgbW0vZGFtb24vbHJ1X3NvcnQuY2AgYW5kIGBzYW1wbGVzL2RhbW9uL210aWVyLmNgLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFsbCBzdHJ1Y3QgZmllbGRzIG1hbmlwdWxhdGVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGV4cG9zZWQgb3IgcGFzc2VkIGFjcm9zcyB1c2VyL2tlcm5lbCBib3VuZGFyaWVzLCBhbmQgYW55IHBvdGVudGlhbCBhbGxvY2F0aW9uL21lbW9yeSBtYW5hZ2VtZW50IGZhaWx1cmVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBEQU1PTiBjb3JlIHF1b3RhIGdvYWwgY29tbWl0IGxvZ2ljIChgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCkgdG8gdmFsaWRhdGUgdGhhdCBgc3JjLVx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQWxsIHN0cnVjdCBmaWVsZHMgbWFuaXB1bGF0ZWQgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG5vIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgZXhwb3NlZCBvciBwYXNzZWQgYWNyb3NzIHVzZXIva2VybmVsIGJvdW5kYXJpZXMsIGFuZCBhbnkgcG90ZW50aWFsIGFsbG9jYXRpb24vbWVtb3J5IG1hbmFnZW1lbnQgZmFpbHVyZXMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRpYWdub3N0aWNzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjIyLjMyNjc5NzkyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzY0Mjk4MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiLFxuICAgIFwiZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIERBTU9OIGNvcmUgcXVvdGEgZ29hbCBjb21taXQgbG9naWMgKGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgKSB0byB2YWxpZGF0ZSB0aGF0IGBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbGwgc3RydWN0IGZpZWxkcyBtYW5pcHVsYXRlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIHBhc3NlZCBhY3Jvc3MgdXNlci9rZXJuZWwgYm91bmRhcmllcywgYW5kIGFueSBwb3RlbnRpYWwgYWxsb2NhdGlvbi9tZW1vcnkgbWFuYWdlbWVudCBmYWlsdXJlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgcXVvdGEgZ29hbCBjb21taXQgaGFuZGxpbmcgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgemVybyB0YXJnZXQgdmFsdWVzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKCkgYW5kIHByb3BhZ2F0aW5nIGVycm9ycyBpbiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKS4gSXQgYWxzbyBhbHRlcnMgcGFyYW1ldGVyIGhhbmRsaW5nIGluIG1tL2RhbW9uL2xydV9zb3J0LmMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGFuZCBtb2R1bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MjIuMzI2ODAyMDIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDIyMTM5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MzVlOTA4OGJlNzQyMWQ1ZjIxNGZlYzljNDEwYzRmMTBmMDc1ZTNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDA6MjM6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggODY1NTBjNDE0NmY1My4uZjVlN2VkOWY1ZTE1OSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMTIxMSwxNCArMTIxMSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4rc3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4gXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4ge1xcbitcXHRpZiAoIXNyYy1cXHUwMDNldGFyZ2V0X3ZhbHVlKVxcbitcXHRcXHRyZXR1cm4gIC1FSU5WQUw7XFxuIFxcdGRzdC1cXHUwMDNlbWV0cmljID0gc3JjLVxcdTAwM2VtZXRyaWM7XFxuIFxcdGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuIFxcdGlmIChkc3QtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbiBcXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxuIFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xMjM2LDE0ICsxMjM5LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbiBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcXG4tXFx0aW50IGkgPSAwLCBqID0gMDtcXG4rXFx0aW50IGkgPSAwLCBqID0gMCwgZXJyO1xcbiBcXG4gXFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGRzdF9nb2FsLCBuZXh0LCBkc3QpIHtcXG4gXFx0XFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpKyssIHNyYyk7XFxuLVxcdFxcdGlmIChzcmNfZ29hbClcXG4tXFx0XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcXG4tXFx0XFx0ZWxzZVxcbitcXHRcXHRpZiAoc3JjX2dvYWwpIHtcXG4rXFx0XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGRzdF9nb2FsKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShzcmNfZ29hbCwgbmV4dCwgc3JjKSB7XFxuIFxcdFxcdGlmIChqKysgXFx1MDAzYyBpKVxcbkBAIC0xMjUyLDcgKzEyNTgsMTEgQEAgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxuIFxcdFxcdFxcdFxcdHNyY19nb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbiBcXHRcXHRpZiAoIW5ld19nb2FsKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcXG4rXFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkYW1vc19mcmVlX3F1b3RhX2dvYWwobmV3X2dvYWwpO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuIFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbmluZGV4IGJkODQ3ODI5YTk5MDcuLjdkZjQ1ZjlhMGIzYWUgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5AQCAtMjMzLDggKzIzMyw2IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4gXFxuIFxcdGlmICghYWN0aXZlX21lbV9icClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdGlmICgxMDAwMCBcXHUwMDNjIGFjdGl2ZV9tZW1fYnApXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7XFxuIFxcdGlmICghZ29hbClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZGlmZiAtLWdpdCBhL3NhbXBsZXMvZGFtb24vbXRpZXIuYyBiL3NhbXBsZXMvZGFtb24vbXRpZXIuY1xcbmluZGV4IGJlYTQ1Yzg3Y2M5YmUuLjI3ZGM4OGJkZjdhMGUgMTAwNjQ0XFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXFxuKysrIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXFxuQEAgLTE2MSw5ICsxNjEsNiBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXFxuIFxcdGlmICghc2NoZW1lKVxcbiBcXHRcXHRnb3RvIGZyZWVfb3V0O1xcbiBcXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFxcdTAwMjZzY2hlbWUsIDEpO1xcbi1cXHQvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovXFxuLVxcdGlmICghbm9kZTBfbWVtX3VzZWRfYnAgfHwgIW5vZGUwX21lbV9mcmVlX2JwKVxcbi1cXHRcXHRnb3RvIGZyZWVfb3V0O1xcbiBcXHRxdW90YV9nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuIFxcdFxcdFxcdHByb21vdGUgPyBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQIDpcXG4gXFx0XFx0XFx0REFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MjIuNzY5ODY2MjIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDYyMDIwNTUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2Fsc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczNWU5MDg4YmU3NDIxZDVmMjE0ZmVjOWM0MTBjNGYxMGYwNzVlM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAwOjIzOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA4NjU1MGM0MTQ2ZjUzLi5mNWU3ZWQ5ZjVlMTU5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xMjExLDE0ICsxMjExLDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbitzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbitcdGlmICghc3JjLVx1MDAzZXRhcmdldF92YWx1ZSlcbitcdFx0cmV0dXJuICAtRUlOVkFMO1xuIFx0ZHN0LVx1MDAzZW1ldHJpYyA9IHNyYy1cdTAwM2VtZXRyaWM7XG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMTIzNiwxNCArMTIzOSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcbi1cdGludCBpID0gMCwgaiA9IDA7XG4rXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XG4gXG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkrKywgc3JjKTtcbi1cdFx0aWYgKHNyY19nb2FsKVxuLVx0XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XG4tXHRcdGVsc2VcbitcdFx0aWYgKHNyY19nb2FsKSB7XG4rXHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpO1xuK1x0XHR9XG4gXHR9XG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xuIFx0XHRpZiAoaisrIFx1MDAzYyBpKVxuQEAgLTEyNTIsNyArMTI1OCwxMSBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbiBcdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbiBcdFx0aWYgKCFuZXdfZ29hbClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChuZXdfZ29hbCk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuIFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5pbmRleCBiZDg0NzgyOWE5OTA3Li43ZGY0NWY5YTBiM2FlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuQEAgLTIzMyw4ICsyMzMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4gXG4gXHRpZiAoIWFjdGl2ZV9tZW1fYnApXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKDEwMDAwIFx1MDAzYyBhY3RpdmVfbWVtX2JwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbiBcdGlmICghZ29hbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXG5pbmRleCBiZWE0NWM4N2NjOWJlLi4yN2RjODhiZGY3YTBlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXG4rKysgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbkBAIC0xNjEsOSArMTYxLDYgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuIFx0aWYgKCFzY2hlbWUpXG4gXHRcdGdvdG8gZnJlZV9vdXQ7XG4gXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG4tXHQvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovXG4tXHRpZiAoIW5vZGUwX21lbV91c2VkX2JwIHx8ICFub2RlMF9tZW1fZnJlZV9icClcbi1cdFx0Z290byBmcmVlX291dDtcbiBcdHF1b3RhX2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbiBcdFx0XHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XG4gXHRcdFx0REFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjIyLjc2OTg2NzkxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5ODg2MDc0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSDigJMgd2hhdCdzIGJlZW4gbW9kaWZpZWQsIGFuZCB3aGVyZT8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYHJlYWQtZmlsZWAgb3IgZXZlbiBhIGBncmVwcGVyYCBwYXNzLCBqdXN0IHRvIGdldCBhIGJpcmQncy1leWUgdmlldyBvZiB0aGUgY2hhbmdlcyBvciByZWZlciB0byB0aGUgcGF0Y2ggZGV0YWlscy5cblxuQWxyaWdodCwgdGhlIGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIHBhdGNoIGlzIGdvaW5nIHRvIGFmZmVjdCBhIGZldyBrZXkgYXJlYXMgd2l0aGluIERBTU9OLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0J3MgdG91Y2hpbmc6IGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgc2FtcGxlcy9kYW1vbi9tdGllci5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkgZXhwZWN0IGl0IHdpbGwgaW52b2x2ZSBjaGFuZ2VzIHRvIHRoZSBkYW1vbiBjb3JlIGZ1bmN0aW9uYWxpdHksIGxydSBzb3J0IGFuZCB0aGVyZSdzIGEgc2FtcGxlLlxuXG5UaW1lIHRvIGRyaWxsIGRvd24uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgaW5zcGVjdCBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBhbGdvcml0aG1pYyBtb2RpZmljYXRpb25zIG9yIHN0cnVjdHVyYWwgY2hhbmdlcy4gSSBzaG91bGQgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZvciBEQU1PTiB0byB1bmRlcnN0YW5kIGFueSBwb3RlbnRpYWwgYnVpbGQgb3IgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzoyNy43NTg0Nzc5NzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODE1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWc6NjpcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxubW0vZGFtb24vS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZzoxNjpcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTE4LVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjE5OlxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbm1tL2RhbW9uL0tjb25maWc6MjA6XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG5tbS9kYW1vbi9LY29uZmlnLTIxLVxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjI4OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctMjktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTMwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjMxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy0zMi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQwOlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy00MS1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG5tbS9kYW1vbi9LY29uZmlnOjQyOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTQzLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjQ0OlxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDUtXFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vZGFtb24vS2NvbmZpZy01MC1cXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG5tbS9kYW1vbi9LY29uZmlnOjUxOlxcdGRlZmF1bHQgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTUyLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjUzOlxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTQtXFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnOjU3OlxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjU4OlxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNTktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTYwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjYxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTYyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWc6Njk6XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NzA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbm1tL2RhbW9uL0tjb25maWc6NzE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNzItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NzM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG5tbS9kYW1vbi9LY29uZmlnLTc0LVxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbm1tL2RhbW9uL0tjb25maWctNzktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5tbS9kYW1vbi9LY29uZmlnLTgwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjgxOlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctODItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnOjg5OlxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6OTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctOTEtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6OTI6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG5tbS9kYW1vbi9LY29uZmlnOjkzOlxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbm1tL2RhbW9uL0tjb25maWctOTQtXFx0ICB0aG9zZS5cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZzoxMDE6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy0xMDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTA0OlxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXFxubW0vZGFtb24vS2NvbmZpZy0xMDUtXFx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnOjEwOTpcXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTExMS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMTI6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXFxubW0vZGFtb24vS2NvbmZpZzoxMTM6XFx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxcbm1tL2RhbW9uL0tjb25maWctMTE0LVxcdCAgbWV0cmljcy5cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnOjExNzpcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTE4OlxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTE5OlxcdGRlZmF1bHQgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTIwLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjEyMTpcXHQgIFdoZXRoZXIgdG8gZW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdC4gIFVzZXJzIGNhbiBkaXNhYmxlIGl0IGluXFxubW0vZGFtb24vS2NvbmZpZy0xMjItXFx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICdlbmFibGVkJyBwYXJhbWV0ZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjI3LjgwNDM2MjY3NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTI3NzgzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFF1b3RhIENvbW1pdCBMb2dpYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIHF1b3RhIGdvYWxzIGFyZSBiZWluZyBjb21taXR0ZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgYXJvdW5kIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBmdW5jdGlvbnMuIEknbSBndWVzc2luZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29tbWl0IHByb2Nlc3MuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBXaGF0J3MgZHJpdmluZyB0aGUgY2FsbCB0byBjb21taXQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBJJ20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIHdoZXJlIHRoaXMgcGllY2UgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MjkuNDk3MTQ3MDAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjAwOlxcdFxcdFxcdGJyZWFrO1xcbjEyMDE6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTUNHX1VTRURfQlA6XFxuMTIwMjpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG4xMjAzOlxcdFxcdFxcdGRzdC1cXHUwMDNlbmlkID0gc3JjLVxcdTAwM2VuaWQ7XFxuMTIwNDpcXHRcXHRcXHRkc3QtXFx1MDAzZW1lbWNnX2lkID0gc3JjLVxcdTAwM2VtZW1jZ19pZDtcXG4xMjA1OlxcdFxcdFxcdGJyZWFrO1xcbjEyMDY6XFx0XFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcXG4xMjA3OlxcdFxcdFxcdGRzdC1cXHUwMDNlbmlkID0gc3JjLVxcdTAwM2VuaWQ7XFxuMTIwODpcXHRcXHRcXHRicmVhaztcXG4xMjA5OlxcdFxcdGRlZmF1bHQ6XFxuMTIxMDpcXHRcXHRcXHRicmVhaztcXG4xMjExOlxcdFxcdH1cXG4xMjEyOlxcdH1cXG4xMjEzOlxcdFxcbjEyMTQ6XFx0c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4xMjE1OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuMTIxNjpcXHR7XFxuMTIxNzpcXHRcXHRpZiAoIXNyYy1cXHUwMDNldGFyZ2V0X3ZhbHVlKVxcbjEyMTg6XFx0XFx0XFx0cmV0dXJuICAtRUlOVkFMO1xcbjEyMTk6XFx0XFx0ZHN0LVxcdTAwM2VtZXRyaWMgPSBzcmMtXFx1MDAzZW1ldHJpYztcXG4xMjIwOlxcdFxcdGRzdC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVxcdTAwM2V0YXJnZXRfdmFsdWU7XFxuMTIyMTpcXHRcXHRpZiAoZHN0LVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcXG4xMjIyOlxcdFxcdFxcdGRzdC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG4xMjIzOlxcdFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG4xMjI0OlxcdFxcdHJldHVybiAwO1xcbjEyMjU6XFx0fVxcbjEyMjY6XFx0XFxuMTIyNzpcXHQvKipcXG4xMjI4OlxcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxuMTIyOTpcXHQgKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXFxuMTIzMDpcXHQgKiBAc3JjOlxcdFRoZSBjb21taXQgc291cmNlIERBTU9TIHF1b3RhLlxcbjEyMzE6XFx0ICpcXG4xMjMyOlxcdCAqIENvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZvciBxdW90YSBnb2FscyBmcm9tIEBzcmMgdG8gQGRzdC4gIFVzZXJzXFxuMTIzMzpcXHQgKiBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24gZm9yIHF1b3RhIGdvYWxzLWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmdcXG4xMjM0OlxcdCAqIERBTU9OIGNvbnRleHRzLCBpbnN0ZWFkIG9mIG1hbnVhbCBpbi1wbGFjZSB1cGRhdGVzLlxcbjEyMzU6XFx0ICpcXG4xMjM2OlxcdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxcbjEyMzc6XFx0ICogZGFtb25fY2FsbCgpLlxcbjEyMzg6XFx0ICovXFxuMTIzOTpcXHRpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4xMjQwOlxcdHtcXG4xMjQxOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3RfZ29hbCwgKm5leHQsICpzcmNfZ29hbCwgKm5ld19nb2FsO1xcbjEyNDI6XFx0XFx0aW50IGkgPSAwLCBqID0gMCwgZXJyO1xcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xcbjEyNDU6XFx0XFx0XFx0c3JjX2dvYWwgPSBkYW1vc19udGhfcXVvdGFfZ29hbChpKyssIHNyYyk7XFxuMTI0NjpcXHRcXHRcXHRpZiAoc3JjX2dvYWwpIHtcXG4xMjQ3OlxcdFxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XFxuMTI0ODpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjEyNDk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjUwOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTI1MTpcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpO1xcbjEyNTI6XFx0XFx0XFx0fVxcbjEyNTM6XFx0XFx0fVxcbjEyNTQ6XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKHNyY19nb2FsLCBuZXh0LCBzcmMpIHtcXG4xMjU1OlxcdFxcdFxcdGlmIChqKysgXFx1MDAzYyBpKVxcbjEyNTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTI1NzpcXHRcXHRcXHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxcbjEyNTg6XFx0XFx0XFx0XFx0XFx0c3JjX2dvYWwtXFx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuMTI1OTpcXHRcXHRcXHRpZiAoIW5ld19nb2FsKVxcbjEyNjA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTI2MTpcXHRcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xcbjEyNjI6XFx0XFx0XFx0aWYgKGVycikge1xcbjEyNjM6XFx0XFx0XFx0XFx0ZGFtb3NfZnJlZV9xdW90YV9nb2FsKG5ld19nb2FsKTtcXG4xMjY0OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTI2NTpcXHRcXHRcXHR9XFxuMTI2NjpcXHRcXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcXG4xMjY3OlxcdFxcdH1cXG4xMjY4OlxcdFxcdHJldHVybiAwO1xcbjEyNjk6XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHRzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxuMTI3MjpcXHR7XFxuMTI3MzpcXHRcXHRpbnQgZXJyO1xcbjEyNzQ6XFx0XFxuMTI3NTpcXHRcXHRkc3QtXFx1MDAzZXJlc2V0X2ludGVydmFsID0gc3JjLVxcdTAwM2VyZXNldF9pbnRlcnZhbDtcXG4xMjc2OlxcdFxcdGRzdC1cXHUwMDNlbXMgPSBzcmMtXFx1MDAzZW1zO1xcbjEyNzc6XFx0XFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxuMTI3ODpcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xcbjEyNzk6XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MjkuNDk3Mzk4MjMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5NzM0NDI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgZGl2aW5nIGludG8gdGhlIGNvZGU6XG5cbioqRmluZGluZyB0aGUgU291cmNlOiBBIFRyYWNlIG9mIGBkYW1vc19jb21taXRfcXVvdGFgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGRhdGEgb3IgZXhlY3V0aW9uIHJlbGF0ZWQgdG8gZWl0aGVyIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIG9yIGBkYW1vc19jb21taXRfcXVvdGFgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHBpdm90YWwgaW4gdGhpcyBzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhleSdyZSBiZWluZyBpbnZva2VkLiBUaGUgYmVzdCB3YXkgdG8gc3RhcnQgaXMgd2l0aCBhIGNvbXByZWhlbnNpdmUgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGViYXNlIGZvciBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlc2UgaWRlbnRpZmllcnMuIFRoaXMgc2VhcmNoIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggYW5kIHV0aWxpemVzIHRoZXNlIHF1b3RhLXJlbGF0ZWQgZWxlbWVudHMuIEZyb20gdGhlcmUsIEkgY2FuIGNvbnN0cnVjdCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHN5c3RlbSBpcyBjdXJyZW50bHkgZGVzaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjMxLjY5NDc0NTM1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5NzE2MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA5ND12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcyk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTU6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExNzc9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTg5LVxcbm1tL2RhbW9uL2NvcmUuYzoxMTkwOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTkxLVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIxMy1cXG5tbS9kYW1vbi9jb3JlLmM6MTIxNDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMjE1LVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIyMi1cXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vY29yZS5jOjEyMjM6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjI0LVxcdHJldHVybiAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMjctLyoqXFxubW0vZGFtb24vY29yZS5jOjEyMjg6ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cXG5tbS9kYW1vbi9jb3JlLmMtMTIyOS0gKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIzOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTIzOTppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTI0MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI0Ni1cXHRcXHRpZiAoc3JjX2dvYWwpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTI0NzpcXHRcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3RfZ29hbCwgc3JjX2dvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjQ4LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI2MC1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9jb3JlLmM6MTI2MTpcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbChuZXdfZ29hbCwgc3JjX2dvYWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjYyLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjcwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMjcxOnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTI3Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI3Ny1cXHRkc3QtXFx1MDAzZXN6ID0gc3JjLVxcdTAwM2VzejtcXG5tbS9kYW1vbi9jb3JlLmM6MTI3ODpcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjc5LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTUzNT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdChzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU0Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MTU0MzpcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdC1cXHUwMDNlcXVvdGEsIFxcdTAwMjZzcmMtXFx1MDAzZXF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTU0NC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMi1cXHRcXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MjM6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI0LVxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZxdW90YSlcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwNy17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwODpcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbChkc3QsIHNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwOS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDctXFx0XFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2FscyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTA4OlxcdFxcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDktXFx0XFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIwLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MjE6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjItXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9OTgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMDA4LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDA5OlxcdGRhbW9zX2NvbW1pdF9xdW90YShcXHUwMDI2ZHN0LCBcXHUwMDI2c3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6MzMuMzM0NDY4ODg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1MDgzNzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGRhbW9zX2NvbW1pdGAgYW5kIFN5c2ZzIEludGVyZmFjZSBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gYGRhbW9zX2NvbW1pdGAgYW5kIGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIHN5c2ZzIGludGVyZmFjZXMuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBmb2xsb3cgdGhlIGNhbGwgc3RhY2suIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aGVyZSogYGRhbW9zX2NvbW1pdGAgaXMgYmVpbmcgaW52b2tlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNyaXRpY2FsIHBhdGggb3BlcmF0aW9uPyBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnQ/IEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIGl0cyBpbXBsaWNhdGlvbnMuXG5cblRoZW4sIEknbGwgbmVlZCB0byBkaXNzZWN0IHRoZSBzeXNmcyBpbnRlcmFjdGlvbnMgc3Vycm91bmRpbmcgYGRhbW9zX2NvbW1pdGAuIEFyZSB3ZSByZWFkaW5nLCB3cml0aW5nLCBvciBib3RoPyBXaGF0IGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGFjY2Vzc2VkPyBJcyBpdCBzaW1wbGUgc3RhdHVzIHJlcG9ydGluZywgb3IgYXJlIHdlIGNvbmZpZ3VyaW5nIHBhcmFtZXRlcnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gc3lzdGVtIGZ1bmN0aW9uPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIGJlaW5nIG1vdmVkIGFuZCB3aGF0IGNvbnRyb2wgcGxhbmUgdGhlc2UgY2FsbHMgcmVwcmVzZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBhbnl0aGluZyB0aGF0IGNvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIG9yIHJlbGlhYmlsaXR5LiBJIHdhbnQgdG8gbWFwIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgaG93IGRhdGEgYW5kIGNvbW1hbmRzIHRyYW5zbGF0ZSBhY3Jvc3MgdGhlIHR3byBpbnRlcmZhY2VzLiBBbnkgY2hhbmNlIG9mIGFuIGV4cGxvaXQ/XG5cbknigJltIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgYXQgdGhpcyBpbnRlcmZhY2UgbGF5ZXIuIFdoYXQgZXJyb3IgaGFuZGxpbmcgaXMgcHJlc2VudD8gSXMgaXQgcm9idXN0IHRvIGludmFsaWQgaW5wdXQ/IENvdWxkIHRoaXMgYmUgYSB2ZWN0b3IgZm9yIGRlbmlhbC1vZi1zZXJ2aWNlLCBvciBldmVuIHNvbWV0aGluZyBtb3JlIG1hbGljaW91cz8gVGhhdOKAmXMgd2hlcmUgSeKAmWxsIHN0YXJ0IGRpZ2dpbmcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzozNS44ODUzMDk5ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDg4OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTE3Nz1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX250aF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExODktXFxubW0vZGFtb24vY29yZS5jOjExOTA6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXFxubW0vZGFtb24vY29yZS5jLTExOTEtXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjEzLVxcbm1tL2RhbW9uL2NvcmUuYzoxMjE0OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTEyMTUtXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjIyLVxcdFxcdGRzdC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTIyMzpcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTEyMjQtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTIyNy0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTIyODogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYy0xMjI5LSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjM4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMjM5OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjQwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjQ2LVxcdFxcdGlmIChzcmNfZ29hbCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxMjQ3OlxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTEyNDgtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjYwLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxMjYxOlxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTEyNjItXFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNzAtXFxubW0vZGFtb24vY29yZS5jOjEyNzE6c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMjcyLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjc3LVxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzoxMjc4OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTEyNzktXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzAyPXN0YXRpYyBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpkYW1vc19udGhfb3BzX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzMTMtXFxubW0vZGFtb24vY29yZS5jOjEzMTQ6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXFxubW0vZGFtb24vY29yZS5jLTEzMTUtXFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZHN0LCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTMzNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTMzNTpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyKFxcbm1tL2RhbW9uL2NvcmUuYy0xMzM2LVxcdFxcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmRzdCwgc3RydWN0IGRhbW9zX2ZpbHRlciAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNDAtXFx0ZHN0LVxcdTAwM2VhbGxvdyA9IHNyYy1cXHUwMDNlYWxsb3c7XFxubW0vZGFtb24vY29yZS5jOjEzNDE6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzQyLX1cXG5tbS9kYW1vbi9jb3JlLmMtMTM0My1cXG5tbS9kYW1vbi9jb3JlLmM6MTM0NDpzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9jb3JlX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzQ1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzUxLVxcdFxcdGlmIChzcmNfZmlsdGVyKVxcbm1tL2RhbW9uL2NvcmUuYzoxMzUyOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzNTMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNjUtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjEzNjY6XFx0XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzNjctXFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNzEtXFxubW0vZGFtb24vY29yZS5jOjEzNzI6c3RhdGljIGludCBkYW1vc19jb21taXRfb3BzX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpkc3QsIHN0cnVjdCBkYW1vcyAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMzczLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzc5LVxcdFxcdGlmIChzcmNfZmlsdGVyKVxcbm1tL2RhbW9uL2NvcmUuYzoxMzgwOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9maWx0ZXIoZHN0X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzODEtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzOTMtXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjEzOTQ6XFx0XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcobmV3X2ZpbHRlciwgc3JjX2ZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTEzOTUtXFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihkc3QsIG5ld19maWx0ZXIpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE0MjY9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDYxLS8qXFxubW0vZGFtb24vY29yZS5jOjE0NjI6ICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuXFxubW0vZGFtb24vY29yZS5jLTE0NjMtICogQGRzdDpcXHREZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgdG8gdXBkYXRlLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0NzctICovXFxubW0vZGFtb24vY29yZS5jOjE0Nzg6c3RhdGljIGludCBkYW1vc19jb21taXRfZGVzdHMoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgKmRzdCxcXG5tbS9kYW1vbi9jb3JlLmMtMTQ3OS1cXHRcXHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1MDgtXFxubW0vZGFtb24vY29yZS5jOjE1MDk6c3RhdGljIGludCBkYW1vc19jb21taXRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmRzdCwgc3RydWN0IGRhbW9zICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE1MTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1MTItXFxubW0vZGFtb24vY29yZS5jOjE1MTM6XFx0ZXJyID0gZGFtb3NfY29tbWl0X2NvcmVfZmlsdGVycyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE1MTQtXFx0aWYgKGVycilcXG5tbS9kYW1vbi9jb3JlLmMtMTUxNS1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2NvcmUuYzoxNTE2OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9vcHNfZmlsdGVycyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE1MTctXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTIzPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX250aF9zY2hlbWUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTM0LVxcbm1tL2RhbW9uL2NvcmUuYzoxNTM1OnN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTUzNi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU0Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MTU0MzpcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdC1cXHUwMDNlcXVvdGEsIFxcdTAwMjZzcmMtXFx1MDAzZXF1b3RhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTU0NC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1NDktXFxubW0vZGFtb24vY29yZS5jOjE1NTA6XFx0ZXJyID0gZGFtb3NfY29tbWl0X2Rlc3RzKFxcdTAwMjZkc3QtXFx1MDAzZW1pZ3JhdGVfZGVzdHMsIFxcdTAwMjZzcmMtXFx1MDAzZW1pZ3JhdGVfZGVzdHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNTUxLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU1My1cXG5tbS9kYW1vbi9jb3JlLmM6MTU1NDpcXHRlcnIgPSBkYW1vc19jb21taXRfZmlsdGVycyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE1NTUtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTYyPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU2OS1cXHRcXHRpZiAoc3JjX3NjaGVtZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNTcwOlxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdChkc3Rfc2NoZW1lLCBzcmNfc2NoZW1lKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTU3MS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1ODctXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjE1ODg6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0KG5ld19zY2hlbWUsIHNyY19zY2hlbWUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNTg5LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk4PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MjItXFx0XFx0fVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTIzOlxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YSwgXFx1MDAyNnF1b3RhKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyNC1cXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODA0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDcte1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MDg6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDktXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODkyPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA3LVxcdFxcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkwODpcXHRcXHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTA5LVxcdFxcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkyMC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTIxOlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcXHUwMDI2ZHN0LCBcXHUwMDI2c3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIyLVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk4MT1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTAwOC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTAwOTpcXHRkYW1vc19jb21taXRfcXVvdGEoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwMTAtXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTA1Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEwNzEtXFx0fVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMDcyOlxcdGVyciA9IGRhbW9zX2NvbW1pdF9kZXN0cyhcXHUwMDI2ZHN0LCBcXHUwMDI2c3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTA3My1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTExMTg9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTEyMC17XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExMjE6XFx0ZGFtb3NfY29tbWl0X2ZpbHRlcihkc3QsIHNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjItXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNldHlwZSwgc3JjLVxcdTAwM2V0eXBlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMjEwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsIHN0cnVjdCBkYW1vcyAqZHN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMTctXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjEyMTg6XFx0ZXJyID0gZGFtb3NfY29tbWl0KGRzdCwgc3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIxOS1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMjIwOlxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImRhbW9zX2NvbW1pdCBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjM1LjkzMDQwNjEzN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzc5NTMxODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENhbGwgU2l0ZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgZGFtb25fY29tbWl0X3NjaGVtZXNgIGFuZCBgZGFtb25fY29tbWl0X2N0eGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIGZvciB0aGVzZSB0d28uIEtub3dpbmcgd2hlcmUgdGhleSdyZSBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBEQU1PTidzIGNvbW1pdHRpbmcgbWVjaGFuaXNtIGlzIG9yY2hlc3RyYXRlZCBhbmQgd2hhdCBjb250ZXh0IGlzIHBhc3NlZCBhcm91bmQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUg4oCTIGFyZSB0aGVzZSBjYWxscyB3aXRoaW4gYSB0aWdodCBsb29wLCBvciB0cmlnZ2VyZWQgYnkgc29tZSBleHRlcm5hbCBldmVudD8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IHNpZ25pZmljYW50bHkgYWx0ZXIgdGhlIGZsb3c/IFRoaXMgaXMgYWxsIGNydWNpYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLiBUaGUgZ29hbCBpcyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29tbWl0bWVudCBwaGFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzozOC43MDk5NDE0MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDI4MDE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9jb21taXRfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNTM1PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0KHN0cnVjdCBkYW1vcyAqZHN0LCBzdHJ1Y3QgZGFtb3MgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTYxLVxcbm1tL2RhbW9uL2NvcmUuYzoxNTYyOnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE1NjMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1OTg9c3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX250aF90YXJnZXQoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjE2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNjE3OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKmRzdCxcXG5tbS9kYW1vbi9jb3JlLmMtMTYxOC1cXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzcmMsIHVuc2lnbmVkIGxvbmcgc3JjX21pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY1MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTY1MjpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXQoXFxubW0vZGFtb24vY29yZS5jLTE2NTMtXFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LCBib29sIGRzdF9oYXNfcGlkLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2NTgtXFxubW0vZGFtb24vY29yZS5jOjE2NTk6XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldF9yZWdpb25zKGRzdCwgc3JjLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTE2NjAtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjc1LSAqXFxubW0vZGFtb24vY29yZS5jOjE2NzY6ICogUmV2ZXJ0IHRhcmdldCBzdGF0ZXMgdGhhdCBjaGFuZ2VkIGJ5IGRhbW9uX2NvbW1pdF90YXJnZXQoKSwgYW5kIGNhbm5vdCBiZVxcbm1tL2RhbW9uL2NvcmUuYy0xNjc3LSAqIGNsZWFuZWQgdXAgYnkgdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBvcHMuY2xlYW51cF90YXJnZXQoKS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjc5PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY5NC1cXG5tbS9kYW1vbi9jb3JlLmM6MTY5NTpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbm1tL2RhbW9uL2NvcmUuYy0xNjk2LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3MDgtXFx0XFx0aWYgKHNyY190YXJnZXQgXFx1MDAyNlxcdTAwMjYgIXNyY190YXJnZXQtXFx1MDAzZW9ic29sZXRlKSB7XFxubW0vZGFtb24vY29yZS5jOjE3MDk6XFx0XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChcXG5tbS9kYW1vbi9jb3JlLmMtMTcxMC1cXHRcXHRcXHRcXHRcXHRkc3RfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChkc3QpLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NDMtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoxNzQ0OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQobmV3X3RhcmdldCwgZmFsc2UsXFxubW0vZGFtb24vY29yZS5jLTE3NDUtXFx0XFx0XFx0XFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzU5LVxcbm1tL2RhbW9uL2NvcmUuYzoxNzYwOnN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpkc3QsIHN0cnVjdCBkYW1vbl9wcmVwICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE3NjEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NjQtXFxubW0vZGFtb24vY29yZS5jOjE3NjU6c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNzY2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVxcdFxcdGlmIChzcmNfcHJlcClcXG5tbS9kYW1vbi9jb3JlLmM6MTc3MzpcXHRcXHRcXHRkYW1vbl9jb21taXRfcHJlcChkc3RfcHJlcCwgc3JjX3ByZXApO1xcbm1tL2RhbW9uL2NvcmUuYy0xNzc0LVxcdFxcdGVsc2VcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzg5LVxcbm1tL2RhbW9uL2NvcmUuYzoxNzkwOnN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxcbm1tL2RhbW9uL2NvcmUuYy0xNzkxLVxcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODA0LVxcbm1tL2RhbW9uL2NvcmUuYzoxODA1OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXFxubW0vZGFtb24vY29yZS5jLTE4MDYtXFx0XFx0c3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgxMy1cXHRcXHRpZiAoc3JjX2ZpbHRlcilcXG5tbS9kYW1vbi9jb3JlLmM6MTgxNDpcXHRcXHRcXHRkYW1vbl9jb21taXRfZmlsdGVyKGRzdF9maWx0ZXIsIHNyY19maWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODE1LVxcdFxcdGVsc2VcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODM4LVxcbm1tL2RhbW9uL2NvcmUuYzoxODM5OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTg0MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg0Ny1cXHRcXHRcXHRkc3RfcHJvYmUtXFx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cXHUwMDNld2VpZ2h0O1xcbm1tL2RhbW9uL2NvcmUuYzoxODQ4OlxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcmVwcyhkc3RfcHJvYmUsIHNyY19wcm9iZSk7XFxubW0vZGFtb24vY29yZS5jLTE4NDktXFx0XFx0XFx0aWYgKGVycilcXG5tbS9kYW1vbi9jb3JlLmMtMTg1MC1cXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2NvcmUuYzoxODUxOlxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg1Mi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4NjctXFx0XFx0bmV3X3Byb2JlLVxcdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmM6MTg2ODpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODY5LVxcdFxcdGlmIChlcnIpXFxubW0vZGFtb24vY29yZS5jLTE4NzAtXFx0XFx0XFx0cmV0dXJuIGVycjtcXG5tbS9kYW1vbi9jb3JlLmM6MTg3MTpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfZmlsdGVycyhuZXdfcHJvYmUsIHNyY19wcm9iZSk7XFxubW0vZGFtb24vY29yZS5jLTE4NzItXFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODc3LVxcbm1tL2RhbW9uL2NvcmUuYzoxODc4OnN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xODc5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTAzLVxcbm1tL2RhbW9uL2NvcmUuYzoxOTA0OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTkwNS1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTA2LVxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE5MDc6XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xOTA4LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNS1cXHRkc3QtXFx1MDAzZW9wcyA9IHNyYy1cXHUwMDNlb3BzO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTI2OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xOTI3LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkzNj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTQzLVxcdFxcdHJldHVybiBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTQ0OlxcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgZHN0KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTk0NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk1Mi0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTk1MzogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cXG5tbS9kYW1vbi9jb3JlLmMtMTk1NC0gKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTY0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTY1OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTY2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTcyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTczOlxcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTk3NC1cXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc1LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL2NvcmUuYzoxOTc2OlxcdGVyciA9IF9fZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTE5Nzctb3V0Olxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwODU9aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MjA5NzpcXHRcXHRlcnIgPSBfX2RhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMDk4LVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzUtXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozMzY6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzctb3V0Olxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI2Mi1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjYzOlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNjQtb3V0Olxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDAxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MTUtXFx0XFx0cmV0dXJuIFBUUl9FUlIocGFyYW1fY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jOjI0MTY6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNDE3LVxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTMyMD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzMzYtXFx0fVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzM3OlxcdGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3RfdGFyZ2V0LCBzcmNfdGFyZ2V0LCAxKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTMzOC1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMzY3PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEzNjkte1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzcwOlxcdGRhbW9uX2NvbW1pdF9maWx0ZXIoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzcxLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZXR5cGUsIHNyYy1cXHUwMDNldHlwZSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQyOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9wcm9iZXNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQ0LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNDQ1OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDQ2LVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIDApO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE0ODk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTAyLVxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1MDM6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAwKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNC1cXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTA1OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MDYtXFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NjtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUwNy1cXHRzcmMtXFx1MDAzZXBhdXNlID0gdHJ1ZTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTUwODpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTA5LVxcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRzdC1cXHUwMDNlcGF1c2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzozOC44NTQyMjczNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5MDE0NTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIFN5c2ZzIEludGVyYWN0aW9uKipcblxuT2theSwgc28gYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIHRyaWdnZXJlZCB3aGVuZXZlciBzb21lb25lIGludGVyYWN0cyB3aXRoIERBTU9OIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCBtYWtlcyBpdCB0aGUgY3JpdGljYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHVzZXJzcGFjZSBjb250cm9scyBEQU1PTiB2aWEgc3lzZnMuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGJhY2sgdG8gaXRzIHJvb3RzIGluIHRoZSBjb2RlLlxuXG5NeSBmaXJzdCBwb3J0IG9mIGNhbGwgd2lsbCBiZSBgbW0vZGFtb24vc3lzZnMuY2AgLSB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBsb2NhdGlvbiBmb3IgdGhlIGNvcmUgc3lzZnMgaW1wbGVtZW50YXRpb24uIEknbGwgbGlrZWx5IGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dGAgdGhlcmUsIGFuZCBob3BlZnVsbHkgdGhlIGZ1bmN0aW9uIHdoZXJlIGl0IGlzIHJlZ2lzdGVyZWQgd2l0aCBzeXNmcywgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCByZXF1ZXN0cy4gQWZ0ZXIgdGhhdCBJJ2xsIG1vdmUgb24gdG8gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEkgZXhwZWN0IHRoaXMgdG8gY29udGFpbiB0aGUgc3BlY2lmaWMgc2NoZW1lcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB3aXRoaW4gREFNT04ncyBzeXNmcyBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODE0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NDAuOTQ0Mzc1NTYyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAxMjk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19jb21taXRfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMzkyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTUtLypcXG5tbS9kYW1vbi9zeXNmcy5jOjIzOTY6ICogZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KCkgLSBDb21taXQgdXNlciBpbnB1dHMgdG8gYSBydW5uaW5nIGtkYW1vbmQuXFxubW0vZGFtb24vc3lzZnMuYy0yMzk3LSAqIEBrZGFtb25kOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGtkYW1vbmQuXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDAtICovXFxubW0vZGFtb24vc3lzZnMuYzoyNDAxOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxubW0vZGFtb24vc3lzZnMuYy0yNDAyLXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjYzMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNjQ0LVxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjY0NTpcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjY0Ni1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NDAuOTg5MzkxODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA5MjEzNDQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBRdW90YSBHb2FsIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgdHJpZ2dlcmVkLiBJdCdzIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjbnJcdTAwM2Uvc3RhdGVgIHN5c2ZzIGVudHJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYWN0aW9uLlxuXG5GaXJzdCwgSSdsbCBnbyB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcy4gSSdsbCBzdGFydCB3aXRoIHRoZSBjaGFuZ2VzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYC4gSSBzZWUgdGhhdCBhIGNoZWNrIGluIHRoZSBjb2RlIHRoYXQgbGltaXRlZCB0aGUgdmFsdWUgb2YgYGFjdGl2ZV9tZW1fYnBgIHRvIGJlbG93IGAxMDAwMGAgaGFzIGJlZW4gcmVtb3ZlZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBhcyBpdCBjaGFuZ2VzIHRoZSBwZXJtaXNzaWJsZSB2YWx1ZXMuXG5cbk5leHQsIEknbSBleGFtaW5pbmcgYG1tL2RhbW9uL2NvcmUuY2AuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgLCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AuIEkgc2VlIHRoYXQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBub3cgY2hlY2tzIGBzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlYCBmb3IgYSBub24temVybyB2YWx1ZSwgYW5kIHJldHVybnMgYC1FSU5WQUxgIGlmIHplcm8sIHRvIHByZXZlbnQgY29tbWl0LiBUaGlzIGlzIGFuIGltcG9ydGFudCBhZGRpdGlvbi4gRnVydGhlciwgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBmdW5jdGlvbiBhcmUgdXNlZCBpbiB0aGUgcGFyZW50IGZ1bmN0aW9uIG5vdywgd2hpY2ggZW5zdXJlcyBlcnJvciByZXBvcnRpbmcuXG5cbkknbGwgY2hlY2sgZm9yIGFueSBzeXprYWxsZXIgZGVzY3JpcHRpb25zLCBvciBvdGhlciBzeXNmcyBpbnRlcmFjdGlvbnMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIERBTU9OLlxuXG5JIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gREFNT04gb2J2aW91c2x5IHJlcXVpcmVzIGBDT05GSUdfREFNT05gLCBidXQgYWxzbyBJIHNlZSBpdCBuZWVkcyBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9MUlVfU09SVGAsIGBDT05GSUdfREFNT05fUEFERFJgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUkVDTEFJTWAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19xdW90YV9nb2FsYCBhbmQgdGhlaXIgdXNhZ2UgYWNyb3NzIGFsbCBmaWxlcyBpbiBgbW0vZGFtb24vYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldyBmdW5jdGlvbnMgYWZmZWN0IHRoZSBvdmVyYWxsIERBTU9OIGJlaGF2aW9yLiBUaGlzIHdpbGwgcHJvdmlkZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NDYuMDgxNTI5MDIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwNzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19uZXdfcXVvdGFfZ29hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NjgyPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02ODctXFxubW0vZGFtb24vY29yZS5jOjY4ODpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTY4OS1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMjM5PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNTYtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjEyNTc6XFx0XFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTI1OC1cXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM1LVxcdFxcdHJldHVybiAwO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM2OlxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNy1cXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0MC1cXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDE6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cXHRcXHRcXHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgKyAyKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXFx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVxcdFxcdFxcdFxcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVxcdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVxcdFxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODUxPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjU6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXFx1MDAzZW1ldHJpYyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cXHRcXHRcXHRcXHRzeXNmc19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTg5Mj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTkxMC1cXHRcXHQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTExOlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MTItXFx0XFx0XFx0XFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjQ2LjEyNjc0MDM0OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODUzODg0NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSXNzdWVzIGluIERBTU9OIFF1b3RhIENvbW1pdHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIG5vdyB2YWxpZGF0ZXMgdGhlIHRhcmdldCB2YWx1ZSB3aXRoIGBpZiAoIXNyYy1cdTAwM2V0YXJnZXRfdmFsdWUpIHJldHVybiAtRUlOVkFMO2AuICBHb29kLCB0aGF0J3MgYSBzYW5pdHkgY2hlY2suICBJdCBsb29rcyBsaWtlIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIHByb3BhZ2F0ZXMgZXJyb3JzIGZyb20gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgaGFuZGxlcyB0aGUgY2xlYW51cCBvZiBuZXdseSBhbGxvY2F0ZWQgZ29hbHMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuXG5cblRoZSB0aGluZyB0aGF0J3MgYnVnZ2luZyBtZSBpcyBhIHBvc3NpYmxlIHBhcnRpYWwgY29tbWl0IG9yIG1lbW9yeSBsZWFrIGlzc3VlIHdpdGhpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYC4gTGV0J3MgemVybyBpbiBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlICgxMjQ0LTEyNjgpLiBJIHNlZSB0aGUgbmVzdGVkIGxvb3BzIHRoZXJlIHdoaWNoIGl0ZXJhdGUgdGhyb3VnaCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHF1b3Rhcy4gSWYgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgZW5jb3VudGVycyBhbiBlcnJvciBwYXJ0d2F5IHRocm91Z2ggZWl0aGVyIG9mIHRob3NlIGxvb3BzLCB0aGUgYGRzdGAgcXVvdGEgY291bGQgZW5kIHVwIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSDigJMgc29tZSBnb2FscyBtaWdodCBiZSBtb2RpZmllZCBvciBkZXN0cm95ZWQsIG9yIHBhcnRpYWxseSB1cGRhdGVkLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBmb2xsb3cgdGhlIGZsb3cuXG5cbldoYXQncyByZWFsbHkgY29uY2VybmluZyBpcyB0aGF0IGNhbGxlcnMsIHN1Y2ggYXMgYGRhbW9uX2NvbW1pdF9jdHhgLCB1c2UgYSB0ZW1wb3JhcnkgYHRlc3RfY3R4YCB0byB0ZXN0IGNvbW1pdHMuICBUaGF0IGhlbHBzLCBidXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGRpcmVjdGx5IGNhbGxzIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIG9uIGBzY2hlbWUtXHUwMDNlcXVvdGFgLiBTbywgaWYgYW4gZXJyb3IgaGFwcGVucyBkdXJpbmcgdGhlIHF1b3RhIGNvbW1pdCB3aXRoaW4gdGhlIHN5c2ZzIHBhdGgsIHRoZSBgc2NoZW1lLVx1MDAzZXF1b3RhYCBjYW4gYmVjb21lIGNvcnJ1cHRlZC4gVGhhdCdzIGEgZGlyZWN0IHBvdGVudGlhbCBzb3VyY2Ugb2YgZGF0YSBjb3JydXB0aW9uLlxuXG5JJ20gbm93IGdvaW5nIHRvIGRpZyBpbnRvIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGVycm9ycyBhcmUgaGFuZGxlZCB0aGVyZSBhbmQgaWYgdGhlIHBvdGVudGlhbCBmb3IgdGhpcyBpbmNvbnNpc3RlbnQgc3RhdGUgaXMgYWRkcmVzc2VkIGF0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NTAuOTgwNjI3NDExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg5OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg5ODpcXHRpbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4yODk5OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4yOTAwOlxcdHtcXG4yOTAxOlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbjI5MDI6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0ge307XFxuMjkwMzpcXHRcXHRpbnQgaSA9IDA7XFxuMjkwNDpcXHRcXG4yOTA1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZxdW90YS5nb2Fscyk7XFxuMjkwNjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcXG4yOTA3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWUgKnN5c2ZzX3NjaGVtZTtcXG4yOTA4OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnLCAqZ19uZXh0O1xcbjI5MDk6XFx0XFx0XFx0aW50IGVycjtcXG4yOTEwOlxcdFxcbjI5MTE6XFx0XFx0XFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cXG4yOTEyOlxcdFxcdFxcdGlmIChpIFxcdTAwM2U9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZW5yKVxcbjI5MTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjkxNDpcXHRcXG4yOTE1OlxcdFxcdFxcdHN5c2ZzX3NjaGVtZSA9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZXNjaGVtZXNfYXJyW2ldO1xcbjI5MTY6XFx0XFx0XFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3NjaGVtZS1cXHUwMDNlcXVvdGFzLVxcdTAwM2Vnb2FscyxcXG4yOTE3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZxdW90YSk7XFxuMjkxODpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMjkxOTpcXHRcXHRcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuMjkyMDpcXHRcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XFxuMjkyMTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI5MjI6XFx0XFx0XFx0fVxcbjI5MjM6XFx0XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbjI5MjQ6XFx0XFx0XFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXFx1MDAyNnF1b3RhKVxcbjI5MjU6XFx0XFx0XFx0XFx0ZGFtb3NfZGVzdHJveV9xdW90YV9nb2FsKGcpO1xcbjI5MjY6XFx0XFx0XFx0aWYgKGVycilcXG4yOTI3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjkyODpcXHRcXHRcXHRpKys7XFxuMjkyOTpcXHRcXHR9XFxuMjkzMDpcXHRcXHRyZXR1cm4gMDtcXG4yOTMxOlxcdH1cXG4yOTMyOlxcdFxcbjI5MzM6XFx0dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG4yOTM0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbjI5MzU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjI5MzY6XFx0e1xcbjI5Mzc6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjUwLjk4MDgzMTc4MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTcxNjI5NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgY29kZSwgdGhpbmtpbmcgbGlrZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBRdW90YSBTY29yZXMgYW5kIENvbW1pdCBJbnZvY2F0aW9uIHdpdGhpbiBzeXNmcyoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGBzeXNmc2Agc2NoZW1lcyBmb3IgcXVvdGEgc2NvcmVzIGFuZCBjb21taXQgYXJlIGFjdHVhbGx5ICp1c2VkKi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFRoYXQncyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgY29udGV4dCBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgcXVvdGEgc2NvcmVzIHRocm91Z2ggdGhlIGBzeXNmc2AgaW50ZXJmYWNlLiBUaGlzIHRyYWNlIHdpbGwgdGVsbCBtZSBtb3JlIGFib3V0IGhvdyBxdW90YXMgYXJlIG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NTIuOTUyNDY0MjA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkxNTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTUxPWludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5Ny1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5ODppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5OS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI0MjE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNDM0LVxcdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF07XFxubW0vZGFtb24vc3lzZnMuYzoyNDM1OlxcdHJldHVybiBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN5c2ZzX2N0eC1cXHUwMDNlc2NoZW1lcywgY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI0MzYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyMzo1Mi45OTczODQ4NzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MTY4MzYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBHb2FsIENvbW1pdCBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyB0aGUgYGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgYnkgd3JpdGluZyBgREFNT05fU1lTRlNfQ01EX0NPTU1JVF9TQ0hFTUVTX1FVT1RBX0dPQUxTYCB0byB0aGF0IHNwZWNpZmljIHN5c2ZzIGVudHJ5OiBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjbnJcdTAwM2Uvc3RhdGVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBtYXBwaW5ncyBhcmUgY29ycmVjdCwgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBhdCB0aGUgZGVlcGVyIGltcGxpY2F0aW9ucyBvZiB0aGUgY29tbWl0IHByb2Nlc3MuIEtub3dpbmcgdGhlIHNwZWNpZmljIGZpbGUgYW5kIGNvbW1hbmQgYWxzbyBhbGxvd3MgbWUgdG8gcXVpY2tseSBuYXZpZ2F0ZSB0aGUgY29kZWJhc2UgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzU2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjM6NTQuOTU5MDcyNDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDQ0Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTIwNzU9ZW51bSBkYW1vbl9zeXNmc19jbWQge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDgyLVxcdC8qXFxubW0vZGFtb24vc3lzZnMuYzoyMDgzOlxcdCAqIEBEQU1PTl9TWVNGU19DTURfQ09NTUlUX1NDSEVNRVNfUVVPVEFfR09BTFM6IENvbW1pdCB0aGUgcXVvdGEgZ29hbHNcXG5tbS9kYW1vbi9zeXNmcy5jLTIwODQtXFx0ICogdG8gREFNT04uXFxubW0vZGFtb24vc3lzZnMuYy0yMDg1LVxcdCAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjA4NjpcXHREQU1PTl9TWVNGU19DTURfQ09NTUlUX1NDSEVNRVNfUVVPVEFfR09BTFMsXFxubW0vZGFtb24vc3lzZnMuYy0yMDg3LVxcdC8qXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI2MzI9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjY0NS1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjY0NjpcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5tbS9kYW1vbi9zeXNmcy5jLTI2NDctXFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjIzOjU1LjAwNTEyMTQ1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MzA4NzkwNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29kZSB0aGF0J3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgd2hpY2ggaXMgYSBiaWcgd2luLiBMZXQncyBicmVhayBpdCBkb3duOlxuXG5GaXJzdCwgdGhlIGFjY2Vzc2liaWxpdHkuIFRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgdGhleSBpbXBhY3QgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AuIFRoZXNlIGFyZSAqZGlyZWN0bHkqIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UsIHVzaW5nIGNvbW1hbmRzIGxpa2UgYGNvbW1pdGAgYW5kIGBjb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc2AuIFRoZSBjaGFuZ2VzIHRvIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhcmUgYWxzbyByZWFjaGFibGUgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzIG9yIHN5c2ZzLiBUaGlzIGlzIGFsbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBzbyBpdCBjaGVja3Mgb3V0LlxuXG5JcyBpdCB3b3J0aCBmdXp6aW5nPyBUaGUgY3JpdGVyaWEgc3RhdGUgdGhhdCBtb2RpZmljYXRpb25zIHRvIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyBhcmUgYXV0b21hdGljYWxseSB3b3J0aCBmdXp6aW5nLiBUaGlzIHBhdGNoICpkZWZpbml0ZWx5KiBmaXRzIHRoYXQgZGVzY3JpcHRpb24uIFdlIGhhdmUgY2hhbmdlcyB0byBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgLCB3aGljaCBub3cgcmV0dXJucyBhbiBlcnJvciB3aGVyZSBpdCBwcmV2aW91c2x5IGRpZCBub3RoaW5nLCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2Agd2l0aCBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cC4gQWRkaXRpb25hbGx5LCBgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzYCBoYWQgYSBjaGVjayByZW1vdmVkLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgVFJVRWAuXG5cbk5vdywgZm9yIGlkZW50aWZ5aW5nIHRoZSBrZXkgYEZvY3VzU3ltYm9sc2AuIFdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGFsdGVyZWQgb3IgZGlyZWN0IGVudHJ5IHBvaW50cy4gSSd2ZSBjb21waWxlZCBhIGxpc3Q6XG5cbiogICBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgXG4qICAgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2BcbiogICBgZGFtb3NfY29tbWl0X3F1b3RhYFxuKiAgIGBkYW1vc19jb21taXRgXG4qICAgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYFxuKiAgIGBkYW1vbl9jb21taXRfY3R4YFxuKiAgIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgXG4qICAgYGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzYFxuKiAgIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYFxuKiAgIGBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHNgXG4qICAgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgXG5cbk9mIGFsbCBvZiB0aG9zZSwgSSdsbCBzZWxlY3QgdGhlIG1vc3Qgc3BlY2lmaWMgb25lcyB0byB0aGUgbG9naWMgYmVpbmcgY2hhbmdlZCwgdGhhdCBhcmVuJ3QgdWJpcXVpdG91cyB0aHJvdWdob3V0IHRoZSBzeXN0ZW0uIFNvIHRoZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmU6XG5cbiogICBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYFxuKiAgIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGBcbiogICBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2BcbiogICBgZGFtb25fY29tbWl0X2N0eGBcbiogICBgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzYFxuXG5OZXh0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBuZWVkIHRvIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBlbmFibGUgdGhlIHJlbGV2YW50IERBTU9OIGZ1bmN0aW9uYWxpdHkuIExvb2tpbmcgYXQgYG1tL2RhbW9uL0tjb25maWdgOlxuXG4qICAgYERBTU9OYFxuKiAgIGBEQU1PTl9TWVNGU2AgKGRlcGVuZHMgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU2ApXG4qICAgYERBTU9OX1BBRERSYCAoZGVwZW5kcyBvbiBgREFNT04gXHUwMDI2XHUwMDI2IE1NVWApXG4qICAgYERBTU9OX1ZBRERSYFxuKiAgIGBEQU1PTl9MUlVfU09SVGAgKGRlcGVuZHMgb24gYERBTU9OX1BBRERSYClcbiogICBgREFNT05fUkVDTEFJTWAgKGRlcGVuZHMgb24gYERBTU9OX1BBRERSYClcblxuQ29uc2lkZXJpbmcgdGhlIGZlYXR1cmVzIG1vZGlmaWVkLCB3ZSBuZWVkIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9MUlVfU09SVGAgZW5hYmxlZCwgYWxvbmcgd2l0aCB0aGUgcmVxdWlyZWQgU1lTRlMgYW5kIE1NVS5cblxuRmluYWxseSwgbGV0J3MgdmVyaWZ5IGV2ZXJ5dGhpbmc6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYFRSVUVgXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiREFNT05cIiwgXCJEQU1PTl9TWVNGU1wiLCBcIkRBTU9OX1BBRERSXCIsIFwiREFNT05fTFJVX1NPUlRcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIiwgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbFwiLCBcImRhbW9uX2NvbW1pdF9jdHhcIiwgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCIsIFwiZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzXCJdYFxuKiAgIGBSZWFzb25pbmdgOiBTb2xpZCBhbmQgY2xlYXIuXG5cbkxvb2tzIGdvb2QgdG8gbWUuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5OTcsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDowMy4zMTM5MTQzMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjE1Mzg0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2FsXCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgcXVvdGEgZ29hbCBjb21taXQgaGFuZGxpbmcgaW4gbW0vZGFtb24vY29yZS5jIGJ5IGFkZGluZyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgemVybyB0YXJnZXQgdmFsdWVzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKCkgYW5kIHByb3BhZ2F0aW5nIGVycm9ycyBpbiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKS4gSXQgYWxzbyBhbHRlcnMgcGFyYW1ldGVyIGhhbmRsaW5nIGluIG1tL2RhbW9uL2xydV9zb3J0LmMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGFuZCBtb2R1bGUgcGFyYW1ldGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxcIixcbiAgICBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2Fsc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBxdW90YSBnb2FsIGNvbW1pdCBoYW5kbGluZyBpbiBtbS9kYW1vbi9jb3JlLmMgYnkgYWRkaW5nIGlucHV0IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIGZvciB6ZXJvIHRhcmdldCB2YWx1ZXMgaW4gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoKSBhbmQgcHJvcGFnYXRpbmcgZXJyb3JzIGluIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpLiBJdCBhbHNvIGFsdGVycyBwYXJhbWV0ZXIgaGFuZGxpbmcgaW4gbW0vZGFtb24vbHJ1X3NvcnQuYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDowMy4zOTAwNzU5NTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzAxMDA3NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MDMuMzkwNjk4MDE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ3MDAzNzkyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgREFNT04gY29yZSBxdW90YSBnb2FsIGNvbW1pdCBsb2dpYyAoYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbmQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2ApIHRvIHZhbGlkYXRlIHRoYXQgYHNyYy1cXHUwMDNldGFyZ2V0X3ZhbHVlYCBpcyBub24temVybywgcmV0dXJuaW5nIGAtRUlOVkFMYCBvbiB6ZXJvIHZhbHVlcyBhbmQgcHJvcGFnYXRpbmcgZXJyb3IgY29kZXMgcHJvcGVybHkgKGluY2x1ZGluZyBmcmVlaW5nIG5ld2x5IGFsbG9jYXRlZCBnb2FsIG9iamVjdHMgb24gZmFpbHVyZSkuIEl0IGFsc28gcmVtb3ZlcyByZWR1bmRhbnQgdmFsaWRhdGlvbiBjaGVja3MgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBgc2FtcGxlcy9kYW1vbi9tdGllci5jYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFsbCBzdHJ1Y3QgZmllbGRzIG1hbmlwdWxhdGVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBubyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGV4cG9zZWQgb3IgcGFzc2VkIGFjcm9zcyB1c2VyL2tlcm5lbCBib3VuZGFyaWVzLCBhbmQgYW55IHBvdGVudGlhbCBhbGxvY2F0aW9uL21lbW9yeSBtYW5hZ2VtZW50IGZhaWx1cmVzIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczNWU5MDg4YmU3NDIxZDVmMjE0ZmVjOWM0MTBjNGYxMGYwNzVlM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAwOjIzOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA4NjU1MGM0MTQ2ZjUzLi5mNWU3ZWQ5ZjVlMTU5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xMjExLDE0ICsxMjExLDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbitzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbitcdGlmICghc3JjLVx1MDAzZXRhcmdldF92YWx1ZSlcbitcdFx0cmV0dXJuICAtRUlOVkFMO1xuIFx0ZHN0LVx1MDAzZW1ldHJpYyA9IHNyYy1cdTAwM2VtZXRyaWM7XG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMTIzNiwxNCArMTIzOSwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbiBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0X2dvYWwsICpuZXh0LCAqc3JjX2dvYWwsICpuZXdfZ29hbDtcbi1cdGludCBpID0gMCwgaiA9IDA7XG4rXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XG4gXG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZHN0X2dvYWwsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkrKywgc3JjKTtcbi1cdFx0aWYgKHNyY19nb2FsKVxuLVx0XHRcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XG4tXHRcdGVsc2VcbitcdFx0aWYgKHNyY19nb2FsKSB7XG4rXHRcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZHN0X2dvYWwpO1xuK1x0XHR9XG4gXHR9XG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xuIFx0XHRpZiAoaisrIFx1MDAzYyBpKVxuQEAgLTEyNTIsNyArMTI1OCwxMSBAQCBpbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbiBcdFx0XHRcdHNyY19nb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbiBcdFx0aWYgKCFuZXdfZ29hbClcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRhbW9zX2ZyZWVfcXVvdGFfZ29hbChuZXdfZ29hbCk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuIFx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5pbmRleCBiZDg0NzgyOWE5OTA3Li43ZGY0NWY5YTBiM2FlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuQEAgLTIzMyw4ICsyMzMsNiBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4gXG4gXHRpZiAoIWFjdGl2ZV9tZW1fYnApXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKDEwMDAwIFx1MDAzYyBhY3RpdmVfbWVtX2JwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcbiBcdGlmICghZ29hbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvc2FtcGxlcy9kYW1vbi9tdGllci5jIGIvc2FtcGxlcy9kYW1vbi9tdGllci5jXG5pbmRleCBiZWE0NWM4N2NjOWJlLi4yN2RjODhiZGY3YTBlIDEwMDY0NFxuLS0tIGEvc2FtcGxlcy9kYW1vbi9tdGllci5jXG4rKysgYi9zYW1wbGVzL2RhbW9uL210aWVyLmNcbkBAIC0xNjEsOSArMTYxLDYgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuIFx0aWYgKCFzY2hlbWUpXG4gXHRcdGdvdG8gZnJlZV9vdXQ7XG4gXHRkYW1vbl9zZXRfc2NoZW1lcyhjdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG4tXHQvKiB6ZXJvIHRhcmdldCB2YWx1ZSBjYXVzZXMgZGl2aXNpb24gYnkgemVybyBpbiBkYW1vc19xdW90YV9zdG9yZSgpICovXG4tXHRpZiAoIW5vZGUwX21lbV91c2VkX2JwIHx8ICFub2RlMF9tZW1fZnJlZV9icClcbi1cdFx0Z290byBmcmVlX291dDtcbiBcdHF1b3RhX2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcbiBcdFx0XHRwcm9tb3RlID8gREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUCA6XG4gXHRcdFx0REFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjAzLjM5MDY5OTY2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjcxNDI2MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgREFNT04gcGF0Y2ggYW5kIHNlZSBpZiB3ZSBoYXZlIGFueSBLTVNBTiBjb25jZXJucyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuIFRoZSBmaXJzdCB0aGluZyBJJ2xsIGRvIGlzIHplcm8gaW4gb24gdGhlIG1vZGlmaWVkIGZpbGVzOiBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIG15IGluaXRpYWwgZm9jdXMgaXMgb24gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMjExLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgOiBpdHMgZnVuY3Rpb24sIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGl0IGludGVyYWN0cyB3aXRoLCBhbmQgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gc2VlIGlmIHRoZXJlJ3MgYSBwb3RlbnRpYWwgcGF0aCB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSB1c2VkLiBJJ2xsIG1ldGljdWxvdXNseSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSByZWFkIG9wZXJhdGlvbnMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVnaW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGdvYWwgaXMgY29tbWl0dGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjA5LjA2MjEyOTM0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDA6XFx0XFx0XFx0YnJlYWs7XFxuMTIwMTpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfVVNFRF9CUDpcXG4xMjAyOlxcdFxcdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1DR19GUkVFX0JQOlxcbjEyMDM6XFx0XFx0XFx0ZHN0LVxcdTAwM2VuaWQgPSBzcmMtXFx1MDAzZW5pZDtcXG4xMjA0OlxcdFxcdFxcdGRzdC1cXHUwMDNlbWVtY2dfaWQgPSBzcmMtXFx1MDAzZW1lbWNnX2lkO1xcbjEyMDU6XFx0XFx0XFx0YnJlYWs7XFxuMTIwNjpcXHRcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxcbjEyMDc6XFx0XFx0XFx0ZHN0LVxcdTAwM2VuaWQgPSBzcmMtXFx1MDAzZW5pZDtcXG4xMjA4OlxcdFxcdFxcdGJyZWFrO1xcbjEyMDk6XFx0XFx0ZGVmYXVsdDpcXG4xMjEwOlxcdFxcdFxcdGJyZWFrO1xcbjEyMTE6XFx0XFx0fVxcbjEyMTI6XFx0fVxcbjEyMTM6XFx0XFxuMTIxNDpcXHRzdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbjEyMTU6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4xMjE2OlxcdHtcXG4xMjE3OlxcdFxcdGlmICghc3JjLVxcdTAwM2V0YXJnZXRfdmFsdWUpXFxuMTIxODpcXHRcXHRcXHRyZXR1cm4gIC1FSU5WQUw7XFxuMTIxOTpcXHRcXHRkc3QtXFx1MDAzZW1ldHJpYyA9IHNyYy1cXHUwMDNlbWV0cmljO1xcbjEyMjA6XFx0XFx0ZHN0LVxcdTAwM2V0YXJnZXRfdmFsdWUgPSBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZTtcXG4xMjIxOlxcdFxcdGlmIChkc3QtXFx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxcbjEyMjI6XFx0XFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbjEyMjM6XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xcbjEyMjQ6XFx0XFx0cmV0dXJuIDA7XFxuMTIyNTpcXHR9XFxuMTIyNjpcXHRcXG4xMjI3OlxcdC8qKlxcbjEyMjg6XFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cXG4xMjI5OlxcdCAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4xMjMwOlxcdCAqIEBzcmM6XFx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT1MgcXVvdGEuXFxuMTIzMTpcXHQgKlxcbjEyMzI6XFx0ICogQ29waWVzIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlcnMgZm9yIHF1b3RhIGdvYWxzIGZyb20gQHNyYyB0byBAZHN0LiAgVXNlcnNcXG4xMjMzOlxcdCAqIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgcXVvdGEgZ29hbHMtbGV2ZWwgcGFyYW1ldGVycyB1cGRhdGUgb2YgcnVubmluZ1xcbjEyMzQ6XFx0ICogREFNT04gY29udGV4dHMsIGluc3RlYWQgb2YgbWFudWFsIGluLXBsYWNlIHVwZGF0ZXMuXFxuMTIzNTpcXHQgKlxcbjEyMzY6XFx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxuMTIzNzpcXHQgKiBkYW1vbl9jYWxsKCkuXFxuMTIzODpcXHQgKi9cXG4xMjM5OlxcdGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbjEyNDA6XFx0e1xcbjEyNDE6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdF9nb2FsLCAqbmV4dCwgKnNyY19nb2FsLCAqbmV3X2dvYWw7XFxuMTI0MjpcXHRcXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XFxuMTI0MzpcXHRcXG4xMjQ0OlxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShkc3RfZ29hbCwgbmV4dCwgZHN0KSB7XFxuMTI0NTpcXHRcXHRcXHRzcmNfZ29hbCA9IGRhbW9zX250aF9xdW90YV9nb2FsKGkrKywgc3JjKTtcXG4xMjQ2OlxcdFxcdFxcdGlmIChzcmNfZ29hbCkge1xcbjEyNDc6XFx0XFx0XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcXG4xMjQ4OlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTI0OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNTA6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMjUxOlxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChkc3RfZ29hbCk7XFxuMTI1MjpcXHRcXHRcXHR9XFxuMTI1MzpcXHRcXHR9XFxuMTI1NDpcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoc3JjX2dvYWwsIG5leHQsIHNyYykge1xcbjEyNTU6XFx0XFx0XFx0aWYgKGorKyBcXHUwMDNjIGkpXFxuMTI1NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjU3OlxcdFxcdFxcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxuMTI1ODpcXHRcXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4xMjU5OlxcdFxcdFxcdGlmICghbmV3X2dvYWwpXFxuMTI2MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMjYxOlxcdFxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKG5ld19nb2FsLCBzcmNfZ29hbCk7XFxuMTI2MjpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMTI2MzpcXHRcXHRcXHRcXHRkYW1vc19mcmVlX3F1b3RhX2dvYWwobmV3X2dvYWwpO1xcbjEyNjQ6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjY1OlxcdFxcdFxcdH1cXG4xMjY2OlxcdFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKGRzdCwgbmV3X2dvYWwpO1xcbjEyNjc6XFx0XFx0fVxcbjEyNjg6XFx0XFx0cmV0dXJuIDA7XFxuMTI2OTpcXHR9XFxuMTI3MDpcXHRcXG4xMjcxOlxcdHN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4xMjcyOlxcdHtcXG4xMjczOlxcdFxcdGludCBlcnI7XFxuMTI3NDpcXHRcXG4xMjc1OlxcdFxcdGRzdC1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwgPSBzcmMtXFx1MDAzZXJlc2V0X2ludGVydmFsO1xcbjEyNzY6XFx0XFx0ZHN0LVxcdTAwM2VtcyA9IHNyYy1cXHUwMDNlbXM7XFxuMTI3NzpcXHRcXHRkc3QtXFx1MDAzZXN6ID0gc3JjLVxcdTAwM2VzejtcXG4xMjc4OlxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxuMTI3OTpcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDowOS4wNjIzNjk5MDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2MDI3NzY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFF1b3RhIE1hbmFnZW1lbnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19xdW90YV9nb2FsYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlICpuZXcqIHF1b3RhIGdvYWwgZ2V0cyBzZXQgYW5kIHRoZW4sIGNydWNpYWxseSwgaG93IHRoYXQgdmFsdWUgaXMgYWN0dWFsbHkgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGZvciB1c2UgbGF0ZXIgb24uIEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlJ3MgbGlmZWN5Y2xlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGlzIGluaXRpYWxseSBkZWZpbmVkLiBUaGVuLCBteSBmb2N1cyBzaGlmdHMgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgYGRhbW9zX3F1b3RhX2dvYWxgLiBXaGVyZSBkb2VzIGl0cyB2YWx1ZSBvcmlnaW5hdGU/IElzIGl0IGEgY29weSBvZiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgPyBJcyB0aGVyZSBzb21lIGFkZGl0aW9uYWwgbG9naWMgb3IgdHJhbnNmb3JtYXRpb24gaW52b2x2ZWQ/IEtub3dpbmcgdGhpcyB3aWxsIHJldmVhbCB0aGUgZW50aXJlIHF1b3RhIGFzc2lnbm1lbnQgb3IgY2FsY3VsYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MTAuOTIyNjUwMDU2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4NjU5ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX25ld19xdW90YV9nb2FsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDc5PXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZik7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwODAtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwODE6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDgyLVxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTY4Mj12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjg3LVxcbm1tL2RhbW9uL2NvcmUuYzo2ODg6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy02ODktXFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTIzOT1pbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjU2LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxMjU3OlxcdFxcdG5ld19nb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTEyNTgtXFx0XFx0XFx0XFx0c3JjX2dvYWwtXFx1MDAzZW1ldHJpYywgc3JjX2dvYWwtXFx1MDAzZXRhcmdldF92YWx1ZSk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzNS1cXHRcXHRyZXR1cm4gMDtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjIzNjpcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCwgYWN0aXZlX21lbV9icCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzctXFx0aWYgKCFnb2FsKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDAtXFx0LyogYWltIDAuMiAlIGdvYWwgY29uZmxpY3QsIHRvIGtlZXAgbGl0dGxlIHBpbmcgcG9uZyAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQxOlxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDItXFx0XFx0XFx0MTAwMDAgLSBhY3RpdmVfbWVtX2JwICsgMik7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM1LVxcdGlmIChxdW90YV9tZW1fcHJlc3N1cmVfdXMpIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNy1cXHRcXHRcXHRcXHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI0My1cXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ0OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI0NS1cXHRcXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODY1OlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChzeXNmc19nb2FsLVxcdTAwM2VtZXRyaWMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjYtXFx0XFx0XFx0XFx0c3lzZnNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MTAtXFx0XFx0ICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjkxMTpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoZHN0X2dvYWxzW2ldLm1ldHJpYyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTEyLVxcdFxcdFxcdFxcdGRzdF9nb2Fsc1tpXS50YXJnZXRfdmFsdWUpO1xcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTc4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xNjMtXFx0ZGFtb25fc2V0X3NjaGVtZXMoY3R4LCBcXHUwMDI2c2NoZW1lLCAxKTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTY0OlxcdHF1b3RhX2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTY1LVxcdFxcdFxcdHByb21vdGUgPyBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQIDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MTMuMTgxMzE4NTQ4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTQxNzA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRdW90YSBHb2FsIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgZnVuY3Rpb24uIEl0J3MgaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBoYW5kbGVzIG5ldyBxdW90YSBnb2FscywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgbWFpbiBtZW1vcnkgbWFuYWdlbWVudCBwYXJ0cy4gV2hhdCBleGFjdGx5IGFyZSB0aGUgZGVzaWduIGNob2ljZXMgaGVyZT8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgYXQgcGxheT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgaW1tZWRpYXRlbHkgYXdhcmUgb2Y/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBwcm92aWRlcywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgREFNT04gbW9kdWxlcyBhbmQgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBEQU1PTiBsaWZlY3ljbGUsIHNvIGFueSBidWdzIGluIHRoaXMgYXJlYSBjb3VsZCBjcmVhdGUgbWFqb3IgaXNzdWVzIGRvd25zdHJlYW0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjE1LjY3NTQ5MTU3MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MDpcXHR9XFxuIDY4MTpcXHRcXG4gNjgyOlxcdHZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4gNjgzOlxcdHtcXG4gNjg0OlxcdFxcdGRhbW9zX2RlbF9maWx0ZXIoZik7XFxuIDY4NTpcXHRcXHRkYW1vc19mcmVlX2ZpbHRlcihmKTtcXG4gNjg2OlxcdH1cXG4gNjg3OlxcdFxcbiA2ODg6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbiA2ODk6XFx0XFx0XFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXFxuIDY5MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcXG4gNjkxOlxcdHtcXG4gNjkyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xcbiA2OTU6XFx0XFx0aWYgKCFnb2FsKVxcbiA2OTY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY5NzpcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPSBtZXRyaWM7XFxuIDY5ODpcXHRcXHRnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUgPSB0YXJnZXRfdmFsdWU7XFxuIDY5OTpcXHRcXHRpZiAobWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4gNzAwOlxcdFxcdFxcdGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gVTY0X01BWDtcXG4gNzAxOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZnb2FsLVxcdTAwM2VsaXN0KTtcXG4gNzAyOlxcdFxcdHJldHVybiBnb2FsO1xcbiA3MDM6XFx0fVxcbiA3MDQ6XFx0XFxuIDcwNTpcXHR2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXFxuIDcwNjpcXHR7XFxuIDcwNzpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZnLVxcdTAwM2VsaXN0LCBcXHUwMDI2cS1cXHUwMDNlZ29hbHMpO1xcbiA3MDg6XFx0fVxcbiA3MDk6XFx0XFxuIDcxMDpcXHRzdGF0aWMgdm9pZCBkYW1vc19kZWxfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG4gNzExOlxcdHtcXG4gNzEyOlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZnLVxcdTAwM2VsaXN0KTtcXG4gNzEzOlxcdH1cXG4gNzE0OlxcdFxcbiA3MTU6XFx0c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxcbiA3MTY6XFx0e1xcbiA3MTc6XFx0XFx0a2ZyZWUoZyk7XFxuIDcxODpcXHR9XFxuIDcxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MTUuNjc1NjUyMjUyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzE5MzU1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFF1b3RhIEdvYWwgU3RydWN0dXJlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgYmVhcmluZ3Mgc3RyYWlnaHQuIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbGAgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MsIHBhcnRpY3VsYXJseSBob3cgaXQncyBzdHJ1Y3R1cmVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgd2FudCB0byBjaGVjayB0aGUgbGF5b3V0LCB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgbWVtYmVycywgYW5kIGFueSBwYWRkaW5nIG9yIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgaW5kaXZpZHVhbCBxdW90YSBnb2FsIGZpZWxkcy4gSSdtIGxvb2tpbmcgZm9yIGEgc29saWQgZ3Jhc3AgYmVmb3JlIEkgc3RhcnQgdGhlIGFuYWx5c2lzLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGtleSBwYXJhbWV0ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDoxNy4zNDc1OTA1NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjUxOTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYxPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTk4OnN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTk5LVxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDoxOS44ODAxMTg1NTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwOTA4ODgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTguIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgdXN1YWwgc3RydWN0dXJlIG9mIHRoZXNlIGhlYWRlcnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3RydWN0dXJlIGRlZmluaXRpb25zIG9yIHBlcmhhcHMgc29tZSBtYWNybyBkZWNsYXJhdGlvbnMgdGhhdCBmb3JtIHRoZSBiYWNrYm9uZSBvZiB0aGUgRGF0YSBBY2Nlc3MgTU9OaXRvciAoREFNT04pIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHByb2JhYmx5IHJlc2lkZSwgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgdG8gcmVwcmVzZW50IG1vbml0b3JlZCByZWdpb25zLCBtb25pdG9yaW5nIGNvbnRleHRzLCBhbmQgdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtcy4gSSdtIGhvcGluZyB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIHJlcHJlc2VudHMgYW5kIGhhbmRsZXMgdGhlIG1vbml0b3JlZCBtZW1vcnkgcmVnaW9ucywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQuIEZyb20gdGhlcmUgSSdsbCBsaWtlbHkgYnJhbmNoIG91dCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29yZSBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgc3VjaCBhcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjIyLjE4OTIxMDE4MloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHQgKiBJZiBAbWV0cmljIGlzIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfe1VTRUQsRlJFRX1fQlAsIEBuaWQgYW5kIEBtZW1jZ19pZFxcbiAxOTY6XFx0ICogcmVwcmVzZW50cyB0aGUgbm9kZSBpZCBhbmQgdGhlIGNncm91cCB0byBhY2NvdW50IHRoZSB1c2VkIG1lbW9yeSBmb3IuXFxuIDE5NzpcXHQgKi9cXG4gMTk4OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcXG4gMTk5OlxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xcbiAyMDA6XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxuIDIwMTpcXHRcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XFxuIDIwMjpcXHRcXHQvKiBtZXRyaWMtZGVwZW5kZW50IGZpZWxkcyAqL1xcbiAyMDM6XFx0XFx0dW5pb24ge1xcbiAyMDQ6XFx0XFx0XFx0c3RydWN0IHtcXG4gMjA1OlxcdFxcdFxcdFxcdGludCBuaWQ7XFxuIDIwNjpcXHRcXHRcXHRcXHR1NjQgbWVtY2dfaWQ7XFxuIDIwNzpcXHRcXHRcXHR9O1xcbiAyMDg6XFx0LyogcHJpdmF0ZTogKi9cXG4gMjA5OlxcdFxcdFxcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXFxuIDIxMDpcXHRcXHRcXHR1NjQgbGFzdF9wc2lfdG90YWw7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdH07XFxuIDIxMzpcXHQvKiBwcml2YXRlOiAqL1xcbiAyMTQ6XFx0XFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cXG4gMjE1OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gMjE2OlxcdH07XFxuIDIxNzpcXHRcXG4gMjE4OlxcdC8qKlxcbiAyMTk6XFx0ICogZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIC0gR29hbC1iYXNlZCBxdW90YSB0dW5pbmcgbG9naWMuXFxuIDIyMDpcXHQgKiBAREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUOlxcdEFpbSBsb25nIHRlcm0gY29uc2lzdGVudCBxdW90YS5cXG4gMjIxOlxcdCAqIEBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMOlxcdEFpbSB6ZXJvIHF1b3RhIGFzYXAuXFxuIDIyMjpcXHQgKi9cXG4gMjIzOlxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XFxuIDIyNDpcXHRcXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QsXFxuIDIyNTpcXHRcXHREQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMLFxcbiAyMjY6XFx0fTtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0LyoqXFxuIDIyOTpcXHQgKiBzdHJ1Y3QgZGFtb3NfcXVvdGEgLSBDb250cm9scyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cXG4gMjMwOlxcdCAqIEByZXNldF9pbnRlcnZhbDpcXHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxcbiAyMzE6XFx0ICogQG1zOlxcdFxcdFxcdE1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLlxcbiAyMzI6XFx0ICogQHN6OlxcdFxcdFxcdE1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC5cXG4gMjMzOlxcdCAqIEBnb2FsX3R1bmVyOlxcdFxcdEdvYWwtYmFzZWQgQGVzeiB0dW5pbmcgYWxnb3JpdGhtIHRvIHVzZS5cXG4gMjM0OlxcdCAqIEBlc3o6XFx0XFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXFxuIDIzNTpcXHQgKiBAZmFpbF9jaGFyZ2VfbnVtOlxcdEZhaWxlZCByZWdpb25zIGNoYXJnZSByYXRlIG51bWVyYXRvci5cXG4gMjM2OlxcdCAqIEBmYWlsX2NoYXJnZV9kZW5vbTpcXHRGYWlsZWQgcmVnaW9ucyBjaGFyZ2UgcmF0ZSBkZW5vbWluYXRvci5cXG4gMjM3OlxcdCAqXFxuIDIzODpcXHQgKiBAd2VpZ2h0X3N6OlxcdFxcdFdlaWdodCBvZiB0aGUgcmVnaW9uJ3Mgc2l6ZSBmb3IgcHJpb3JpdGl6YXRpb24uXFxuIDIzOTpcXHQgKiBAd2VpZ2h0X25yX2FjY2Vzc2VzOlxcdFdlaWdodCBvZiB0aGUgcmVnaW9uJ3MgbnJfYWNjZXNzZXMgZm9yIHByaW9yaXRpemF0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDoyMi4xODkzMzIwNDJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIwNTg4OTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBRdW90YSBHb2FsIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRpZ2h0ZW5pbmcgdXAgZXJyb3IgaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24gYXJvdW5kIERBTU9OJ3MgcXVvdGEgZ29hbCBtYW5hZ2VtZW50LiBGaXJzdCwgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHRoZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGFuIGBpbnRgIGFuZCBpbmNsdWRlcyBhIGNydWNpYWwgY2hlY2s6IGBpZiAoIXNyYy1cdTAwM2V0YXJnZXRfdmFsdWUpIHJldHVybiAtRUlOVkFMO2AuICBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZGl2aWRlLWJ5LXplcm8gb3Igc2ltaWxhciBpc3N1ZSB3aGVyZSBhIHplcm8gdGFyZ2V0IHZhbHVlIG1pZ2h0IGhhdmUgY2F1c2VkIHByb2JsZW1zLiBUaGUgcGF0Y2ggdGhlbiBwcm9wYWdhdGVzIHRoaXMgcmV0dXJuIHZhbHVlIHVwIHRvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLCBhbmQgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGVycm9ycyBmcm9tIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAsIGluY2x1ZGluZyBmcmVlaW5nIGBuZXdfZ29hbGAgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBpdHMgY29tbWl0LlxuXG5OZXh0LCBpbiBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIHRoYXQgc2VlbWluZ2x5IGFyYml0cmFyeSBjaGVjayAoYGlmICgxMDAwMCBcdTAwM2MgYWN0aXZlX21lbV9icCkgcmV0dXJuIC1FSU5WQUw7YCkgaW4gYGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscygpYCBpcyBnb25lLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgdW5kZXJseWluZyBpc3N1ZSBpcyBoYW5kbGVkIGVsc2V3aGVyZSBhbmQgdGhlIGNoZWNrIGlzIHJlZHVuZGFudCBvciBubyBsb25nZXIgcmVsZXZhbnQuXG5cbkZpbmFsbHksIGluIGBzYW1wbGVzL2RhbW9uL210aWVyLmNgLCB0aGUgY2hlY2sgZm9yIHplcm8gYG5vZGUwX21lbV91c2VkX2JwYCBvciBgbm9kZTBfbWVtX2ZyZWVfYnBgIGlzIHJlbW92ZWQuIFRoaXMgbWFrZXMgc2Vuc2U7IHNpbmNlIHRhcmdldCB2YWx1ZSB2YWxpZGF0aW9uIGlzIG5vdyBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgLCB0aGVzZSBjaGVja3MgYXQgdGhlIHNhbXBsZSBsZXZlbCBhcmUgc3VwZXJmbHVvdXMuIFRoaXMgc2ltcGxpZmljYXRpb24gaXMgZ2VuZXJhbGx5IGdvb2QgY29kZSBoeWdpZW5lLlxuXG5Ob3csIGZvciB0aGUgcmVhbGx5IGNyaXRpY2FsIHBhcnQ6IHNlY3VyaXR5LiAgSSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBpbnRyb2R1Y2UgYW55IHZ1bG5lcmFiaWxpdGllcy4gIEkgbmVlZCB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiAgVGhlIHBhdGNoICpkb2Vzbid0KiBhcHBlYXIgdG8gaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHNvIG5vIHByb2JsZW1zIHRoZXJlLiBJIGFsc28gc2VlIG5vIGluZGljYXRpb24gb2YgbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBkYXRhLCBhbmQgdGhhdCBgc3JjLVx1MDAzZXRhcmdldF92YWx1ZWAgY2hlY2sgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBpcyB2ZXJ5IHJlYXNzdXJpbmcuICBUaGUgYG5ld19nb2FsYCBhbGxvY2F0aW9uIGFuZCBzdWJzZXF1ZW50IGZyZWVpbmcgaW4gdGhlIGVycm9yIHBhdGggb2YgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBhbHNvIGxvb2tzIHNvdW5kIOKAkyBwcmV2ZW50aW5nIHBvdGVudGlhbCBtZW1vcnkgbGVha3MgdGhhdCB3ZXJlIHByZXNlbnQgYmVmb3JlIHRoaXMgcGF0Y2guXG5cbkkgYWxzbyBtdXN0IGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBsZWFrcyB3aGVuIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIHJldHVybnMgZWFybHkuIEl0IGlzIGltcG9ydGFudCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGUgY2hhbmdlcyBpbiB0aGUgbG9naWMgYW5kIHRoZSBhZGRlZCBlcnJvciBoYW5kbGluZyBnaXZlIG1lIG1vcmUgY29uZmlkZW5jZS5cblxuT3ZlcmFsbCwgdGhpcyBpcyBhIGNsZWFuIHBhdGNoLiBJdCdzIGZvY3VzZWQsIGFkZHJlc3NlcyBhIHJlYWwgcG90ZW50aWFsIGlzc3VlIHdpdGggdmFsaWRhdGlvbiwgYW5kIGlzIGdlbmVyYWxseSB3ZWxsLXN0cnVjdHVyZWQuICBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIHJlYWRzIG9yIHBvdGVudGlhbCBsZWFrcywgYW5kIHRoZSBzaW1wbGlmaWNhdGlvbiBpcyBhIGJvbnVzLiBJdCBsb29rcyBnb29kIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gV2Ugc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgY29kZSByZXZpZXcgYW5kIG1ha2Ugc3VyZSB0aGUgZXJyb3IgaGFuZGxpbmcgaXMgY29tcGxldGUsIGJ1dCBJJ20gY29tZm9ydGFibGUgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MjcuMzk1MjI0ODU5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4Nzg0NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA5ND12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcyk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTU6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyMTQ9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjI3LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMjI4OiAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTEyMjktICogQGRzdDpcXHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyMzgtICovXFxubW0vZGFtb24vY29yZS5jOjEyMzk6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTEyNDAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEyNzE9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNzctXFx0ZHN0LVxcdTAwM2VzeiA9IHNyYy1cXHUwMDNlc3o7XFxubW0vZGFtb24vY29yZS5jOjEyNzg6XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTI3OS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTg9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMi1cXHRcXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5MjM6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBcXHUwMDI2cXVvdGEpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI0LVxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZxdW90YSlcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04OTI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDctXFx0XFx0ICogV2hlbiBucl9zcmNfZ29hbHMgaXMgc21hbGxlciB0aGFuIGRzdF9nb2FscyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTA4OlxcdFxcdCAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIHdpbGwga2ZyZWUoKSB0aGUgZHN0IGdvYWxzLlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MDktXFx0XFx0ICogTWFrZSBpdCBrZnJlZSgpLWFibGUuXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTIwLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5MjE6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjI5LjY1NDAxNTgzMloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDcxODA2ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzeXNmcy1zY2hlbWVzLmNgKipcblxuT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBpc3N1ZS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHN0YXJ0IHdpdGggYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIE15IGh1bmNoIGlzIGl0J3MgcmVsYXRlZCB0byB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCBob3cgd2UncmUgaGFuZGxpbmcgc2NoZW1lcy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSByZWdpb24gYXJvdW5kIGxpbmUgMjkyMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIHNjaGVtZS1zcGVjaWZpYyBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIG9yIHdoZXJlIGEgY2VydGFpbiBhY3Rpb24gcmVsYXRpbmcgdG8gbWVtb3J5IG1hbmFnZW1lbnQgaGFwcGVucy4gVGhhdCBzcGVjaWZpYyBsaW5lIHNob3VsZCBoYXZlIHRoZSBzcGVjaWZpYyBhdHRyaWJ1dGUgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcHJvY2VkdXJlIGFuZCBJJ20gcmVhZHkgdG8gaW52ZXN0aWdhdGUgYW5kIHNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI0NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjMxLjcyNTgyNjgyM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5MDA6XFx0e1xcbjI5MDE6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuMjkwMjpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGEgPSB7fTtcXG4yOTAzOlxcdFxcdGludCBpID0gMDtcXG4yOTA0OlxcdFxcbjI5MDU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnF1b3RhLmdvYWxzKTtcXG4yOTA2OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xcbjI5MDc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc3lzZnNfc2NoZW1lO1xcbjI5MDg6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcsICpnX25leHQ7XFxuMjkwOTpcXHRcXHRcXHRpbnQgZXJyO1xcbjI5MTA6XFx0XFxuMjkxMTpcXHRcXHRcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGUgc2NoZW1lIHN5c2ZzIGRpciAqL1xcbjI5MTI6XFx0XFx0XFx0aWYgKGkgXFx1MDAzZT0gc3lzZnNfc2NoZW1lcy1cXHUwMDNlbnIpXFxuMjkxMzpcXHRcXHRcXHRcXHRicmVhaztcXG4yOTE0OlxcdFxcbjI5MTU6XFx0XFx0XFx0c3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy1cXHUwMDNlc2NoZW1lc19hcnJbaV07XFxuMjkxNjpcXHRcXHRcXHRlcnIgPSBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoc3lzZnNfc2NoZW1lLVxcdTAwM2VxdW90YXMtXFx1MDAzZWdvYWxzLFxcbjI5MTc6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnF1b3RhKTtcXG4yOTE4OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4yOTE5OlxcdFxcdFxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWxfc2FmZShnLCBnX25leHQsIFxcdTAwMjZxdW90YSlcXG4yOTIwOlxcdFxcdFxcdFxcdFxcdGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChnKTtcXG4yOTIxOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjkyMjpcXHRcXHRcXHR9XFxuMjkyMzpcXHRcXHRcXHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEsIFxcdTAwMjZxdW90YSk7XFxuMjkyNDpcXHRcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuMjkyNTpcXHRcXHRcXHRcXHRkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoZyk7XFxuMjkyNjpcXHRcXHRcXHRpZiAoZXJyKVxcbjI5Mjc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yOTI4OlxcdFxcdFxcdGkrKztcXG4yOTI5OlxcdFxcdH1cXG4yOTMwOlxcdFxcdHJldHVybiAwO1xcbjI5MzE6XFx0fVxcbjI5MzI6XFx0XFxuMjkzMzpcXHR2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbjI5MzQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuMjkzNTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuMjkzNjpcXHR7XFxuMjkzNzpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4yOTM4OlxcdFxcdGludCBzY2hlbWVzX2lkeCA9IDA7XFxuMjkzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDA6MjQ6MzEuNzI2MDEwNDEzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDkwOTQ5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgREFNT04gQm90dGxlbmVjayoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGRhbW9zX2NvbW1pdF9xdW90YWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBsb2dpYyBhcm91bmQgbGluZSAxMjcwIG1pZ2h0IGJlIHBsYXlpbmcgYSBrZXkgcm9sZSwgbWF5YmUgcmVsYXRlZCB0byBxdW90YSBtYW5hZ2VtZW50IG9yIHNvbWUgYWxsb2NhdGlvbiBkZWNpc2lvbnMuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBiZWNhdXNlIHRoaXMgY291bGQgYmUgYSBtYWpvciBjb25zdHJhaW50LiBJJ2xsIHN0YXJ0IHdpdGggdGhpcyBhcmVhIGFuZCB0aGVuIHdvcmsgb3V0d2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjMzLjk3NTEwODE5NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjU6XFx0XFx0XFx0fVxcbjEyNjY6XFx0XFx0XFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoZHN0LCBuZXdfZ29hbCk7XFxuMTI2NzpcXHRcXHR9XFxuMTI2ODpcXHRcXHRyZXR1cm4gMDtcXG4xMjY5OlxcdH1cXG4xMjcwOlxcdFxcbjEyNzE6XFx0c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbjEyNzI6XFx0e1xcbjEyNzM6XFx0XFx0aW50IGVycjtcXG4xMjc0OlxcdFxcbjEyNzU6XFx0XFx0ZHN0LVxcdTAwM2VyZXNldF9pbnRlcnZhbCA9IHNyYy1cXHUwMDNlcmVzZXRfaW50ZXJ2YWw7XFxuMTI3NjpcXHRcXHRkc3QtXFx1MDAzZW1zID0gc3JjLVxcdTAwM2VtcztcXG4xMjc3OlxcdFxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbjEyNzg6XFx0XFx0ZXJyID0gZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKGRzdCwgc3JjKTtcXG4xMjc5OlxcdFxcdGlmIChlcnIpXFxuMTI4MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyODE6XFx0XFx0ZHN0LVxcdTAwM2Vnb2FsX3R1bmVyID0gc3JjLVxcdTAwM2Vnb2FsX3R1bmVyO1xcbjEyODI6XFx0XFx0ZHN0LVxcdTAwM2VmYWlsX2NoYXJnZV9udW0gPSBzcmMtXFx1MDAzZWZhaWxfY2hhcmdlX251bTtcXG4xMjgzOlxcdFxcdGRzdC1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20gPSBzcmMtXFx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tO1xcbjEyODQ6XFx0XFx0ZHN0LVxcdTAwM2V3ZWlnaHRfc3ogPSBzcmMtXFx1MDAzZXdlaWdodF9zejtcXG4xMjg1OlxcdFxcdGRzdC1cXHUwMDNld2VpZ2h0X25yX2FjY2Vzc2VzID0gc3JjLVxcdTAwM2V3ZWlnaHRfbnJfYWNjZXNzZXM7XFxuMTI4NjpcXHRcXHRkc3QtXFx1MDAzZXdlaWdodF9hZ2UgPSBzcmMtXFx1MDAzZXdlaWdodF9hZ2U7XFxuMTI4NzpcXHRcXHRyZXR1cm4gMDtcXG4xMjg4OlxcdH1cXG4xMjg5OlxcdFxcbjEyOTA6XFx0c3RhdGljIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX250aF9jb3JlX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9zICpzKVxcbjEyOTE6XFx0e1xcbjEyOTI6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbjEyOTM6XFx0XFx0aW50IGkgPSAwO1xcbjEyOTQ6XFx0XFxuMTI5NTpcXHRcXHRkYW1vc19mb3JfZWFjaF9jb3JlX2ZpbHRlcihmaWx0ZXIsIHMpIHtcXG4xMjk2OlxcdFxcdFxcdGlmIChpKysgPT0gbilcXG4xMjk3OlxcdFxcdFxcdFxcdHJldHVybiBmaWx0ZXI7XFxuMTI5ODpcXHRcXHR9XFxuMTI5OTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzAwOlxcdH1cXG4xMzAxOlxcdFxcbjEzMDI6XFx0c3RhdGljIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX250aF9vcHNfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuMTMwMzpcXHR7XFxuMTMwNDpcXHRcXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAwOjI0OjMzLjk3NTI3MTczNloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTE1Nzc1MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9TIFF1b3RhIEdvYWwgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIGNoYW5nZXM6IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgbm93IGNvcnJlY3RseSB2YWxpZGF0ZXMgYCFzcmMtXHUwMDNldGFyZ2V0X3ZhbHVlYCBhbmQgcmV0dXJucyBgLUVJTlZBTGAuIFNtYXJ0IG1vdmUuIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGhhbmRsZXMgZXJyb3JzIGZyb20gdGhhdCBmdW5jdGlvbiBwcm9wZXJseSBub3csIGluc3RlYWQgb2YganVzdCBob3BpbmcgZm9yIHRoZSBiZXN0LiBBbmQgdGhleSd2ZSBjbGVhbmVkIHVwIHJlZHVuZGFudCBjaGVja3MgaW4gYGxydV9zb3J0LmNgIGFuZCBgbXRpZXIuY2AuIEFsbCBzZW5zaWJsZSByZWZhY3RvcmluZy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHNvcnQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSBkZWFsaW5nIHdpdGggdGhlIERBTU9OIHN1YnN5c3RlbSwgc28gd2UgbmVlZCB0byBiZSB2aWdpbGFudCBhYm91dCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3Mgb3IgY3Jhc2hlcy5cblxuTGV0IG1lIHRoaW5r4oCmXG5cbiogICBBcmUgd2UgY29weWluZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZT8gTm9wZS4gR29vZC5cbiogICBBcmUgd2UgbWFraW5nIGRlY2lzaW9ucyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEV2ZXJ5dGhpbmcgbG9va3Mgc291bmQuXG4qICAgQXJlIHdlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzPyBTdGlsbCBuby5cbiogICBNZW1vcnkgbWFuYWdlbWVudD8gU3RhbmRhcmQgZGV0ZWN0b3JzLCBLQVNBTiwgYW5kIEtNRU1MRUFLIHNob3VsZCBjYXRjaCBhbnkgZXJyb3JzLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgcnVuIHRocm91Z2ggdGhlIGV4cGxpY2l0IEtNU0FOIGNyaXRlcmlhIGFnYWluIGp1c3QgdG8gYmUgc3VyZTpcblxuKiAgIEtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/IE5lZ2F0aXZlLlxuKiAgIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS5cbiogICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vdCBoZXJlLlxuKiAgIEJ1ZmZlciBhY2Nlc3MgdGhhdCBtaWdodCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IERvZXNuJ3QgbG9vayBsaWtlIGl0LlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHNlZW1zIHRvIGJlIHN0cmljdGx5IGludGVybmFsIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgREFNT1MgcXVvdGEgZ29hbCBsb2dpYy4gU29saWQuXG5cblRpbWUgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg0NCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMDoyNDozOC4wOTEwNTA2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIERBTU9OIGNvcmUgcXVvdGEgZ29hbCBjb21taXQgbG9naWMgKGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgKSB0byB2YWxpZGF0ZSB0aGF0IGBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbGwgc3RydWN0IGZpZWxkcyBtYW5pcHVsYXRlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIHBhc3NlZCBhY3Jvc3MgdXNlci9rZXJuZWwgYm91bmRhcmllcywgYW5kIGFueSBwb3RlbnRpYWwgYWxsb2NhdGlvbi9tZW1vcnkgbWFuYWdlbWVudCBmYWlsdXJlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIERBTU9OIGNvcmUgcXVvdGEgZ29hbCBjb21taXQgbG9naWMgKGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgYW5kIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgKSB0byB2YWxpZGF0ZSB0aGF0IGBzcmMtXFx1MDAzZXRhcmdldF92YWx1ZWAgaXMgbm9uLXplcm8sIHJldHVybmluZyBgLUVJTlZBTGAgb24gemVybyB2YWx1ZXMgYW5kIHByb3BhZ2F0aW5nIGVycm9yIGNvZGVzIHByb3Blcmx5IChpbmNsdWRpbmcgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgZ29hbCBvYmplY3RzIG9uIGZhaWx1cmUpLiBJdCBhbHNvIHJlbW92ZXMgcmVkdW5kYW50IHZhbGlkYXRpb24gY2hlY2tzIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYHNhbXBsZXMvZGFtb24vbXRpZXIuY2AuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbGwgc3RydWN0IGZpZWxkcyBtYW5pcHVsYXRlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgbm8gdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIHBhc3NlZCBhY3Jvc3MgdXNlci9rZXJuZWwgYm91bmRhcmllcywgYW5kIGFueSBwb3RlbnRpYWwgYWxsb2NhdGlvbi9tZW1vcnkgbWFuYWdlbWVudCBmYWlsdXJlcyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[1] Phase: Succeeded StartedAt: 2026-09-04 00:24:50 +0000 UTC FinishedAt: 2026-09-04 00:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 00:24:50 +0000 UTC FinishedAt: 2026-09-04 00:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2] Phase: Succeeded StartedAt: 2026-09-04 00:24:50 +0000 UTC FinishedAt: 2026-09-04 04:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 00:24:50 +0000 UTC FinishedAt: 2026-09-04 04:11:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 00:24:50 +0000 UTC FinishedAt: 2026-09-04 00:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 00:24:50 +0000 UTC FinishedAt: 2026-09-04 00:24:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8hn5v/series-workflow8hn5v-convert-artifact-1928136324/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 00:25:00 +0000 UTC FinishedAt: 2026-09-04 00:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 00:25:00 +0000 UTC FinishedAt: 2026-09-04 00:42:44 +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:*6d392658-8f2e-4944-8ada-b9e8529bfa97,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-workflow8hn5v/series-workflow8hn5v-convert-artifact-1928136324/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": "7d9c42bd-4239-40fc-a25a-563e3fb68c55", "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-workflow8hn5v/series-workflow8hn5v-build-action-2112932802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 00:25:00 +0000 UTC FinishedAt: 2026-09-04 00:42:34 +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:*6d392658-8f2e-4944-8ada-b9e8529bfa97,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-workflow8hn5v/series-workflow8hn5v-convert-artifact-1928136324/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": "7d9c42bd-4239-40fc-a25a-563e3fb68c55", "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-workflow8hn5v/series-workflow8hn5v-build-action-2112932802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 00:42:44 +0000 UTC FinishedAt: 2026-09-04 00:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 00:42:44 +0000 UTC FinishedAt: 2026-09-04 00:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 00:42:44 +0000 UTC FinishedAt: 2026-09-04 00:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 00:42:44 +0000 UTC FinishedAt: 2026-09-04 00:42:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8hn5v/series-workflow8hn5v-convert-artifact-3810484483/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 00:42:54 +0000 UTC FinishedAt: 2026-09-04 00:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 00:42:54 +0000 UTC FinishedAt: 2026-09-04 00:44:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d9c42bd-4239-40fc-a25a-563e3fb68c55,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-workflow8hn5v/series-workflow8hn5v-build-action-2112932802/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-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 00:44:52 +0000 UTC FinishedAt: 2026-09-04 00:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 00:44:52 +0000 UTC FinishedAt: 2026-09-04 00:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 00:44:52 +0000 UTC FinishedAt: 2026-09-04 01:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 00:44:52 +0000 UTC FinishedAt: 2026-09-04 01:05:15 +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:*6d392658-8f2e-4944-8ada-b9e8529bfa97,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-workflow8hn5v/series-workflow8hn5v-convert-artifact-3810484483/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": "6f5ab85c-2909-4e9a-94af-ed7481dbdffe", "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-workflow8hn5v/series-workflow8hn5v-build-action-4010807223/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 00:44:52 +0000 UTC FinishedAt: 2026-09-04 01:05:04 +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:*6d392658-8f2e-4944-8ada-b9e8529bfa97,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-workflow8hn5v/series-workflow8hn5v-convert-artifact-3810484483/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": "6f5ab85c-2909-4e9a-94af-ed7481dbdffe", "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-workflow8hn5v/series-workflow8hn5v-build-action-4010807223/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 01:05:15 +0000 UTC FinishedAt: 2026-09-04 01:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 01:05:15 +0000 UTC FinishedAt: 2026-09-04 01:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 01:05:15 +0000 UTC FinishedAt: 2026-09-04 01:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 01:05:15 +0000 UTC FinishedAt: 2026-09-04 01:07:19 +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:*6f5ab85c-2909-4e9a-94af-ed7481dbdffe,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-workflow8hn5v/series-workflow8hn5v-build-action-4010807223/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-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 01:07:29 +0000 UTC FinishedAt: 2026-09-04 04:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 01:07:29 +0000 UTC FinishedAt: 2026-09-04 04:11:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},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:*7d9c42bd-4239-40fc-a25a-563e3fb68c55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f5ab85c-2909-4e9a-94af-ed7481dbdffe,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-workflow8hn5v/series-workflow8hn5v-build-action-2112932802/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-workflow8hn5v/series-workflow8hn5v-build-action-4010807223/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 01:07:29 +0000 UTC FinishedAt: 2026-09-04 01:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 01:07:29 +0000 UTC FinishedAt: 2026-09-04 01:07:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},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-workflow8hn5v/series-workflow8hn5v-convert-artifact-502960156/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 01:07:29 +0000 UTC FinishedAt: 2026-09-04 01:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 01:07:29 +0000 UTC FinishedAt: 2026-09-04 01:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 01:07:29 +0000 UTC FinishedAt: 2026-09-04 01:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 01:07:39 +0000 UTC FinishedAt: 2026-09-04 04:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hn5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_commit_quota_goal","damon_commit_ctx","damos_sysfs_set_quota_scores","damon_lru_sort_add_quota_goals"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e539025ff1f7351a42788c5a88aab59c26f5131b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_LRU_SORT"],"series_id":"760a1dcc-8f93-4c63-b0ce-d1d98d7197b0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 01:07:39 +0000 UTC FinishedAt: 2026-09-04 04:11:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d9c42bd-4239-40fc-a25a-563e3fb68c55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f5ab85c-2909-4e9a-94af-ed7481dbdffe,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-workflow8hn5v/series-workflow8hn5v-build-action-2112932802/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-workflow8hn5v/series-workflow8hn5v-build-action-4010807223/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-workflow8hn5v/series-workflow8hn5v-convert-artifact-502960156/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,}