Name: series-workflowb889h Phase: Succeeded StartedAt: 2026-09-06 16:35:46 +0000 UTC FinishedAt: 2026-09-06 20:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[0] Phase: Succeeded StartedAt: 2026-09-06 16:35:46 +0000 UTC FinishedAt: 2026-09-06 16:39:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 16:35:46 +0000 UTC FinishedAt: 2026-09-06 16:39:51 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "MEMCG", "TRANSPARENT_HUGEPAGE", "HUGETLBFS" ], "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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "MEMCG", "TRANSPARENT_HUGEPAGE", "HUGETLBFS" ], "series_id": "96d2b809-bd7e-4727-b306-d7d8a1e74d40" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_ops_filter_match", "damon_va_prep_probes", "damon_va_apply_probes", "damon_va_probe_pmd_entry", "damon_va_probe_hugetlb_entry", "damon_va_filter_match", "damon_pa_filter_match" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX29wc19maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJlcF9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9maWx0ZXJfbWF0Y2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGFjcm9zcyBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIHNwYWNlcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKCkgYW5kIGltcGxlbWVudHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JlIGhhbmRsaW5nIChkYW1vbl92YV9wcmVwX3Byb2JlcywgZGFtb25fdmFfYXBwbHlfcHJvYmVzLCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksIGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkpLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5IGFuZCBzYW5pdGl6ZXIgYXBwbGljYWJpbGl0eTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgc3RhY2stYWxsb2NhdGVkIHN0cnVjdHMgKHN1Y2ggYXMgc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSBhbmQgc3RydWN0IG1tX3dhbGtfb3BzKSBhbmQgc2NhbGFyIHZhcmlhYmxlcyAoZS5nLiBib29sZWFucywgbG9vcCBjb3VudGVycywgYWNjdW11bGF0b3Igc3VtcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBvciB6ZXJvLWluaXRpYWxpemF0aW9uIGJlZm9yZSB1c2UuXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCBvdXRwdXRzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG4zLiBNZW1vcnkgc2FmZXR5IGNvbnNpZGVyYXRpb25zOiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBwYWdlLXRhYmxlIHdhbGtpbmcsIGZvbGlvIGxvY2tpbmcvcmVmZXJlbmNlIGNvdW50aW5nLCBjb25jdXJyZW5jeSwgb3IgYXJyYXkgaW5kZXhpbmcgKGUuZy4sIHByb2JlX2hpdHMpIGZhbGwgdW5kZXIgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0cykuXG5cbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwcm9iZSBwcmVwYXJhdGlvbiBhbmQgcHJvYmUgYXBwbGljYXRpb24gb3BlcmF0aW9ucyBmb3IgREFNT04gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcsIGluY2x1ZGluZyBwYWdlIHRhYmxlIHdhbGtpbmcgKGZvciBQTUQsIGh1Z2UgUE1ELCBhbmQgaHVnZXRsYiBlbnRyaWVzKSBhbmQgYWNjZXNzL2FnZSBmaWx0ZXJpbmcuIEl0IGFsc28gY29uc29saWRhdGVzIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbnRvIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKS4gVGhlc2UgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NTFjY2RkYWVhNTE4Njc1NTcwZDI5NGEyNWM2ODFjZmZlZTUxNjgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNjozODoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTQ0NCwzICYjNDM7NDQ0LDM1IEBAIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4mIzQzO1xuJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4mIzQzO1x0XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5pbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbkBAIC0yMSwzICYjNDM7MjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZCk7XG4gXG4gYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpO1xuJiM0MztcbiYjNDM7Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTQzLDI5ICYjNDM7MTQzLDggQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbiBcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuLVx0XHRpZiAoIWZvbGlvKSB7XG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4tXHRcdGlmICghbWVtY2cpXG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRlbHNlXG4tXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XG4gXHRcdGlmICghZm9saW8pXG4gXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuQEAgLTE3Myw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XG4gXHR9XG4gXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTUxMCw2ICYjNDM7NTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuJiM0MztcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuJiM0MztcdFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XG4mIzQzO1x0XHRcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuJiM0MztcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4mIzQzO1x0XHRpZiAoIW1tKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4mIzQzO1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuJiM0MztcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG4mIzQzO1x0XHRcdFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtbXB1dChtbSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocHRlKVxuJiM0MztcdFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XG4mIzQzO1x0ZWxzZSBpZiAocG1kKVxuJiM0MztcdFx0eW91bmcgPSBwbWRfeW91bmcoKnBtZCk7XG4mIzQzO1x0eW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuJiM0MztcdFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpO1xuJiM0MztcdHJldHVybiB5b3VuZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbiYjNDM7XHRcdGlmICghZm9saW8pXG4mIzQzO1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSxcbiYjNDM7XHRcdFx0XHRcdGFkZHIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCxcbiYjNDM7XHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2ZpbHRlciAqZjtcbiYjNDM7XHRib29sIHBhc3MgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xuJiM0MztcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xuJiM0MztcdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRwYXNzID0gIWYtXHUwMDNlYWxsb3c7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBwYXNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4mIzQzO1x0XHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXG4mIzQzO1x0XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIpKVxuJiM0MztcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0cHRlX3QgKnB0ZTtcbiYjNDM7XHRwdGVfdCBwdGVudDtcbiYjNDM7XHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4mIzQzO1x0aWYgKHB0bCkge1xuJiM0MztcdFx0cG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbiYjNDM7XHRcdFx0Z290byBodWdlX291dDtcbiYjNDM7XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4mIzQzO1x0XHRpZiAoIWZvbGlvKVxuJiM0MztcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuJiM0MztcdFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIE5VTEwsIFx1MDAyNnBtZGUsXG4mIzQzO1x0XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcbiYjNDM7aHVnZV9vdXQ6XG4mIzQzO1x0XHRzcGluX3VubG9jayhwdGwpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuJiM0MztcbiYjNDM7XHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiYjNDM7XHRpZiAoIXB0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4mIzQzO1x0aWYgKCFmb2xpbylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZwdGVudCwgTlVMTCxcbiYjNDM7XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0cHRlX3QgZW50cnk7XG4mIzQzO1xuJiM0MztcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiYjNDM7XHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4mIzQzO1x0Zm9saW9fZ2V0KGZvbGlvKTtcbiYjNDM7XHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgXHUwMDI2ZW50cnksIE5VTEwsXG4mIzQzO1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbiYjNDM7XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTExcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0ge1xuJiM0MztcdFx0LmN0eCA9IGN0eCxcbiYjNDM7XHRcdC5yID0gcixcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcbiYjNDM7XHRcdC5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksXG4mIzQzO1x0XHQuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIgPSByLVx1MDAzZXNhbXBsaW5nX2FkZHI7XG4mIzQzO1xuJiM0MztcdGlmICghbW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcbiYjNDM7XHRcdFx0XHUwMDI2YXJnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuJiM0MztcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuJiM0MztcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4mIzQzO1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuJiM0MztcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4mIzQzO1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbiYjNDM7XHRcdFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XG4mIzQzO1x0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4mIzQzO1x0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChtbSlcbiYjNDM7XHRcdFx0bW1wdXQobW0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1heF93c3VtO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcbkBAIC05MzgsNiAmIzQzOzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuIFx0XHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxuIFx0XHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxuIFx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyxcbiYjNDM7XHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxuJiM0MztcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiBcdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiBcdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4gXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MWNjZGRhZWE1MTg2NzU1NzBkMjk0YTI1YzY4MWNmZmVlNTE2ODMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE2OjM4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKQEAgLTQ0NCwzICYjNDM7NDQ0LDM1IEBAIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiYjNDM7CiYjNDM7Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjoKJiM0MzsJCWlmICghZm9saW8pIHsKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQltYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOgomIzQzOwkJaWYgKCFmb2xpbykgewomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCW1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pOwomIzQzOwkJaWYgKCFtZW1jZykKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWF0Y2hlZCA9IGZpbHRlci0mZ3Q7bWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLSZndDttYXRjaGluZzsKJiM0Mzt9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmgKaW5kZXggMzhkMjk1NDg4ZmExOC4uYjgzMjE2OWIxY2Y4YyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uaApAQCAtMjEsMyAmIzQzOzIxLDUgQEAgYm9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZCk7CiAKIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKTsKJiM0MzsKJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMTQzLDI5ICYjNDM7MTQzLDggQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKIAkJc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlib29sIG1hdGNoZWQgPSBmYWxzZTsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKIAlzd2l0Y2ggKGZpbHRlci0mZ3Q7dHlwZSkgewotCWNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjoKLQkJaWYgKCFmb2xpbykgewotCQkJbWF0Y2hlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQkJbWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7Ci0JCWJyZWFrOwotCWNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6Ci0JCWlmICghZm9saW8pIHsKLQkJCW1hdGNoZWQgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7Ci0JCWlmICghbWVtY2cpCi0JCQltYXRjaGVkID0gZmFsc2U7Ci0JCWVsc2UKLQkJCW1hdGNoZWQgPSBmaWx0ZXItJmd0O21lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJYnJlYWs7CiAJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6CiAJCWlmICghZm9saW8pCiAJCQltYXRjaGVkID0gZmFsc2U7CkBAIC0xNzMsNyAmIzQzOzE1Miw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsCiAJCQltYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlicmVhazsKJiM0MzsJCXJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pOwogCX0KIAlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwogfQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggZjg4NGQzZjc4ZjMwYS4uMDkwMzE3MTkxOTczYiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC01MTAsNiAmIzQzOzUxMCwyMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIG1heF9ucl9hY2Nlc3NlczsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAomIzQzOwkJc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcmVwICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7CiYjNDM7CQlzd2l0Y2ggKHAtJmd0O2FjdGlvbikgewomIzQzOwkJY2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6CiYjNDM7CQkJZGFtb25fdmFfbWtvbGQobW0sIHItJmd0O3NhbXBsaW5nX2FkZHIpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiYjNDM7CQltbSA9IGRhbW9uX2dldF9tbSh0KTsKJiM0MzsJCWlmICghbW0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewomIzQzOwkJCWlmIChzZXRfc2FtcGxlcykKJiM0MzsJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLSZndDthci5zdGFydCwKJiM0MzsJCQkJCQlyLSZndDthci5lbmQpOwomIzQzOwkJCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkKJiM0MzsJCQkJZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7CiYjNDM7CQl9CiYjNDM7CQltbXB1dChtbSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmdfYWRkcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CWJvb2wgeW91bmcgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHB0ZSkKJiM0MzsJCXlvdW5nID0gcHRlX3lvdW5nKCpwdGUpOwomIzQzOwllbHNlIGlmIChwbWQpCiYjNDM7CQl5b3VuZyA9IHBtZF95b3VuZygqcG1kKTsKJiM0MzsJeW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fAomIzQzOwkJbW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpOwomIzQzOwlyZXR1cm4geW91bmc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlzd2l0Y2ggKGZpbHRlci0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDoKJiM0MzsJCWlmICghZm9saW8pCiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJZWxzZQomIzQzOwkJCW1hdGNoZWQgPSBkYW1vbl92YV95b3VuZ19hZGRyKGZvbGlvLCBwdGUsIHBtZCwgbW0sCiYjNDM7CQkJCQlhZGRyKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLSZndDttYXRjaGluZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX3Bhc3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9uX3Byb2JlICpwLAomIzQzOwkJcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fZmlsdGVyICpmOwomIzQzOwlib29sIHBhc3MgPSB0cnVlOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkgewomIzQzOwkJaWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkgewomIzQzOwkJCXBhc3MgPSBmLSZndDthbGxvdzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXBhc3MgPSAhZi0mZ3Q7YWxsb3c7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHBhc3M7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBkYW1vbl9yZWdpb24gKnI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKJiM0MzsJCWlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSwKJiM0MzsJCQkJCXItJmd0O3NhbXBsaW5nX2FkZHIpKQomIzQzOwkJCXItJmd0O3Byb2JlX2hpdHNbaV0mIzQzOyYjNDM7OwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CXB0ZV90ICpwdGU7CiYjNDM7CXB0ZV90IHB0ZW50OwomIzQzOwlzcGlubG9ja190ICpwdGw7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLSZndDtwcml2YXRlOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsJcHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstJmd0O3ZtYSk7CiYjNDM7CWlmIChwdGwpIHsKJiM0MzsJCXBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpOwomIzQzOwomIzQzOwkJaWYgKCFwbWRfcHJlc2VudChwbWRlKSkKJiM0MzsJCQlnb3RvIGh1Z2Vfb3V0OwomIzQzOwkJZm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHdhbGstJmd0O3ZtYSwgYWRkciwgcG1kZSk7CiYjNDM7CQlpZiAoIWZvbGlvKQomIzQzOwkJCWdvdG8gaHVnZV9vdXQ7CiYjNDM7CQlkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LSZndDtjdHgsIHByaXYtJmd0O3IsIGZvbGlvLCBOVUxMLCAmYW1wO3BtZGUsCiYjNDM7CQkJCXdhbGstJmd0O3ZtYS0mZ3Q7dm1fbW0pOwomIzQzOwomIzQzO2h1Z2Vfb3V0OgomIzQzOwkJc3Bpbl91bmxvY2socHRsKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7I2VuZGlmCS8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwomIzQzOwomIzQzOwlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstJmd0O21tLCBwbWQsIGFkZHIsICZhbXA7cHRsKTsKJiM0MzsJaWYgKCFwdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcHRlbnQgPSBwdGVwX2dldChwdGUpOwomIzQzOwlpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLSZndDt2bWEsIGFkZHIsIHB0ZW50KTsKJiM0MzsJaWYgKCFmb2xpbykKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LSZndDtjdHgsIHByaXYtJmd0O3IsIGZvbGlvLCAmYW1wO3B0ZW50LCBOVUxMLAomIzQzOwkJCXdhbGstJmd0O3ZtYS0mZ3Q7dm1fbW0pOwomIzQzOwomIzQzO291dDoKJiM0MzsJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay0mZ3Q7dm1hKTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3BpbmxvY2tfdCAqcHRsOwomIzQzOwlwdGVfdCBlbnRyeTsKJiM0MzsKJiM0MzsJcHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLSZndDttbSwgcHRlKTsKJiM0MzsJZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstJmd0O21tLCBhZGRyLCBwdGUpOwomIzQzOwlpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7CiYjNDM7CWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sICZhbXA7ZW50cnksIE5VTEwsCiYjNDM7CQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzcGluX3VubG9jayhwdGwpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkgTlVMTAomIzQzOyNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19kYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSBhcmcgPSB7CiYjNDM7CQkuY3R4ID0gY3R4LAomIzQzOwkJLnIgPSByLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fcHJvYmVfd2Fsa19vcHMgPSB7CiYjNDM7CQkucG1kX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5LAomIzQzOwkJLmh1Z2V0bGJfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5LAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIgPSByLSZndDtzYW1wbGluZ19hZGRyOwomIzQzOwomIzQzOwlpZiAoIW1tKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgJiM0MzsgMSwgJmFtcDtkYW1vbl9wcm9iZV93YWxrX29wcywKJiM0MzsJCQkmYW1wO2FyZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCWJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CXN0cnVjdCBkYW1vbl9yZWdpb24gKnI7CiYjNDM7CXVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHsKJiM0MzsJCW1tID0gZGFtb25fZ2V0X21tKHQpOwomIzQzOwkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHsKJiM0MzsJCQlpZiAoc2V0X3NhbXBsZXMpCiYjNDM7CQkJCXItJmd0O3NhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci0mZ3Q7YXIuc3RhcnQsCiYjNDM7CQkJCQkJci0mZ3Q7YXIuZW5kKTsKJiM0MzsJCQlfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTsKJiM0MzsJCQlpZiAocmV0dXJuX21heF93c3VtKQomIzQzOwkJCQltYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsCiYjNDM7CQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCX0KJiM0MzsJCWlmIChtbSkKJiM0MzsJCQltbXB1dChtbSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG1heF93c3VtOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsCiAJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcCkKQEAgLTkzOCw2ICYjNDM7MTE2OCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpCiAJCS51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsCiAJCS5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsCiAJCS5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLAomIzQzOwkJLnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsCiYjNDM7CQkuYXBwbHlfcHJvYmVzID0gZGFtb25fdmFfYXBwbHlfcHJvYmVzLAogCQkudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLAogCQkuY2xlYW51cF90YXJnZXQgPSBkYW1vbl92YV9jbGVhbnVwX3RhcmdldCwKIAkJLmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ4OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBldmFsdWF0ZSB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMuIFRoZSBnb2FsIGlzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gc2VlIOKAkyBtb3JlIHJvYnVzdCBrZXJuZWxzIGFyZSBiZXR0ZXIgZm9yIGV2ZXJ5b25lLiBMZXQmIzM5O3MgZGl2ZSBpbi4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHBhdGNoLiBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCBpdCYjMzk7cyB0b3VjaGluZy4gT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgbW0vZGFtb24vYDogc3BlY2lmaWNhbGx5IGBvcHMtY29tbW9uLmNgLCBgb3BzLWNvbW1vbi5oYCwgYHBhZGRyLmNgLCBhbmQgYHZhZGRyLmNgLiBEQU1PTi4uLiBEYXRhIEFjY2VzcyBNT05pdG9yLiBJbnRlcmVzdGluZy4gVGhpcyBsaWtlbHkgbWVhbnMgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIG1lbW9yeSBhY2Nlc3MgcHJvZmlsaW5nIG9yIG1vbml0b3JpbmcuIEkgd29uZGVyIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIHRoYXQuCgpOb3csIGluc3RlYWQgb2YganVzdCByZWFkaW5nIGNvZGUsIGl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgKnJlYWwqIHBpY3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gZ3JlcCwgY29kZSBzZWFyY2gsIHdoYXRldmVyIGdldHMgdGhlIGpvYiBkb25lIOKAkyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O2xsIHNlYXJjaCB0aGUga2VybmVsIHRyZWUgZm9yIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIERBTU9OLCBhbnkgY2FsbGVycyBvZiB0aGVzZSBmdW5jdGlvbnMsIGFuZCBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgY29kZSBpcyBkb2luZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqaG93KiB0aGlzIGlzIHVzZWQsIHdoYXQgaXQmIzM5O3MgY29ubmVjdGVkIHRvLCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3Igc3lzdGVtIGJlaGF2aW9yLgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBzb21lIHF1aWNrIGdyZXBzIHRvIGdldCBhIGJyb2FkIG92ZXJ2aWV3LiBUaGVuLCBJIGNhbiBkcmlsbCBkb3duIGZ1cnRoZXIgYmFzZWQgb24gd2hhdCB0aG9zZSBpbml0aWFsIHNlYXJjaGVzIHJldmVhbC4gR290dGEga25vdyB0aGUgJiMzNDt3aG8sIHdoYXQsIHdoZXJlLCB3aGVuLCBhbmQgd2h5JiMzNDsgYmVmb3JlIEkgY2FuIGV2ZW4gc3RhcnQgdG8gdGhpbmsgYWJvdXQgZnV6emluZyBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT05fVkFERFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTI2PWNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnPTQ3PWNvbmZpZyBEQU1PTl9QQUREUlxuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTU5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9NYWtlZmlsZT0zPW9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbm1tL2RhbW9uL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG5tbS9kYW1vbi9NYWtlZmlsZS01LW9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuLS1cbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZz04PUNPTkZJR19QQUdFX0lETEVfRkxBRz15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6OTpDT05GSUdfREFNT05fVkFERFI9eVxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnOjEwOkNPTkZJR19EQU1PTl9WQUREUl9LVU5JVF9URVNUPXlcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZy0xMS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDE4PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQyNi1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0Mjc6XHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkZJR19EQU1PTl9WQUREUiBpcyBzZXQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MjgtXHRpZiAoIWRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKERBTU9OX09QU19WQUREUikpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTUtXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjY6I2lmZGVmIENPTkZJR19EQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTctXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjg6I2lmbmRlZiBfREFNT05fVkFERFJfVEVTVF9IXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjk6I2RlZmluZSBfREFNT05fVkFERFJfVEVTVF9IXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwLVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9MjgyPWt1bml0X3Rlc3Rfc3VpdGUoZGFtb25fdGVzdF9zdWl0ZSk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTI4My1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6Mjg0OiNlbmRpZiAvKiBfREFNT05fVkFERFJfVEVTVF9IICovXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTI4NS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6Mjg2OiNlbmRpZlx0LyogQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1QgKi9cbi0tXG5tbS9kYW1vbi92YWRkci5jLTE5LVxubW0vZGFtb24vdmFkZHIuYzoyMDojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL3ZhZGRyLmMtMjEtI3VuZGVmIERBTU9OX01JTl9SRUdJT05fU1pcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gS2NvbmZpZyBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgYEtjb25maWdgIGZpbGUuIEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgdG9wLWxldmVsIHZpZXcgb2YgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGV4cG9zZSBhbGwgb2YgdGhlIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgZmlsZSB3aWxsIGRlZmluZSBhbGwgdGhlIGBDT05GSUdfREFNT05fKmAgc3ltYm9scywgYW5kIHRyYWNpbmcgdGhvc2UgYmFjayB1cCB0aGUgZGVwZW5kZW5jeSB0cmVlIHdpbGwgaWxsdW1pbmF0ZSBleGFjdGx5IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgYmVpbmcgaW1wYWN0ZWQgYnkgYSBEQU1PTiBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoYXQgS2NvbmZpZyBzdHJ1Y3R1cmUgZnVsbHkgYWxsb3dzIG9uZSB0byBzZWUgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IERBTU9OIGNhbiBiZSBidWlsdCBhbmQgY29uZmlndXJlZC4gV2l0aCB0aGlzIGluIGhhbmQsIEkgY2FuIGVmZmVjdGl2ZWx5IG5hdmlnYXRlIHRoZSBlbnRpcmUgREFNT04gc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuICAyMTpcdFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuICAyMjpcdFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxuICAyNzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDI5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDM0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICAzNTpcdFxuICAzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBEQU1PTl9WQUREUlxuICAzOTpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbiAgNDA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA0MTpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDQyOlx0XHRkZWZhdWx0IERBTU9OXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNDU6XHRcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBEQU1PTl9QQUREUlxuICA0ODpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNTA6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA1MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDU0Olx0XHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxuICA1NTpcdFxuICA1NjpcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG4gIDU3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA1ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA1OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNjA6XHRcdGhlbHBcbiAgNjE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgNjI6XHRcbiAgNjM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDY0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA2NTpcdFxuICA2NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBEQU1PTl9TWVNGU1xuICA2OTpcdFx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbiAgNzA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG4gIDcxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDcyOlx0XHRoZWxwXG4gIDczOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxuICA3NDpcdFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxuICA3NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA3OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgODA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjAxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcg4oCTIG1vc3QgbGlrZWx5LCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1NL0RBTU9OIHN1YnN5c3RlbS4gSSBzZWUgdGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRvIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZSBpbnRlcmVzdGluZyBkZXRhaWwgdGhlcmUgdGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBmZWF0dXJlcywgb3IgbWF5YmUgZXZlbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucyB3aXRoaW4gREFNT04mIzM5O3MgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ7IGlkZW50aWZ5IHBvdGVudGlhbCBjdXN0b21pemF0aW9uIHBvaW50cyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEdpdmVuIHRoaXMgaXMgYSBLY29uZmlnIGZpbGUsIGl0IGNvbnRhaW5zIHRoZSBidWlsZCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCB3aGF0IGxvZ2ljIGdvdmVybnMgdGhlbSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgYmVoYXZpb3Igb2YgREFNT04uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb21wbGV4IGRlcGVuZGVuY3kgdHJlZSwgd2l0aCBwb3RlbnRpYWwgY3Jvc3MtYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucy4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIG15IGN1cnJlbnQgYXJlYSBvZiBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgODI6XHRcbiAgODM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDg0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA4NTpcdFxuICA4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NzpcdFxuICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4gIDk4Olx0XHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxuIDEwMTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4gMTAyOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gMTAzOlx0XHRoZWxwXG4gMTA0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xuIDEwNTpcdFx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuIDEwNjpcdFx0ICBwYWdlcyByZWNsYWltZWQgZmlyc3QgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuIDEwNzpcdFxuIDEwODpcdGNvbmZpZyBEQU1PTl9TVEFUXG4gMTA5Olx0XHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbiAxMTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAxMTE6XHRcdGhlbHBcbiAxMTI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIGFjY2VzcyBtb25pdG9yaW5nIHN0YXRpc3RpY3Mgc3Vic3lzdGVtLlxuIDExMzpcdFx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxuIDExNDpcdFx0ICBtZXRyaWNzLlxuIDExNTpcdFxuIDExNjpcdGNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxuIDExNzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4gMTE4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NUQVRcbiAxMTk6XHRcdGRlZmF1bHQgREFNT05fU1RBVFxuIDEyMDpcdFx0aGVscFxuIDEyMTpcdFx0ICBXaGV0aGVyIHRvIGVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHQuICBVc2VycyBjYW4gZGlzYWJsZSBpdCBpblxuIDEyMjpcdFx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbiAxMjM6XHRcbiAxMjQ6XHRlbmRtZW51XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBEYW1vbiBQcm9iZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGZpbHRlcmluZyBhbmQgcHJvYmUgYXBwbGljYXRpb24gcHJvY2Vzc2VzIGFyZSBpbml0aWF0ZWQgYW5kIG1hbmFnZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gdGhlIGNvcmUgZnVuY3Rpb25zOiBgZGFtb25fZmlsdGVyYCwgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLCBgcHJlcF9wcm9iZXNgLCBhbmQgYGFwcGx5X3Byb2Jlc2AuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBrZXJuZWwmIzM5O3Mgc3lzZnMgaW50ZXJmYWNlLCBvciBwZXJoYXBzIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIGhvb2tzIGludG8gdGhlc2UgZnVuY3Rpb25zIGFuZCB0cmlnZ2VycyB0aGVpciBleGVjdXRpb24uIEkgZXhwZWN0IHRvIGZpbmQgdGhpcyBpbmZvcm1hdGlvbiBieSBsb29raW5nIGF0IHRoZSBjYWxsIHN0YWNrcy4gVGhlcmVmb3JlLCBJIHdpbGwgYmVnaW4gYnkgc2VhcmNoaW5nIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGNhbGxzIHRvIGBwcmVwX3Byb2Jlc2AgYW5kIGBhcHBseV9wcm9iZXNgLiBUaGlzIHNlYXJjaCB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlc2Ugb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJlcF9wcm9iZXN8YXBwbHlfcHJvYmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTM4OTM9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM5MzMtXG5tbS9kYW1vbi9jb3JlLmM6MzkzNDpcdFx0ZG9fcHJlcCA9IGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXMgXHUwMDI2XHUwMDI2IGRhbW9uX2hhc19wcmVwKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzkzNS1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkzOC1cdFx0aWYgKGRvX3ByZXApXG5tbS9kYW1vbi9jb3JlLmM6MzkzOTpcdFx0XHRjdHgtXHUwMDNlb3BzLnByZXBfcHJvYmVzKGN0eCwgYWNjZXNzX2NoZWNrX2Rpc2FibGVkKTtcbm1tL2RhbW9uL2NvcmUuYy0zOTQwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTQ1LVx0XHRcdG1heF9tZXJnZV9zY29yZSA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzozOTQ2Olx0XHRpZiAoY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXMpIHtcbm1tL2RhbW9uL2NvcmUuYy0zOTQ3LVx0XHRcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk1Mi1cdFx0XHRcdGdldF9tYXhfd3N1bSA9IGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjM5NTM6XHRcdFx0bWF4X3dzdW0gPSBjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2JlcyhjdHgsXG5tbS9kYW1vbi9jb3JlLmMtMzk1NC1cdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiAhZG9fcHJlcCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTkyPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTA3LVxubW0vZGFtb24vcGFkZHIuYzoxMDg6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTEwOS1cdFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTI0LVxubW0vZGFtb24vcGFkZHIuYzoxMjU6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxubW0vZGFtb24vcGFkZHIuYy0xMjYte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTM2LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eClcbm1tL2RhbW9uL3BhZGRyLmM6MTM3Olx0XHRcdFx0ZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHIsIHAsIGN0eCk7XG5tbS9kYW1vbi9wYWRkci5jLTEzOC1cdFx0fVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTYwPXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTc1LVxubW0vZGFtb24vcGFkZHIuYzoxNzY6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vcGFkZHIuYy0xNzctXHRcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9NDU2PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy00NjMtXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxubW0vZGFtb24vcGFkZHIuYzo0NjQ6XHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYzo0NjU6XHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXG5tbS9kYW1vbi9wYWRkci5jLTQ2Ni1cdFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXG4tLVxubW0vZGFtb24vdmFkZHIuYz01MTM9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTI5LVxubW0vZGFtb24vdmFkZHIuYzo1MzA6c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxubW0vZGFtb24vdmFkZHIuYy01MzEte1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NjY5PXN0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNjk2LVxubW0vZGFtb24vdmFkZHIuYzo2OTc6c3RhdGljIHZvaWQgX19kYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vdmFkZHIuYy02OTgtXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTcxNi1cbm1tL2RhbW9uL3ZhZGRyLmM6NzE3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi92YWRkci5jLTczMC1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi92YWRkci5jOjczMTpcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNzMyLVx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xMTcwLVx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE3MTpcdFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXG5tbS9kYW1vbi92YWRkci5jOjExNzI6XHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXG5tbS9kYW1vbi92YWRkci5jLTExNzMtXHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODcwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBEQU1PTiBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgUHJvYmVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHNlY3Rpb24gaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIHN1YnN5c3RlbSwgREFNT04sIGxvY2F0ZWQgaW4gYG1tL2RhbW9uL2AuIEl0JiMzOTtzIHByZXR0eSBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHVzZXItY29udHJvbGxhYmxlIHRocm91Z2ggc3lzZnMsIHdoaWNoIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIGludGVyYWN0aW9uLCBhc3N1bWluZyBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBlbmFibGVkLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGFkZCBwcm9iaW5nIHN1cHBvcnQgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIHdpdGhpbiBEQU1PTi4gVGhpcyBpbmNsdWRlcyBmdW5jdGlvbnMgbGlrZSBgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCwgYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAsIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCwgYW5kIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLiBUaGV5JiMzOTt2ZSBhbHNvIHJlZmFjdG9yZWQgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGludG8gYG9wcy1jb21tb24uY2AuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIGxvZ2ljLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBhZ2UgdGFibGUgd2Fsa2luZyBhbmQgVEhQL2h1Z2V0bGIgbG9ja2luZywgYW5kIGZvbGlvIGNoZWNrcy4gVGhhdCYjMzk7cyBhIGxvdCBvZiB0b3VjaHBvaW50cyBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLgoKR2l2ZW4gaXRzIHJlYWNoIGludG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWNjZXNzaWJpbGl0eSB0aHJvdWdoIHN5c2ZzLCBpdCYjMzk7cyBpbW1lZGlhdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBleGVjdXRhYmxlIGNvZGUgYW5kIGludGVyYWN0cyB3aXRoIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGUgZnV6emluZyBjcml0ZXJpYToKCiogICAqKldvcnRoRnV6emluZzogVFJVRSoqIC0gQ2hlY2shCgoqICAgKipFbmFibGVDb25maWdzOioqIEFscmlnaHQsIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGdldCB0aGlzIHJ1bm5pbmcgYW5kIGFjY2Vzc2libGU/IEkgbmVlZCB0byBjaGVjayBLY29uZmlnIGRlcGVuZGVuY2llczoKCiAgICAqICAgYERBTU9OYCAob2J2aW91c2x5LCBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSkKICAgICogICBgREFNT05fVkFERFJgCiAgICAqICAgYERBTU9OX1BBRERSYCAoYmVjYXVzZSBgb3BzLWNvbW1vbmAgaXMgY29tcGlsZWQgaWYgZWl0aGVyIGBEQU1PTl9WQUREUmAgb3IgYERBTU9OX1BBRERSYCBpcyBlbmFibGVkKQogICAgKiAgIGBEQU1PTl9TWVNGU2AgKHZpdGFsIHRvIGNvbnRyb2wgREFNT04gYW5kIGNvbmZpZ3VyZSBwcm9iZXMvZmlsdGVycyB2aWEgc3lzZnMgZnJvbSB1c2Vyc3BhY2UpLgogICAgKiAgIGBNRU1DR2AgKGltcG9ydGFudCBmb3IgYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYCBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBgZm9saW9fbWVtY2dfY2hlY2tgKQogICAgKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgKGVzc2VudGlhbCBmb3IgdGhlIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGZ1bmN0aW9uKQogICAgKiAgIGBIVUdFVExCX1BBR0VgIChuZWVkZWQgZm9yIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCkuCgogICAgVGhlIGxhc3QgZmV3IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gcmVsYXRlIHRvIGh1Z2UgcGFnZSBzdXBwb3J0LCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIHRlc3Qgc2V0dXAuCgpOZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIHV0aWxpemVzIG1lbWNnIGFuZCB2ZXJpZnkgd2hldGhlciB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBmb3IgaXQuCgpMb29raW5nIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCB0aGUgZm9sbG93aW5nIGxpbmVzIG9mIGNvZGUgYXJlIG9mIHJlbGV2YW5jZS4KCmBgYGMKbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CmZpbHRlci0mZ3Q7bWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7CmBgYAoKT2theSwgc28gdGhlIGBmb2xpb19tZW1jZ19jaGVja2AgZnVuY3Rpb24gcmVxdWlyZXMgYENPTkZJR19NRU1DR2AuIEdvb2QgdG8ga25vdy4KCkxhc3RseSwgSSBzaG91bGQgc2VhcmNoIGZvciBgZGFtb25fcHJvYmVgIG9yIGBwcm9iZXNgIGluIGBtbS9kYW1vbi9zeXNmcypgIHRvIGNvbmZpcm0gdGhhdCBzeXNmcyBzdXBwb3J0cyB0aGUgcHJvYmVzLiBUaGVuLCBJIGNhbiBzdGFydCBidWlsZGluZyBzb21lIGluaXRpYWwgZnV6emluZyBoYXJuZXNzZXMgYW5kIHRlc3Qgc2V0dXBzLCBmb2N1c2luZyBvbiB2YXJpYXRpb25zIGluIHRoZSBwcm9iZWQgYWRkcmVzcyBzcGFjZSwgdGhlIGZpbHRlciBjb25maWd1cmF0aW9ucywgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgdGFibGVzIGFuZCBodWdlIHBhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTQzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9kYW1vbi9jb3JlLmM9MTE0PXN0cnVjdCBkYW1vbl9wcmVwICpkYW1vbl9uZXdfcHJlcChlbnVtIGRhbW9uX3ByZXBfYWN0aW9uIGFjdGlvbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI1LVxubW0vZGFtb24vY29yZS5jOjEyNjp2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXG5tbS9kYW1vbi9jb3JlLmMtMTI3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTQxPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ2LVxubW0vZGFtb24vY29yZS5jOjE0NzpzdGF0aWMgc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX250aF9wcmVwKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9jb3JlLmMtMTQ4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE2MS1cdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xubW0vZGFtb24vY29yZS5jOjE2MjpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5tbS9kYW1vbi9jb3JlLmMtMTYzLVxubW0vZGFtb24vY29yZS5jOjE2NDpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTY1Olx0XHRkYW1vbl9mb3JfZWFjaF9wcmVwKHByZXAsIHByb2JlKVxubW0vZGFtb24vY29yZS5jLTE2Ni1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTcxPXN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODUtXG5tbS9kYW1vbi9jb3JlLmM6MTg2OnZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTg3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAxPXZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA2LVxubW0vZGFtb24vY29yZS5jOjIwNzpzdGF0aWMgc3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbnRoX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTIwOC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxOC1cbm1tL2RhbW9uL2NvcmUuYzoyMTk6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0yMjAte1xubW0vZGFtb24vY29yZS5jOjIyMTpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbm1tL2RhbW9uL2NvcmUuYy0yMjItXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMi1cbm1tL2RhbW9uL2NvcmUuYzoyMzM6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxubW0vZGFtb24vY29yZS5jLTIzNC17XG5tbS9kYW1vbi9jb3JlLmM6MjM1Olx0bGlzdF9hZGRfdGFpbChcdTAwMjZwcm9iZS1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlcHJvYmVzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMzYtfVxubW0vZGFtb24vY29yZS5jLTIzNy1cbm1tL2RhbW9uL2NvcmUuYzoyMzg6c3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbm1tL2RhbW9uL2NvcmUuYy0yMzkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDItXG5tbS9kYW1vbi9jb3JlLmM6MjQzOnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTI0NC17XG4tLVxubW0vZGFtb24vY29yZS5jLTI1NC1cbm1tL2RhbW9uL2NvcmUuYzoyNTU6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9jb3JlLmMtMjU2LXtcbm1tL2RhbW9uL2NvcmUuYzoyNTc6XHRkYW1vbl9kZWxfcHJvYmUocCk7XG5tbS9kYW1vbi9jb3JlLmM6MjU4Olx0ZGFtb25fZnJlZV9wcm9iZShwKTtcbm1tL2RhbW9uL2NvcmUuYy0yNTktfVxubW0vZGFtb24vY29yZS5jLTI2MC1cbm1tL2RhbW9uL2NvcmUuYzoyNjE6c3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjYyLXtcbm1tL2RhbW9uL2NvcmUuYzoyNjM6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG5tbS9kYW1vbi9jb3JlLmMtMjY0LVx0aW50IGkgPSAwO1xubW0vZGFtb24vY29yZS5jLTI2NS1cbm1tL2RhbW9uL2NvcmUuYzoyNjY6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYy0yNjctXHRcdGlmIChpJiM0MzsmIzQzOyA9PSBuKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzItXG5tbS9kYW1vbi9jb3JlLmM6MjczOnN0YXRpYyBib29sIGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMjc0LXtcbm1tL2RhbW9uL2NvcmUuYzoyNzU6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG5tbS9kYW1vbi9jb3JlLmMtMjc2LVxubW0vZGFtb24vY29yZS5jOjI3NzpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYy0yNzgtXHRcdGlmIChwLVx1MDAzZXdlaWdodClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDgtXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM1MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjYtXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXG5tbS9kYW1vbi9jb3JlLmM6MzY3Olx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXG5tbS9kYW1vbi9jb3JlLmM6MzY5Olx0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxubW0vZGFtb24vY29yZS5jOjM3MDpcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NDAzOlx0XHRyZWdpb24tXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NDA0Olx0XHRyZWdpb24tXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy00MDUtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTQ2Mj1zdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXG5tbS9kYW1vbi9jb3JlLmM6NDY5OiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbm1tL2RhbW9uL2NvcmUuYy00NzAtICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbm1tL2RhbW9uL2NvcmUuYzo0NzE6ICogQGxhc3Q6XHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxubW0vZGFtb24vY29yZS5jLTQ3Mi0gKiBAY3R4Olx0Y29udGV4dCBvZiBcdTAwMjZyLlxubW0vZGFtb24vY29yZS5jLTQ3My0gKlxubW0vZGFtb24vY29yZS5jOjQ3NDogKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLlxubW0vZGFtb24vY29yZS5jLTQ3NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0NzY6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmMtNDc3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtNDc4LXtcbm1tL2RhbW9uL2NvcmUuYzo0Nzk6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xubW0vZGFtb24vY29yZS5jLTQ4MC1cdHVuc2lnbmVkIGludCBzdW0gPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy00ODItXG5tbS9kYW1vbi9jb3JlLmM6NDgzOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xubW0vZGFtb24vY29yZS5jLTQ4NC1cdFx0aWYgKGxhc3QpXG5tbS9kYW1vbi9jb3JlLmM6NDg1Olx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtXHUwMDNld2VpZ2h0O1xubW0vZGFtb24vY29yZS5jLTQ4Ni1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjQ4NzpcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDg4LVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz05MDE9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05MjctXG5tbS9kYW1vbi9jb3JlLmM6OTI4Olx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXByb2Jlcyk7XG5tbS9kYW1vbi9jb3JlLmMtOTI5LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz05NTA9dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTk1Mi1cdHN0cnVjdCBkYW1vcyAqcywgKm5leHRfcztcbm1tL2RhbW9uL2NvcmUuYzo5NTM6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsICpuZXh0X3A7XG5tbS9kYW1vbi9jb3JlLmMtOTU0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTktXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShwLCBuZXh0X3AsIGN0eClcbm1tL2RhbW9uL2NvcmUuYzo5NjE6XHRcdGRhbW9uX2Rlc3Ryb3lfcHJvYmUocCk7XG5tbS9kYW1vbi9jb3JlLmMtOTYyLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAwOS1cbm1tL2RhbW9uL2NvcmUuYzoxMDEwOnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMTAxMS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDEzLXtcbm1tL2RhbW9uL2NvcmUuYzoxMDE0Olx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xubW0vZGFtb24vY29yZS5jLTEwMTUtXHRpbnQgaSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTAxNi1cbm1tL2RhbW9uL2NvcmUuYzoxMDE3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTAxODpcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXG5tbS9kYW1vbi9jb3JlLmM6MTAxOTpcdFx0XHRcdHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTAyMC1cdFx0aWYgKCFhZ2dyZWdhdGluZylcbm1tL2RhbW9uL2NvcmUuYzoxMDIxOlx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYzoxMDIyOlx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0sIG9sZF9hdHRycyxcbm1tL2RhbW9uL2NvcmUuYy0xMDIzLVx0XHRcdFx0XHRuZXdfYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTEwMjQtXHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYzoxMDI1Olx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTAyNi1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMzA9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzMte1xubW0vZGFtb24vY29yZS5jOjEwMzQ6XHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMTAzNS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTQxNj1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0MjYtXG5tbS9kYW1vbi9jb3JlLmM6MTQyNzpzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTE0Mjgte1xubW0vZGFtb24vY29yZS5jLTE0MjktXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbm1tL2RhbW9uL2NvcmUuYzoxNDMwOlx0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYzoxNDMxOlx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbm1tL2RhbW9uL2NvcmUuYy0xNDMyLVx0dW5zaWduZWQgaW50IHdzdW0sIHdzdW1fdG9fYWRkO1xubW0vZGFtb24vY29yZS5jOjE0MzM6XHRpbnQgbnJfcHJvYmVzO1xubW0vZGFtb24vY29yZS5jLTE0MzQtXG5tbS9kYW1vbi9jb3JlLmM6MTQzNTpcdG5yX3Byb2JlcyA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6MTQzNjpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXG5tbS9kYW1vbi9jb3JlLmM6MTQzNzpcdFx0bnJfcHJvYmVzJiM0MzsmIzQzOztcbm1tL2RhbW9uL2NvcmUuYzoxNDM4Olx0aWYgKG5yX3Byb2JlcyBcdTAwM2UgREFNT05fTUFYX1BST0JFUylcbm1tL2RhbW9uL2NvcmUuYy0xNDM5LVx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmMtMTQ0MC1cbm1tL2RhbW9uL2NvcmUuYzoxNDQxOlx0aWYgKCFkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpKVxubW0vZGFtb24vY29yZS5jLTE0NDItXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDQ3LVxubW0vZGFtb24vY29yZS5jOjE0NDg6XHQvKiBpbnZhbGlkIGlmIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbiBvdmVyZmxvdyAqL1xubW0vZGFtb24vY29yZS5jOjE0NDk6XHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDUwLVx0d3N1bSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6MTQ1MTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNDUyOlx0XHRpZiAocHJvYmUtXHUwMDNld2VpZ2h0IFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jLTE0NTMtXHRcdFx0cmV0dXJuIGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjE0NTQ6XHRcdHdzdW1fdG9fYWRkID0gcHJvYmUtXHUwMDNld2VpZ2h0ICogbWF4X3Byb2JlX2hpdHM7XG5tbS9kYW1vbi9jb3JlLmMtMTQ1NS1cdFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcdTAwM2Mgd3N1bV90b19hZGQpXG4tLVxubW0vZGFtb24vY29yZS5jPTE3NjE9c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKmRzdCwgc3RydWN0IGRhbW9uX3ByZXAgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc2NS1cbm1tL2RhbW9uL2NvcmUuYzoxNzY2OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3ByZXBzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNzY3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTc5MT1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgwNS1cbm1tL2RhbW9uL2NvcmUuYzoxODA2OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG5tbS9kYW1vbi9jb3JlLmM6MTgwNzpcdFx0c3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTgwOC17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4MzktXG5tbS9kYW1vbi9jb3JlLmM6MTg0MDpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTg0MS17XG5tbS9kYW1vbi9jb3JlLmM6MTg0MjpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqbmV4dCwgKnNyY19wcm9iZSwgKm5ld19wcm9iZTtcbm1tL2RhbW9uL2NvcmUuYy0xODQzLVx0aW50IGkgPSAwLCBqID0gMCwgZXJyO1xubW0vZGFtb24vY29yZS5jLTE4NDQtXG5tbS9kYW1vbi9jb3JlLmM6MTg0NTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUoZHN0X3Byb2JlLCBuZXh0LCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYzoxODQ2Olx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSYjNDM7JiM0MzssIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmM6MTg0NzpcdFx0aWYgKHNyY19wcm9iZSkge1xubW0vZGFtb24vY29yZS5jOjE4NDg6XHRcdFx0ZHN0X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmM6MTg0OTpcdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xubW0vZGFtb24vY29yZS5jLTE4NTAtXHRcdFx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xODUxLVx0XHRcdFx0cmV0dXJuIGVycjtcbm1tL2RhbW9uL2NvcmUuYzoxODUyOlx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcbm1tL2RhbW9uL2NvcmUuYy0xODUzLVx0XHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NTUtXHRcdH0gZWxzZSB7XG5tbS9kYW1vbi9jb3JlLmM6MTg1NjpcdFx0XHRkYW1vbl9kZXN0cm95X3Byb2JlKGRzdF9wcm9iZSk7XG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny1cdFx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODU5LVxubW0vZGFtb24vY29yZS5jOjE4NjA6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKHNyY19wcm9iZSwgbmV4dCwgc3JjKSB7XG5tbS9kYW1vbi9jb3JlLmMtMTg2MS1cdFx0aWYgKGomIzQzOyYjNDM7IFx1MDAzYyBpKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODYzLVxubW0vZGFtb24vY29yZS5jOjE4NjQ6XHRcdG5ld19wcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xubW0vZGFtb24vY29yZS5jOjE4NjU6XHRcdGlmICghbmV3X3Byb2JlKVxubW0vZGFtb24vY29yZS5jLTE4NjYtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTg2NzpcdFx0ZGFtb25fYWRkX3Byb2JlKGRzdCwgbmV3X3Byb2JlKTtcbm1tL2RhbW9uL2NvcmUuYzoxODY4Olx0XHRuZXdfcHJvYmUtXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVx1MDAzZXdlaWdodDtcbm1tL2RhbW9uL2NvcmUuYzoxODY5Olx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xubW0vZGFtb24vY29yZS5jLTE4NzAtXHRcdGlmIChlcnIpXG5tbS9kYW1vbi9jb3JlLmMtMTg3MS1cdFx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vY29yZS5jOjE4NzI6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbm1tL2RhbW9uL2NvcmUuYy0xODczLVx0XHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODc5PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTAxLVxubW0vZGFtb24vY29yZS5jOjE5MDI6XHRpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKVxubW0vZGFtb24vY29yZS5jLTE5MDMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTI2LVx0ZHN0LVx1MDAzZW9wcyA9IHNyYy1cdTAwM2VvcHM7XG5tbS9kYW1vbi9jb3JlLmM6MTkyNzpcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE5MjgtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjkzPXN0YXRpYyB2b2lkIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjk2LVx0dW5zaWduZWQgaW50IHRpID0gMDtcdC8qIHRhcmdldCYjMzk7cyBpbmRleCAqL1xubW0vZGFtb24vY29yZS5jOjIyOTc6XHR1bnNpZ25lZCBpbnQgbnJfcHJvYmVzID0gMDtcbm1tL2RhbW9uL2NvcmUuYzoyMjk4Olx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbm1tL2RhbW9uL2NvcmUuYy0yMjk5LVxubW0vZGFtb24vY29yZS5jLTIzMDAtXHRpZiAodHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWRfZW5hYmxlZCgpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjMwMTpcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpXG5tbS9kYW1vbi9jb3JlLmM6MjMwMjpcdFx0XHRucl9wcm9iZXMmIzQzOyYjNDM7O1xubW0vZGFtb24vY29yZS5jLTIzMDMtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTIzMTItXHRcdFx0dHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWQodGksIHIsXG5tbS9kYW1vbi9jb3JlLmM6MjMxMzpcdFx0XHRcdFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgbnJfcHJvYmVzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMzE0LVx0XHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXM7XG4tLVxubW0vZGFtb24vY29yZS5jLTIzMTYtXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMzE3Olx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSByLVx1MDAzZXByb2JlX2hpdHNbaV07XG5tbS9kYW1vbi9jb3JlLmM6MjMxODpcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMjMxOS1cdFx0XHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTM0MjY9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQzNS1cdGwtXHUwMDNlYXIuZW5kID0gci1cdTAwM2Vhci5lbmQ7XG5tbS9kYW1vbi9jb3JlLmM6MzQzNjpcdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xubW0vZGFtb24vY29yZS5jLTM0MzctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOylcbm1tL2RhbW9uL2NvcmUuYzozNDM4Olx0XHRsLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAobC1cdTAwM2Vwcm9iZV9oaXRzW2ldICogc3pfbCAmIzQzOyByLVx1MDAzZXByb2JlX2hpdHNbaV1cbm1tL2RhbW9uL2NvcmUuYy0zNDM5LVx0XHRcdFx0KiBzel9yKSAvIChzel9sICYjNDM7IHN6X3IpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxubW0vZGFtb24vY29yZS5jOjM0NDU6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbm1tL2RhbW9uL2NvcmUuYy0zNDQ2LXtcbm1tL2RhbW9uL2NvcmUuYzozNDQ3Olx0aWYgKHVzZV9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jOjM0NDg6XHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNDQ5LVx0aWYgKGxhc3QpXG4tLVxubW0vZGFtb24vY29yZS5jPTM0NjE9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0NjQtXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xubW0vZGFtb24vY29yZS5jOjM0NjU6XHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNDY2LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDY5LVxubW0vZGFtb24vY29yZS5jOjM0NzA6XHRcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xubW0vZGFtb24vY29yZS5jOjM0NzE6XHRcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDcyLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDg2LVx0XHRkaWZmID0gYWJzX2RpZmYoc2NvcmUsIGRhbW9uX21lcmdlX3Njb3JlKHByZXYsIGZhbHNlLCBjdHgsXG5tbS9kYW1vbi9jb3JlLmM6MzQ4NzpcdFx0XHRcdFx0dXNlX3Byb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDg4LVx0XHRpZiAoZGlmZiBcdTAwM2UgdGhyZXMpXG4tLVxubW0vZGFtb24vY29yZS5jPTM1NjY9c3RhdGljIGludCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzU4MC1cdG5ldy1cdTAwM2Vucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXM7XG5tbS9kYW1vbi9jb3JlLmM6MzU4MTpcdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xubW0vZGFtb24vY29yZS5jOjM1ODI6XHRtZW1jcHkobmV3LVx1MDAzZXByb2JlX2hpdHMsIHItXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXHUwMDNlcHJvYmVfaGl0cykpO1xubW0vZGFtb24vY29yZS5jOjM1ODM6XHRtZW1jcHkobmV3LVx1MDAzZWxhc3RfcHJvYmVfaGl0cywgci1cdTAwM2VsYXN0X3Byb2JlX2hpdHMsXG5tbS9kYW1vbi9jb3JlLmM6MzU4NDpcdFx0XHRzaXplb2Yoci1cdTAwM2VsYXN0X3Byb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYy0zNTg1LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zODkzPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTI1LVx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWw7XG5tbS9kYW1vbi9jb3JlLmM6MzkyNjpcdFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xubW0vZGFtb24vY29yZS5jLTM5MjctXHRcdGJvb2wgZG9fcHJlcDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkzMy1cbm1tL2RhbW9uL2NvcmUuYzozOTM0Olx0XHRkb19wcmVwID0gY3R4LVx1MDAzZW9wcy5wcmVwX3Byb2JlcyBcdTAwMjZcdTAwMjYgZGFtb25faGFzX3ByZXAoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zOTM1LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTM4LVx0XHRpZiAoZG9fcHJlcClcbm1tL2RhbW9uL2NvcmUuYzozOTM5Olx0XHRcdGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXMoY3R4LCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpO1xubW0vZGFtb24vY29yZS5jLTM5NDAtXG4tLVxubW0vZGFtb24vY29yZS5jLTM5NDUtXHRcdFx0bWF4X21lcmdlX3Njb3JlID0gY3R4LVx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcyhjdHgpO1xubW0vZGFtb24vY29yZS5jOjM5NDY6XHRcdGlmIChjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2Jlcykge1xubW0vZGFtb24vY29yZS5jLTM5NDctXHRcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTUyLVx0XHRcdFx0Z2V0X21heF93c3VtID0gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6Mzk1MzpcdFx0XHRtYXhfd3N1bSA9IGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcbm1tL2RhbW9uL2NvcmUuYy0zOTU0LVx0XHRcdFx0XHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXHUwMDI2XHUwMDI2ICFkb19wcmVwLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9OTI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMDctXG5tbS9kYW1vbi9wYWRkci5jOjEwODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmM6MTA5Olx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9wYWRkci5jLTExMC17XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMTItXG5tbS9kYW1vbi9wYWRkci5jOjExMzpcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMTE0LVx0XHRzd2l0Y2ggKHAtXHUwMDNlYWN0aW9uKSB7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMjQtXG5tbS9kYW1vbi9wYWRkci5jOjEyNTpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXG5tbS9kYW1vbi9wYWRkci5jLTEyNi17XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMjgtXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xubW0vZGFtb24vcGFkZHIuYzoxMjk6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG5tbS9kYW1vbi9wYWRkci5jLTEzMC1cbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEzNS1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi9wYWRkci5jOjEzNjpcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG5tbS9kYW1vbi9wYWRkci5jOjEzNzpcdFx0XHRcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xubW0vZGFtb24vcGFkZHIuYy0xMzgtXHRcdH1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE2MD1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2RhbW9uL3BhZGRyLmM6MTYxOlx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9wYWRkci5jLTE2Mi17XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzUtXG5tbS9kYW1vbi9wYWRkci5jOjE3NjpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9wYWRkci5jLTE3Ny1cdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xODAtXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xubW0vZGFtb24vcGFkZHIuYzoxODE6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG5tbS9kYW1vbi9wYWRkci5jLTE4Mi1cdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xOTUtXHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbm1tL2RhbW9uL3BhZGRyLmM6MTk2Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xubW0vZGFtb24vcGFkZHIuYy0xOTctXHRcdFx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcbm1tL2RhbW9uL3BhZGRyLmM6MTk4Olx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xubW0vZGFtb24vcGFkZHIuYy0xOTktXHRcdFx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTIwMy1cdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxubW0vZGFtb24vcGFkZHIuYzoyMDQ6XHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG5tbS9kYW1vbi9wYWRkci5jLTIwNS1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDYzLVx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDY0Olx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDY1Olx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYy00NjYtXHRcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMS0vKlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyOiAqIHByb2JlIGRpcmVjdG9yeVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzLSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1OnN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpkYW1vc19zeXNmc19wcm9iZV9hbGxvYyh1bnNpZ25lZCBjaGFyIGhpdHMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpwcm9iZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDpcdHByb2JlID0ga3phbGxvY19vYmooKnByb2JlKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTpcdGlmICghcHJvYmUpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYtXHRcdHJldHVybiBOVUxMO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3Olx0cHJvYmUtXHUwMDNlaGl0cyA9IGhpdHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg6XHRyZXR1cm4gcHJvYmU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjktfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMT1zdGF0aWMgc3NpemVfdCBoaXRzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1Olx0XHRcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzc6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVoaHVcXG5cJiMzNDssIHByb2JlLVx1MDAzZWhpdHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4LX1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MDpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19wcm9iZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjpcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqcHJvYmUgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1Olx0a2ZyZWUocHJvYmUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2LX1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3Byb2JlX2hpdHNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDktXHRcdF9fQVRUUl9ST19NT0RFKGhpdHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19wcm9iZV9hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOlx0XHUwMDI2ZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMtXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTU6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19wcm9iZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTc6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTg6XHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTktXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjA6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19wcm9iZV9ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjEtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjMtLypcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NDogKiBwcm9iZXMgZGlyZWN0b3J5XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjUtICovXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Njc6c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY5Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICoqcHJvYmVzX2Fycjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MC1cdGludCBucjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzM6c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKmRhbW9zX3N5c2ZzX3Byb2Jlc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Ni19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Nzg6c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcHJvYmVzX3JtX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4MDpcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqKnByb2Jlc19hcnIgPSBwcm9iZXMtXHUwMDNlcHJvYmVzX2Fycjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04MS1cdGludCBpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTgyLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjgzOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvYmVzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4NDpcdFx0a29iamVjdF9wdXQoXHUwMDI2cHJvYmVzX2FycltpXS1cdTAwM2Vrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4NTpcdHByb2Jlcy1cdTAwM2VuciA9IDA7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6ODY6XHRrZnJlZShwcm9iZXNfYXJyKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4NzpcdHByb2Jlcy1cdTAwM2Vwcm9iZXNfYXJyID0gTlVMTDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04OC19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTA6c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkxLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTM6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk0Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICoqcHJvYmVzX2Fycjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05NS1cdGludCBpID0gMDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5NzpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTgtXHRcdGkmIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTAzOlx0cHJvYmVzX2FyciA9IGttYWxsb2Nfb2JqcygqcHJvYmVzX2FyciwgaSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA0Olx0aWYgKCFwcm9iZXNfYXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwNS1cdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA2Olx0cHJvYmVzLVx1MDAzZXByb2Jlc19hcnIgPSBwcm9iZXNfYXJyO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDgtXHRpID0gMDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDk6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTEwOlx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKnN5c19wcm9iZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTEtXHRcdGludCBlcnI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEyLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExMzpcdFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0Olx0XHRcdFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExNTpcdFx0aWYgKCFzeXNfcHJvYmUpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTY6XHRcdFx0ZGFtb3Nfc3lzZnNfcHJvYmVzX3JtX2RpcnMocHJvYmVzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTctXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE4LVx0XHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE5Olx0XHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZzeXNfcHJvYmUtXHUwMDNla29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjA6XHRcdFx0XHRcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9rdHlwZSwgXHUwMDI2cHJvYmVzLVx1MDAzZWtvYmosIFwmIzM0OyVkXCYjMzQ7LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMS1cdFx0XHRcdGkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMi1cdFx0aWYgKGVycikge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzpcdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZzeXNfcHJvYmUtXHUwMDNla29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI0Olx0XHRcdGRhbW9zX3N5c2ZzX3Byb2Jlc19ybV9kaXJzKHByb2Jlcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI1LVx0XHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI2LVx0XHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI3Olx0XHRwcm9iZXNfYXJyW2kmIzQzOyYjNDM7XSA9IHN5c19wcm9iZTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkyNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBEQU1PTiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIGRlY2VudC1zaXplZCBzZXQgb2YgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIFNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZyBhcmUgZWl0aGVyIG5ldyBvciBoYXZlIGJlZW4gY2hhbmdlZDoKCiogICBJbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgd2UgaGF2ZSBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAuCiogICBJbiBgbW0vZGFtb24vcGFkZHIuY2AsIGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgIGlzIGluIHRoZSBtaXguCiogICBUaGUgYnVsayBvZiB0aGUgd29yayBzZWVtcyB0byBiZSBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHdpdGggYWRkaXRpb25zIGFuZCBtb2RpZmljYXRpb25zIHRvIGZ1bmN0aW9uczoKICAgICogICBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gCiAgICAqICAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYAogICAgKiAgIGBkYW1vbl92YV95b3VuZ19hZGRyYAogICAgKiAgIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgCiAgICAqICAgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYAogICAgKiAgIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AKICAgICogICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YAogICAgKiAgIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YAogICAgKiAgIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AKICAgICogICBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYAoKTmV4dCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhwb3N1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgaW50ZWdyYXRpb24gd2l0aCB0b29scyBvciBhbmFseXNlcy4gSSBzaG91bGQgcXVpY2tseSBzb3J0IHRoZSBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgc3ltYm9scy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgd2hpbGUgbm90IGRpcmVjdGx5IHZpc2libGUsIGNhbiBzdGlsbCBpbXBhY3QgdGhlIGludGVyZmFjZSBpZiB0aGVpciBjYWxsZXJzIG9yIGVudHJ5IHBvaW50cyBhcmUgbm9uLXN0YXRpYyBvciBjYW4gYmUgaW5saW5lZC4gS2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGluY2x1ZGU6CgoqICAgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIChhcHBlYXJzIHRvIGJlIG5vbi1zdGF0aWMgaW4gb3BzLWNvbW1vbi5jKS4KKiAgIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AKKiAgIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgCiogICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YAoqICAgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgCiogICBgZGFtb25fdmFfZmlsdGVyX21hdGNoYAoqICAgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYAoqICAgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAKCkZpbmFsbHksIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBxdWlja2x5IGRvIGEgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZpbGVzIG9yIHN5bWJvbHMgdGhhdCBoYXZlIGJlZW4gYWZmZWN0ZWQuIFRoZW4sIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGdpdCBsb2cgYW5kIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZXNlIGNoYW5nZXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgJiMzOTt3aHkmIzM5OyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgYmFzaXMgZm9yIGEgZGV0YWlsZWQgY29kZSBpbnNwZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jPTY2OT1zdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY5Ni1cbm1tL2RhbW9uL3ZhZGRyLmM6Njk3OnN0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3ZhZGRyLmMtNjk4LVx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MTYtXG5tbS9kYW1vbi92YWRkci5jOjcxNzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi92YWRkci5jLTcxOC1cdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MzAtXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xubW0vZGFtb24vdmFkZHIuYzo3MzE6XHRcdFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XG5tbS9kYW1vbi92YWRkci5jLTczMi1cdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MTE2Mz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMTE3MS1cdFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXG5tbS9kYW1vbi92YWRkci5jOjExNzI6XHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXG5tbS9kYW1vbi92YWRkci5jLTExNzMtXHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzgyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIEltcGxlbWVudGF0aW9uIGFuZCBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBEQU1PTiBjb3JlIGltcGxlbWVudGF0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaG93IERBTU9OIHJ1bnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBga2RhbW9uZF9mbmAgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB3aGVuIERBTU9OIGlzIGVuYWJsZWQsIGxpa2VseSB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UgYXQgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLy4uLmAsIHRoaXMgYGtkYW1vbmRfZm5gIGZ1bmN0aW9uIGdldHMgaW5pdGlhdGVkLiBGcm9tIHRoZXJlLCBpdCBtYWtlcyBjYWxscyB0byBgY3R4LSZndDtvcHMucHJlcF9wcm9iZXNgIGFuZCBgY3R4LSZndDtvcHMuYXBwbHlfcHJvYmVzYC4gR2l2ZW4gdGhlIGBEQU1PTl9WQUREUmAgcmVnaXN0cmF0aW9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjdHgtJmd0O29wcy5wcmVwX3Byb2Jlc2AgaXMsIGFzIGV4cGVjdGVkLCBwb2ludGluZyB0byBgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBhbmQgYGN0eC0mZ3Q7b3BzLmFwcGx5X3Byb2Jlc2AgaXMgc2V0IHRvIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBJdCYjMzk7cyBhbHNvIHdvcnRoIGNvbmZpcm1pbmcgdGhhdCBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgaXMgY29ycmVjdGx5IGludm9rZWQgZnJvbSBib3RoIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGFuZCBgZGFtb25fcGFfZmlsdGVyX21hdGNoYAoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbGlzdCB0aGVtIG91dCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWxsIHRoZXJlOgoKKiAgIGBEQU1PTmA6IFRoZSBEQU1PTiBmcmFtZXdvcmsgaXRzZWxmLgoqICAgYERBTU9OX1ZBRERSYDogVGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIOKAkyB0aGlzIGRlcGVuZHMgb24gREFNT04gYW5kLCBuYXR1cmFsbHksIHRoZSBNTVUuCiogICBgREFNT05fUEFERFJgOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbHNvIGRlcGVuZGVudCBvbiBEQU1PTiBhbmQgdGhlIE1NVS4KKiAgIGBEQU1PTl9TWVNGU2A6IFRoZSBzeXNmcyBpbnRlcmZhY2UsIGVzc2VudGlhbCBmb3IgY29uZmlndXJpbmcgcHJvYmVzIGFuZCB0YXJnZXRzIGZyb20gdXNlcnNwYWNlLgoqICAgYE1FTUNHYDogVGhpcyBvbmUgaXMgdXNlZCBpbiBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgd2hlbiBgREFNT05fRklMVEVSX1RZUEVfTUVNQ0dgIGlzIGFjdGl2ZSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhdmFpbGFibGUuCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgOiBUaGlzIGlzIGltcG9ydGFudCBmb3IgYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAuCiogICBgSFVHRVRMQl9QQUdFYDogQW5kIHRoaXMgaXMgdXNlZCBpbiBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGltcG9ydGFudCBmb3IgbGFyZ2UgcGFnZXMuCgpKdXN0IHRvIGNvbmZpcm0sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBjb25maWcgbmFtZXMgYW5kIHRoZW4gSSYjMzk7bGwgZ3JlcCB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY29uZmlnIG9wdGlvbnMgYXJlIGluZGVlZCBkZWZpbmVkIGFuZCBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGBDT05GSUdfREFNT05fUEFERFJgLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19NRU1DR2AsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBBZnRlciB0aGlzLCBpdCYjMzk7cyBqdXN0IGEgbWF0dGVyIG9mIGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBhbGwgZXhpc3QgYW5kIHRoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKE1FTUNHfFRSQU5TUEFSRU5UX0hVR0VQQUdFfEhVR0VUTEJfUEFHRSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02ODk9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy02OTEtXG5tbS9LY29uZmlnOjY5Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNjkzLVx0ZGVmX2Jvb2wgblxuLS1cbm1tL0tjb25maWc9ODI3PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODI5LVxubW0vS2NvbmZpZzo4MzA6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzEtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg0OD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1My1cbm1tL0tjb25maWc6ODU0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTUtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjAtXG5tbS9LY29uZmlnOjg2MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2Mi1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzEtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3Nz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4Ni1cbm1tL0tjb25maWc6ODg3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODg4LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTYtXG5tbS9LY29uZmlnOjg5NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy04OTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDQtXG5tbS9LY29uZmlnOjkwNTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwNi1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTIyPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMxLVxubW0vS2NvbmZpZzo5MzI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0MC1cbm1tL0tjb25maWc6OTQxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0Mi1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0OC1cbm1tL0tjb25maWc6OTQ5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUwLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEtleSBLZXJuZWwgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBzb21ldGhpbmcgdGhhdCBsaWtlbHkgaW52b2x2ZXMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlc291cmNlIGNvbnN0cmFpbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0d28gY3JpdGljYWwga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYW5kIGBDT05GSUdfTUVNQ0dgLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIG9mdGVuIGF0IHRoZSBoZWFydCBvZiBwZXJmb3JtYW5jZSB0dW5pbmcgYW5kIHJlc291cmNlIGlzb2xhdGlvbiBpbiBjb250YWluZXJpemVkIG9yIGhpZ2gtcGVyZm9ybWFuY2UgZW52aXJvbm1lbnRzLiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgY3J1Y2lhbCBmb3IgYXBwbGljYXRpb25zIHRoYXQgYmVuZWZpdCBmcm9tIGxhcmdlIHBhZ2Ugc2l6ZXMsIHJlZHVjaW5nIFRMQiBtaXNzZXMgYW5kIGltcHJvdmluZyBtZW1vcnkgYWNjZXNzIHNwZWVkcy4gSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBhc2NlcnRhaW4gaWYgaXQgaXMgZW5hYmxlZC4gQXQgdGhlIHNhbWUgdGltZSwgYENPTkZJR19NRU1DR2AgaXMgZXF1YWxseSBpbXBvcnRhbnQsIGl0IGVuYWJsZXMgY29udHJvbCBncm91cHMgZm9yIG1lbW9yeSwgYWxsb3dpbmcgZ3JhbnVsYXIgYWxsb2NhdGlvbiBhbmQgaXNvbGF0aW9uIG9mIG1lbW9yeSByZXNvdXJjZXMgYmV0d2VlbiBwcm9jZXNzZXMuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBjb25maWd1cmVkLCBhbmQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGludGVycGxheSwgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoSFVHRVRMQl9QQUdFfE1FTUNHKSQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzctXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc5LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nLCBhbmQgdGhlIGh1Z2V0bGIgc3Vic3lzdGVtIGlzIGltbWVkaWF0ZWx5IHBvcHBpbmcgaW50byBteSBoZWFkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTm8gcG9pbnQgaW4gY2hhc2luZyBnaG9zdHMgaWYgSHVnZVRMQiBzdXBwb3J0IGlzbiYjMzk7dCBldmVuIGNvbXBpbGVkIGluLiBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBjaGVjayBhcmUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWcgZmlsZXMg4oCTIGxpa2VseSBgbW0vS2NvbmZpZ2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBtaWdodCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCBpZiBpdCYjMzk7cyBiZWVuIG1vdmVkIG9yIGlmIGl04oCZcyBhIGRlcGVuZGVuY3kgb2Ygc29tZXRoaW5nIGVsc2UuIFRoaXMgY2hlY2sgd2lsbCBzYXZlIG1lIGEgdG9uIG9mIGRlYnVnZ2luZyB0aW1lIGxhdGVyIG9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb24gaXMgdGhlcmUgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBmb3IgYXJjaGl0ZWN0dXJhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBIVUdFVExCX1BBR0UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBjb25maWcgSFVHRVRMQl9QQUdFYCBzeW1ib2wgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzcGFjZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcsIGF1ZGl0aW5nLCBvciBwZXJoYXBzIGV2ZW4gaW1wbGVtZW50aW5nIGEgY2hhbmdlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIG1hbmFnZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBwcm9iYWJseSBhbHJlYWR5IGhhdmUgYSBkZWNlbnQgaWRlYSBvZiB3aGVyZSB0byAqc3RhcnQqIGxvb2tpbmcsIGJ1dCBhIHN5c3RlbWF0aWMgc2VhcmNoIGlzIHRoZSBiZXN0IGFwcHJvYWNoLiBNeSBtZW50YWwgbW9kZWwgaXMgcHJvYmFibHkgZm9ybWluZyBhIHF1ZXJ5IHRoYXQgSSYjMzk7bGwgcnVuIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBidWlsZCBzeXN0ZW0gKGxpa2VseSBga2NvbmZpZ2ApLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGlzIGlzIHdoZXJlIEkgd291bGQgc3RhcnQuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBmb3JtaW5nIGEgcGxhbiB0byByYXBpZGx5IGxvY2F0ZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbiBhbmQgaXRzIGFzc29jaWF0ZWQgY29udGV4dC4gVGhlIGdvYWwgaXMgZWZmaWNpZW5jeS4gTGV0JiMzOTtzIGRvIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTQyCgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBQYXRjaCBSZXZpZXc6IFZpcnR1YWwgQWRkcmVzcyBTcGFjZSBQcm9iaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZm91bmRhdGlvbjogYEhVR0VUTEJGU2AgZW5hYmxlcyBgSFVHRVRMQl9QQUdFYC4gR290IGl0LiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIGEgbGlzdCBvZiByZWxldmFudCBGb2N1c1N5bWJvbHM6IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAuIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIHNwZWNpZmljIHRvIHRoZSBjaGFuZ2VzIGluIGBtbS9kYW1vbi92YWRkci5jYCwgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGFuZCBgbW0vZGFtb24vcGFkZHIuY2Ag4oCTIG5vdCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBidXQgZGlyZWN0bHkgcGFydCBvZiB0aGlzIERBTU9OIHBhdGNoLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIERBTU9OIHByb2JlIHByZXAgYW5kIGFwcGxpY2F0aW9uIHNwZWNpZmljYWxseSBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIGZvciBzZXR0aW5nIHVwIHByb2JlcyAoYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2ApLCB0aGVuIHdhbGtpbmcgcGFnZSB0YWJsZXMsIGFuZCBoYW5kbGluZyBib3RoIHJlZ3VsYXIgYW5kIGh1Z2UgcGFnZSBlbnRyaWVzIChgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBgZGFtb25fdmFfeW91bmdfYWRkcmApLiBUaGVyZSYjMzk7cyBmaWx0ZXIgbG9naWMgaW5jbHVkZWQgYXMgd2VsbCAoYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGAsIGBkYW1vbl92YV9maWx0ZXJfcGFzc2ApLCBhbmQgd2UmIzM5O3JlIHNlZWluZyBzb21lIGNvbW1vbiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgcmVmYWN0b3JlZCBpbnRvIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKClgLiBJdCYjMzk7cyBjbGVhcmx5IG1vZGlmeWluZyBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIHZpYSBEQU1PTiwgYW5kIGl0JiMzOTtzIHJlbGV2YW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgd2VsbC1kZWZpbmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXIuIEkmIzM5O3ZlIHZlcmlmaWVkIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvLCBzbyBJJiMzOTtsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgYWNyb3NzIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzIGJ5IGludHJvZHVjaW5nIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKSBhbmQgaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcHJvYmUgaGFuZGxpbmcgKGRhbW9uX3ZhX3ByZXBfcHJvYmVzLCBkYW1vbl92YV9hcHBseV9wcm9iZXMsIGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSkuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHkgYW5kIHNhbml0aXplciBhcHBsaWNhYmlsaXR5OlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IEFsbCBzdGFjay1hbGxvY2F0ZWQgc3RydWN0cyAoc3VjaCBhcyBzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFuZCBzdHJ1Y3QgbW1fd2Fsa19vcHMpIGFuZCBzY2FsYXIgdmFyaWFibGVzIChlLmcuIGJvb2xlYW5zLCBsb29wIGNvdW50ZXJzLCBhY2N1bXVsYXRvciBzdW1zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzZS5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIG91dHB1dHMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cbjMuIE1lbW9yeSBzYWZldHkgY29uc2lkZXJhdGlvbnM6IEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHBhZ2UtdGFibGUgd2Fsa2luZywgZm9saW8gbG9ja2luZy9yZWZlcmVuY2UgY291bnRpbmcsIGNvbmN1cnJlbmN5LCBvciBhcnJheSBpbmRleGluZyAoZS5nLiwgcHJvYmVfaGl0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRzKS5cblxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDUxY2NkZGFlYTUxODY3NTU3MGQyOTRhMjVjNjgxY2ZmZWU1MTY4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzg6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uYwpAQCAtNDQ0LDMgJiM0Mzs0NDQsMzUgQEAgYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KJiM0MzsKJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsKJiM0MzsJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgomIzQzOwkJaWYgKCFmb2xpbykgewomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCW1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6CiYjNDM7CQlpZiAoIWZvbGlvKSB7CiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CiYjNDM7CQlpZiAoIW1lbWNnKQomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltYXRjaGVkID0gZmlsdGVyLSZndDttZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwomIzQzO30KZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaAppbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCkBAIC0yMSwzICYjNDM7MjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwogdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTsKIAogYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpOwomIzQzOwomIzQzO2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcGFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jCkBAIC0xNDMsMjkgJiM0MzsxNDMsOCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAogCXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7Ci0JY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgotCQlpZiAoIWZvbGlvKSB7Ci0JCQltYXRjaGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCQltYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTsKLQkJYnJlYWs7Ci0JY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoKLQkJaWYgKCFmb2xpbykgewotCQkJbWF0Y2hlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQltZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTsKLQkJaWYgKCFtZW1jZykKLQkJCW1hdGNoZWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJbWF0Y2hlZCA9IGZpbHRlci0mZ3Q7bWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlicmVhazsKIAljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDoKIAkJaWYgKCFmb2xpbykKIAkJCW1hdGNoZWQgPSBmYWxzZTsKQEAgLTE3Myw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKIAkJCW1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7CiAJfQogCXJldHVybiBtYXRjaGVkID09IGZpbHRlci0mZ3Q7bWF0Y2hpbmc7CiB9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTUxMCw2ICYjNDM7NTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gbWF4X25yX2FjY2Vzc2VzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ByZXAgKnA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHsKJiM0MzsJCXN3aXRjaCAocC0mZ3Q7YWN0aW9uKSB7CiYjNDM7CQljYXNlIERBTU9OX1BSRVBfU0VUX1BHSURMRToKJiM0MzsJCQlkYW1vbl92YV9ta29sZChtbSwgci0mZ3Q7c2FtcGxpbmdfYWRkcik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwomIzQzOwlzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHsKJiM0MzsJCW1tID0gZGFtb25fZ2V0X21tKHQpOwomIzQzOwkJaWYgKCFtbSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7CiYjNDM7CQkJaWYgKHNldF9zYW1wbGVzKQomIzQzOwkJCQlyLSZndDtzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItJmd0O2FyLnN0YXJ0LAomIzQzOwkJCQkJCXItJmd0O2FyLmVuZCk7CiYjNDM7CQkJZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KQomIzQzOwkJCQlkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTsKJiM0MzsJCX0KJiM0MzsJCW1tcHV0KG1tKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYm9vbCB5b3VuZyA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAocHRlKQomIzQzOwkJeW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7CiYjNDM7CWVsc2UgaWYgKHBtZCkKJiM0MzsJCXlvdW5nID0gcG1kX3lvdW5nKCpwbWQpOwomIzQzOwl5b3VuZyA9IHlvdW5nIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8CiYjNDM7CQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyhtbSwgYWRkcik7CiYjNDM7CXJldHVybiB5b3VuZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOgomIzQzOwkJaWYgKCFmb2xpbykKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSwKJiM0MzsJCQkJCWFkZHIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfcGFzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsCiYjNDM7CQlwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7CiYjNDM7CWJvb2wgcGFzcyA9IHRydWU7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7CiYjNDM7CQlpZiAoZGFtb25fdmFfZmlsdGVyX21hdGNoKGYsIGZvbGlvLCBwdGUsIHBtZCwgbW0sIGFkZHIpKSB7CiYjNDM7CQkJcGFzcyA9IGYtJmd0O2FsbG93OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJcGFzcyA9ICFmLSZndDthbGxvdzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcGFzczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmN0eDsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkgewomIzQzOwkJaWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLAomIzQzOwkJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkcikpCiYjNDM7CQkJci0mZ3Q7cHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7CiYjNDM7CQlpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQomIzQzO3sKJiM0MzsJcHRlX3QgKnB0ZTsKJiM0MzsJcHRlX3QgcHRlbnQ7CiYjNDM7CXNwaW5sb2NrX3QgKnB0bDsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay0mZ3Q7dm1hKTsKJiM0MzsJaWYgKHB0bCkgewomIzQzOwkJcG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXBtZF9wcmVzZW50KHBtZGUpKQomIzQzOwkJCWdvdG8gaHVnZV9vdXQ7CiYjNDM7CQlmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay0mZ3Q7dm1hLCBhZGRyLCBwbWRlKTsKJiM0MzsJCWlmICghZm9saW8pCiYjNDM7CQkJZ290byBodWdlX291dDsKJiM0MzsJCWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sIE5VTEwsICZhbXA7cG1kZSwKJiM0MzsJCQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CiYjNDM7aHVnZV9vdXQ6CiYjNDM7CQlzcGluX3VubG9jayhwdGwpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsjZW5kaWYJLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiYjNDM7CiYjNDM7CXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay0mZ3Q7bW0sIHBtZCwgYWRkciwgJmFtcDtwdGwpOwomIzQzOwlpZiAoIXB0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQocHRlbnQpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstJmd0O3ZtYSwgYWRkciwgcHRlbnQpOwomIzQzOwlpZiAoIWZvbGlvKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sICZhbXA7cHRlbnQsIE5VTEwsCiYjNDM7CQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiYjNDM7c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLSZndDt2bWEpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzcGlubG9ja190ICpwdGw7CiYjNDM7CXB0ZV90IGVudHJ5OwomIzQzOwomIzQzOwlwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstJmd0O21tLCBwdGUpOwomIzQzOwllbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay0mZ3Q7bW0sIGFkZHIsIHB0ZSk7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQoZW50cnkpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKJiM0MzsJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsJZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi0mZ3Q7Y3R4LCBwcml2LSZndDtyLCBmb2xpbywgJmFtcDtlbnRyeSwgTlVMTCwKJiM0MzsJCQl3YWxrLSZndDt2bWEtJmd0O3ZtX21tKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNwaW5fdW5sb2NrKHB0bCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMCiYjNDM7I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHsKJiM0MzsJCS5jdHggPSBjdHgsCiYjNDM7CQkuciA9IHIsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHsKJiM0MzsJCS5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksCiYjNDM7CQkuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9IHItJmd0O3NhbXBsaW5nX2FkZHI7CiYjNDM7CiYjNDM7CWlmICghbW0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCAmYW1wO2RhbW9uX3Byb2JlX3dhbGtfb3BzLAomIzQzOwkJCSZhbXA7YXJnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJYm9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF93c3VtID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkgewomIzQzOwkJbW0gPSBkYW1vbl9nZXRfbW0odCk7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewomIzQzOwkJCWlmIChzZXRfc2FtcGxlcykKJiM0MzsJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLSZndDthci5zdGFydCwKJiM0MzsJCQkJCQlyLSZndDthci5lbmQpOwomIzQzOwkJCV9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpOwomIzQzOwkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiYjNDM7CQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKJiM0MzsJCQkJCQkJY3R4KSwgbWF4X3dzdW0pOwomIzQzOwkJfQomIzQzOwkJaWYgKG1tKQomIzQzOwkJCW1tcHV0KG1tKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbWF4X3dzdW07CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHBtZF90ICpwbWRwKQpAQCAtOTM4LDYgJiM0MzsxMTY4LDggQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZCkKIAkJLnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSwKIAkJLnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcywKIAkJLmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsCiYjNDM7CQkucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcywKJiM0MzsJCS5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsCiAJCS50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsCiAJCS5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LAogCQkuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PTiBwYXRjaCBhbmQgc2VlIGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHdoZXRoZXIgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gd2lsbCBzdWZmaWNlIG9yIGlmIHRoaXMgd2FycmFudHMgYSBtb3JlIGluLWRlcHRoIGludmVzdGlnYXRpb24uCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2U6CgoxLiAgV2UgaGF2ZSBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCB3aGljaCBkZWZpbmVzIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCB0aGF0IGNoZWNrcyB0aGUgZmlsdGVyIHR5cGUg4oCTIGBEQU1PTl9GSUxURVJfVFlQRV9BTk9OYCBhbmQgYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYCDigJMgYW5kIGNvbnNvbGlkYXRlcyBzb21lIGV4aXN0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYy4KMi4gIFRoZSBoZWFkZXIgZmlsZSBgbW0vZGFtb24vb3BzLWNvbW1vbi5oYCBkZWNsYXJlcyB0aGUgbmV3bHkgYWRkZWQgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGZ1bmN0aW9uLgozLiAgYG1tL2RhbW9uL3BhZGRyLmNgIGlzIGp1c3QgYSBzaW1wbGUgcmVmYWN0b3IsIHJlcGxhY2luZyB0aGUgZHVwbGljYXRlIGNvZGUgd2l0aCBhIGNhbGwgdG8gdGhlIG5ldyBmdW5jdGlvbi4KNC4gIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHdoaWNoIGltcGxlbWVudHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JpbmcgZm9yIERBTU9OLiBJdCBpbnRyb2R1Y2VzIGEgc2xldyBvZiBuZXcgZnVuY3Rpb25zOiBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gLCBgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBgZGFtb25fdmFfeW91bmdfYWRkcmAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgLCBgZGFtb25fdmFfcHJvYmVfZm9saW9gLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBgX19kYW1vbl92YV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIFRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQgaW4gYGRhbW9uX3ZhX2luaXRjYWxsYCB2aWEgdGhlIG9wcyB0YWJsZS4KCk5vdywgbXkga2V5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBjb3BpZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiB0aGUgbmV3IHN0cnVjdHMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBwcm9iYWJseSBncmVwIHRoZSBrZXJuZWwgdHJlZSBvciByZWFkIHRocm91Z2ggdGhlIHJlbGV2YW50IGZpbGVzIHRvIHVuZGVyc3RhbmQgaG93IGByLSZndDtwcm9iZV9oaXRzYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBob3cgdGhlc2UgZmlsdGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIGFuZCBnZW5lcmFsbHkgaG93IHRoZSBuZXcgZnVuY3Rpb25zIGFyZSB3b3JraW5nIHVuZGVyIHRoZSBob29kLiBJIGhhdmUgdG8gbG9vayBmb3IgZGF0YSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb250cm9sIGZsb3cgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC4gSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaWYgdGhlIG5ldyBmdW5jdGlvbnMgYXJlIGFjY2Vzc2luZyBhbnkgbWVtb3J5IG5vdCBwcm9wZXJseSBwcm90ZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlX2hpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDgtXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM1MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjYtXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXG5tbS9kYW1vbi9jb3JlLmM6MzY3Olx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXG5tbS9kYW1vbi9jb3JlLmM6MzY5Olx0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxubW0vZGFtb24vY29yZS5jOjM3MDpcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NDAzOlx0XHRyZWdpb24tXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NDA0Olx0XHRyZWdpb24tXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy00MDUtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTQ2Mj1zdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXG5tbS9kYW1vbi9jb3JlLmM6NDY5OiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbm1tL2RhbW9uL2NvcmUuYy00NzAtICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc1LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3Njp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYy00NzctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDg0LVx0XHRpZiAobGFzdClcbm1tL2RhbW9uL2NvcmUuYzo0ODU6XHRcdFx0c3VtICYjNDM7PSByLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDg2LVx0XHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6NDg3Olx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2Vwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbm1tL2RhbW9uL2NvcmUuYy00ODgtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMDM9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDA5LVxubW0vZGFtb24vY29yZS5jOjEwMTA6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0xMDExLVx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMTctXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMDE4Olx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYzoxMDE5Olx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0xMDIwLVx0XHRpZiAoIWFnZ3JlZ2F0aW5nKVxubW0vZGFtb24vY29yZS5jOjEwMjE6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxubW0vZGFtb24vY29yZS5jOjEwMjI6XHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxubW0vZGFtb24vY29yZS5jLTEwMjMtXHRcdFx0XHRcdG5ld19hdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTAyNC1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjEwMjU6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMDI2LVx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTAzMD1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAzMy17XG5tbS9kYW1vbi9jb3JlLmM6MTAzNDpcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0xMDM1LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDI3PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0MjktXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbm1tL2RhbW9uL2NvcmUuYzoxNDMwOlx0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYy0xNDMxLVx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ0OC1cdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OTpcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjdHgtXHUwMDNlYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTE0NTAtXHR3c3VtID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xNDUxLVx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xubW0vZGFtb24vY29yZS5jOjE0NTI6XHRcdGlmIChwcm9iZS1cdTAwM2V3ZWlnaHQgXHUwMDNlIFVJTlRfTUFYIC8gbWF4X3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmMtMTQ1My1cdFx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6MTQ1NDpcdFx0d3N1bV90b19hZGQgPSBwcm9iZS1cdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYy0xNDU1LVx0XHRpZiAoVUlOVF9NQVggLSB3c3VtIFx1MDAzYyB3c3VtX3RvX2FkZClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjI5Mz1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMxNi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIzMTc6XHRcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IHItXHUwMDNlcHJvYmVfaGl0c1tpXTtcbm1tL2RhbW9uL2NvcmUuYzoyMzE4Olx0XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0yMzE5LVx0XHRcdH1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQyNj1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDM3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MzQzODpcdFx0bC1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXHUwMDNlcHJvYmVfaGl0c1tpXSAqIHN6X2wgJiM0Mzsgci1cdTAwM2Vwcm9iZV9oaXRzW2ldXG5tbS9kYW1vbi9jb3JlLmMtMzQzOS1cdFx0XHRcdCogc3pfcikgLyAoc3pfbCAmIzQzOyBzel9yKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQ0ND1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYzozNDQ1Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmMtMzQ0Ni17XG5tbS9kYW1vbi9jb3JlLmM6MzQ0NzpcdGlmICh1c2VfcHJvYmVfaGl0cylcbm1tL2RhbW9uL2NvcmUuYzozNDQ4Olx0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ0OS1cdGlmIChsYXN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDYxPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDY0LVx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcbm1tL2RhbW9uL2NvcmUuYzozNDY1Olx0Ym9vbCB1c2VfcHJvYmVfaGl0cyA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ2Ni1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ2OS1cbm1tL2RhbW9uL2NvcmUuYzozNDcwOlx0XHRzY29yZSA9IGRhbW9uX21lcmdlX3Njb3JlKHIsIGZhbHNlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcbm1tL2RhbW9uL2NvcmUuYzozNDcxOlx0XHRsYXN0X3Njb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgdHJ1ZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ3Mi1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ4Ni1cdFx0ZGlmZiA9IGFic19kaWZmKHNjb3JlLCBkYW1vbl9tZXJnZV9zY29yZShwcmV2LCBmYWxzZSwgY3R4LFxubW0vZGFtb24vY29yZS5jOjM0ODc6XHRcdFx0XHRcdHVzZV9wcm9iZV9oaXRzKSk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ4OC1cdFx0aWYgKGRpZmYgXHUwMDNlIHRocmVzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNTY2PXN0YXRpYyBpbnQgZGFtb25fc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM1ODEtXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbm1tL2RhbW9uL2NvcmUuYzozNTgyOlx0bWVtY3B5KG5ldy1cdTAwM2Vwcm9iZV9oaXRzLCByLVx1MDAzZXByb2JlX2hpdHMsIHNpemVvZihyLVx1MDAzZXByb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYzozNTgzOlx0bWVtY3B5KG5ldy1cdTAwM2VsYXN0X3Byb2JlX2hpdHMsIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzLFxubW0vZGFtb24vY29yZS5jOjM1ODQ6XHRcdFx0c2l6ZW9mKHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzKSk7XG5tbS9kYW1vbi9jb3JlLmMtMzU4NS1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE3Nj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xOTctXHRcdFx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcbm1tL2RhbW9uL3BhZGRyLmM6MTk4Olx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xubW0vZGFtb24vcGFkZHIuYy0xOTktXHRcdFx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTIwMy1cdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxubW0vZGFtb24vcGFkZHIuYzoyMDQ6XHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG5tbS9kYW1vbi9wYWRkci5jLTIwNS1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDA9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5LVx0XHRfX0FUVFJfUk9fTU9ERShoaXRzLCAwNDAwKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI6XHRcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01My1cdE5VTEwsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2Jlcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVx0XHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XHRcdFx0XHRkYW1vbl9wcm9iZV9oaXRzX212c3VtKGksIHJlZ2lvbiwgY3R4KSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVx0XHRpZiAoIXN5c19wcm9iZSkge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NC1cdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IDE1O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NTpcdHItXHUwMDNlcHJvYmVfaGl0c1swXSA9IDc7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU2Olx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0gPSAzO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1Ny1cdHItXHUwMDNlYWdlID0gMTA7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3Mi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIHJfbmV3LVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE3MzpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZXByb2JlX2hpdHNbMF0sIHJfbmV3LVx1MDAzZXByb2JlX2hpdHNbMF0pO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE3NDpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSwgcl9uZXctXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzUtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VhZ2UsIHJfbmV3LVx1MDAzZWFnZSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE4MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5NS1cdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAxMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxOTY6XHRyLVx1MDAzZXByb2JlX2hpdHNbMF0gPSA2O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5Ny1cdHItXHUwMDNlYWdlID0gOTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjA0LVx0cjItXHUwMDNlbnJfYWNjZXNzZXMgPSAyMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyMDU6XHRyMi1cdTAwM2Vwcm9iZV9oaXRzWzBdID0gMTQ7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjA2LVx0cjItXHUwMDNlYWdlID0gMjE7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIxMi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNnUpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjIxMzpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZXByb2JlX2hpdHNbMF0sIDExKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMTQtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VhZ2UsIDE3dSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1MTQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTM4LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1Mzk6XHQvKiBNb3JlIHNhbXBsZXMgY291bGQgb3ZlcmZsb3cgdGhlIHByb2JlX2hpdHMgY291bnRlcnMuICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU0MC1cdGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMjU2O1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NjA4PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTYxNy1cdFx0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyKSlcbm1tL2RhbW9uL3ZhZGRyLmM6NjE4Olx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7XG5tbS9kYW1vbi92YWRkci5jLTYxOS1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vdmFkZHIuYz03MTc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzMyLVx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG5tbS9kYW1vbi92YWRkci5jOjczMzpcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbm1tL2RhbW9uL3ZhZGRyLmMtNzM0LVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRob3NlIGNvZGUgc2VjdGlvbnM6CgoqKkRpdmluZyBEZWVwIGludG8gREFNT04mIzM5O3MgVmlydHVhbCBBZGRyZXNzIFNwYWNlIFByb2JlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGhhbmRsZSBvbiBob3cgREFNT04gaXMgaGFuZGxpbmcgdmlydHVhbCBhZGRyZXNzIHByb2JpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgIGZ1bmN0aW9uIGFuZCBhbnkgY29ubmVjdGVkIG1vZGlmaWNhdGlvbnMuIEkmIzM5O20gd29ycmllZCBhYm91dCBwb3RlbnRpYWwgaW5pdGlhbGl6YXRpb24gaXNzdWVzIGhlcmUsIHNvIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZm9jdXMuIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIGJ1dCBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgYnVncyBsdXJraW5nIGluIHRoZSBzaGFkb3dzLgoKVGhlcmVmb3JlLCBJJiMzOTttIHplcm9pbmcgaW4gb24gYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAgYW5kIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBpZiBhbnkgb2YgdGhlIG5ldyBjaGFuZ2VzIGhhdmUgaW50cm9kdWNlZCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGlzIHdob2xlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBwcm9iaW5nIG1lY2hhbmlzbSBpcyByb2J1c3QgYW5kIHNhZmUuIEkmIzM5O2xsIGJlIG1ldGljdWxvdXNseSBleGFtaW5pbmcgdGhlIGxvZ2ljIGZsb3cgYW5kIGRhdGEgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYz0yMTc9c3RhdGljIHZvaWQgZGFtb25fdmFfdXBkYXRlKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi92YWRkci5jLTIyOC1cbm1tL2RhbW9uL3ZhZGRyLmM6MjI5OnN0YXRpYyB2b2lkIGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2RhbW9uL3ZhZGRyLmMtMjMwLVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUpXG4tLVxubW0vZGFtb24vdmFkZHIuYz0zMzY9c3RhdGljIHZvaWQgZGFtb25fdmFfbWtvbGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTM0Mi1cbm1tL2RhbW9uL3ZhZGRyLmM6MzQzOlx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICYjNDM7IDEsIFx1MDAyNmRhbW9uX21rb2xkX29wcywgTlVMTCk7XG5tbS9kYW1vbi92YWRkci5jLTM0NC19XG4tLVxubW0vZGFtb24vdmFkZHIuYz00NTg9c3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQ2OC1cbm1tL2RhbW9uL3ZhZGRyLmM6NDY5Olx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICYjNDM7IDEsIFx1MDAyNmRhbW9uX3lvdW5nX29wcywgXHUwMDI2YXJnKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNDcwLVx0cmV0dXJuIGFyZy55b3VuZztcbi0tXG5tbS9kYW1vbi92YWRkci5jPTY5Nz1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MTItXG5tbS9kYW1vbi92YWRkci5jOjcxMzpcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE0LVx0XHRcdFx1MDAyNmFyZyk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz05NjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfdmFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy05OTItXG5tbS9kYW1vbi92YWRkci5jOjk5MzpcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgci1cdTAwM2Vhci5zdGFydCwgci1cdTAwM2Vhci5lbmQsIFx1MDAyNndhbGtfb3BzLCBcdTAwMjZwcml2KTtcbm1tL2RhbW9uL3ZhZGRyLmMtOTk0LVx0bW1wdXQobW0pO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MTA4MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9zdGF0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTEwOTktXG5tbS9kYW1vbi92YWRkci5jOjExMDA6XHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIHItXHUwMDNlYXIuc3RhcnQsIHItXHUwMDNlYXIuZW5kLCBcdTAwMjZ3YWxrX29wcywgXHUwMDI2cHJpdik7XG5tbS9kYW1vbi92YWRkci5jLTExMDEtXHRtbXB1dChtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTkyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCB3aXRoaW4gYHZhZGRyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugd2Fsa2luZyBsb2dpYyByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW4gdGhlIGNvbnRleHQgb2YgREFNT04mIzM5O3Mgb3BlcmF0aW9uLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHRhYmxlIGxldmVscywgaG93IGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIHJlbGV2YW50IHZpcnR1YWwgYWRkcmVzcyByYW5nZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgbGlrZSByYWNlIGNvbmRpdGlvbnMsIGhvdyBpdCBoYW5kbGVzIFRMQiBpbnZhbGlkYXRpb25zIGlmIG5lZWRlZCwgYW5kIGFsc28gYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgbWlnaHQgY29tZSB1cCwgc3BlY2lmaWNhbGx5IHdpdGggZGlmZmVyZW50IHBhZ2Ugc2l6ZXMgYW5kIE5VTUEgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIGNvcnJlY3RseSBoYW5kbGluZyB1bm1hcHBlZCByZWdpb25zIGFuZCwgb2YgY291cnNlLCB0aGF0IGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzk7cyBwYWdlIHRhYmxlIGZvcm1hdC4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgZG9uZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGUgZm9yIHRoZSBrZXkgYWxnb3JpdGhtcyBhbmQgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgaGFwcGVucyBkdXJpbmcgZWFjaCBzdGVwIG9mIHRoZSBwYWdlIHdhbGsuIEkgd2lsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIHJhbmdlIGlzIGJyb2tlbiBkb3duLCBhbmQgaG93IGluZGl2aWR1YWwgcGFnZXMgYXJlIGlkZW50aWZpZWQgYW5kIHByb2Nlc3NlZC4gSSBzaG91bGQgYWxzbyBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBEQU1PTiBpbmZyYXN0cnVjdHVyZSBmb3IgbW9uaXRvcmluZyBhbmQgcHJvZmlsaW5nIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI1Olx0XHRcdGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xuIDIyNjpcdFx0fVxuIDIyNzpcdH1cbiAyMjg6XHRcbiAyMjk6XHRzdGF0aWMgdm9pZCBkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gMjMwOlx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSlcbiAyMzE6XHR7XG4gMjMyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAyMzM6XHRcbiAyMzQ6XHRcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgc3RhcnQpO1xuIDIzNTpcdFx0aWYgKCF2bWEpXG4gMjM2Olx0XHRcdGdvdG8gbG9ja19tbWFwO1xuIDIzNzpcdFxuIDIzODpcdFx0aWYgKGVuZCBcdTAwM2Ugdm1hLVx1MDAzZXZtX2VuZCkge1xuIDIzOTpcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiAyNDA6XHRcdFx0Z290byBsb2NrX21tYXA7XG4gMjQxOlx0XHR9XG4gMjQyOlx0XG4gMjQzOlx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkpIHtcbiAyNDQ6XHRcdFx0b3BzLVx1MDAzZXdhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWTtcbiAyNDU6XHRcdFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHN0YXJ0LCBlbmQsIG9wcywgcHJpdmF0ZSk7XG4gMjQ2Olx0XHR9XG4gMjQ3Olx0XG4gMjQ4Olx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiAyNDk6XHRcdHJldHVybjtcbiAyNTA6XHRcbiAyNTE6XHRsb2NrX21tYXA6XG4gMjUyOlx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4gMjUzOlx0XHRvcHMtXHUwMDNld2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSztcbiAyNTQ6XHRcdHdhbGtfcGFnZV9yYW5nZShtbSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcbiAyNTU6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIDI1NjpcdH1cbiAyNTc6XHRcbiAyNTg6XHRzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gMjU5Olx0XHRcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gMjYwOlx0e1xuIDI2MTpcdFx0cHRlX3QgKnB0ZTtcbiAyNjI6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiAyNjM6XHRcbiAyNjQ6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTkwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBgZGFtb25fZmlsdGVyYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGFtb25fZmlsdGVyYCBzdHJ1Y3QgaXMgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQuIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBzZWUgaXRzIHN0cnVjdHVyZS4gSSB3YW50IHRvIGxvb2sgZm9yIHRoZSBrZXkgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLiBJIGFtIGV4cGVjdGluZyBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBhbmQgcHJvYmFibHkgc29tZSBzdGF0ZSBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IGlzIGJlaW5nIHBvcHVsYXRlZCwgYXJlIHRoZXJlIGhhcmRjb2RlZCB2YWx1ZXMsIG9yIGFyZSB0aGV5IHNvdXJjZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBJIHdpbGwgbG9vayBmb3Igb3RoZXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMgb3IgbWFjcm8gdXNlcy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgYGRhbW9uX2ZpbHRlcmAgY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vbl9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTc2ND1zdHJ1Y3QgZGFtb25fcHJlcCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTc3MS0vKipcbmluY2x1ZGUvbGludXgvZGFtb24uaDo3NzI6ICogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSAtIFR5cGUgb2YgXHUwMDI2c3RydWN0IGRhbW9uX2ZpbHRlclxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTc3My0gKlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD03Nzg9ZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTc4NC0vKipcbmluY2x1ZGUvbGludXgvZGFtb24uaDo3ODU6ICogc3RydWN0IGRhbW9uX2ZpbHRlciAtIERBTU9OIHJlZ2lvbiBmaWx0ZXIgZm9yIFx1MDAyNnN0cnVjdCBkYW1vbl9wcm9iZS5cbmluY2x1ZGUvbGludXgvZGFtb24uaC03ODYtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzkxLSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjc5MjpzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC03OTMtXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTM9dm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU0LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTU6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1Ni1cdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA1Nzp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZik7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA1ODp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERBTU9OIEZpbHRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGxvb2sgYXQgdGhlIGBkYW1vbl9maWx0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaWx0ZXIgd29ya3MgaW4gdGhlIGNvbnRleHQgb2YgREFNT04uIFJpZ2h0LCBzbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgaW5jbHVkZSBmaWxlOiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgbGlrZWx5IHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgc2hvdWxkIHJlc2lkZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZDsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjbGVhciBzdHJ1Y3QgbWVtYmVycyBhbmQgbWF5YmUgc29tZSBpbnNpZ2h0ZnVsIGZ1bmN0aW9uIHByb3RvdHlwZXMgcmVsYXRlZCB0byBob3cgdGhlIGZpbHRlcmluZyBsb2dpYyBpcyBhY3R1YWxseSBhcHBsaWVkIHRvIG1lbW9yeSBhY2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBhZGRyZXNzIHJhbmdlcywgYWNjZXNzIHR5cGVzLCBhbmQgcG90ZW50aWFsbHkgZXZlbiB1c2VyLWRlZmluZWQgY3JpdGVyaWEuIEl04oCZcyBpbXBvcnRhbnQgdG8gc2VlIHdoYXQgaG9va3MgaXQgaGFzIGludG8gdGhlIGNvcmUgREFNT04gZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBtb25pdG9yaW5nIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzgwOlx0XHREQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcbiA3ODE6XHRcdERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVCxcbiA3ODI6XHR9O1xuIDc4MzpcdFxuIDc4NDpcdC8qKlxuIDc4NTpcdCAqIHN0cnVjdCBkYW1vbl9maWx0ZXIgLSBEQU1PTiByZWdpb24gZmlsdGVyIGZvciBcdTAwMjZzdHJ1Y3QgZGFtb25fcHJvYmUuXG4gNzg2Olx0ICpcbiA3ODc6XHQgKiBAdHlwZTpcdFR5cGUgb2YgdGhlIHJlZ2lvbi5cbiA3ODg6XHQgKiBAbWF0Y2hpbmc6XHRXaGV0aGVyIHRoaXMgZmlsdGVyIGlzIGZvciB0aGUgdHlwZS1tYXRjaGluZyBvbmVzLlxuIDc4OTpcdCAqIEBhbGxvdzpcdFdoZXRoZXIgdGhlIEB0eXBlLUBtYXRjaGluZyBvbmVzIHNob3VsZCBwYXNzIHRoaXMgZmlsdGVyLlxuIDc5MDpcdCAqIEBtZW1jZ19pZDpcdE1lbWNnIGlkIG9mIHRoZSBxdWVzdGlvbiBpZiBAdHlwZSBpcyBEQU1PTl9GSUxURVJfTUVNQ0cuXG4gNzkxOlx0ICovXG4gNzkyOlx0c3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gNzkzOlx0XHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG4gNzk0Olx0XHRib29sIG1hdGNoaW5nO1xuIDc5NTpcdFx0Ym9vbCBhbGxvdztcbiA3OTY6XHRcdHVuaW9uIHtcbiA3OTc6XHRcdFx0dTY0IG1lbWNnX2lkO1xuIDc5ODpcdFx0fTtcbiA3OTk6XHQvKiBwcml2YXRlOiAqL1xuIDgwMDpcdFx0LyogU2libGluZ3MgbGlzdC4gKi9cbiA4MDE6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiA4MDI6XHR9O1xuIDgwMzpcdFxuIDgwNDpcdC8qKlxuIDgwNTpcdCAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cbiA4MDY6XHQgKlxuIDgwNzpcdCAqIEB3ZWlnaHQ6XHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxuIDgwODpcdCAqL1xuIDgwOTpcdHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4gODEwOlx0XHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuIDgxMTpcdC8qIHByaXZhdGU6ICovXG4gODEyOlx0XHQvKiBQcmVwYXJhdGlvbiBhY3Rpb25zIHRvIGFwcGx5IHRvIGVhY2ggcHJvYmluZyBtZW1vcnkuICovXG4gODEzOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHByZXBzO1xuIDgxNDpcdFx0LyogRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLiAqL1xuIDgxNTpcdFx0c3RydWN0IGxpc3RfaGVhZCBmaWx0ZXJzO1xuIDgxNjpcdFx0LyogU2libGluZ3MgbGlzdC4gKi9cbiA4MTc6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiA4MTg6XHR9O1xuIDgxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYGRhbW9uX25ld19maWx0ZXJgJiMzOTtzIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gaG93IGBkYW1vbl9uZXdfZmlsdGVyYCBoYW5kbGVzIHRoZSBjcnVjaWFsIHRhc2tzIG9mIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBhIGBkYW1vbl9maWx0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaGVyZS4gV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgdXNpbmcgYSBjdXN0b20gYWxsb2NhdG9yLCBvciByZWx5aW5nIG9uIHNvbWV0aGluZyBzdGFuZGFyZCBsaWtlIGBrbWFsbG9jYD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBmbGFncyBvciBzaXplcyBwYXNzZWQgdG8gdGhlIGFsbG9jYXRvciB0aGF0IG1pZ2h0IGhpbnQgYXQgaXRzIGludGVuZGVkIHVzZSBjYXNlPyBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2l0aCByZWdhcmQgdG8gTlVNQSBub2RlcyBvciBjYWNoZSBsaW5lIGFsaWdubWVudD8KCk5leHQsIEkmIzM5O2xsIHNjcnV0aW5pemUgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgYGRhbW9uX2ZpbHRlcmAgYXJlIGJlaW5nIHBvcHVsYXRlZD8gQXJlIGFueSBtdXRleGVzIG9yIHNwaW5sb2NrcyBpbml0aWFsaXplZD8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgSSBzaG91bGQgYmUgd2F0Y2hpbmcgb3V0IGZvcj8gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHdoZXRoZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mIHNvbWUgZmllbGRzIGRlcGVuZHMgb24gdGhlIHN1Y2Nlc3Mgb2Ygb3RoZXJzLiBBbHNvLCBkb2VzIGl0IGhhdmUgYSBkZXN0cnVjdG9yIHRoYXQgZnJlZXMgcmVzb3VyY2VzLCBhbmQgd2hhdCBtaWdodCBiZSB0aGUgZWZmZWN0cyBvZiBhbnkgc3VjaCB0ZWFyZG93bj8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBmaWx0ZXImIzM5O3MgaW50ZXJuYWwgc3RhdGUgaXMgc2V0IHVwLiBEb2VzIGl0IHVzZSBhbnkgaW50ZXJuYWwgc3RydWN0dXJlcz8gSG93IGFyZSBpdHMgcGFyYW1ldGVycyBjb25maWd1cmVkPyBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNhbml0eSBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSB0aGUgZmlsdGVyIG9wZXJhdGVzIGNvcnJlY3RseT8gSXMgdGhlcmUgYSBuZWVkIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGBpbml0YCBhbmQgYHJlc2V0YCBpbiB0aGUgZnV0dXJlPwoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBgZGFtb25fZmlsdGVyYCBjb21lcyBpbnRvIGV4aXN0ZW5jZSwgZW5zdXJpbmcgaXQgY2FuIHBlcmZvcm0gaXRzIGludGVuZGVkIGZ1bmN0aW9uIHJlbGlhYmx5LiBUaGlzIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGFyZSB0aGUgYmVkcm9jayBvZiB0aGUgZW50aXJlIGZpbHRlcmluZyBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX25ld19maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3MC1cbm1tL2RhbW9uL2NvcmUuYzoxNzE6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG5tbS9kYW1vbi9jb3JlLmMtMTcyLVx0XHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODA2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MjMtXG5tbS9kYW1vbi9jb3JlLmM6MTgyNDpcdFx0bmV3X2ZpbHRlciA9IGRhbW9uX25ld19maWx0ZXIoc3JjX2ZpbHRlci1cdTAwM2V0eXBlLFxubW0vZGFtb24vY29yZS5jLTE4MjUtXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZW1hdGNoaW5nLCBzcmNfZmlsdGVyLVx1MDAzZWFsbG93KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxOTk9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjIwOC1cbm1tL2RhbW9uL3N5c2ZzLmM6MjIwOTpcdFx0ZmlsdGVyID0gZGFtb25fbmV3X2ZpbHRlcihzeXNfZmlsdGVyLVx1MDAzZXR5cGUsXG5tbS9kYW1vbi9zeXNmcy5jLTIyMTAtXHRcdFx0XHRzeXNfZmlsdGVyLVx1MDAzZW1hdGNoaW5nLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkYW1vbl9uZXdfZmlsdGVyYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZGFtb25fbmV3X2ZpbHRlcmAgZnVuY3Rpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBoYW5kbGVzIGl0cyBuZXcgZmlsdGVyIGxvZ2ljIHdpdGhpbiB0aGUgY29yZS4gSeKAmW0gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgY2FsbCBncmFwaCBhbmQgc2NydXRpbml6aW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIERBTU9OIGNvbXBvbmVudHMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGVycm9yIGhhbmRsaW5nIGFuZCB3aGF0IG1ldHJpY3MgaXQmIzM5O3MgdXNpbmcgKG9yIHNob3VsZCBiZSkuIEkmIzM5O20gbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBmaWx0ZXIgY3JlYXRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyBpdHMgcGVyZm9ybWFuY2UgaW1wYWN0IGluIGRpZmZlcmVudCBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbiAxNzI6XHRcdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbiAxNzM6XHR7XG4gMTc0Olx0XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXI7XG4gMTc1Olx0XG4gMTc2Olx0XHRmaWx0ZXIgPSBrbWFsbG9jX29iaigqZmlsdGVyKTtcbiAxNzc6XHRcdGlmICghZmlsdGVyKVxuIDE3ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxNzk6XHRcdGZpbHRlci1cdTAwM2V0eXBlID0gdHlwZTtcbiAxODA6XHRcdGZpbHRlci1cdTAwM2VtYXRjaGluZyA9IG1hdGNoaW5nO1xuIDE4MTpcdFx0ZmlsdGVyLVx1MDAzZWFsbG93ID0gYWxsb3c7XG4gMTgyOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmaWx0ZXItXHUwMDNlbGlzdCk7XG4gMTgzOlx0XHRyZXR1cm4gZmlsdGVyO1xuIDE4NDpcdH1cbiAxODU6XHRcbiAxODY6XHR2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxuIDE4NzpcdHtcbiAxODg6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Zi1cdTAwM2VsaXN0LCBcdTAwMjZwLVx1MDAzZWZpbHRlcnMpO1xuIDE4OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG1lbWNnX2lkYCBpbiBEQU1PTiBGaWx0ZXIgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyBgbWVtY2dfaWRgIGdldHMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBEQU1PTl9GSUxURVJfVFlQRV9NRU1DR2AuIEkgbmVlZCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBhbmQgdW5kZXJzdGFuZCB3aGVyZSB0aGlzIHZhbHVlIG9yaWdpbmF0ZXMgYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcywgbWF5YmUgbG9vayBmb3IgYXJlYXMgd2hlcmUgYSByYWNlIGNvdWxkIGV4aXN0IG9yIHdoZXJlIHRoZSBJRCBtaWdodCBub3QgYmUgd2hhdCB0aGUgdXNlciBleHBlY3RzLiBJJiMzOTttIGFzc3VtaW5nIGZhbWlsaWFyaXR5IHdpdGggdGhlIERBTU9OIGNvZGUgYmFzZSwgc28gSSYjMzk7bSBub3QgZ29pbmcgdG8gYmUgc3VwZXIgZXhwbGljaXQgYWJvdXQgZXZlcnkgZnVuY3Rpb24uIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyBiZWhhdmluZyBleGFjdGx5IGhvdyBJIGV4cGVjdCBpdCB0by4gVWx0aW1hdGVseSwgSSBhbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgdGhlIHJlbGlhYmxlIHBsYWNlIHRvIGFjY2VzcyB0aGlzIHZhbHVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZ19pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMTkxPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjA0LVx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbm1tL2RhbW9uL2NvcmUuYzoxMjA1Olx0XHRkc3QtXHUwMDNlbWVtY2dfaWQgPSBzcmMtXHUwMDNlbWVtY2dfaWQ7XG5tbS9kYW1vbi9jb3JlLmMtMTIwNi1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jPTEzMTU9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4tLVxubW0vZGFtb24vY29yZS5jLTEzMTktXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHOlxubW0vZGFtb24vY29yZS5jOjEzMjA6XHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbm1tL2RhbW9uL2NvcmUuYy0xMzIxLVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTc5MT1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc5OC1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi9jb3JlLmM6MTc5OTpcdFx0ZHN0LVx1MDAzZW1lbWNnX2lkID0gc3JjLVx1MDAzZW1lbWNnX2lkO1xubW0vZGFtb24vY29yZS5jLTE4MDAtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODA2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MjktXHRcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi9jb3JlLmM6MTgzMDpcdFx0XHRuZXdfZmlsdGVyLVx1MDAzZW1lbWNnX2lkID0gc3JjX2ZpbHRlci1cdTAwM2VtZW1jZ19pZDtcbm1tL2RhbW9uL2NvcmUuYy0xODMxLVx0XHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOTQzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTI5NTctXG5tbS9kYW1vbi9jb3JlLmM6Mjk1ODpcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChnb2FsLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL2NvcmUuYy0yOTU5LVx0aWYgKCFtZW1jZykge1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0yNjY9Ym9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODQtXHRcdGVsc2Vcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyODU6XHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODYtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz00NDg9Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDcwLVx0XHRlbHNlXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDcxOlx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDcyLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgyMi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZW1lbWNnX3BhdGgsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgyMzpcdFx0XHRcdFx0XHUwMDI2ZmlsdGVyLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODI0LVx0XHRcdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3OS1cdFx0XHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4ODA6XHRcdFx0XHRcdHN5c2ZzX2dvYWwtXHUwMDNlcGF0aCwgXHUwMDI2Z29hbC1cdTAwM2VtZW1jZ19pZCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg4MS1cdFx0XHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTk5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyMTgtXHRcdFx0XHRcdHN5c19maWx0ZXItXHUwMDNlcGF0aCxcbm1tL2RhbW9uL3N5c2ZzLmM6MjIxOTpcdFx0XHRcdFx0XHUwMDI2ZmlsdGVyLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjIyMC1cdFx0XHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgwND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyNC1cdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VuaWQsIHNyYy1cdTAwM2VuaWQpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgyNTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjYtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3Mi1cdFx0XHQubmlkID0gNixcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NzM6XHRcdFx0Lm1lbWNnX2lkID0gNyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NzQtXHRcdFx0fSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4MC1cdFx0XHQubmlkID0gMTAsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODgxOlx0XHRcdC5tZW1jZ19pZCA9IDEsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODgyLVx0XHRcdH0pO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTE4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTI2LVx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTI3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjgtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTQ3PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExNjUtXHRcdFx0LmFsbG93ID0gZmFsc2UsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTE2NjpcdFx0XHQubWVtY2dfaWQgPSAxMjMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE2Ny1cdFx0XHR9KTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTM2Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM3NS1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTM3NjpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzc3LVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTM4Mz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDAxLVx0XHRcdC5hbGxvdyA9IGZhbHNlLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE0MDI6XHRcdFx0Lm1lbWNnX2lkID0gMTIzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0MDMtXHRcdFx0fSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTk3CgkJCQkJCQlvdXRwdXQ6IDMwNwoJCQkJCQkJdGhvdWdodHM6IDEzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXM6IERBTU9OIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBEQU1PTiBjb2RlIGNoYW5nZXMgZnJvbSBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgcGVyc3BlY3RpdmUuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1lbnRpb25lZCBhbmQgaG93IHRoZXkgaGFuZGxlIG1lbW9yeS4KCkZpcnN0LCBJIGV4YW1pbmUgdGhlIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBgbWF0Y2hlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgaXMgYXNzaWduZWQgYSB2YWx1ZSBpbiBhbGwgY29kZSBwYXRocywgZGVwZW5kaW5nIG9uIHRoZSBmaWx0ZXIgdHlwZSAoYW5vbiBvciBtZW1jZykuIE5vIGNvbmNlcm5zIGhlcmUgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTmV4dCwgSSBsb29rIGF0IGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcsIGFuZCBsaWtlIHRoZSBwcmV2aW91cyBvbmUsIGBtYXRjaGVkYCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGFuZCBnZXRzIGFzc2lnbmVkIGEgdmFsdWUuCgpNb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3ZhZGRyLmNgLCBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGVzZSBjaGFuZ2VzIG1vcmUgY2xvc2VseS4gYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCBhbmQgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCBzZWVtIGxpa2UgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGFuZCBJJiMzOTttIG5vdCBzZWVpbmcgaW1tZWRpYXRlIHJlZCBmbGFncy4gYGRhbW9uX3ZhX3lvdW5nX2FkZHJgIGhhcyBgeW91bmdgIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIHdoaWNoIGlzIHNhZmUuCgpJIHRoZW4gZ28gdGhyb3VnaCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgd2hpY2ggdXNlcyBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgYW5kIGFsc28gaGFzIGBtYXRjaGVkYCBpbml0aWFsaXplZCBhbmQgYXNzaWduZWQsIGFuZCBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgIHdoZXJlIGBwYXNzYCBpcyBpbml0aWFsaXplZCB0byBgdHJ1ZWAuIE5vIGlzc3VlcyB0aGVyZS4KClRoZSBgZGFtb25fdmFfcHJvYmVfZm9saW9gIGZ1bmN0aW9uIGluY3JlbWVudHMgYHItJmd0O3Byb2JlX2hpdHNbaV0mIzQzOyYjNDM7YCBpZiB0aGUgZmlsdGVyIHBhc3NlZC4gSXQgaXMgY3J1Y2lhbCB0byBjaGVjayB0aGlzLiBgaWAgaXMgaW5pdGlhbGl6ZWQgdG8gYDBgIGFuZCB0aHVzIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdGhhdCBjb3VsZCBjcmVhdGUgYW4gaXNzdWUuCgpUaGUgZnVuY3Rpb25zIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGFuZCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAgZW1wbG95IGxvY2FsIHN0cnVjdHMuIGBhcmdgIGlzIGNvbnN0cnVjdGVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzcGVjaWZpY2FsbHkgYC5jdHggPSBjdHgsIC5yID0gcmAsIGFuZCBgZGFtb25fcHJvYmVfd2Fsa19vcHNgIGlzIGFsc28gaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVyczogYC5wbWRfZW50cnkgPSAuLi4sIC5odWdldGxiX2VudHJ5ID0gLi4uYC4gVGhpcyBhcHByb2FjaCBlbnN1cmVzIHRoYXQgYWxsIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkLCB0aHVzIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBJbnNpZGUgdGhlc2UgZnVuY3Rpb25zLCBgZm9saW9gIGlzIGRlcml2ZWQgZnJvbSBlaXRoZXIgYHB0ZV9wZm5gIG9yIGB2bV9ub3JtYWxfZm9saW9gIGFuZCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLgoKRmluYWxseSwgSSBjaGVja2VkIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgYW5kIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBgbWF4X3dzdW1gIGlzIGluaXRpYWxpemVkIHRvIGAwYC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBleGFtaW5lZCBhbGwgdGhlIGNvZGUgcGF0aHMgYW5kIGluaXRpYWxpemF0aW9ucyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTttIG5vdCBkZXRlY3RpbmcgYW55IGluc3RhbmNlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB1c2VkIGluIGNvbmRpdGlvbnMsIGJyYW5jaGVzLCBvciBwYXNzZWQgYXJvdW5kLiBObyBjb3B5X3RvX3VzZXIgb3IgcG90ZW50aWFsIGluZm8gbGVhayBwYXRod2F5cyBhcmUgcHJlc2VudC4gVGhlcmUgYXJlIGFsc28gbm8gY29tcGxleCBidWZmZXJzIG9yIG1lbW9yeSBwYXNzZWQgYWNyb3NzIGJvdW5kYXJpZXMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLgoKV2hpbGUgdGhlcmUgKmNvdWxkKiBiZSByYWNlIGNvbmRpdGlvbnMsIHBhZ2UgdGFibGUgd2FsayBidWdzLCBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB0byBgcHJvYmVfaGl0c2AsIHRoZXNlIGFyZSBpc3N1ZXMgdGhhdCB3b3VsZCBiZSBwaWNrZWQgdXAgYnkgZXhpc3RpbmcgdG9vbHMgc3VjaCBhcyBMT0NLREVQLCBLQVNBTiwgYW5kIERBTU9OJiMzOTtzIG93biB2YWxpZGF0aW9uLCBhbmQgdGhleSBhcmUgbm90IHJlbGF0ZWQgdG8gS01TQU4tc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzICh1bmluaXRpYWxpemVkIG1lbW9yeSkuCgoqKkNvbmNsdXNpb246KiogQmFzZWQgb24gdGhpcyB0aG9yb3VnaCByZXZpZXcsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLCBhbmQgdGhlIGFuYWx5c2lzIGlzIGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgYWNyb3NzIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzIGJ5IGludHJvZHVjaW5nIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKSBhbmQgaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcHJvYmUgaGFuZGxpbmcgKGRhbW9uX3ZhX3ByZXBfcHJvYmVzLCBkYW1vbl92YV9hcHBseV9wcm9iZXMsIGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSkuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHkgYW5kIHNhbml0aXplciBhcHBsaWNhYmlsaXR5OlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IEFsbCBzdGFjay1hbGxvY2F0ZWQgc3RydWN0cyAoc3VjaCBhcyBzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFuZCBzdHJ1Y3QgbW1fd2Fsa19vcHMpIGFuZCBzY2FsYXIgdmFyaWFibGVzIChlLmcuIGJvb2xlYW5zLCBsb29wIGNvdW50ZXJzLCBhY2N1bXVsYXRvciBzdW1zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzZS5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIG91dHB1dHMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cbjMuIE1lbW9yeSBzYWZldHkgY29uc2lkZXJhdGlvbnM6IEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHBhZ2UtdGFibGUgd2Fsa2luZywgZm9saW8gbG9ja2luZy9yZWZlcmVuY2UgY291bnRpbmcsIGNvbmN1cnJlbmN5LCBvciBhcnJheSBpbmRleGluZyAoZS5nLiwgcHJvYmVfaGl0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRzKS5cblxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIERBTU9OIGZpbHRlciBtYXRjaGluZyBsb2dpYyBhY3Jvc3MgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYnkgaW50cm9kdWNpbmcgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpIGFuZCBpbXBsZW1lbnRzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBwcm9iZSBoYW5kbGluZyAoZGFtb25fdmFfcHJlcF9wcm9iZXMsIGRhbW9uX3ZhX2FwcGx5X3Byb2JlcywgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5LCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KS5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eSBhbmQgc2FuaXRpemVyIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIHN0YWNrLWFsbG9jYXRlZCBzdHJ1Y3RzIChzdWNoIGFzIHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYW5kIHN0cnVjdCBtbV93YWxrX29wcykgYW5kIHNjYWxhciB2YXJpYWJsZXMgKGUuZy4gYm9vbGVhbnMsIGxvb3AgY291bnRlcnMsIGFjY3VtdWxhdG9yIHN1bXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgb3IgemVyby1pbml0aWFsaXphdGlvbiBiZWZvcmUgdXNlLlxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBtZXNzYWdlcywgb3IgaW9jdGwgb3V0cHV0cyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LlxuMy4gTWVtb3J5IHNhZmV0eSBjb25zaWRlcmF0aW9uczogQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gcGFnZS10YWJsZSB3YWxraW5nLCBmb2xpbyBsb2NraW5nL3JlZmVyZW5jZSBjb3VudGluZywgY29uY3VycmVuY3ksIG9yIGFycmF5IGluZGV4aW5nIChlLmcuLCBwcm9iZV9oaXRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydHMpLlxuXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjEzLjQ1NTEwOTM0NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODEyMjk1NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX29wc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3ZhX3ByZXBfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl9wYV9maWx0ZXJfbWF0Y2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgYWNyb3NzIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzIGJ5IGludHJvZHVjaW5nIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKSBhbmQgaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcHJvYmUgaGFuZGxpbmcgKGRhbW9uX3ZhX3ByZXBfcHJvYmVzLCBkYW1vbl92YV9hcHBseV9wcm9iZXMsIGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSkuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eSBhbmQgc2FuaXRpemVyIGFwcGxpY2FiaWxpdHk6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IEFsbCBzdGFjay1hbGxvY2F0ZWQgc3RydWN0cyAoc3VjaCBhcyBzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFuZCBzdHJ1Y3QgbW1fd2Fsa19vcHMpIGFuZCBzY2FsYXIgdmFyaWFibGVzIChlLmcuIGJvb2xlYW5zLCBsb29wIGNvdW50ZXJzLCBhY2N1bXVsYXRvciBzdW1zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzZS5cXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCBvdXRwdXRzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXFxuMy4gTWVtb3J5IHNhZmV0eSBjb25zaWRlcmF0aW9uczogQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gcGFnZS10YWJsZSB3YWxraW5nLCBmb2xpbyBsb2NraW5nL3JlZmVyZW5jZSBjb3VudGluZywgY29uY3VycmVuY3ksIG9yIGFycmF5IGluZGV4aW5nIChlLmcuLCBwcm9iZV9oaXRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydHMpLlxcblxcbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MTMuNDU1MTEzODY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAxNjQ5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTFjY2RkYWVhNTE4Njc1NTcwZDI5NGEyNWM2ODFjZmZlZTUxNjgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzg6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcXG5AQCAtNDQ0LDMgKzQ0NCwzNSBAQCBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcylcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbitcXG4rYm9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXG4rXFx0c3dpdGNoIChmaWx0ZXItXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxcbitcXHRcXHRpZiAoIWZvbGlvKSB7XFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxcbitcXHRcXHRpZiAoIWZvbGlvKSB7XFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcXG4rXFx0XFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cXHUwMDNlbWF0Y2hpbmc7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuaW5kZXggMzhkMjk1NDg4ZmExOC4uYjgzMjE2OWIxY2Y4YyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcXG5AQCAtMjEsMyArMjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpO1xcbiBcXG4gYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpO1xcbitcXG4rYm9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXFxuaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXFxuKysrIGIvbW0vZGFtb24vcGFkZHIuY1xcbkBAIC0xNDMsMjkgKzE0Myw4IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFxuIFxcdHN3aXRjaCAoZmlsdGVyLVxcdTAwM2V0eXBlKSB7XFxuLVxcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcXG4tXFx0XFx0aWYgKCFmb2xpbykge1xcbi1cXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG4tXFx0XFx0aWYgKCFmb2xpbykge1xcbi1cXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XFxuLVxcdFxcdGlmICghbWVtY2cpXFxuLVxcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRtYXRjaGVkID0gZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcXG4gXFx0XFx0aWYgKCFmb2xpbylcXG4gXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbkBAIC0xNzMsNyArMTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcXG4gXFx0XFx0XFx0bWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXFx1MDAzZW1hdGNoaW5nO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXFxuaW5kZXggZjg4NGQzZjc4ZjMwYS4uMDkwMzE3MTkxOTczYiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXFxuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xcbkBAIC01MTAsNiArNTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFx0cmV0dXJuIG1heF9ucl9hY2Nlc3NlcztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbitcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4rXFx0XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcXG4rXFx0XFx0c3dpdGNoIChwLVxcdTAwM2VhY3Rpb24pIHtcXG4rXFx0XFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XFxuK1xcdFxcdFxcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVxcdTAwM2VzYW1wbGluZ19hZGRyKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuK1xcdFxcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xcbitcXHRcXHRpZiAoIW1tKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4rXFx0XFx0XFx0aWYgKHNldF9zYW1wbGVzKVxcbitcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXFx1MDAzZWFyLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbitcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXFxuK1xcdFxcdFxcdFxcdGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKGN0eCwgbW0sIHIsIHApO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1tcHV0KG1tKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXFxuK1xcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKHB0ZSlcXG4rXFx0XFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XFxuK1xcdGVsc2UgaWYgKHBtZClcXG4rXFx0XFx0eW91bmcgPSBwbWRfeW91bmcoKnBtZCk7XFxuK1xcdHlvdW5nID0geW91bmcgfHwgIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcXG4rXFx0XFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpO1xcbitcXHRyZXR1cm4geW91bmc7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXFxuK1xcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XFxuK1xcbitcXHRzd2l0Y2ggKGZpbHRlci1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcXG4rXFx0XFx0aWYgKCFmb2xpbylcXG4rXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBkYW1vbl92YV95b3VuZ19hZGRyKGZvbGlvLCBwdGUsIHBtZCwgbW0sXFxuK1xcdFxcdFxcdFxcdFxcdGFkZHIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVxcdTAwM2VtYXRjaGluZztcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX3Bhc3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9uX3Byb2JlICpwLFxcbitcXHRcXHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XFxuK1xcdGJvb2wgcGFzcyA9IHRydWU7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xcbitcXHRcXHRpZiAoZGFtb25fdmFfZmlsdGVyX21hdGNoKGYsIGZvbGlvLCBwdGUsIHBtZCwgbW0sIGFkZHIpKSB7XFxuK1xcdFxcdFxcdHBhc3MgPSBmLVxcdTAwM2VhbGxvdztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cGFzcyA9ICFmLVxcdTAwM2VhbGxvdztcXG4rXFx0fVxcbitcXHRyZXR1cm4gcGFzcztcXG4rfVxcbitcXG4rc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSB7XFxuK1xcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4rXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0cHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcXG4rXFx0aW50IGkgPSAwO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbitcXHRcXHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXFxuK1xcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIpKVxcbitcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldKys7XFxuK1xcdFxcdGkrKztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuK3tcXG4rXFx0cHRlX3QgKnB0ZTtcXG4rXFx0cHRlX3QgcHRlbnQ7XFxuK1xcdHNwaW5sb2NrX3QgKnB0bDtcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuK1xcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbitcXHRpZiAocHRsKSB7XFxuK1xcdFxcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xcbitcXG4rXFx0XFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcXG4rXFx0XFx0XFx0Z290byBodWdlX291dDtcXG4rXFx0XFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHdhbGstXFx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XFxuK1xcdFxcdGlmICghZm9saW8pXFxuK1xcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuK1xcdFxcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXFx1MDAzZWN0eCwgcHJpdi1cXHUwMDNlciwgZm9saW8sIE5VTEwsIFxcdTAwMjZwbWRlLFxcbitcXHRcXHRcXHRcXHR3YWxrLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4rXFxuK2h1Z2Vfb3V0OlxcbitcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbisjZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4rXFxuK1xcdHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay1cXHUwMDNlbW0sIHBtZCwgYWRkciwgXFx1MDAyNnB0bCk7XFxuK1xcdGlmICghcHRlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXFx1MDAzZXZtYSwgYWRkciwgcHRlbnQpO1xcbitcXHRpZiAoIWZvbGlvKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cXHUwMDNlY3R4LCBwcml2LVxcdTAwM2VyLCBmb2xpbywgXFx1MDAyNnB0ZW50LCBOVUxMLFxcbitcXHRcXHRcXHR3YWxrLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4rXFxuK291dDpcXG4rXFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuK1xcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXFx1MDAzZXZtYSk7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHNwaW5sb2NrX3QgKnB0bDtcXG4rXFx0cHRlX3QgZW50cnk7XFxuK1xcbitcXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbitcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxuK1xcdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcXG4rXFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4rXFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cXHUwMDNlY3R4LCBwcml2LVxcdTAwM2VyLCBmb2xpbywgXFx1MDAyNmVudHJ5LCBOVUxMLFxcbitcXHRcXHRcXHR3YWxrLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFxuK291dDpcXG4rXFx0c3Bpbl91bmxvY2socHRsKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4rI2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTExcXG4rI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4rXFxuK3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0ge1xcbitcXHRcXHQuY3R4ID0gY3R4LFxcbitcXHRcXHQuciA9IHIsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcXG4rXFx0XFx0LnBtZF9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSxcXG4rXFx0XFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5LFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSByLVxcdTAwM2VzYW1wbGluZ19hZGRyO1xcbitcXG4rXFx0aWYgKCFtbSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICsgMSwgXFx1MDAyNmRhbW9uX3Byb2JlX3dhbGtfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2YXJnKTtcXG4rfVxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbitcXHRcXHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4rXFx0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcXG4rXFx0XFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XFxuK1xcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxuK1xcdFxcdFxcdGlmIChzZXRfc2FtcGxlcylcXG4rXFx0XFx0XFx0XFx0ci1cXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVxcdTAwM2Vhci5zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG4rXFx0XFx0XFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XFxuK1xcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxuK1xcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChtbSlcXG4rXFx0XFx0XFx0bW1wdXQobW0pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbWF4X3dzdW07XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcXG5AQCAtOTM4LDYgKzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxcbiBcXHRcXHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxcbiBcXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcbiBcXHRcXHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyxcXG4rXFx0XFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXFxuK1xcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXFxuIFxcdFxcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXFxuIFxcdFxcdC5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LFxcbiBcXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoxMy45MjYwMDgxODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNDExNjQ3MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX29wc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3ZhX3ByZXBfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl9wYV9maWx0ZXJfbWF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTFjY2RkYWVhNTE4Njc1NTcwZDI5NGEyNWM2ODFjZmZlZTUxNjgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNjozODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtNDQ0LDMgKzQ0NCwzNSBAQCBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuK1xuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXG4rXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XG4rXHRcdGlmICghZm9saW8pIHtcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbitcdFx0aWYgKCFmb2xpbykge1xuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuK1x0XHRpZiAoIW1lbWNnKVxuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuK31cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLmI4MzIxNjliMWNmOGMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuQEAgLTIxLDMgKzIxLDUgQEAgYm9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpO1xuIFxuIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKTtcbitcbitib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0xNDMsMjkgKzE0Myw4IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XG4tXHRcdGlmICghZm9saW8pIHtcbi1cdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuLVx0XHRpZiAoIW1lbWNnKVxuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxuIFx0XHRpZiAoIWZvbGlvKVxuIFx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbkBAIC0xNzMsNyArMTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcbiBcdH1cbiBcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjA5MDMxNzE5MTk3M2IgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNTEwLDYgKzUxMCwyMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gbWF4X25yX2FjY2Vzc2VzO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuK1x0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcmVwICpwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuK1x0XHRzd2l0Y2ggKHAtXHUwMDNlYWN0aW9uKSB7XG4rXHRcdGNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOlxuK1x0XHRcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuK1x0XHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcbitcdFx0aWYgKCFtbSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbitcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4rXHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbitcdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG4rXHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxuK1x0XHRcdFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XG4rXHRcdH1cbitcdFx0bW1wdXQobW0pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuK1xuK1x0aWYgKHB0ZSlcbitcdFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XG4rXHRlbHNlIGlmIChwbWQpXG4rXHRcdHlvdW5nID0gcG1kX3lvdW5nKCpwbWQpO1xuK1x0eW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuK1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyhtbSwgYWRkcik7XG4rXHRyZXR1cm4geW91bmc7XG4rfVxuK1xuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdGVsc2VcbitcdFx0XHRtYXRjaGVkID0gZGFtb25fdmFfeW91bmdfYWRkcihmb2xpbywgcHRlLCBwbWQsIG1tLFxuK1x0XHRcdFx0XHRhZGRyKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcbitcdH1cbitcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX3Bhc3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9uX3Byb2JlICpwLFxuK1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XG4rXHRib29sIHBhc3MgPSB0cnVlO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHtcbitcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xuK1x0XHRcdHBhc3MgPSBmLVx1MDAzZWFsbG93O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHBhc3MgPSAhZi1cdTAwM2VhbGxvdztcbitcdH1cbitcdHJldHVybiBwYXNzO1xuK31cbitcbitzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXHRpbnQgaSA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4rXHRcdGlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSxcbitcdFx0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyKSlcbitcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0rKztcbitcdFx0aSsrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4re1xuK1x0cHRlX3QgKnB0ZTtcbitcdHB0ZV90IHB0ZW50O1xuK1x0c3BpbmxvY2tfdCAqcHRsO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4rXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbitcdGlmIChwdGwpIHtcbitcdFx0cG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7XG4rXG4rXHRcdGlmICghcG1kX3ByZXNlbnQocG1kZSkpXG4rXHRcdFx0Z290byBodWdlX291dDtcbitcdFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwbWRlKTtcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuK1x0XHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgTlVMTCwgXHUwMDI2cG1kZSxcbitcdFx0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcbitodWdlX291dDpcbitcdFx0c3Bpbl91bmxvY2socHRsKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rI2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbitcbitcdHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay1cdTAwM2VtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuK1x0aWYgKCFwdGUpXG4rXHRcdHJldHVybiAwO1xuK1x0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuK1x0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay1cdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcbitcdGlmICghZm9saW8pXG4rXHRcdGdvdG8gb3V0O1xuK1x0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIFx1MDAyNnB0ZW50LCBOVUxMLFxuK1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcbitvdXQ6XG4rXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcbitcdHJldHVybiAwO1xuK31cbitcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cdTAwM2V2bWEpO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHNwaW5sb2NrX3QgKnB0bDtcbitcdHB0ZV90IGVudHJ5O1xuK1xuK1x0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVx1MDAzZW1tLCBwdGUpO1xuK1x0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG4rXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4rXHRmb2xpb19nZXQoZm9saW8pO1xuK1x0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIFx1MDAyNmVudHJ5LCBOVUxMLFxuK1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcdGZvbGlvX3B1dChmb2xpbyk7XG4rXG4rb3V0OlxuK1x0c3Bpbl91bmxvY2socHRsKTtcbitcdHJldHVybiAwO1xuK31cbisjZWxzZVxuKyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMXG4rI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbitcbitzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHtcbitcdFx0LmN0eCA9IGN0eCxcbitcdFx0LnIgPSByLFxuK1x0fTtcbitcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcbitcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSxcbitcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5LFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHItXHUwMDNlc2FtcGxpbmdfYWRkcjtcbitcbitcdGlmICghbW0pXG4rXHRcdHJldHVybjtcbitcbitcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFx1MDAyNmRhbW9uX3Byb2JlX3dhbGtfb3BzLFxuK1x0XHRcdFx1MDAyNmFyZyk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbitcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4rXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuK1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuK1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbitcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVx1MDAzZWFyLnN0YXJ0LFxuK1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbitcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbitcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuK1x0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHR9XG4rXHRcdGlmIChtbSlcbitcdFx0XHRtbXB1dChtbSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbWF4X3dzdW07XG4rfVxuK1xuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcbkBAIC05MzgsNiArMTE2OCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4gXHRcdC51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsXG4gXHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG4gXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxuK1x0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcyxcbitcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiBcdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiBcdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4gXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoxMy45MjYwMDk3OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM5MDM1NjIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgTGludXgga2VybmVsIHBhdGNoIHNlcmllcy4gVGhlIGdvYWwgaXMgZnV6emluZyB3aXRoIHN5emthbGxlciwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZyB0byBzZWUg4oCTIG1vcmUgcm9idXN0IGtlcm5lbHMgYXJlIGJldHRlciBmb3IgZXZlcnlvbmUuIExldCdzIGRpdmUgaW4uXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcGF0Y2guIEkgbmVlZCB0byBrbm93ICpleGFjdGx5KiB3aGF0IGl0J3MgdG91Y2hpbmcuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYG1tL2RhbW9uL2A6IHNwZWNpZmljYWxseSBgb3BzLWNvbW1vbi5jYCwgYG9wcy1jb21tb24uaGAsIGBwYWRkci5jYCwgYW5kIGB2YWRkci5jYC4gREFNT04uLi4gRGF0YSBBY2Nlc3MgTU9OaXRvci4gSW50ZXJlc3RpbmcuIFRoaXMgbGlrZWx5IG1lYW5zIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtZW1vcnkgYWNjZXNzIHByb2ZpbGluZyBvciBtb25pdG9yaW5nLiBJIHdvbmRlciBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIHRoYXQuXG5cbk5vdywgaW5zdGVhZCBvZiBqdXN0IHJlYWRpbmcgY29kZSwgaXQncyB0aW1lIHRvIGdldCBhICpyZWFsKiBwaWN0dXJlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gZ3JlcCwgY29kZSBzZWFyY2gsIHdoYXRldmVyIGdldHMgdGhlIGpvYiBkb25lIOKAkyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEknbGwgc2VhcmNoIHRoZSBrZXJuZWwgdHJlZSBmb3IgS2NvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04sIGFueSBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucywgYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5ICpob3cqIHRoaXMgaXMgdXNlZCwgd2hhdCBpdCdzIGNvbm5lY3RlZCB0bywgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHN5c3RlbSBiZWhhdmlvci5cblxuSSdsbCBzdGFydCB3aXRoIHNvbWUgcXVpY2sgZ3JlcHMgdG8gZ2V0IGEgYnJvYWQgb3ZlcnZpZXcuIFRoZW4sIEkgY2FuIGRyaWxsIGRvd24gZnVydGhlciBiYXNlZCBvbiB3aGF0IHRob3NlIGluaXRpYWwgc2VhcmNoZXMgcmV2ZWFsLiBHb3R0YSBrbm93IHRoZSBcIndobywgd2hhdCwgd2hlcmUsIHdoZW4sIGFuZCB3aHlcIiBiZWZvcmUgSSBjYW4gZXZlbiBzdGFydCB0byB0aGluayBhYm91dCBmdXp6aW5nIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ4OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjI0LjMxNjM2ODA0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODUwNjI5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT05fVkFERFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0yNj1jb25maWcgREFNT05fS1VOSVRfVEVTVFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz00Nz1jb25maWcgREFNT05fUEFERFJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vTWFrZWZpbGU9Mz1vYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbm1tL2RhbW9uL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxubW0vZGFtb24vTWFrZWZpbGUtNS1vYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZz04PUNPTkZJR19QQUdFX0lETEVfRkxBRz15XFxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnOjk6Q09ORklHX0RBTU9OX1ZBRERSPXlcXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6MTA6Q09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1Q9eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZy0xMS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD00MTg9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MjYtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQyNzpcXHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkZJR19EQU1PTl9WQUREUiBpcyBzZXQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDI4LVxcdGlmICghZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoREFNT05fT1BTX1ZBRERSKSkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC01LVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NjojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTctXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo4OiNpZm5kZWYgX0RBTU9OX1ZBRERSX1RFU1RfSFxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6OTojZGVmaW5lIF9EQU1PTl9WQUREUl9URVNUX0hcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwLVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0yODI9a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl90ZXN0X3N1aXRlKTtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTI4My1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjI4NDojZW5kaWYgLyogX0RBTU9OX1ZBRERSX1RFU1RfSCAqL1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMjg1LVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6Mjg2OiNlbmRpZlxcdC8qIENPTkZJR19EQU1PTl9WQUREUl9LVU5JVF9URVNUICovXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTE5LVxcbm1tL2RhbW9uL3ZhZGRyLmM6MjA6I2lmZGVmIENPTkZJR19EQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vdmFkZHIuYy0yMS0jdW5kZWYgREFNT05fTUlOX1JFR0lPTl9TWlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoyNC43MDE0MzU3ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjkyMzIwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBLY29uZmlnIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBEQU1PTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGBLY29uZmlnYCBmaWxlLiBJJ2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgdG9wLWxldmVsIHZpZXcgb2YgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGV4cG9zZSBhbGwgb2YgdGhlIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgZmlsZSB3aWxsIGRlZmluZSBhbGwgdGhlIGBDT05GSUdfREFNT05fKmAgc3ltYm9scywgYW5kIHRyYWNpbmcgdGhvc2UgYmFjayB1cCB0aGUgZGVwZW5kZW5jeSB0cmVlIHdpbGwgaWxsdW1pbmF0ZSBleGFjdGx5IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgYmVpbmcgaW1wYWN0ZWQgYnkgYSBEQU1PTiBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoYXQgS2NvbmZpZyBzdHJ1Y3R1cmUgZnVsbHkgYWxsb3dzIG9uZSB0byBzZWUgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IERBTU9OIGNhbiBiZSBidWlsdCBhbmQgY29uZmlndXJlZC4gV2l0aCB0aGlzIGluIGhhbmQsIEkgY2FuIGVmZmVjdGl2ZWx5IG5hdmlnYXRlIHRoZSBlbnRpcmUgREFNT04gc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MjcuOTkzNzU4OTczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MjcuOTkzODQ1MzMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyMzI2MjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIOKAkyBtb3N0IGxpa2VseSwgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNTS9EQU1PTiBzdWJzeXN0ZW0uIEkgc2VlIHRoZSBzdGFydGluZyBwb2ludCBpcyB0byBkaXZlIGludG8gdGhlIHJlc3Qgb2YgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21lIGludGVyZXN0aW5nIGRldGFpbCB0aGVyZSB0aGF0IHdhcnJhbnRzIGEgZGVlcGVyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIGZlYXR1cmVzLCBvciBtYXliZSBldmVuIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIHdpdGhpbiBEQU1PTidzIEtjb25maWcgZmlsZS4gSSdtIGhvcGluZyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ7IGlkZW50aWZ5IHBvdGVudGlhbCBjdXN0b21pemF0aW9uIHBvaW50cyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEdpdmVuIHRoaXMgaXMgYSBLY29uZmlnIGZpbGUsIGl0IGNvbnRhaW5zIHRoZSBidWlsZCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIHdoYXQgbG9naWMgZ292ZXJucyB0aGVtIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBiZWhhdmlvciBvZiBEQU1PTi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29tcGxleCBkZXBlbmRlbmN5IHRyZWUsIHdpdGggcG90ZW50aWFsIGNyb3NzLWFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIEkgYW0gaW50ZXJlc3RlZCB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBteSBjdXJyZW50IGFyZWEgb2YgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjMwLjQxNzExMDkwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA4NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuICA4OTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxuICA5MzpcXHRcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG4gIDk0OlxcdFxcdCAgdGhvc2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcXG4gIDk3OlxcdFxcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxcbiAgOTg6XFx0XFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxuIDEwMTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbiAxMDI6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAxMDM6XFx0XFx0aGVscFxcbiAxMDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG4gMTA1OlxcdFxcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcXG4gMTA2OlxcdFxcdCAgcGFnZXMgcmVjbGFpbWVkIGZpcnN0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4gMTA3OlxcdFxcbiAxMDg6XFx0Y29uZmlnIERBTU9OX1NUQVRcXG4gMTA5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuIDExMDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuIDExMTpcXHRcXHRoZWxwXFxuIDExMjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG4gMTEzOlxcdFxcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcXG4gMTE0OlxcdFxcdCAgbWV0cmljcy5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxuIDExNzpcXHRcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbiAxMTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxuIDExOTpcXHRcXHRkZWZhdWx0IERBTU9OX1NUQVRcXG4gMTIwOlxcdFxcdGhlbHBcXG4gMTIxOlxcdFxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG4gMTIyOlxcdFxcdCAgYm9vdCBvciBydW50aW1lIHVzaW5nIGl0cyAnZW5hYmxlZCcgcGFyYW1ldGVyLlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRlbmRtZW51XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjMwLjQxNzE4ODQ4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTEzOTk2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgRGFtb24gUHJvYmVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgZmlsdGVyaW5nIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBwcm9jZXNzZXMgYXJlIGluaXRpYXRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byB0aGUgY29yZSBmdW5jdGlvbnM6IGBkYW1vbl9maWx0ZXJgLCBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAsIGBwcmVwX3Byb2Jlc2AsIGFuZCBgYXBwbHlfcHJvYmVzYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUga2VybmVsJ3Mgc3lzZnMgaW50ZXJmYWNlLCBvciBwZXJoYXBzIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIGhvb2tzIGludG8gdGhlc2UgZnVuY3Rpb25zIGFuZCB0cmlnZ2VycyB0aGVpciBleGVjdXRpb24uIEkgZXhwZWN0IHRvIGZpbmQgdGhpcyBpbmZvcm1hdGlvbiBieSBsb29raW5nIGF0IHRoZSBjYWxsIHN0YWNrcy4gVGhlcmVmb3JlLCBJIHdpbGwgYmVnaW4gYnkgc2VhcmNoaW5nIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGNhbGxzIHRvIGBwcmVwX3Byb2Jlc2AgYW5kIGBhcHBseV9wcm9iZXNgLiBUaGlzIHNlYXJjaCB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlc2Ugb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjMyLjYyODU5MDY0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNDgzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcF9wcm9iZXN8YXBwbHlfcHJvYmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zODkzPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MzMtXFxubW0vZGFtb24vY29yZS5jOjM5MzQ6XFx0XFx0ZG9fcHJlcCA9IGN0eC1cXHUwMDNlb3BzLnByZXBfcHJvYmVzIFxcdTAwMjZcXHUwMDI2IGRhbW9uX2hhc19wcmVwKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTM5MzUtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzkzOC1cXHRcXHRpZiAoZG9fcHJlcClcXG5tbS9kYW1vbi9jb3JlLmM6MzkzOTpcXHRcXHRcXHRjdHgtXFx1MDAzZW9wcy5wcmVwX3Byb2JlcyhjdHgsIGFjY2Vzc19jaGVja19kaXNhYmxlZCk7XFxubW0vZGFtb24vY29yZS5jLTM5NDAtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk0NS1cXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgPSBjdHgtXFx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzozOTQ2OlxcdFxcdGlmIChjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMzk0Ny1cXHRcXHRcXHRpZiAodGltZV9hZnRlcl9lcShjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NTItXFx0XFx0XFx0XFx0Z2V0X21heF93c3VtID0gZmFsc2U7XFxubW0vZGFtb24vY29yZS5jOjM5NTM6XFx0XFx0XFx0bWF4X3dzdW0gPSBjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zOTU0LVxcdFxcdFxcdFxcdFxcdGFjY2Vzc19jaGVja19kaXNhYmxlZCBcXHUwMDI2XFx1MDAyNiAhZG9fcHJlcCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9OTI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEwNy1cXG5tbS9kYW1vbi9wYWRkci5jOjEwODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTEwOS1cXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEyNC1cXG5tbS9kYW1vbi9wYWRkci5jOjEyNTpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXFxubW0vZGFtb24vcGFkZHIuYy0xMjYte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMzYtXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxcbm1tL2RhbW9uL3BhZGRyLmM6MTM3OlxcdFxcdFxcdFxcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTM4LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTYwPXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXFxubW0vZGFtb24vcGFkZHIuYzoxNzY6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00NTY9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDYzLVxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDY0OlxcdFxcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDY1OlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYy00NjYtXFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTUxMz1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUyOS1cXG5tbS9kYW1vbi92YWRkci5jOjUzMDpzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXFxubW0vZGFtb24vdmFkZHIuYy01MzEte1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz02Njk9c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTY5Ni1cXG5tbS9kYW1vbi92YWRkci5jOjY5NzpzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vdmFkZHIuYy02OTgtXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MTYtXFxubW0vZGFtb24vdmFkZHIuYzo3MTc6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzAtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi92YWRkci5jOjczMTpcXHRcXHRcXHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcXG5tbS9kYW1vbi92YWRkci5jLTczMi1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTExNzAtXFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXFxubW0vZGFtb24vdmFkZHIuYzoxMTcxOlxcdFxcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE3MjpcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fdmFfYXBwbHlfcHJvYmVzLFxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE3My1cXHRcXHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODozMi42Nzc5NDUzMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAwODI2NDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogREFNT04gVmlydHVhbCBBZGRyZXNzIFNwYWNlIFByb2JlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgc2VjdGlvbiBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIERhdGEgQWNjZXNzIE1vbml0b3Jpbmcgc3Vic3lzdGVtLCBEQU1PTiwgbG9jYXRlZCBpbiBgbW0vZGFtb24vYC4gSXQncyBwcmV0dHkgaW50ZXJlc3RpbmcsIGFuZCBkZWZpbml0ZWx5IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIHVzZXItY29udHJvbGxhYmxlIHRocm91Z2ggc3lzZnMsIHdoaWNoIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIGludGVyYWN0aW9uLCBhc3N1bWluZyBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBlbmFibGVkLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYWRkIHByb2Jpbmcgc3VwcG9ydCB0byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgd2l0aGluIERBTU9OLiBUaGlzIGluY2x1ZGVzIGZ1bmN0aW9ucyBsaWtlIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AsIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBhbmQgYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGAuIFRoZXkndmUgYWxzbyByZWZhY3RvcmVkIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBpbnRvIGBvcHMtY29tbW9uLmNgLiBFc3NlbnRpYWxseSwgd2UncmUgdGFsa2luZyBhYm91dCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIGxvZ2ljLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBhZ2UgdGFibGUgd2Fsa2luZyBhbmQgVEhQL2h1Z2V0bGIgbG9ja2luZywgYW5kIGZvbGlvIGNoZWNrcy4gVGhhdCdzIGEgbG90IG9mIHRvdWNocG9pbnRzIGluIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuXG5cbkdpdmVuIGl0cyByZWFjaCBpbnRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWNjZXNzaWJpbGl0eSB0aHJvdWdoIHN5c2ZzLCBpdCdzIGltbWVkaWF0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgZXhlY3V0YWJsZSBjb2RlIGFuZCBpbnRlcmFjdHMgd2l0aCBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcy5cblxuTGV0J3MgdmVyaWZ5IHRoZSBmdXp6aW5nIGNyaXRlcmlhOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRSVUUqKiAtIENoZWNrIVxuXG4qICAgKipFbmFibGVDb25maWdzOioqIEFscmlnaHQsIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGdldCB0aGlzIHJ1bm5pbmcgYW5kIGFjY2Vzc2libGU/IEkgbmVlZCB0byBjaGVjayBLY29uZmlnIGRlcGVuZGVuY2llczpcblxuICAgICogICBgREFNT05gIChvYnZpb3VzbHksIGl0J3MgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkpXG4gICAgKiAgIGBEQU1PTl9WQUREUmBcbiAgICAqICAgYERBTU9OX1BBRERSYCAoYmVjYXVzZSBgb3BzLWNvbW1vbmAgaXMgY29tcGlsZWQgaWYgZWl0aGVyIGBEQU1PTl9WQUREUmAgb3IgYERBTU9OX1BBRERSYCBpcyBlbmFibGVkKVxuICAgICogICBgREFNT05fU1lTRlNgICh2aXRhbCB0byBjb250cm9sIERBTU9OIGFuZCBjb25maWd1cmUgcHJvYmVzL2ZpbHRlcnMgdmlhIHN5c2ZzIGZyb20gdXNlcnNwYWNlKS5cbiAgICAqICAgYE1FTUNHYCAoaW1wb3J0YW50IGZvciBgREFNT05fRklMVEVSX1RZUEVfTUVNQ0dgIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGBmb2xpb19tZW1jZ19jaGVja2ApXG4gICAgKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgKGVzc2VudGlhbCBmb3IgdGhlIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGZ1bmN0aW9uKVxuICAgICogICBgSFVHRVRMQl9QQUdFYCAobmVlZGVkIGZvciBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWApLlxuXG4gICAgVGhlIGxhc3QgZmV3IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gcmVsYXRlIHRvIGh1Z2UgcGFnZSBzdXBwb3J0LCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3IgdGVzdCBzZXR1cC5cblxuTmV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCB1dGlsaXplcyBtZW1jZyBhbmQgdmVyaWZ5IHdoZXRoZXIgdGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGl0LlxuXG5Mb29raW5nIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCB0aGUgZm9sbG93aW5nIGxpbmVzIG9mIGNvZGUgYXJlIG9mIHJlbGV2YW5jZS5cblxuYGBgY1xubWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG5maWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG5gYGBcblxuT2theSwgc28gdGhlIGBmb2xpb19tZW1jZ19jaGVja2AgZnVuY3Rpb24gcmVxdWlyZXMgYENPTkZJR19NRU1DR2AuIEdvb2QgdG8ga25vdy5cblxuTGFzdGx5LCBJIHNob3VsZCBzZWFyY2ggZm9yIGBkYW1vbl9wcm9iZWAgb3IgYHByb2Jlc2AgaW4gYG1tL2RhbW9uL3N5c2ZzKmAgdG8gY29uZmlybSB0aGF0IHN5c2ZzIHN1cHBvcnRzIHRoZSBwcm9iZXMuIFRoZW4sIEkgY2FuIHN0YXJ0IGJ1aWxkaW5nIHNvbWUgaW5pdGlhbCBmdXp6aW5nIGhhcm5lc3NlcyBhbmQgdGVzdCBzZXR1cHMsIGZvY3VzaW5nIG9uIHZhcmlhdGlvbnMgaW4gdGhlIHByb2JlZCBhZGRyZXNzIHNwYWNlLCB0aGUgZmlsdGVyIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggcGFnZSB0YWJsZXMgYW5kIGh1Z2UgcGFnZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODcwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjM5LjY4NjIxMjI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA2NjAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExNDMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL2RhbW9uL2NvcmUuYz0xMTQ9c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNS1cXG5tbS9kYW1vbi9jb3JlLmM6MTI2OnZvaWQgZGFtb25fYWRkX3ByZXAoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcClcXG5tbS9kYW1vbi9jb3JlLmMtMTI3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDE9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ3OnN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbnRoX3ByZXAoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTQ4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTk9c3RhdGljIGJvb2wgZGFtb25faGFzX3ByZXAoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjEtXFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XFxubW0vZGFtb24vY29yZS5jOjE2MjpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbm1tL2RhbW9uL2NvcmUuYy0xNjMtXFxubW0vZGFtb24vY29yZS5jOjE2NDpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgYykge1xcbm1tL2RhbW9uL2NvcmUuYzoxNjU6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJlcChwcmVwLCBwcm9iZSlcXG5tbS9kYW1vbi9jb3JlLmMtMTY2LVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3MT1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODUtXFxubW0vZGFtb24vY29yZS5jOjE4Njp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xODcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMT12b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDc6c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMjA4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTgtXFxubW0vZGFtb24vY29yZS5jOjIxOTpzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0yMjAte1xcbm1tL2RhbW9uL2NvcmUuYzoyMjE6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjItXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMyLVxcbm1tL2RhbW9uL2NvcmUuYzoyMzM6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzQte1xcbm1tL2RhbW9uL2NvcmUuYzoyMzU6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cHJvYmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXByb2Jlcyk7XFxubW0vZGFtb24vY29yZS5jLTIzNi19XFxubW0vZGFtb24vY29yZS5jLTIzNy1cXG5tbS9kYW1vbi9jb3JlLmM6MjM4OnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxubW0vZGFtb24vY29yZS5jLTIzOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDM6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxubW0vZGFtb24vY29yZS5jLTI0NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU0LVxcbm1tL2RhbW9uL2NvcmUuYzoyNTU6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxubW0vZGFtb24vY29yZS5jLTI1Ni17XFxubW0vZGFtb24vY29yZS5jOjI1NzpcXHRkYW1vbl9kZWxfcHJvYmUocCk7XFxubW0vZGFtb24vY29yZS5jOjI1ODpcXHRkYW1vbl9mcmVlX3Byb2JlKHApO1xcbm1tL2RhbW9uL2NvcmUuYy0yNTktfVxcbm1tL2RhbW9uL2NvcmUuYy0yNjAtXFxubW0vZGFtb24vY29yZS5jOjI2MTpzdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjYyLXtcXG5tbS9kYW1vbi9jb3JlLmM6MjYzOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG5tbS9kYW1vbi9jb3JlLmMtMjY0LVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMjY1LVxcbm1tL2RhbW9uL2NvcmUuYzoyNjY6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jLTI2Ny1cXHRcXHRpZiAoaSsrID09IG4pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjcyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNzM6c3RhdGljIGJvb2wgZGFtb25faGFzX3Byb2JlX3dlaWdodHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9jb3JlLmMtMjc0LXtcXG5tbS9kYW1vbi9jb3JlLmM6Mjc1OlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG5tbS9kYW1vbi9jb3JlLmMtMjc2LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzc6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgYykge1xcbm1tL2RhbW9uL2NvcmUuYy0yNzgtXFx0XFx0aWYgKHAtXFx1MDAzZXdlaWdodClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjU9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQ4LVxcbm1tL2RhbW9uL2NvcmUuYzozNDk6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTM1MC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzY2LVxcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcXG5tbS9kYW1vbi9jb3JlLmM6MzY3OlxcdFxcdHJldHVybiByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcXG5tbS9kYW1vbi9jb3JlLmMtMzY4LVxcbm1tL2RhbW9uL2NvcmUuYzozNjk6XFx0cmV0dXJuIGRhbW9uX212c3VtKHItXFx1MDAzZXByb2JlX2hpdHNbcHJvYmVfaWR4XSxcXG5tbS9kYW1vbi9jb3JlLmM6MzcwOlxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XFxubW0vZGFtb24vY29yZS5jLTM3MS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6NDAzOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XFxubW0vZGFtb24vY29yZS5jOjQwNDpcXHRcXHRyZWdpb24tXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTQwNS1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDYyPXN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDY4LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzo0Njk6ICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxcbm1tL2RhbW9uL2NvcmUuYy00NzAtICogQHI6XFx0XFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxcbm1tL2RhbW9uL2NvcmUuYzo0NzE6ICogQGxhc3Q6XFx0aWYgdGhlIHJlcXVlc3QgaXMgZm9yIGxhc3Qtd2luZG93IGFnZ3JlZ2F0ZWQgcHJvYmUgaGl0cy5cXG5tbS9kYW1vbi9jb3JlLmMtNDcyLSAqIEBjdHg6XFx0Y29udGV4dCBvZiBcXHUwMDI2ci5cXG5tbS9kYW1vbi9jb3JlLmMtNDczLSAqXFxubW0vZGFtb24vY29yZS5jOjQ3NDogKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLlxcbm1tL2RhbW9uL2NvcmUuYy00NzUtICovXFxubW0vZGFtb24vY29yZS5jOjQ3Njp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG5tbS9kYW1vbi9jb3JlLmMtNDc3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtNDc4LXtcXG5tbS9kYW1vbi9jb3JlLmM6NDc5OlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxubW0vZGFtb24vY29yZS5jLTQ4MC1cXHR1bnNpZ25lZCBpbnQgc3VtID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODItXFxubW0vZGFtb24vY29yZS5jOjQ4MzpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jLTQ4NC1cXHRcXHRpZiAobGFzdClcXG5tbS9kYW1vbi9jb3JlLmM6NDg1OlxcdFxcdFxcdHN1bSArPSByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSsrXSAqIHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jLTQ4Ni1cXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjQ4NzpcXHRcXHRcXHRzdW0gKz0gci1cXHUwMDNlcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmMtNDg4LVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05MDE9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTkyNy1cXG5tbS9kYW1vbi9jb3JlLmM6OTI4OlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZXByb2Jlcyk7XFxubW0vZGFtb24vY29yZS5jLTkyOS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05NTA9dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTUyLVxcdHN0cnVjdCBkYW1vcyAqcywgKm5leHRfcztcXG5tbS9kYW1vbi9jb3JlLmM6OTUzOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgKm5leHRfcDtcXG5tbS9kYW1vbi9jb3JlLmMtOTU0LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTk1OS1cXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUocCwgbmV4dF9wLCBjdHgpXFxubW0vZGFtb24vY29yZS5jOjk2MTpcXHRcXHRkYW1vbl9kZXN0cm95X3Byb2JlKHApO1xcbm1tL2RhbW9uL2NvcmUuYy05NjItXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAwMz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAwOS1cXG5tbS9kYW1vbi9jb3JlLmM6MTAxMDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDExLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDEzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTAxNDpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XFxubW0vZGFtb24vY29yZS5jLTEwMTUtXFx0aW50IGkgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDE2LVxcbm1tL2RhbW9uL2NvcmUuYzoxMDE3OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxMDE4OlxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcXG5tbS9kYW1vbi9jb3JlLmM6MTAxOTpcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAyMC1cXHRcXHRpZiAoIWFnZ3JlZ2F0aW5nKVxcbm1tL2RhbW9uL2NvcmUuYzoxMDIxOlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxubW0vZGFtb24vY29yZS5jOjEwMjI6XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDIzLVxcdFxcdFxcdFxcdFxcdG5ld19hdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTEwMjQtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMDI1OlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDI2LVxcdFxcdGkrKztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDMwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzMte1xcbm1tL2RhbW9uL2NvcmUuYzoxMDM0OlxcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAzNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDE2PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDI2LVxcbm1tL2RhbW9uL2NvcmUuYzoxNDI3OnN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTE0Mjgte1xcbm1tL2RhbW9uL2NvcmUuYy0xNDI5LVxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDMwOlxcdHVuc2lnbmVkIGNoYXIgbWF4X3Byb2JlX2hpdHM7XFxubW0vZGFtb24vY29yZS5jOjE0MzE6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQzMi1cXHR1bnNpZ25lZCBpbnQgd3N1bSwgd3N1bV90b19hZGQ7XFxubW0vZGFtb24vY29yZS5jOjE0MzM6XFx0aW50IG5yX3Byb2JlcztcXG5tbS9kYW1vbi9jb3JlLmMtMTQzNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTQzNTpcXHRucl9wcm9iZXMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDM2OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXFxubW0vZGFtb24vY29yZS5jOjE0Mzc6XFx0XFx0bnJfcHJvYmVzKys7XFxubW0vZGFtb24vY29yZS5jOjE0Mzg6XFx0aWYgKG5yX3Byb2JlcyBcXHUwMDNlIERBTU9OX01BWF9QUk9CRVMpXFxubW0vZGFtb24vY29yZS5jLTE0MzktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDQwLVxcbm1tL2RhbW9uL2NvcmUuYzoxNDQxOlxcdGlmICghZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KSlcXG5tbS9kYW1vbi9jb3JlLmMtMTQ0Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDQ3LVxcbm1tL2RhbW9uL2NvcmUuYzoxNDQ4OlxcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXFxubW0vZGFtb24vY29yZS5jOjE0NDk6XFx0bWF4X3Byb2JlX2hpdHMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZjdHgtXFx1MDAzZWF0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1MC1cXHR3c3VtID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ1MTpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jOjE0NTI6XFx0XFx0aWYgKHByb2JlLVxcdTAwM2V3ZWlnaHQgXFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDUzLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ1NDpcXHRcXHR3c3VtX3RvX2FkZCA9IHByb2JlLVxcdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1NS1cXHRcXHRpZiAoVUlOVF9NQVggLSB3c3VtIFxcdTAwM2Mgd3N1bV90b19hZGQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTc2MT1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0LCBzdHJ1Y3QgZGFtb25fcHJlcCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NjUtXFxubW0vZGFtb24vY29yZS5jOjE3NjY6c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNzY3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNzkxPXN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MDUtXFxubW0vZGFtb24vY29yZS5jOjE4MDY6c3RhdGljIGludCBkYW1vbl9jb21taXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCxcXG5tbS9kYW1vbi9jb3JlLmM6MTgwNzpcXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTgwOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS1cXG5tbS9kYW1vbi9jb3JlLmM6MTg0MDpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE4NDEte1xcbm1tL2RhbW9uL2NvcmUuYzoxODQyOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqbmV4dCwgKnNyY19wcm9iZSwgKm5ld19wcm9iZTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg0My1cXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XFxubW0vZGFtb24vY29yZS5jLTE4NDQtXFxubW0vZGFtb24vY29yZS5jOjE4NDU6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShkc3RfcHJvYmUsIG5leHQsIGRzdCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxODQ2OlxcdFxcdHNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShpKyssIHNyYyk7XFxubW0vZGFtb24vY29yZS5jOjE4NDc6XFx0XFx0aWYgKHNyY19wcm9iZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxODQ4OlxcdFxcdFxcdGRzdF9wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jOjE4NDk6XFx0XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3ByZXBzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg1MC1cXHRcXHRcXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xODUxLVxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE4NTI6XFx0XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODUzLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg1NS1cXHRcXHR9IGVsc2Uge1xcbm1tL2RhbW9uL2NvcmUuYzoxODU2OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfcHJvYmUoZHN0X3Byb2JlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny1cXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg1OS1cXG5tbS9kYW1vbi9jb3JlLmM6MTg2MDpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKHNyY19wcm9iZSwgbmV4dCwgc3JjKSB7XFxubW0vZGFtb24vY29yZS5jLTE4NjEtXFx0XFx0aWYgKGorKyBcXHUwMDNjIGkpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg2My1cXG5tbS9kYW1vbi9jb3JlLmM6MTg2NDpcXHRcXHRuZXdfcHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTg2NTpcXHRcXHRpZiAoIW5ld19wcm9iZSlcXG5tbS9kYW1vbi9jb3JlLmMtMTg2Ni1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9jb3JlLmM6MTg2NzpcXHRcXHRkYW1vbl9hZGRfcHJvYmUoZHN0LCBuZXdfcHJvYmUpO1xcbm1tL2RhbW9uL2NvcmUuYzoxODY4OlxcdFxcdG5ld19wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jOjE4Njk6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3ByZXBzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg3MC1cXHRcXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xODcxLVxcdFxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE4NzI6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODczLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTg3OT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTAxLVxcbm1tL2RhbW9uL2NvcmUuYzoxOTAyOlxcdGlmICghZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHNyYykpXFxubW0vZGFtb24vY29yZS5jLTE5MDMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNi1cXHRkc3QtXFx1MDAzZW9wcyA9IHNyYy1cXHUwMDNlb3BzO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTI3OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xOTI4LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjI5Mz1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjk2LVxcdHVuc2lnbmVkIGludCB0aSA9IDA7XFx0LyogdGFyZ2V0J3MgaW5kZXggKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjI5NzpcXHR1bnNpZ25lZCBpbnQgbnJfcHJvYmVzID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MjI5ODpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjk5LVxcbm1tL2RhbW9uL2NvcmUuYy0yMzAwLVxcdGlmICh0cmFjZV9kYW1vbl9yZWdpb25fYWdncmVnYXRlZF9lbmFibGVkKCkpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjMwMTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgYylcXG5tbS9kYW1vbi9jb3JlLmM6MjMwMjpcXHRcXHRcXHRucl9wcm9iZXMrKztcXG5tbS9kYW1vbi9jb3JlLmMtMjMwMy1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMxMi1cXHRcXHRcXHR0cmFjZV9kYW1vbl9yZWdpb25fYWdncmVnYXRlZCh0aSwgcixcXG5tbS9kYW1vbi9jb3JlLmM6MjMxMzpcXHRcXHRcXHRcXHRcXHRkYW1vbl9ucl9yZWdpb25zKHQpLCBucl9wcm9iZXMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzE0LVxcdFxcdFxcdHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSByLVxcdTAwM2Vucl9hY2Nlc3NlcztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzE2LVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjMxNzpcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2ldO1xcbm1tL2RhbW9uL2NvcmUuYzoyMzE4OlxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzE5LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDI2PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQzNS1cXHRsLVxcdTAwM2Vhci5lbmQgPSByLVxcdTAwM2Vhci5lbmQ7XFxubW0vZGFtb24vY29yZS5jOjM0MzY6XFx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXFxubW0vZGFtb24vY29yZS5jLTM0MzctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MzQzODpcXHRcXHRsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXFx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICsgci1cXHUwMDNlcHJvYmVfaGl0c1tpXVxcbm1tL2RhbW9uL2NvcmUuYy0zNDM5LVxcdFxcdFxcdFxcdCogc3pfcikgLyAoc3pfbCArIHN6X3IpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jOjM0NDU6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0zNDQ2LXtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ0NzpcXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jOjM0NDg6XFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDQ5LVxcdGlmIChsYXN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NjE9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQ2NC1cXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYzozNDY1OlxcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDY2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NjktXFxubW0vZGFtb24vY29yZS5jOjM0NzA6XFx0XFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XFxubW0vZGFtb24vY29yZS5jOjM0NzE6XFx0XFx0bGFzdF9zY29yZSA9IGRhbW9uX21lcmdlX3Njb3JlKHIsIHRydWUsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDcyLVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0ODYtXFx0XFx0ZGlmZiA9IGFic19kaWZmKHNjb3JlLCBkYW1vbl9tZXJnZV9zY29yZShwcmV2LCBmYWxzZSwgY3R4LFxcbm1tL2RhbW9uL2NvcmUuYzozNDg3OlxcdFxcdFxcdFxcdFxcdHVzZV9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM0ODgtXFx0XFx0aWYgKGRpZmYgXFx1MDAzZSB0aHJlcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNTY2PXN0YXRpYyBpbnQgZGFtb25fc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzU4MC1cXHRuZXctXFx1MDAzZW5yX2FjY2Vzc2VzID0gci1cXHUwMDNlbnJfYWNjZXNzZXM7XFxubW0vZGFtb24vY29yZS5jOjM1ODE6XFx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXFxubW0vZGFtb24vY29yZS5jOjM1ODI6XFx0bWVtY3B5KG5ldy1cXHUwMDNlcHJvYmVfaGl0cywgci1cXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXFx1MDAzZXByb2JlX2hpdHMpKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzU4MzpcXHRtZW1jcHkobmV3LVxcdTAwM2VsYXN0X3Byb2JlX2hpdHMsIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0cyxcXG5tbS9kYW1vbi9jb3JlLmM6MzU4NDpcXHRcXHRcXHRzaXplb2Yoci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM1ODUtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzg5Mz1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTI1LVxcdFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWw7XFxubW0vZGFtb24vY29yZS5jOjM5MjY6XFx0XFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTI3LVxcdFxcdGJvb2wgZG9fcHJlcDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTMzLVxcbm1tL2RhbW9uL2NvcmUuYzozOTM0OlxcdFxcdGRvX3ByZXAgPSBjdHgtXFx1MDAzZW9wcy5wcmVwX3Byb2JlcyBcXHUwMDI2XFx1MDAyNiBkYW1vbl9oYXNfcHJlcChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTM1LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MzgtXFx0XFx0aWYgKGRvX3ByZXApXFxubW0vZGFtb24vY29yZS5jOjM5Mzk6XFx0XFx0XFx0Y3R4LVxcdTAwM2VvcHMucHJlcF9wcm9iZXMoY3R4LCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTQwLVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NDUtXFx0XFx0XFx0bWF4X21lcmdlX3Njb3JlID0gY3R4LVxcdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzk0NjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XFxubW0vZGFtb24vY29yZS5jLTM5NDctXFx0XFx0XFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTUyLVxcdFxcdFxcdFxcdGdldF9tYXhfd3N1bSA9IGZhbHNlO1xcbm1tL2RhbW9uL2NvcmUuYzozOTUzOlxcdFxcdFxcdG1heF93c3VtID0gY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtMzk1NC1cXHRcXHRcXHRcXHRcXHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXFx1MDAyNlxcdTAwMjYgIWRvX3ByZXAsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTkyPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMDctXFxubW0vZGFtb24vcGFkZHIuYzoxMDg6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYzoxMDk6XFx0XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3BhZGRyLmMtMTEwLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTEyLVxcbm1tL2RhbW9uL3BhZGRyLmM6MTEzOlxcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTExNC1cXHRcXHRzd2l0Y2ggKHAtXFx1MDAzZWFjdGlvbikge1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMjQtXFxubW0vZGFtb24vcGFkZHIuYzoxMjU6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbm1tL2RhbW9uL3BhZGRyLmMtMTI2LXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTI4LVxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vcGFkZHIuYzoxMjk6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTMwLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMzUtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi9wYWRkci5jOjEzNjpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXFxubW0vZGFtb24vcGFkZHIuYzoxMzc6XFx0XFx0XFx0XFx0ZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHIsIHAsIGN0eCk7XFxubW0vZGFtb24vcGFkZHIuYy0xMzgtXFx0XFx0fVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xNjA9c3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX3Bhc3MocGh5c19hZGRyX3QgcGEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vZGFtb24vcGFkZHIuYzoxNjE6XFx0XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwKVxcbm1tL2RhbW9uL3BhZGRyLmMtMTYyLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTc1LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTc2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9wYWRkci5jLTE3Ny1cXHRcXHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTgwLVxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vcGFkZHIuYzoxODE6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTgyLVxcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE5NS1cXHRcXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihwYSkpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTk2OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMTk3LVxcdFxcdFxcdFxcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxcbm1tL2RhbW9uL3BhZGRyLmM6MTk4OlxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0rKztcXG5tbS9kYW1vbi9wYWRkci5jLTE5OS1cXHRcXHRcXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTIwMy1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA0OlxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG5tbS9kYW1vbi9wYWRkci5jLTIwNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NjMtXFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXFxubW0vZGFtb24vcGFkZHIuYzo0NjQ6XFx0XFx0LnByZXBfcHJvYmVzID0gZGFtb25fcGFfcHJlcF9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYzo0NjU6XFx0XFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyxcXG5tbS9kYW1vbi9wYWRkci5jLTQ2Ni1cXHRcXHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMS0vKlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjogKiBwcm9iZSBkaXJlY3RvcnlcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMtICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpkYW1vc19zeXNmc19wcm9iZV9hbGxvYyh1bnNpZ25lZCBjaGFyIGhpdHMpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjI6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpwcm9iZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0OlxcdHByb2JlID0ga3phbGxvY19vYmooKnByb2JlKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU6XFx0aWYgKCFwcm9iZSlcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYtXFx0XFx0cmV0dXJuIE5VTEw7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3OlxcdHByb2JlLVxcdTAwM2VoaXRzID0gaGl0cztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg6XFx0cmV0dXJuIHByb2JlO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzE9c3RhdGljIHNzaXplX3QgaGl0c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKnByb2JlID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlaGh1XFxcXG5cXFwiLCBwcm9iZS1cXHUwMDNlaGl0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQxLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDI6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDU6XFx0a2ZyZWUocHJvYmUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Ni19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3Byb2JlX2hpdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5LVxcdFxcdF9fQVRUUl9ST19NT0RFKGhpdHMsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTE6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOlxcdFxcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMtXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQtfTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTU6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19wcm9iZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19wcm9iZV9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTg6XFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19wcm9iZV9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01OS1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MDpcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19wcm9iZV9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYxLX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjMtLypcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjQ6ICogcHJvYmVzIGRpcmVjdG9yeVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NS0gKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY3OnN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2OTpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKipwcm9iZXNfYXJyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MC1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjczOnN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpkYW1vc19zeXNmc19wcm9iZXNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzQte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2Jlcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc2LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc4OnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3Byb2Jlc19ybV9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2JlcylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4MDpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKipwcm9iZXNfYXJyID0gcHJvYmVzLVxcdTAwM2Vwcm9iZXNfYXJyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04MS1cXHRpbnQgaTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjgzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9iZXMtXFx1MDAzZW5yOyBpKyspXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjg0OlxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZwcm9iZXNfYXJyW2ldLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6ODU6XFx0cHJvYmVzLVxcdTAwM2VuciA9IDA7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjg2OlxcdGtmcmVlKHByb2Jlc19hcnIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4NzpcXHRwcm9iZXMtXFx1MDAzZXByb2Jlc19hcnIgPSBOVUxMO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04OC19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTg5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5MDpzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkxLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05Mi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjkzOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk0OlxcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqKnByb2Jlc19hcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk1LVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk3OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk4LVxcdFxcdGkrKztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwMzpcXHRwcm9iZXNfYXJyID0ga21hbGxvY19vYmpzKCpwcm9iZXNfYXJyLCBpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA0OlxcdGlmICghcHJvYmVzX2FycilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA1LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDY6XFx0cHJvYmVzLVxcdTAwM2Vwcm9iZXNfYXJyID0gcHJvYmVzX2FycjtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDgtXFx0aSA9IDA7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwOTpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExMDpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKnN5c19wcm9iZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTExLVxcdFxcdGludCBlcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTEzOlxcdFxcdHN5c19wcm9iZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XFx0XFx0XFx0XFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTU6XFx0XFx0aWYgKCFzeXNfcHJvYmUpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE2OlxcdFxcdFxcdGRhbW9zX3N5c2ZzX3Byb2Jlc19ybV9kaXJzKHByb2Jlcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNy1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE4LVxcdFxcdH1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE5OlxcdFxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZzeXNfcHJvYmUtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMDpcXHRcXHRcXHRcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcHJvYmVfa3R5cGUsIFxcdTAwMjZwcm9iZXMtXFx1MDAzZWtvYmosIFxcXCIlZFxcXCIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMS1cXHRcXHRcXHRcXHRpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyLVxcdFxcdGlmIChlcnIpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzOlxcdFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZzeXNfcHJvYmUtXFx1MDAzZWtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjQ6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcHJvYmVzX3JtX2RpcnMocHJvYmVzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI1LVxcdFxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNi1cXHRcXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyNzpcXHRcXHRwcm9iZXNfYXJyW2krK10gPSBzeXNfcHJvYmU7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjM5LjczMzI4MzM4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDA1NDIwODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IERBTU9OIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGEgZGVjZW50LXNpemVkIHNldCBvZiBmdW5jdGlvbnMgYmVpbmcgdG91Y2hlZC4gU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nIGFyZSBlaXRoZXIgbmV3IG9yIGhhdmUgYmVlbiBjaGFuZ2VkOlxuXG4qICAgSW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIHdlIGhhdmUgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLlxuKiAgIEluIGBtbS9kYW1vbi9wYWRkci5jYCwgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgaXMgaW4gdGhlIG1peC5cbiogICBUaGUgYnVsayBvZiB0aGUgd29yayBzZWVtcyB0byBiZSBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHdpdGggYWRkaXRpb25zIGFuZCBtb2RpZmljYXRpb25zIHRvIGZ1bmN0aW9uczpcbiAgICAqICAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYFxuICAgICogICBgZGFtb25fdmFfcHJlcF9wcm9iZXNgXG4gICAgKiAgIGBkYW1vbl92YV95b3VuZ19hZGRyYFxuICAgICogICBgZGFtb25fdmFfZmlsdGVyX21hdGNoYFxuICAgICogICBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgXG4gICAgKiAgIGBkYW1vbl92YV9wcm9iZV9mb2xpb2BcbiAgICAqICAgYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWBcbiAgICAqICAgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgXG4gICAgKiAgIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2BcbiAgICAqICAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2BcblxuTmV4dCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhwb3N1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgaW50ZWdyYXRpb24gd2l0aCB0b29scyBvciBhbmFseXNlcy4gSSBzaG91bGQgcXVpY2tseSBzb3J0IHRoZSBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgc3ltYm9scy4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBzdGF0aWMgZnVuY3Rpb25zLCB3aGlsZSBub3QgZGlyZWN0bHkgdmlzaWJsZSwgY2FuIHN0aWxsIGltcGFjdCB0aGUgaW50ZXJmYWNlIGlmIHRoZWlyIGNhbGxlcnMgb3IgZW50cnkgcG9pbnRzIGFyZSBub24tc3RhdGljIG9yIGNhbiBiZSBpbmxpbmVkLiBLZXkgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbiBpbmNsdWRlOlxuXG4qICAgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIChhcHBlYXJzIHRvIGJlIG5vbi1zdGF0aWMgaW4gb3BzLWNvbW1vbi5jKS5cbiogICBgZGFtb25fdmFfcHJlcF9wcm9iZXNgXG4qICAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2BcbiogICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YFxuKiAgIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YFxuKiAgIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgXG4qICAgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYFxuKiAgIGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgXG5cbkZpbmFsbHksIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBxdWlja2x5IGRvIGEgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZpbGVzIG9yIHN5bWJvbHMgdGhhdCBoYXZlIGJlZW4gYWZmZWN0ZWQuIFRoZW4sIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGdpdCBsb2cgYW5kIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZXNlIGNoYW5nZXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgJ3doeScgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGJhc2lzIGZvciBhIGRldGFpbGVkIGNvZGUgaW5zcGVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6NDQuNzM4NzA2ODAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ1NDEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vdmFkZHIuYz02Njk9c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTY5Ni1cXG5tbS9kYW1vbi92YWRkci5jOjY5NzpzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vdmFkZHIuYy02OTgtXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MTYtXFxubW0vZGFtb24vdmFkZHIuYzo3MTc6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzAtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi92YWRkci5jOjczMTpcXHRcXHRcXHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcXG5tbS9kYW1vbi92YWRkci5jLTczMi1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTExNzEtXFx0XFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXFxubW0vZGFtb24vdmFkZHIuYzoxMTcyOlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vdmFkZHIuYy0xMTczLVxcdFxcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjQ0Ljc4NDE2NjkzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDA3MzA5MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEltcGxlbWVudGF0aW9uIGFuZCBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgREFNT04gY29yZSBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgcmV2aWV3IGhvdyBEQU1PTiBydW5zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGtkYW1vbmRfZm5gIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2hlbiBEQU1PTiBpcyBlbmFibGVkLCBsaWtlbHkgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlIGF0IGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8uLi5gLCB0aGlzIGBrZGFtb25kX2ZuYCBmdW5jdGlvbiBnZXRzIGluaXRpYXRlZC4gRnJvbSB0aGVyZSwgaXQgbWFrZXMgY2FsbHMgdG8gYGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXNgIGFuZCBgY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXNgLiBHaXZlbiB0aGUgYERBTU9OX1ZBRERSYCByZWdpc3RyYXRpb24sIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXNgIGlzLCBhcyBleHBlY3RlZCwgcG9pbnRpbmcgdG8gYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYW5kIGBjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2Jlc2AgaXMgc2V0IHRvIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBJdCdzIGFsc28gd29ydGggY29uZmlybWluZyB0aGF0IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBpcyBjb3JyZWN0bHkgaW52b2tlZCBmcm9tIGJvdGggYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGAgYW5kIGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBsaXN0IHRoZW0gb3V0IHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCB0aGVyZTpcblxuKiAgIGBEQU1PTmA6IFRoZSBEQU1PTiBmcmFtZXdvcmsgaXRzZWxmLlxuKiAgIGBEQU1PTl9WQUREUmA6IFRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyDigJMgdGhpcyBkZXBlbmRzIG9uIERBTU9OIGFuZCwgbmF0dXJhbGx5LCB0aGUgTU1VLlxuKiAgIGBEQU1PTl9QQUREUmA6IFRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFsc28gZGVwZW5kZW50IG9uIERBTU9OIGFuZCB0aGUgTU1VLlxuKiAgIGBEQU1PTl9TWVNGU2A6IFRoZSBzeXNmcyBpbnRlcmZhY2UsIGVzc2VudGlhbCBmb3IgY29uZmlndXJpbmcgcHJvYmVzIGFuZCB0YXJnZXRzIGZyb20gdXNlcnNwYWNlLlxuKiAgIGBNRU1DR2A6IFRoaXMgb25lIGlzIHVzZWQgaW4gYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIHdoZW4gYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYCBpcyBhY3RpdmUsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYXZhaWxhYmxlLlxuKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWA6IFRoaXMgaXMgaW1wb3J0YW50IGZvciBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YC5cbiogICBgSFVHRVRMQl9QQUdFYDogQW5kIHRoaXMgaXMgdXNlZCBpbiBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGltcG9ydGFudCBmb3IgbGFyZ2UgcGFnZXMuXG5cbkp1c3QgdG8gY29uZmlybSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIGFuZCB0aGVuIEknbGwgZ3JlcCB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY29uZmlnIG9wdGlvbnMgYXJlIGluZGVlZCBkZWZpbmVkIGFuZCBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbC4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX01FTUNHYCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIEFmdGVyIHRoaXMsIGl0J3MganVzdCBhIG1hdHRlciBvZiBjb25maXJtaW5nIHRoYXQgdGhlc2UgYWxsIGV4aXN0IGFuZCB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzODIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6NDkuNzkxNDc4ODg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ5ODU5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKE1FTUNHfFRSQU5TUEFSRU5UX0hVR0VQQUdFfEhVR0VUTEJfUEFHRSlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xcbi0tXFxubW0vS2NvbmZpZy02OTEtXFxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTMtXFx0ZGVmX2Jvb2wgblxcbi0tXFxubW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgyOS1cXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzEtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODQ4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTMtXFxubW0vS2NvbmZpZzo4NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU1LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYwLVxcbm1tL0tjb25maWc6ODYxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjItXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4Ni1cXG5tbS9LY29uZmlnOjg4NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODg4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTYtXFxubW0vS2NvbmZpZzo4OTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04OTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDQtXFxubW0vS2NvbmZpZzo5MDU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwNi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTIyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzEtXFxubW0vS2NvbmZpZzo5MzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzMy1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQwLVxcbm1tL0tjb25maWc6OTQxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQyLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ4LVxcbm1tL0tjb25maWc6OTQ5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTAtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjQ5Ljg0NDk4NTE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDMwNTY3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBLZXkgS2VybmVsIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHNvbWV0aGluZyB0aGF0IGxpa2VseSBpbnZvbHZlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgY29uc3RyYWludHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBjcml0aWNhbCBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhbmQgYENPTkZJR19NRU1DR2AuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gaXMgb2Z0ZW4gYXQgdGhlIGhlYXJ0IG9mIHBlcmZvcm1hbmNlIHR1bmluZyBhbmQgcmVzb3VyY2UgaXNvbGF0aW9uIGluIGNvbnRhaW5lcml6ZWQgb3IgaGlnaC1wZXJmb3JtYW5jZSBlbnZpcm9ubWVudHMuIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBjcnVjaWFsIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBiZW5lZml0IGZyb20gbGFyZ2UgcGFnZSBzaXplcywgcmVkdWNpbmcgVExCIG1pc3NlcyBhbmQgaW1wcm92aW5nIG1lbW9yeSBhY2Nlc3Mgc3BlZWRzLiBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgYXNjZXJ0YWluIGlmIGl0IGlzIGVuYWJsZWQuIEF0IHRoZSBzYW1lIHRpbWUsIGBDT05GSUdfTUVNQ0dgIGlzIGVxdWFsbHkgaW1wb3J0YW50LCBpdCBlbmFibGVzIGNvbnRyb2wgZ3JvdXBzIGZvciBtZW1vcnksIGFsbG93aW5nIGdyYW51bGFyIGFsbG9jYXRpb24gYW5kIGlzb2xhdGlvbiBvZiBtZW1vcnkgcmVzb3VyY2VzIGJldHdlZW4gcHJvY2Vzc2VzLiBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjdXJyZW50bHkgY29uZmlndXJlZCwgYW5kIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbnRlcnBsYXksIHRvIHByb3Blcmx5IGFzc2VzcyB0aGUgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI3MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjUyLjg4ODA0NDkyNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzI5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChIVUdFVExCX1BBR0V8TUVNQ0cpJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6NTIuOTMyODg3MTYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjcwMjE0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHNvbWV0aGluZywgYW5kIHRoZSBodWdldGxiIHN1YnN5c3RlbSBpcyBpbW1lZGlhdGVseSBwb3BwaW5nIGludG8gbXkgaGVhZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGFjdHVhbGx5IGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uIE5vIHBvaW50IGluIGNoYXNpbmcgZ2hvc3RzIGlmIEh1Z2VUTEIgc3VwcG9ydCBpc24ndCBldmVuIGNvbXBpbGVkIGluLiBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIGNoZWNrIGFyZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZyBmaWxlcyDigJMgbGlrZWx5IGBtbS9LY29uZmlnYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG1pZ2h0IG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIGlmIGl0J3MgYmVlbiBtb3ZlZCBvciBpZiBpdOKAmXMgYSBkZXBlbmRlbmN5IG9mIHNvbWV0aGluZyBlbHNlLiBUaGlzIGNoZWNrIHdpbGwgc2F2ZSBtZSBhIHRvbiBvZiBkZWJ1Z2dpbmcgdGltZSBsYXRlciBvbi4gR290dGEgbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uIGlzIHRoZXJlIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgZm9yIGFyY2hpdGVjdHVyYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjU2LjQ1OTkxMDc1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MTUwNjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCX1BBR0UkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjU2LjUwNDMzNjM4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTg5ODg4MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBIVUdFVExCX1BBR0UqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgY29uZmlnIEhVR0VUTEJfUEFHRWAgc3ltYm9sIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzcGFjZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSdtIHRyb3VibGVzaG9vdGluZywgYXVkaXRpbmcsIG9yIHBlcmhhcHMgZXZlbiBpbXBsZW1lbnRpbmcgYSBjaGFuZ2UgcmVsYXRlZCB0byBodWdlIHBhZ2UgbWFuYWdlbWVudC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHByb2JhYmx5IGFscmVhZHkgaGF2ZSBhIGRlY2VudCBpZGVhIG9mIHdoZXJlIHRvICpzdGFydCogbG9va2luZywgYnV0IGEgc3lzdGVtYXRpYyBzZWFyY2ggaXMgdGhlIGJlc3QgYXBwcm9hY2guIE15IG1lbnRhbCBtb2RlbCBpcyBwcm9iYWJseSBmb3JtaW5nIGEgcXVlcnkgdGhhdCBJJ2xsIHJ1biB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gYnVpbGQgc3lzdGVtIChsaWtlbHkgYGtjb25maWdgKS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhpcyBpcyB3aGVyZSBJIHdvdWxkIHN0YXJ0LlxuXG5Fc3NlbnRpYWxseSwgSSdtIGZvcm1pbmcgYSBwbGFuIHRvIHJhcGlkbHkgbG9jYXRlIHRoZSByZWxldmFudCBkZWZpbml0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBjb250ZXh0LiBUaGUgZ29hbCBpcyBlZmZpY2llbmN5LiBMZXQncyBkbyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjU4LjY5NDIyODA5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MzU5NDM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MDAuOTc3ODI3NzA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMzQ3Njk5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3OiBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgUHJvYmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBmb3VuZGF0aW9uOiBgSFVHRVRMQkZTYCBlbmFibGVzIGBIVUdFVExCX1BBR0VgLiBHb3QgaXQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIHNlZSBhIGxpc3Qgb2YgcmVsZXZhbnQgRm9jdXNTeW1ib2xzOiBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAsIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AsIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgYW5kIGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgLiBSaWdodCwgdGhlc2UgYXJlIGFsbCBzcGVjaWZpYyB0byB0aGUgY2hhbmdlcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBhbmQgYG1tL2RhbW9uL3BhZGRyLmNgIOKAkyBub3QgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgYnV0IGRpcmVjdGx5IHBhcnQgb2YgdGhpcyBEQU1PTiBwYXRjaC5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIERBTU9OIHByb2JlIHByZXAgYW5kIGFwcGxpY2F0aW9uIHNwZWNpZmljYWxseSBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy4gV2UncmUgbG9va2luZyBhdCBmdW5jdGlvbnMgZm9yIHNldHRpbmcgdXAgcHJvYmVzIChgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCksIHRoZW4gd2Fsa2luZyBwYWdlIHRhYmxlcywgYW5kIGhhbmRsaW5nIGJvdGggcmVndWxhciBhbmQgaHVnZSBwYWdlIGVudHJpZXMgKGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV95b3VuZ19hZGRyYCkuIFRoZXJlJ3MgZmlsdGVyIGxvZ2ljIGluY2x1ZGVkIGFzIHdlbGwgKGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgKSwgYW5kIHdlJ3JlIHNlZWluZyBzb21lIGNvbW1vbiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgcmVmYWN0b3JlZCBpbnRvIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKClgLiBJdCdzIGNsZWFybHkgbW9kaWZ5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3JpbmcgdmlhIERBTU9OLCBhbmQgaXQncyByZWxldmFudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgd2VsbC1kZWZpbmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXIuIEkndmUgdmVyaWZpZWQgZXZlcnl0aGluZyBJIG5lZWQgdG8sIHNvIEknbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNDIsIk91dHB1dFRva2VucyI6MjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjA1LjIxMjYwMDEzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTA1MDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fb3BzX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb25fdmFfcHJlcF9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5XCIsXG4gICAgXCJkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5XCIsXG4gICAgXCJkYW1vbl92YV9maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3BhX2ZpbHRlcl9tYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcHJvYmUgcHJlcGFyYXRpb24gYW5kIHByb2JlIGFwcGxpY2F0aW9uIG9wZXJhdGlvbnMgZm9yIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nLCBpbmNsdWRpbmcgcGFnZSB0YWJsZSB3YWxraW5nIChmb3IgUE1ELCBodWdlIFBNRCwgYW5kIGh1Z2V0bGIgZW50cmllcykgYW5kIGFjY2Vzcy9hZ2UgZmlsdGVyaW5nLiBJdCBhbHNvIGNvbnNvbGlkYXRlcyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgaW50byBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKCkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX29wc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3ZhX3ByZXBfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl9wYV9maWx0ZXJfbWF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MDUuMzM3NjYxMDIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDkyOTczNTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjA1LjMzODU4ODgzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0OTI4ODAzMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGFjcm9zcyBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIHNwYWNlcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKCkgYW5kIGltcGxlbWVudHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JlIGhhbmRsaW5nIChkYW1vbl92YV9wcmVwX3Byb2JlcywgZGFtb25fdmFfYXBwbHlfcHJvYmVzLCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksIGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkpLlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHkgYW5kIHNhbml0aXplciBhcHBsaWNhYmlsaXR5OlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgc3RhY2stYWxsb2NhdGVkIHN0cnVjdHMgKHN1Y2ggYXMgc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSBhbmQgc3RydWN0IG1tX3dhbGtfb3BzKSBhbmQgc2NhbGFyIHZhcmlhYmxlcyAoZS5nLiBib29sZWFucywgbG9vcCBjb3VudGVycywgYWNjdW11bGF0b3Igc3VtcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBvciB6ZXJvLWluaXRpYWxpemF0aW9uIGJlZm9yZSB1c2UuXFxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBtZXNzYWdlcywgb3IgaW9jdGwgb3V0cHV0cyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LlxcbjMuIE1lbW9yeSBzYWZldHkgY29uc2lkZXJhdGlvbnM6IEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHBhZ2UtdGFibGUgd2Fsa2luZywgZm9saW8gbG9ja2luZy9yZWZlcmVuY2UgY291bnRpbmcsIGNvbmN1cnJlbmN5LCBvciBhcnJheSBpbmRleGluZyAoZS5nLiwgcHJvYmVfaGl0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRzKS5cXG5cXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDUxY2NkZGFlYTUxODY3NTU3MGQyOTRhMjVjNjgxY2ZmZWU1MTY4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzg6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTQ0NCwzICs0NDQsMzUgQEAgYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbitcbitib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1xuK1x0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxuK1x0XHRpZiAoIWZvbGlvKSB7XG4rXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdG1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG4rXHRcdGlmICghZm9saW8pIHtcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcbitcdFx0aWYgKCFtZW1jZylcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdGVsc2VcbitcdFx0XHRtYXRjaGVkID0gZmlsdGVyLVx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbit9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5pbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbkBAIC0yMSwzICsyMSw1IEBAIGJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTtcbiBcbiBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcyk7XG4rXG4rYm9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTQzLDI5ICsxNDMsOCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuIFx0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuLVx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxuLVx0XHRpZiAoIWZvbGlvKSB7XG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG4tXHRcdGlmICghZm9saW8pIHtcbi1cdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcbi1cdFx0aWYgKCFtZW1jZylcbi1cdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4tXHRcdGVsc2Vcbi1cdFx0XHRtYXRjaGVkID0gZmlsdGVyLVx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbiBcdFx0aWYgKCFmb2xpbylcbiBcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG5AQCAtMTczLDcgKzE1Miw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdFx0bWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRicmVhaztcbitcdFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XG4gXHR9XG4gXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTUxMCw2ICs1MTAsMjM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIG1heF9ucl9hY2Nlc3NlcztcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuK1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbitcdFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcbitcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuK1x0XHRjYXNlIERBTU9OX1BSRVBfU0VUX1BHSURMRTpcbitcdFx0XHRkYW1vbl92YV9ta29sZChtbSwgci1cdTAwM2VzYW1wbGluZ19hZGRyKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbitcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4rXHRcdGlmICghbW0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4rXHRcdFx0aWYgKHNldF9zYW1wbGVzKVxuK1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4rXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuK1x0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eClcbitcdFx0XHRcdGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKGN0eCwgbW0sIHIsIHApO1xuK1x0XHR9XG4rXHRcdG1tcHV0KG1tKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmdfYWRkcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLFxuK1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdGJvb2wgeW91bmcgPSBmYWxzZTtcbitcbitcdGlmIChwdGUpXG4rXHRcdHlvdW5nID0gcHRlX3lvdW5nKCpwdGUpO1xuK1x0ZWxzZSBpZiAocG1kKVxuK1x0XHR5b3VuZyA9IHBtZF95b3VuZygqcG1kKTtcbitcdHlvdW5nID0geW91bmcgfHwgIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcbitcdFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpO1xuK1x0cmV0dXJuIHlvdW5nO1xuK31cbitcbitzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLFxuK1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuK1xuK1x0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XG4rXHRcdGlmICghZm9saW8pXG4rXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuK1x0XHRlbHNlXG4rXHRcdFx0bWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSxcbitcdFx0XHRcdFx0YWRkcik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XG4rXHR9XG4rXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4rfVxuK1xuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCxcbitcdFx0cHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmO1xuK1x0Ym9vbCBwYXNzID0gdHJ1ZTtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7XG4rXHRcdGlmIChkYW1vbl92YV9maWx0ZXJfbWF0Y2goZiwgZm9saW8sIHB0ZSwgcG1kLCBtbSwgYWRkcikpIHtcbitcdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRwYXNzID0gIWYtXHUwMDNlYWxsb3c7XG4rXHR9XG4rXHRyZXR1cm4gcGFzcztcbit9XG4rXG4rc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSB7XG4rXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuK307XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJvYmVfZm9saW8oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuK1x0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuK1x0aW50IGkgPSAwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuK1x0XHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXG4rXHRcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkcikpXG4rXHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldKys7XG4rXHRcdGkrKztcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuK3tcbitcdHB0ZV90ICpwdGU7XG4rXHRwdGVfdCBwdGVudDtcbitcdHNwaW5sb2NrX3QgKnB0bDtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuK1xuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4rXHRpZiAocHRsKSB7XG4rXHRcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xuK1xuK1x0XHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxuK1x0XHRcdGdvdG8gaHVnZV9vdXQ7XG4rXHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4rXHRcdGlmICghZm9saW8pXG4rXHRcdFx0Z290byBodWdlX291dDtcbitcdFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIE5VTEwsIFx1MDAyNnBtZGUsXG4rXHRcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4rXG4raHVnZV9vdXQ6XG4rXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuKyNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4rXG4rXHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbitcdGlmICghcHRlKVxuK1x0XHRyZXR1cm4gMDtcbitcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbitcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKVxuK1x0XHRnb3RvIG91dDtcbitcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4rXHRpZiAoIWZvbGlvKVxuK1x0XHRnb3RvIG91dDtcbitcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZwdGVudCwgTlVMTCxcbitcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4rXG4rb3V0OlxuK1x0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4re1xuK1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzcGlubG9ja190ICpwdGw7XG4rXHRwdGVfdCBlbnRyeTtcbitcbitcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbitcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuK1x0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Zm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuK1x0Zm9saW9fZ2V0KGZvbGlvKTtcbitcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZlbnRyeSwgTlVMTCxcbitcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuK1xuK291dDpcbitcdHNwaW5fdW5sb2NrKHB0bCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2Vsc2VcbisjZGVmaW5lIGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkgTlVMTFxuKyNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4rc3RhdGljIHZvaWQgX19kYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuK1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4re1xuK1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSBhcmcgPSB7XG4rXHRcdC5jdHggPSBjdHgsXG4rXHRcdC5yID0gcixcbitcdH07XG4rXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fcHJvYmVfd2Fsa19vcHMgPSB7XG4rXHRcdC5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksXG4rXHRcdC5odWdldGxiX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSxcbitcdH07XG4rXHR1bnNpZ25lZCBsb25nIGFkZHIgPSByLVx1MDAzZXNhbXBsaW5nX2FkZHI7XG4rXG4rXHRpZiAoIW1tKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgKyAxLCBcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcbitcdFx0XHRcdTAwMjZhcmcpO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxuK3tcbitcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X3dzdW0gPSAwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuK1x0XHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcbitcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbitcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4rXHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbitcdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG4rXHRcdFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XG4rXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbitcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbitcdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbitcdFx0fVxuK1x0XHRpZiAobW0pXG4rXHRcdFx0bW1wdXQobW0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG1heF93c3VtO1xuK31cbitcbiBzdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcG1kX3QgKnBtZHApXG5AQCAtOTM4LDYgKzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuIFx0XHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxuIFx0XHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxuIFx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyxcbitcdFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXG4rXHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXG4gXHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG4gXHRcdC5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LFxuIFx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MDUuMzM4NTkwNzkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2MjcyODcwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIERBTU9OIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3Mgd2hldGhlciBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiB3aWxsIHN1ZmZpY2Ugb3IgaWYgdGhpcyB3YXJyYW50cyBhIG1vcmUgaW4tZGVwdGggaW52ZXN0aWdhdGlvbi5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlOlxuXG4xLiAgV2UgaGF2ZSBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCB3aGljaCBkZWZpbmVzIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCB0aGF0IGNoZWNrcyB0aGUgZmlsdGVyIHR5cGUg4oCTIGBEQU1PTl9GSUxURVJfVFlQRV9BTk9OYCBhbmQgYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYCDigJMgYW5kIGNvbnNvbGlkYXRlcyBzb21lIGV4aXN0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYy5cbjIuICBUaGUgaGVhZGVyIGZpbGUgYG1tL2RhbW9uL29wcy1jb21tb24uaGAgZGVjbGFyZXMgdGhlIG5ld2x5IGFkZGVkIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBmdW5jdGlvbi5cbjMuICBgbW0vZGFtb24vcGFkZHIuY2AgaXMganVzdCBhIHNpbXBsZSByZWZhY3RvciwgcmVwbGFjaW5nIHRoZSBkdXBsaWNhdGUgY29kZSB3aXRoIGEgY2FsbCB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuNC4gIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHdoaWNoIGltcGxlbWVudHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JpbmcgZm9yIERBTU9OLiBJdCBpbnRyb2R1Y2VzIGEgc2xldyBvZiBuZXcgZnVuY3Rpb25zOiBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gLCBgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBgZGFtb25fdmFfeW91bmdfYWRkcmAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgLCBgZGFtb25fdmFfcHJvYmVfZm9saW9gLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBgX19kYW1vbl92YV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIFRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQgaW4gYGRhbW9uX3ZhX2luaXRjYWxsYCB2aWEgdGhlIG9wcyB0YWJsZS5cblxuTm93LCBteSBrZXkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIHRoZSBuZXcgc3RydWN0cy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgcHJvYmFibHkgZ3JlcCB0aGUga2VybmVsIHRyZWUgb3IgcmVhZCB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcyB0byB1bmRlcnN0YW5kIGhvdyBgci1cdTAwM2Vwcm9iZV9oaXRzYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBob3cgdGhlc2UgZmlsdGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIGFuZCBnZW5lcmFsbHkgaG93IHRoZSBuZXcgZnVuY3Rpb25zIGFyZSB3b3JraW5nIHVuZGVyIHRoZSBob29kLiBJIGhhdmUgdG8gbG9vayBmb3IgZGF0YSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb250cm9sIGZsb3cgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC4gSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaWYgdGhlIG5ldyBmdW5jdGlvbnMgYXJlIGFjY2Vzc2luZyBhbnkgbWVtb3J5IG5vdCBwcm9wZXJseSBwcm90ZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozOToxMS45NjU4ODEyMDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDg2NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2JlX2hpdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyNT11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDgtXFxubW0vZGFtb24vY29yZS5jOjM0OTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzUwLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYtXFx0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxcbm1tL2RhbW9uL2NvcmUuYzozNjc6XFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdO1xcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXFxubW0vZGFtb24vY29yZS5jOjM2OTpcXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxcbm1tL2RhbW9uL2NvcmUuYzozNzA6XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF0sIGxlZnRfd2luZG93X2JwKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODk9c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzo0MDM6XFx0XFx0cmVnaW9uLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NDA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtNDA1LVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00NjI9c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXFxubW0vZGFtb24vY29yZS5jOjQ2OTogKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXFxubW0vZGFtb24vY29yZS5jLTQ3MC0gKiBAcjpcXHRcXHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDc1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0NzY6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jLTQ3Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDg0LVxcdFxcdGlmIChsYXN0KVxcbm1tL2RhbW9uL2NvcmUuYzo0ODU6XFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmMtNDg2LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9jb3JlLmM6NDg3OlxcdFxcdFxcdHN1bSArPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbm1tL2RhbW9uL2NvcmUuYy00ODgtXFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMDM9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMDktXFxubW0vZGFtb24vY29yZS5jOjEwMTA6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMTAxMS1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAxNy1cXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTAxODpcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxubW0vZGFtb24vY29yZS5jOjEwMTk6XFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTEwMjAtXFx0XFx0aWYgKCFhZ2dyZWdhdGluZylcXG5tbS9kYW1vbi9jb3JlLmM6MTAyMTpcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxcbm1tL2RhbW9uL2NvcmUuYzoxMDIyOlxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0sIG9sZF9hdHRycyxcXG5tbS9kYW1vbi9jb3JlLmMtMTAyMy1cXHRcXHRcXHRcXHRcXHRuZXdfYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDI0LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9jb3JlLmM6MTAyNTpcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTAyNi1cXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAzMD1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDMzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTAzNDpcXHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTEwMzUtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTQyNz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MjktXFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XFxubW0vZGFtb24vY29yZS5jOjE0MzA6XFx0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcXG5tbS9kYW1vbi9jb3JlLmMtMTQzMS1cXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0NDgtXFx0LyogaW52YWxpZCBpZiBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYW4gb3ZlcmZsb3cgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OTpcXHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmN0eC1cXHUwMDNlYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDUwLVxcdHdzdW0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDUxLVxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ1MjpcXHRcXHRpZiAocHJvYmUtXFx1MDAzZXdlaWdodCBcXHUwMDNlIFVJTlRfTUFYIC8gbWF4X3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jLTE0NTMtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDU0OlxcdFxcdHdzdW1fdG9fYWRkID0gcHJvYmUtXFx1MDAzZXdlaWdodCAqIG1heF9wcm9iZV9oaXRzO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDU1LVxcdFxcdGlmIChVSU5UX01BWCAtIHdzdW0gXFx1MDAzYyB3c3VtX3RvX2FkZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMjkzPXN0YXRpYyB2b2lkIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzMTYtXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzoyMzE3OlxcdFxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IHItXFx1MDAzZXByb2JlX2hpdHNbaV07XFxubW0vZGFtb24vY29yZS5jOjIzMTg6XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTIzMTktXFx0XFx0XFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0MjY9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDM3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspXFxubW0vZGFtb24vY29yZS5jOjM0Mzg6XFx0XFx0bC1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IChsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldICogc3pfbCArIHItXFx1MDAzZXByb2JlX2hpdHNbaV1cXG5tbS9kYW1vbi9jb3JlLmMtMzQzOS1cXHRcXHRcXHRcXHQqIHN6X3IpIC8gKHN6X2wgKyBzel9yKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbm1tL2RhbW9uL2NvcmUuYzozNDQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcXG5tbS9kYW1vbi9jb3JlLmMtMzQ0Ni17XFxubW0vZGFtb24vY29yZS5jOjM0NDc6XFx0aWYgKHVzZV9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYzozNDQ4OlxcdFxcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ0OS1cXHRpZiAobGFzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDYxPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NjQtXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ2NTpcXHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ2Ni1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDY5LVxcbm1tL2RhbW9uL2NvcmUuYzozNDcwOlxcdFxcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xcbm1tL2RhbW9uL2NvcmUuYzozNDcxOlxcdFxcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ3Mi1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDg2LVxcdFxcdGRpZmYgPSBhYnNfZGlmZihzY29yZSwgZGFtb25fbWVyZ2Vfc2NvcmUocHJldiwgZmFsc2UsIGN0eCxcXG5tbS9kYW1vbi9jb3JlLmM6MzQ4NzpcXHRcXHRcXHRcXHRcXHR1c2VfcHJvYmVfaGl0cykpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDg4LVxcdFxcdGlmIChkaWZmIFxcdTAwM2UgdGhyZXMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzU2Nj1zdGF0aWMgaW50IGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1ODEtXFx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXFxubW0vZGFtb24vY29yZS5jOjM1ODI6XFx0bWVtY3B5KG5ldy1cXHUwMDNlcHJvYmVfaGl0cywgci1cXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXFx1MDAzZXByb2JlX2hpdHMpKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzU4MzpcXHRtZW1jcHkobmV3LVxcdTAwM2VsYXN0X3Byb2JlX2hpdHMsIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0cyxcXG5tbS9kYW1vbi9jb3JlLmM6MzU4NDpcXHRcXHRcXHRzaXplb2Yoci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM1ODUtXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE3Nj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE5Ny1cXHRcXHRcXHRcXHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcXG5tbS9kYW1vbi9wYWRkci5jOjE5ODpcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldKys7XFxubW0vZGFtb24vcGFkZHIuYy0xOTktXFx0XFx0XFx0XFx0aSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yMDMtXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG5tbS9kYW1vbi9wYWRkci5jOjIwNDpcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxubW0vZGFtb24vcGFkZHIuYy0yMDUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQwPXN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDktXFx0XFx0X19BVFRSX1JPX01PREUoaGl0cywgMDQwMCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOlxcdFxcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMtXFx0TlVMTCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVxcdFxcdHN5c19wcm9iZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XFx0XFx0XFx0XFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTUtXFx0XFx0aWYgKCFzeXNfcHJvYmUpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU0LVxcdHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSAxNTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU1OlxcdHItXFx1MDAzZXByb2JlX2hpdHNbMF0gPSA3O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTY6XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdID0gMztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3LVxcdHItXFx1MDAzZWFnZSA9IDEwO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3Mi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgcl9uZXctXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzM6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZXByb2JlX2hpdHNbMF0sIHJfbmV3LVxcdTAwM2Vwcm9iZV9oaXRzWzBdKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTc0OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0sIHJfbmV3LVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzUtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFnZSwgcl9uZXctXFx1MDAzZWFnZSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTgxPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTUtXFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSAxMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTk2OlxcdHItXFx1MDAzZXByb2JlX2hpdHNbMF0gPSA2O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTctXFx0ci1cXHUwMDNlYWdlID0gOTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMDQtXFx0cjItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMjA7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjIwNTpcXHRyMi1cXHUwMDNlcHJvYmVfaGl0c1swXSA9IDE0O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMDYtXFx0cjItXFx1MDAzZWFnZSA9IDIxO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIxMi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIDE2dSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjIxMzpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlcHJvYmVfaGl0c1swXSwgMTEpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMTQtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFnZSwgMTd1KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTE0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTM4LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTM5OlxcdC8qIE1vcmUgc2FtcGxlcyBjb3VsZCBvdmVyZmxvdyB0aGUgcHJvYmVfaGl0cyBjb3VudGVycy4gKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU0MC1cXHRjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTY7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTYwOD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTYxNy1cXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyKSlcXG5tbS9kYW1vbi92YWRkci5jOjYxODpcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldKys7XFxubW0vZGFtb24vdmFkZHIuYy02MTktXFx0XFx0aSsrO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03MTc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzItXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG5tbS9kYW1vbi92YWRkci5jOjczMzpcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxubW0vZGFtb24vdmFkZHIuYy03MzQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozOToxMi4wNTczNzIxNDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4NjcxMDMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRob3NlIGNvZGUgc2VjdGlvbnM6XG5cbioqRGl2aW5nIERlZXAgaW50byBEQU1PTidzIFZpcnR1YWwgQWRkcmVzcyBTcGFjZSBQcm9iZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGhhbmRsZSBvbiBob3cgREFNT04gaXMgaGFuZGxpbmcgdmlydHVhbCBhZGRyZXNzIHByb2JpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgIGZ1bmN0aW9uIGFuZCBhbnkgY29ubmVjdGVkIG1vZGlmaWNhdGlvbnMuIEknbSB3b3JyaWVkIGFib3V0IHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiBpc3N1ZXMgaGVyZSwgc28gdGhhdCdzIHRoZSBwcmltYXJ5IGZvY3VzLiBJIGtub3cgdGhpcyBjb2RlIHByZXR0eSB3ZWxsLCBidXQgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgYnVncyBsdXJraW5nIGluIHRoZSBzaGFkb3dzLlxuXG5UaGVyZWZvcmUsIEknbSB6ZXJvaW5nIGluIG9uIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGFuZCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBob3cgdGhleSdyZSBoYW5kbGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBpZiBhbnkgb2YgdGhlIG5ldyBjaGFuZ2VzIGhhdmUgaW50cm9kdWNlZCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgbWFrZSBzdXJlIHRoaXMgd2hvbGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JpbmcgbWVjaGFuaXNtIGlzIHJvYnVzdCBhbmQgc2FmZS4gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBsb2dpYyBmbG93IGFuZCBkYXRhIGRlcGVuZGVuY2llcywgYW5kIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozOToxNC4zNDQwODYwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NDMxOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTIxNz1zdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yMjgtXFxubW0vZGFtb24vdmFkZHIuYzoyMjk6c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL2RhbW9uL3ZhZGRyLmMtMjMwLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSlcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MzM2PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTM0Mi1cXG5tbS9kYW1vbi92YWRkci5jOjM0MzpcXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgKyAxLCBcXHUwMDI2ZGFtb25fbWtvbGRfb3BzLCBOVUxMKTtcXG5tbS9kYW1vbi92YWRkci5jLTM0NC19XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTQ1OD1zdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy00NjgtXFxubW0vZGFtb24vdmFkZHIuYzo0Njk6XFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICsgMSwgXFx1MDAyNmRhbW9uX3lvdW5nX29wcywgXFx1MDAyNmFyZyk7XFxubW0vZGFtb24vdmFkZHIuYy00NzAtXFx0cmV0dXJuIGFyZy55b3VuZztcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Njk3PXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzEyLVxcbm1tL2RhbW9uL3ZhZGRyLmM6NzEzOlxcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFxcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcXG5tbS9kYW1vbi92YWRkci5jLTcxNC1cXHRcXHRcXHRcXHUwMDI2YXJnKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9OTYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy05OTItXFxubW0vZGFtb24vdmFkZHIuYzo5OTM6XFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCByLVxcdTAwM2Vhci5zdGFydCwgci1cXHUwMDNlYXIuZW5kLCBcXHUwMDI2d2Fsa19vcHMsIFxcdTAwMjZwcml2KTtcXG5tbS9kYW1vbi92YWRkci5jLTk5NC1cXHRtbXB1dChtbSk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTEwODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfdmFfc3RhdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTEwOTktXFxubW0vZGFtb24vdmFkZHIuYzoxMTAwOlxcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgci1cXHUwMDNlYXIuc3RhcnQsIHItXFx1MDAzZWFyLmVuZCwgXFx1MDAyNndhbGtfb3BzLCBcXHUwMDI2cHJpdik7XFxubW0vZGFtb24vdmFkZHIuYy0xMTAxLVxcdG1tcHV0KG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MTQuNDU5NTIzNTYyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTgxMzU2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2VgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCdzIGltcGxlbWVudGVkIHdpdGhpbiBgdmFkZHIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB3YWxraW5nIGxvZ2ljIHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbiB0aGUgY29udGV4dCBvZiBEQU1PTidzIG9wZXJhdGlvbi4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHRhYmxlIGxldmVscywgaG93IGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIHJlbGV2YW50IHZpcnR1YWwgYWRkcmVzcyByYW5nZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgbGlrZSByYWNlIGNvbmRpdGlvbnMsIGhvdyBpdCBoYW5kbGVzIFRMQiBpbnZhbGlkYXRpb25zIGlmIG5lZWRlZCwgYW5kIGFsc28gYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgbWlnaHQgY29tZSB1cCwgc3BlY2lmaWNhbGx5IHdpdGggZGlmZmVyZW50IHBhZ2Ugc2l6ZXMgYW5kIE5VTUEgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIGNvcnJlY3RseSBoYW5kbGluZyB1bm1hcHBlZCByZWdpb25zIGFuZCwgb2YgY291cnNlLCB0aGF0IGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSdzIHBhZ2UgdGFibGUgZm9ybWF0LiBMZXQncyBzZWUgaG93IGl0J3MgYWN0dWFsbHkgZG9uZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSBmb3IgdGhlIGtleSBhbGdvcml0aG1zIGFuZCBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGhhcHBlbnMgZHVyaW5nIGVhY2ggc3RlcCBvZiB0aGUgcGFnZSB3YWxrLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSByYW5nZSBpcyBicm9rZW4gZG93biwgYW5kIGhvdyBpbmRpdmlkdWFsIHBhZ2VzIGFyZSBpZGVudGlmaWVkIGFuZCBwcm9jZXNzZWQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgREFNT04gaW5mcmFzdHJ1Y3R1cmUgZm9yIG1vbml0b3JpbmcgYW5kIHByb2ZpbGluZyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MTcuMDE3NjYzMTQyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi92YWRkci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyNTpcXHRcXHRcXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCB0aHJlZV9yZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG4gMjI2OlxcdFxcdH1cXG4gMjI3OlxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiAyMzA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLCB2b2lkICpwcml2YXRlKVxcbiAyMzE6XFx0e1xcbiAyMzI6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdFxcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgc3RhcnQpO1xcbiAyMzU6XFx0XFx0aWYgKCF2bWEpXFxuIDIzNjpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gMjM3OlxcdFxcbiAyMzg6XFx0XFx0aWYgKGVuZCBcXHUwMDNlIHZtYS1cXHUwMDNldm1fZW5kKSB7XFxuIDIzOTpcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4gMjQwOlxcdFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbiAyNDE6XFx0XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUEZOTUFQKSkge1xcbiAyNDQ6XFx0XFx0XFx0b3BzLVxcdTAwM2V3YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlk7XFxuIDI0NTpcXHRcXHRcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcXG4gMjQ2OlxcdFxcdH1cXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIDI0OTpcXHRcXHRyZXR1cm47XFxuIDI1MDpcXHRcXG4gMjUxOlxcdGxvY2tfbW1hcDpcXG4gMjUyOlxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4gMjUzOlxcdFxcdG9wcy1cXHUwMDNld2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSztcXG4gMjU0OlxcdFxcdHdhbGtfcGFnZV9yYW5nZShtbSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcXG4gMjU1OlxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiAyNTY6XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDI1OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAyNjA6XFx0e1xcbiAyNjE6XFx0XFx0cHRlX3QgKnB0ZTtcXG4gMjYyOlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXFx1MDAzZXZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjE3LjAxNzgzODY3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI2ODgzNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBkYW1vbl9maWx0ZXJgIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGRhbW9uX2ZpbHRlcmAgc3RydWN0IGlzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJJ20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBzZWUgaXRzIHN0cnVjdHVyZS4gSSB3YW50IHRvIGxvb2sgZm9yIHRoZSBrZXkgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLiBJIGFtIGV4cGVjdGluZyBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBhbmQgcHJvYmFibHkgc29tZSBzdGF0ZSBpbmZvcm1hdGlvbi4gSSdsbCBmb2N1cyBvbiBob3cgaXQgaXMgYmVpbmcgcG9wdWxhdGVkLCBhcmUgdGhlcmUgaGFyZGNvZGVkIHZhbHVlcywgb3IgYXJlIHRoZXkgc291cmNlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEkgd2lsbCBsb29rIGZvciBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBvciBtYWNybyB1c2VzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBgZGFtb25fZmlsdGVyYCBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjE4Ljk0NDcyNzA3NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAwOTEwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGRhbW9uX2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTc2ND1zdHJ1Y3QgZGFtb25fcHJlcCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzcxLS8qKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo3NzI6ICogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSAtIFR5cGUgb2YgXFx1MDAyNnN0cnVjdCBkYW1vbl9maWx0ZXJcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzczLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9Nzc4PWVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTc4NC0vKipcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6Nzg1OiAqIHN0cnVjdCBkYW1vbl9maWx0ZXIgLSBEQU1PTiByZWdpb24gZmlsdGVyIGZvciBcXHUwMDI2c3RydWN0IGRhbW9uX3Byb2JlLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC03ODYtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC03OTEtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjc5MjpzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzkzLVxcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDUzPXZvaWQgZGFtb25fYWRkX3ByZXAoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTQtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTU6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTYtXFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdyk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTc6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDU4OnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZik7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjE5LjAyNDgyNDYzMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzUwMTMwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gRmlsdGVyKipcblxuT2theSwgdGltZSB0byBnZXQgYSBsb29rIGF0IHRoZSBgZGFtb25fZmlsdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmlsdGVyIHdvcmtzIGluIHRoZSBjb250ZXh0IG9mIERBTU9OLiBSaWdodCwgc28gSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgaW5jbHVkZSBmaWxlOiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gVGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGFuZCBsaWtlbHkgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBzaG91bGQgcmVzaWRlLiBIb3BlZnVsbHksIGl0J3Mgd2VsbC1jb21tZW50ZWQ7IEknbSBleHBlY3Rpbmcgc29tZSBjbGVhciBzdHJ1Y3QgbWVtYmVycyBhbmQgbWF5YmUgc29tZSBpbnNpZ2h0ZnVsIGZ1bmN0aW9uIHByb3RvdHlwZXMgcmVsYXRlZCB0byBob3cgdGhlIGZpbHRlcmluZyBsb2dpYyBpcyBhY3R1YWxseSBhcHBsaWVkIHRvIG1lbW9yeSBhY2Nlc3MuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGFkZHJlc3MgcmFuZ2VzLCBhY2Nlc3MgdHlwZXMsIGFuZCBwb3RlbnRpYWxseSBldmVuIHVzZXItZGVmaW5lZCBjcml0ZXJpYS4gSXTigJlzIGltcG9ydGFudCB0byBzZWUgd2hhdCBob29rcyBpdCBoYXMgaW50byB0aGUgY29yZSBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBvdmVyYWxsIG1vbml0b3JpbmcgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYyOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjIxLjM3NDk1NzkwN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHRcXHREQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcXG4gNzgxOlxcdFxcdERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVCxcXG4gNzgyOlxcdH07XFxuIDc4MzpcXHRcXG4gNzg0OlxcdC8qKlxcbiA3ODU6XFx0ICogc3RydWN0IGRhbW9uX2ZpbHRlciAtIERBTU9OIHJlZ2lvbiBmaWx0ZXIgZm9yIFxcdTAwMjZzdHJ1Y3QgZGFtb25fcHJvYmUuXFxuIDc4NjpcXHQgKlxcbiA3ODc6XFx0ICogQHR5cGU6XFx0VHlwZSBvZiB0aGUgcmVnaW9uLlxcbiA3ODg6XFx0ICogQG1hdGNoaW5nOlxcdFdoZXRoZXIgdGhpcyBmaWx0ZXIgaXMgZm9yIHRoZSB0eXBlLW1hdGNoaW5nIG9uZXMuXFxuIDc4OTpcXHQgKiBAYWxsb3c6XFx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXFxuIDc5MDpcXHQgKiBAbWVtY2dfaWQ6XFx0TWVtY2cgaWQgb2YgdGhlIHF1ZXN0aW9uIGlmIEB0eXBlIGlzIERBTU9OX0ZJTFRFUl9NRU1DRy5cXG4gNzkxOlxcdCAqL1xcbiA3OTI6XFx0c3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuIDc5MzpcXHRcXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XFxuIDc5NDpcXHRcXHRib29sIG1hdGNoaW5nO1xcbiA3OTU6XFx0XFx0Ym9vbCBhbGxvdztcXG4gNzk2OlxcdFxcdHVuaW9uIHtcXG4gNzk3OlxcdFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gNzk4OlxcdFxcdH07XFxuIDc5OTpcXHQvKiBwcml2YXRlOiAqL1xcbiA4MDA6XFx0XFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gODAxOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gODAyOlxcdH07XFxuIDgwMzpcXHRcXG4gODA0OlxcdC8qKlxcbiA4MDU6XFx0ICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLlxcbiA4MDY6XFx0ICpcXG4gODA3OlxcdCAqIEB3ZWlnaHQ6XFx0UmVsYXRpdmUgcHJpb3JpdHkgb2YgdGhlIGF0dHJpYnV0ZSBmb3IgdGhpcyBwcm9iZS5cXG4gODA4OlxcdCAqL1xcbiA4MDk6XFx0c3RydWN0IGRhbW9uX3Byb2JlIHtcXG4gODEwOlxcdFxcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XFxuIDgxMTpcXHQvKiBwcml2YXRlOiAqL1xcbiA4MTI6XFx0XFx0LyogUHJlcGFyYXRpb24gYWN0aW9ucyB0byBhcHBseSB0byBlYWNoIHByb2JpbmcgbWVtb3J5LiAqL1xcbiA4MTM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBwcmVwcztcXG4gODE0OlxcdFxcdC8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi9cXG4gODE1OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcXG4gODE2OlxcdFxcdC8qIFNpYmxpbmdzIGxpc3QuICovXFxuIDgxNzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIDgxODpcXHR9O1xcbiA4MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjIxLjM3NTA5MTY3OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODgzODIyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBkYW1vbl9uZXdfZmlsdGVyYCdzIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGhvdyBgZGFtb25fbmV3X2ZpbHRlcmAgaGFuZGxlcyB0aGUgY3J1Y2lhbCB0YXNrcyBvZiBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBgZGFtb25fZmlsdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGhlcmUuIFdoYXQncyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgdXNpbmcgYSBjdXN0b20gYWxsb2NhdG9yLCBvciByZWx5aW5nIG9uIHNvbWV0aGluZyBzdGFuZGFyZCBsaWtlIGBrbWFsbG9jYD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBmbGFncyBvciBzaXplcyBwYXNzZWQgdG8gdGhlIGFsbG9jYXRvciB0aGF0IG1pZ2h0IGhpbnQgYXQgaXRzIGludGVuZGVkIHVzZSBjYXNlPyBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2l0aCByZWdhcmQgdG8gTlVNQSBub2RlcyBvciBjYWNoZSBsaW5lIGFsaWdubWVudD9cblxuTmV4dCwgSSdsbCBzY3J1dGluaXplIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBXaGF0IGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGBkYW1vbl9maWx0ZXJgIGFyZSBiZWluZyBwb3B1bGF0ZWQ/IEFyZSBhbnkgbXV0ZXhlcyBvciBzcGlubG9ja3MgaW5pdGlhbGl6ZWQ/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIEkgc2hvdWxkIGJlIHdhdGNoaW5nIG91dCBmb3I/IEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHdoZXRoZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mIHNvbWUgZmllbGRzIGRlcGVuZHMgb24gdGhlIHN1Y2Nlc3Mgb2Ygb3RoZXJzLiBBbHNvLCBkb2VzIGl0IGhhdmUgYSBkZXN0cnVjdG9yIHRoYXQgZnJlZXMgcmVzb3VyY2VzLCBhbmQgd2hhdCBtaWdodCBiZSB0aGUgZWZmZWN0cyBvZiBhbnkgc3VjaCB0ZWFyZG93bj9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZmlsdGVyJ3MgaW50ZXJuYWwgc3RhdGUgaXMgc2V0IHVwLiBEb2VzIGl0IHVzZSBhbnkgaW50ZXJuYWwgc3RydWN0dXJlcz8gSG93IGFyZSBpdHMgcGFyYW1ldGVycyBjb25maWd1cmVkPyBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNhbml0eSBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSB0aGUgZmlsdGVyIG9wZXJhdGVzIGNvcnJlY3RseT8gSXMgdGhlcmUgYSBuZWVkIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGBpbml0YCBhbmQgYHJlc2V0YCBpbiB0aGUgZnV0dXJlP1xuXG5Fc3NlbnRpYWxseSwgSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGBkYW1vbl9maWx0ZXJgIGNvbWVzIGludG8gZXhpc3RlbmNlLCBlbnN1cmluZyBpdCBjYW4gcGVyZm9ybSBpdHMgaW50ZW5kZWQgZnVuY3Rpb24gcmVsaWFibHkuIFRoaXMgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gYXJlIHRoZSBiZWRyb2NrIG9mIHRoZSBlbnRpcmUgZmlsdGVyaW5nIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjI0LjI1ODkxNzY2OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMwMTc1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcwLVxcbm1tL2RhbW9uL2NvcmUuYzoxNzE6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXFxubW0vZGFtb24vY29yZS5jLTE3Mi1cXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MDY9c3RhdGljIGludCBkYW1vbl9jb21taXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODIzLVxcbm1tL2RhbW9uL2NvcmUuYzoxODI0OlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vbl9uZXdfZmlsdGVyKHNyY19maWx0ZXItXFx1MDAzZXR5cGUsXFxubW0vZGFtb24vY29yZS5jLTE4MjUtXFx0XFx0XFx0XFx0c3JjX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsIHNyY19maWx0ZXItXFx1MDAzZWFsbG93KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjE5OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDgtXFxubW0vZGFtb24vc3lzZnMuYzoyMjA5OlxcdFxcdGZpbHRlciA9IGRhbW9uX25ld19maWx0ZXIoc3lzX2ZpbHRlci1cXHUwMDNldHlwZSxcXG5tbS9kYW1vbi9zeXNmcy5jLTIyMTAtXFx0XFx0XFx0XFx0c3lzX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjI0LjM1MTkzOTM1M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzkyNzY3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZGFtb25fbmV3X2ZpbHRlcmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZGFtb25fbmV3X2ZpbHRlcmAgZnVuY3Rpb24uIExldCdzIHN0YXJ0IHdpdGggYG1tL2RhbW9uL2NvcmUuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIGhhbmRsZXMgaXRzIG5ldyBmaWx0ZXIgbG9naWMgd2l0aGluIHRoZSBjb3JlLiBJ4oCZbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJ3MgY2FsbCBncmFwaCBhbmQgc2NydXRpbml6aW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgb3RoZXIgREFNT04gY29tcG9uZW50cyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBlcnJvciBoYW5kbGluZyBhbmQgd2hhdCBtZXRyaWNzIGl0J3MgdXNpbmcgKG9yIHNob3VsZCBiZSkuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIGZpbHRlciBjcmVhdGlvbi4gRnJvbSB0aGVyZSwgSSdsbCBhc3Nlc3MgaXRzIHBlcmZvcm1hbmNlIGltcGFjdCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjI5LjE0NDcxMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbiAxNzI6XFx0XFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcXG4gMTczOlxcdHtcXG4gMTc0OlxcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcjtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0ZmlsdGVyID0ga21hbGxvY19vYmooKmZpbHRlcik7XFxuIDE3NzpcXHRcXHRpZiAoIWZpbHRlcilcXG4gMTc4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxNzk6XFx0XFx0ZmlsdGVyLVxcdTAwM2V0eXBlID0gdHlwZTtcXG4gMTgwOlxcdFxcdGZpbHRlci1cXHUwMDNlbWF0Y2hpbmcgPSBtYXRjaGluZztcXG4gMTgxOlxcdFxcdGZpbHRlci1cXHUwMDNlYWxsb3cgPSBhbGxvdztcXG4gMTgyOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmaWx0ZXItXFx1MDAzZWxpc3QpO1xcbiAxODM6XFx0XFx0cmV0dXJuIGZpbHRlcjtcXG4gMTg0OlxcdH1cXG4gMTg1OlxcdFxcbiAxODY6XFx0dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG4gMTg3OlxcdHtcXG4gMTg4OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmYtXFx1MDAzZWxpc3QsIFxcdTAwMjZwLVxcdTAwM2VmaWx0ZXJzKTtcXG4gMTg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MjkuMTQ1MDg3ODUxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjQyMjYwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbWVtY2dfaWRgIGluIERBTU9OIEZpbHRlciBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBgbWVtY2dfaWRgIGdldHMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgdmFsdWUgb3JpZ2luYXRlcyBhbmQgaG93IGl0J3MgdXNlZC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIG1heWJlIGxvb2sgZm9yIGFyZWFzIHdoZXJlIGEgcmFjZSBjb3VsZCBleGlzdCBvciB3aGVyZSB0aGUgSUQgbWlnaHQgbm90IGJlIHdoYXQgdGhlIHVzZXIgZXhwZWN0cy4gSSdtIGFzc3VtaW5nIGZhbWlsaWFyaXR5IHdpdGggdGhlIERBTU9OIGNvZGUgYmFzZSwgc28gSSdtIG5vdCBnb2luZyB0byBiZSBzdXBlciBleHBsaWNpdCBhYm91dCBldmVyeSBmdW5jdGlvbi4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIGJlaGF2aW5nIGV4YWN0bHkgaG93IEkgZXhwZWN0IGl0IHRvLiBVbHRpbWF0ZWx5LCBJIGFtIHRyeWluZyB0byBkZXRlcm1pbmUgd2hhdCBpcyB0aGUgcmVsaWFibGUgcGxhY2UgdG8gYWNjZXNzIHRoaXMgdmFsdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzI2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozOTozMS4wNjkzMTYyOTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzU4NDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTE5MT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjA0LVxcdFxcdGRzdC1cXHUwMDNlbmlkID0gc3JjLVxcdTAwM2VuaWQ7XFxubW0vZGFtb24vY29yZS5jOjEyMDU6XFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxubW0vZGFtb24vY29yZS5jLTEyMDYtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTMxNT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzE5LVxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XFxubW0vZGFtb24vY29yZS5jOjEzMjA6XFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxubW0vZGFtb24vY29yZS5jLTEzMjEtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTc5MT1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzk4LVxcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFxubW0vZGFtb24vY29yZS5jOjE3OTk6XFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxubW0vZGFtb24vY29yZS5jLTE4MDAtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTgwNj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MjktXFx0XFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi9jb3JlLmM6MTgzMDpcXHRcXHRcXHRuZXdfZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCA9IHNyY19maWx0ZXItXFx1MDAzZW1lbWNnX2lkO1xcbm1tL2RhbW9uL2NvcmUuYy0xODMxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yOTU3LVxcbm1tL2RhbW9uL2NvcmUuYzoyOTU4OlxcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChnb2FsLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vY29yZS5jLTI5NTktXFx0aWYgKCFtZW1jZykge1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2Nj1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjg0LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6Mjg1OlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODYtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NDQ4PWJvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDcwLVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDcxOlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy00NzItXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODIyLVxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlbWVtY2dfcGF0aCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgyMzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MjQtXFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3OS1cXHRcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODgwOlxcdFxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXBhdGgsIFxcdTAwMjZnb2FsLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4ODEtXFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTk5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjIxOC1cXHRcXHRcXHRcXHRcXHRzeXNfZmlsdGVyLVxcdTAwM2VwYXRoLFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjIxOTpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjIwLVxcdFxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyNC1cXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VuaWQsIHNyYy1cXHUwMDNlbmlkKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODI1OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1lbWNnX2lkLCBzcmMtXFx1MDAzZW1lbWNnX2lkKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODI2LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NzItXFx0XFx0XFx0Lm5pZCA9IDYsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg3MzpcXHRcXHRcXHQubWVtY2dfaWQgPSA3LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NzQtXFx0XFx0XFx0fSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODgwLVxcdFxcdFxcdC5uaWQgPSAxMCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODgxOlxcdFxcdFxcdC5tZW1jZ19pZCA9IDEsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Mi1cXHRcXHRcXHR9KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTE4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjYtXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTEyNzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtZW1jZ19pZCwgc3JjLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjgtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTE0Nz1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExNjUtXFx0XFx0XFx0LmFsbG93ID0gZmFsc2UsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExNjY6XFx0XFx0XFx0Lm1lbWNnX2lkID0gMTIzLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTY3LVxcdFxcdFxcdH0pO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEzNjc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM3NS1cXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzc2OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1lbWNnX2lkLCBzcmMtXFx1MDAzZW1lbWNnX2lkKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM3Ny1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMzgzPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQwMS1cXHRcXHRcXHQuYWxsb3cgPSBmYWxzZSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQwMjpcXHRcXHRcXHQubWVtY2dfaWQgPSAxMjMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0MDMtXFx0XFx0XFx0fSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjMxLjM3MjkwNjg4NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODk0NDYwMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzOiBEQU1PTiBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIERBTU9OIGNvZGUgY2hhbmdlcyBmcm9tIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBwZXJzcGVjdGl2ZS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEknbGwgZm9jdXMgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtZW50aW9uZWQgYW5kIGhvdyB0aGV5IGhhbmRsZSBtZW1vcnkuXG5cbkZpcnN0LCBJIGV4YW1pbmUgdGhlIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBgbWF0Y2hlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgaXMgYXNzaWduZWQgYSB2YWx1ZSBpbiBhbGwgY29kZSBwYXRocywgZGVwZW5kaW5nIG9uIHRoZSBmaWx0ZXIgdHlwZSAoYW5vbiBvciBtZW1jZykuIE5vIGNvbmNlcm5zIGhlcmUgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5OZXh0LCBJIGxvb2sgYXQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAuIFRoaXMgYXBwZWFycyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZywgYW5kIGxpa2UgdGhlIHByZXZpb3VzIG9uZSwgYG1hdGNoZWRgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIGdldHMgYXNzaWduZWQgYSB2YWx1ZS5cblxuTW92aW5nIG9uIHRvIGBtbS9kYW1vbi92YWRkci5jYCwgSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlc2UgY2hhbmdlcyBtb3JlIGNsb3NlbHkuIGBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbmAgYW5kIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2Agc2VlbSBsaWtlIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBhbmQgSSdtIG5vdCBzZWVpbmcgaW1tZWRpYXRlIHJlZCBmbGFncy4gYGRhbW9uX3ZhX3lvdW5nX2FkZHJgIGhhcyBgeW91bmdgIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIHdoaWNoIGlzIHNhZmUuXG5cbkkgdGhlbiBnbyB0aHJvdWdoIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCB3aGljaCB1c2VzIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBhbmQgYWxzbyBoYXMgYG1hdGNoZWRgIGluaXRpYWxpemVkIGFuZCBhc3NpZ25lZCwgYW5kIGBkYW1vbl92YV9maWx0ZXJfcGFzc2Agd2hlcmUgYHBhc3NgIGlzIGluaXRpYWxpemVkIHRvIGB0cnVlYC4gTm8gaXNzdWVzIHRoZXJlLlxuXG5UaGUgYGRhbW9uX3ZhX3Byb2JlX2ZvbGlvYCBmdW5jdGlvbiBpbmNyZW1lbnRzIGByLVx1MDAzZXByb2JlX2hpdHNbaV0rK2AgaWYgdGhlIGZpbHRlciBwYXNzZWQuIEl0IGlzIGNydWNpYWwgdG8gY2hlY2sgdGhpcy4gYGlgIGlzIGluaXRpYWxpemVkIHRvIGAwYCBhbmQgdGh1cyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHRoYXQgY291bGQgY3JlYXRlIGFuIGlzc3VlLlxuXG5UaGUgZnVuY3Rpb25zIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGFuZCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAgZW1wbG95IGxvY2FsIHN0cnVjdHMuIGBhcmdgIGlzIGNvbnN0cnVjdGVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzcGVjaWZpY2FsbHkgYC5jdHggPSBjdHgsIC5yID0gcmAsIGFuZCBgZGFtb25fcHJvYmVfd2Fsa19vcHNgIGlzIGFsc28gaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVyczogYC5wbWRfZW50cnkgPSAuLi4sIC5odWdldGxiX2VudHJ5ID0gLi4uYC4gVGhpcyBhcHByb2FjaCBlbnN1cmVzIHRoYXQgYWxsIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkLCB0aHVzIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBJbnNpZGUgdGhlc2UgZnVuY3Rpb25zLCBgZm9saW9gIGlzIGRlcml2ZWQgZnJvbSBlaXRoZXIgYHB0ZV9wZm5gIG9yIGB2bV9ub3JtYWxfZm9saW9gIGFuZCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLlxuXG5GaW5hbGx5LCBJIGNoZWNrZWQgYF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIGBtYXhfd3N1bWAgaXMgaW5pdGlhbGl6ZWQgdG8gYDBgLlxuXG5JJ3ZlIGNhcmVmdWxseSBleGFtaW5lZCBhbGwgdGhlIGNvZGUgcGF0aHMgYW5kIGluaXRpYWxpemF0aW9ucyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJ20gbm90IGRldGVjdGluZyBhbnkgaW5zdGFuY2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQgaW4gY29uZGl0aW9ucywgYnJhbmNoZXMsIG9yIHBhc3NlZCBhcm91bmQuIE5vIGNvcHlfdG9fdXNlciBvciBwb3RlbnRpYWwgaW5mbyBsZWFrIHBhdGh3YXlzIGFyZSBwcmVzZW50LiBUaGVyZSBhcmUgYWxzbyBubyBjb21wbGV4IGJ1ZmZlcnMgb3IgbWVtb3J5IHBhc3NlZCBhY3Jvc3MgYm91bmRhcmllcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuXG5cbldoaWxlIHRoZXJlICpjb3VsZCogYmUgcmFjZSBjb25kaXRpb25zLCBwYWdlIHRhYmxlIHdhbGsgYnVncywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgdG8gYHByb2JlX2hpdHNgLCB0aGVzZSBhcmUgaXNzdWVzIHRoYXQgd291bGQgYmUgcGlja2VkIHVwIGJ5IGV4aXN0aW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUCwgS0FTQU4sIGFuZCBEQU1PTidzIG93biB2YWxpZGF0aW9uLCBhbmQgdGhleSBhcmUgbm90IHJlbGF0ZWQgdG8gS01TQU4tc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzICh1bmluaXRpYWxpemVkIG1lbW9yeSkuXG5cbioqQ29uY2x1c2lvbjoqKiBCYXNlZCBvbiB0aGlzIHRob3JvdWdoIHJldmlldywgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCwgYW5kIHRoZSBhbmFseXNpcyBpcyBjb21wcmVoZW5zaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk5NywiT3V0cHV0VG9rZW5zIjozMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjQwLjI2NzM3MDU4NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIERBTU9OIGZpbHRlciBtYXRjaGluZyBsb2dpYyBhY3Jvc3MgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYnkgaW50cm9kdWNpbmcgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpIGFuZCBpbXBsZW1lbnRzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBwcm9iZSBoYW5kbGluZyAoZGFtb25fdmFfcHJlcF9wcm9iZXMsIGRhbW9uX3ZhX2FwcGx5X3Byb2JlcywgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5LCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KS5cXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5IGFuZCBzYW5pdGl6ZXIgYXBwbGljYWJpbGl0eTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIHN0YWNrLWFsbG9jYXRlZCBzdHJ1Y3RzIChzdWNoIGFzIHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYW5kIHN0cnVjdCBtbV93YWxrX29wcykgYW5kIHNjYWxhciB2YXJpYWJsZXMgKGUuZy4gYm9vbGVhbnMsIGxvb3AgY291bnRlcnMsIGFjY3VtdWxhdG9yIHN1bXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgb3IgemVyby1pbml0aWFsaXphdGlvbiBiZWZvcmUgdXNlLlxcbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIG91dHB1dHMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cXG4zLiBNZW1vcnkgc2FmZXR5IGNvbnNpZGVyYXRpb25zOiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBwYWdlLXRhYmxlIHdhbGtpbmcsIGZvbGlvIGxvY2tpbmcvcmVmZXJlbmNlIGNvdW50aW5nLCBjb25jdXJyZW5jeSwgb3IgYXJyYXkgaW5kZXhpbmcgKGUuZy4sIHByb2JlX2hpdHMpIGZhbGwgdW5kZXIgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0cykuXFxuXFxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgYWNyb3NzIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzIGJ5IGludHJvZHVjaW5nIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKSBhbmQgaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcHJvYmUgaGFuZGxpbmcgKGRhbW9uX3ZhX3ByZXBfcHJvYmVzLCBkYW1vbl92YV9hcHBseV9wcm9iZXMsIGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSkuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eSBhbmQgc2FuaXRpemVyIGFwcGxpY2FiaWxpdHk6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IEFsbCBzdGFjay1hbGxvY2F0ZWQgc3RydWN0cyAoc3VjaCBhcyBzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFuZCBzdHJ1Y3QgbW1fd2Fsa19vcHMpIGFuZCBzY2FsYXIgdmFyaWFibGVzIChlLmcuIGJvb2xlYW5zLCBsb29wIGNvdW50ZXJzLCBhY2N1bXVsYXRvciBzdW1zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzZS5cXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCBvdXRwdXRzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXFxuMy4gTWVtb3J5IHNhZmV0eSBjb25zaWRlcmF0aW9uczogQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gcGFnZS10YWJsZSB3YWxraW5nLCBmb2xpbyBsb2NraW5nL3JlZmVyZW5jZSBjb3VudGluZywgY29uY3VycmVuY3ksIG9yIGFycmF5IGluZGV4aW5nIChlLmcuLCBwcm9iZV9oaXRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydHMpLlxcblxcbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowb889h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 16:35:46 +0000 UTC FinishedAt: 2026-09-06 16:39:41 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "MEMCG", "TRANSPARENT_HUGEPAGE", "HUGETLBFS" ], "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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "MEMCG", "TRANSPARENT_HUGEPAGE", "HUGETLBFS" ], "series_id": "96d2b809-bd7e-4727-b306-d7d8a1e74d40" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_ops_filter_match", "damon_va_prep_probes", "damon_va_apply_probes", "damon_va_probe_pmd_entry", "damon_va_probe_hugetlb_entry", "damon_va_filter_match", "damon_pa_filter_match" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX29wc19maWx0ZXJfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJlcF9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9maWx0ZXJfbWF0Y2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGFjcm9zcyBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIHNwYWNlcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKCkgYW5kIGltcGxlbWVudHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JlIGhhbmRsaW5nIChkYW1vbl92YV9wcmVwX3Byb2JlcywgZGFtb25fdmFfYXBwbHlfcHJvYmVzLCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksIGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkpLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5IGFuZCBzYW5pdGl6ZXIgYXBwbGljYWJpbGl0eTpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgc3RhY2stYWxsb2NhdGVkIHN0cnVjdHMgKHN1Y2ggYXMgc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSBhbmQgc3RydWN0IG1tX3dhbGtfb3BzKSBhbmQgc2NhbGFyIHZhcmlhYmxlcyAoZS5nLiBib29sZWFucywgbG9vcCBjb3VudGVycywgYWNjdW11bGF0b3Igc3VtcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBvciB6ZXJvLWluaXRpYWxpemF0aW9uIGJlZm9yZSB1c2UuXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCBvdXRwdXRzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXG4zLiBNZW1vcnkgc2FmZXR5IGNvbnNpZGVyYXRpb25zOiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBwYWdlLXRhYmxlIHdhbGtpbmcsIGZvbGlvIGxvY2tpbmcvcmVmZXJlbmNlIGNvdW50aW5nLCBjb25jdXJyZW5jeSwgb3IgYXJyYXkgaW5kZXhpbmcgKGUuZy4sIHByb2JlX2hpdHMpIGZhbGwgdW5kZXIgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0cykuXG5cbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwcm9iZSBwcmVwYXJhdGlvbiBhbmQgcHJvYmUgYXBwbGljYXRpb24gb3BlcmF0aW9ucyBmb3IgREFNT04gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcsIGluY2x1ZGluZyBwYWdlIHRhYmxlIHdhbGtpbmcgKGZvciBQTUQsIGh1Z2UgUE1ELCBhbmQgaHVnZXRsYiBlbnRyaWVzKSBhbmQgYWNjZXNzL2FnZSBmaWx0ZXJpbmcuIEl0IGFsc28gY29uc29saWRhdGVzIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbnRvIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKS4gVGhlc2UgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NTFjY2RkYWVhNTE4Njc1NTcwZDI5NGEyNWM2ODFjZmZlZTUxNjgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNjozODoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTQ0NCwzICYjNDM7NDQ0LDM1IEBAIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4mIzQzO1xuJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4mIzQzO1x0XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5pbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbkBAIC0yMSwzICYjNDM7MjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZCk7XG4gXG4gYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpO1xuJiM0MztcbiYjNDM7Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTQzLDI5ICYjNDM7MTQzLDggQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbiBcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRtYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuLVx0XHRpZiAoIWZvbGlvKSB7XG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG4tXHRcdGlmICghbWVtY2cpXG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRlbHNlXG4tXHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XG4gXHRcdGlmICghZm9saW8pXG4gXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuQEAgLTE3Myw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XG4gXHR9XG4gXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTUxMCw2ICYjNDM7NTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBtYXhfbnJfYWNjZXNzZXM7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuJiM0MztcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuJiM0MztcdFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XG4mIzQzO1x0XHRcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuJiM0MztcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4mIzQzO1x0XHRpZiAoIW1tKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4mIzQzO1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuJiM0MztcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG4mIzQzO1x0XHRcdFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtbXB1dChtbSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocHRlKVxuJiM0MztcdFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XG4mIzQzO1x0ZWxzZSBpZiAocG1kKVxuJiM0MztcdFx0eW91bmcgPSBwbWRfeW91bmcoKnBtZCk7XG4mIzQzO1x0eW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuJiM0MztcdFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpO1xuJiM0MztcdHJldHVybiB5b3VuZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4mIzQzO1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZmlsdGVyLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbiYjNDM7XHRcdGlmICghZm9saW8pXG4mIzQzO1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSxcbiYjNDM7XHRcdFx0XHRcdGFkZHIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCxcbiYjNDM7XHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX2ZpbHRlciAqZjtcbiYjNDM7XHRib29sIHBhc3MgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xuJiM0MztcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xuJiM0MztcdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRwYXNzID0gIWYtXHUwMDNlYWxsb3c7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBwYXNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4mIzQzO1x0XHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXG4mIzQzO1x0XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIpKVxuJiM0MztcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0cHRlX3QgKnB0ZTtcbiYjNDM7XHRwdGVfdCBwdGVudDtcbiYjNDM7XHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4mIzQzO1x0aWYgKHB0bCkge1xuJiM0MztcdFx0cG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcbiYjNDM7XHRcdFx0Z290byBodWdlX291dDtcbiYjNDM7XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4mIzQzO1x0XHRpZiAoIWZvbGlvKVxuJiM0MztcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuJiM0MztcdFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIE5VTEwsIFx1MDAyNnBtZGUsXG4mIzQzO1x0XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcbiYjNDM7aHVnZV9vdXQ6XG4mIzQzO1x0XHRzcGluX3VubG9jayhwdGwpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuJiM0MztcbiYjNDM7XHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbiYjNDM7XHRpZiAoIXB0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4mIzQzO1x0aWYgKCFmb2xpbylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZwdGVudCwgTlVMTCxcbiYjNDM7XHRcdFx0d2Fsay1cdTAwM2V2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLVx1MDAzZXZtYSk7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0cHRlX3QgZW50cnk7XG4mIzQzO1xuJiM0MztcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbiYjNDM7XHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4mIzQzO1x0Zm9saW9fZ2V0KGZvbGlvKTtcbiYjNDM7XHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgXHUwMDI2ZW50cnksIE5VTEwsXG4mIzQzO1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbiYjNDM7XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTExcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0ge1xuJiM0MztcdFx0LmN0eCA9IGN0eCxcbiYjNDM7XHRcdC5yID0gcixcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcbiYjNDM7XHRcdC5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksXG4mIzQzO1x0XHQuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIgPSByLVx1MDAzZXNhbXBsaW5nX2FkZHI7XG4mIzQzO1xuJiM0MztcdGlmICghbW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcbiYjNDM7XHRcdFx0XHUwMDI2YXJnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuJiM0MztcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuJiM0MztcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4mIzQzO1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuJiM0MztcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4mIzQzO1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbiYjNDM7XHRcdFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XG4mIzQzO1x0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4mIzQzO1x0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChtbSlcbiYjNDM7XHRcdFx0bW1wdXQobW0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1heF93c3VtO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcbkBAIC05MzgsNiAmIzQzOzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuIFx0XHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxuIFx0XHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxuIFx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyxcbiYjNDM7XHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxuJiM0MztcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiBcdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiBcdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4gXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MWNjZGRhZWE1MTg2NzU1NzBkMjk0YTI1YzY4MWNmZmVlNTE2ODMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE2OjM4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKQEAgLTQ0NCwzICYjNDM7NDQ0LDM1IEBAIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiYjNDM7CiYjNDM7Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjoKJiM0MzsJCWlmICghZm9saW8pIHsKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQltYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOgomIzQzOwkJaWYgKCFmb2xpbykgewomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCW1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pOwomIzQzOwkJaWYgKCFtZW1jZykKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWF0Y2hlZCA9IGZpbHRlci0mZ3Q7bWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLSZndDttYXRjaGluZzsKJiM0Mzt9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmgKaW5kZXggMzhkMjk1NDg4ZmExOC4uYjgzMjE2OWIxY2Y4YyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uaApAQCAtMjEsMyAmIzQzOzIxLDUgQEAgYm9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIHVuc2lnbmVkIGxvbmcgZGFtb25fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LCBpbnQgdGFyZ2V0X25pZCk7CiAKIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKTsKJiM0MzsKJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jCmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMTQzLDI5ICYjNDM7MTQzLDggQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKIAkJc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlib29sIG1hdGNoZWQgPSBmYWxzZTsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKIAlzd2l0Y2ggKGZpbHRlci0mZ3Q7dHlwZSkgewotCWNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjoKLQkJaWYgKCFmb2xpbykgewotCQkJbWF0Y2hlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQkJbWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7Ci0JCWJyZWFrOwotCWNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6Ci0JCWlmICghZm9saW8pIHsKLQkJCW1hdGNoZWQgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7Ci0JCWlmICghbWVtY2cpCi0JCQltYXRjaGVkID0gZmFsc2U7Ci0JCWVsc2UKLQkJCW1hdGNoZWQgPSBmaWx0ZXItJmd0O21lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJYnJlYWs7CiAJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6CiAJCWlmICghZm9saW8pCiAJCQltYXRjaGVkID0gZmFsc2U7CkBAIC0xNzMsNyAmIzQzOzE1Miw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsCiAJCQltYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlicmVhazsKJiM0MzsJCXJldHVybiBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKGZpbHRlciwgZm9saW8pOwogCX0KIAlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwogfQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggZjg4NGQzZjc4ZjMwYS4uMDkwMzE3MTkxOTczYiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC01MTAsNiAmIzQzOzUxMCwyMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIG1heF9ucl9hY2Nlc3NlczsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAomIzQzOwkJc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcmVwICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcmVwKHAsIHByb2JlKSB7CiYjNDM7CQlzd2l0Y2ggKHAtJmd0O2FjdGlvbikgewomIzQzOwkJY2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6CiYjNDM7CQkJZGFtb25fdmFfbWtvbGQobW0sIHItJmd0O3NhbXBsaW5nX2FkZHIpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiYjNDM7CQltbSA9IGRhbW9uX2dldF9tbSh0KTsKJiM0MzsJCWlmICghbW0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewomIzQzOwkJCWlmIChzZXRfc2FtcGxlcykKJiM0MzsJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLSZndDthci5zdGFydCwKJiM0MzsJCQkJCQlyLSZndDthci5lbmQpOwomIzQzOwkJCWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkKJiM0MzsJCQkJZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7CiYjNDM7CQl9CiYjNDM7CQltbXB1dChtbSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmdfYWRkcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CWJvb2wgeW91bmcgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHB0ZSkKJiM0MzsJCXlvdW5nID0gcHRlX3lvdW5nKCpwdGUpOwomIzQzOwllbHNlIGlmIChwbWQpCiYjNDM7CQl5b3VuZyA9IHBtZF95b3VuZygqcG1kKTsKJiM0MzsJeW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fAomIzQzOwkJbW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpOwomIzQzOwlyZXR1cm4geW91bmc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlzd2l0Y2ggKGZpbHRlci0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDoKJiM0MzsJCWlmICghZm9saW8pCiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJZWxzZQomIzQzOwkJCW1hdGNoZWQgPSBkYW1vbl92YV95b3VuZ19hZGRyKGZvbGlvLCBwdGUsIHBtZCwgbW0sCiYjNDM7CQkJCQlhZGRyKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLSZndDttYXRjaGluZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX3Bhc3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9uX3Byb2JlICpwLAomIzQzOwkJcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fZmlsdGVyICpmOwomIzQzOwlib29sIHBhc3MgPSB0cnVlOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkgewomIzQzOwkJaWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkgewomIzQzOwkJCXBhc3MgPSBmLSZndDthbGxvdzsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXBhc3MgPSAhZi0mZ3Q7YWxsb3c7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHBhc3M7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgewomIzQzOwlzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBkYW1vbl9yZWdpb24gKnI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJcHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlOwomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKJiM0MzsJCWlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSwKJiM0MzsJCQkJCXItJmd0O3NhbXBsaW5nX2FkZHIpKQomIzQzOwkJCXItJmd0O3Byb2JlX2hpdHNbaV0mIzQzOyYjNDM7OwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CXB0ZV90ICpwdGU7CiYjNDM7CXB0ZV90IHB0ZW50OwomIzQzOwlzcGlubG9ja190ICpwdGw7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLSZndDtwcml2YXRlOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsJcHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstJmd0O3ZtYSk7CiYjNDM7CWlmIChwdGwpIHsKJiM0MzsJCXBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpOwomIzQzOwomIzQzOwkJaWYgKCFwbWRfcHJlc2VudChwbWRlKSkKJiM0MzsJCQlnb3RvIGh1Z2Vfb3V0OwomIzQzOwkJZm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHdhbGstJmd0O3ZtYSwgYWRkciwgcG1kZSk7CiYjNDM7CQlpZiAoIWZvbGlvKQomIzQzOwkJCWdvdG8gaHVnZV9vdXQ7CiYjNDM7CQlkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LSZndDtjdHgsIHByaXYtJmd0O3IsIGZvbGlvLCBOVUxMLCAmYW1wO3BtZGUsCiYjNDM7CQkJCXdhbGstJmd0O3ZtYS0mZ3Q7dm1fbW0pOwomIzQzOwomIzQzO2h1Z2Vfb3V0OgomIzQzOwkJc3Bpbl91bmxvY2socHRsKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7I2VuZGlmCS8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwomIzQzOwomIzQzOwlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstJmd0O21tLCBwbWQsIGFkZHIsICZhbXA7cHRsKTsKJiM0MzsJaWYgKCFwdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcHRlbnQgPSBwdGVwX2dldChwdGUpOwomIzQzOwlpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlmb2xpbyA9IHZtX25vcm1hbF9mb2xpbyh3YWxrLSZndDt2bWEsIGFkZHIsIHB0ZW50KTsKJiM0MzsJaWYgKCFmb2xpbykKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LSZndDtjdHgsIHByaXYtJmd0O3IsIGZvbGlvLCAmYW1wO3B0ZW50LCBOVUxMLAomIzQzOwkJCXdhbGstJmd0O3ZtYS0mZ3Q7dm1fbW0pOwomIzQzOwomIzQzO291dDoKJiM0MzsJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQomIzQzO3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay0mZ3Q7dm1hKTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3BpbmxvY2tfdCAqcHRsOwomIzQzOwlwdGVfdCBlbnRyeTsKJiM0MzsKJiM0MzsJcHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLSZndDttbSwgcHRlKTsKJiM0MzsJZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstJmd0O21tLCBhZGRyLCBwdGUpOwomIzQzOwlpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7CiYjNDM7CWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sICZhbXA7ZW50cnksIE5VTEwsCiYjNDM7CQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzcGluX3VubG9jayhwdGwpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkgTlVMTAomIzQzOyNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19kYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSBhcmcgPSB7CiYjNDM7CQkuY3R4ID0gY3R4LAomIzQzOwkJLnIgPSByLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fcHJvYmVfd2Fsa19vcHMgPSB7CiYjNDM7CQkucG1kX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5LAomIzQzOwkJLmh1Z2V0bGJfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5LAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIgPSByLSZndDtzYW1wbGluZ19hZGRyOwomIzQzOwomIzQzOwlpZiAoIW1tKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgJiM0MzsgMSwgJmFtcDtkYW1vbl9wcm9iZV93YWxrX29wcywKJiM0MzsJCQkmYW1wO2FyZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCWJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CXN0cnVjdCBkYW1vbl9yZWdpb24gKnI7CiYjNDM7CXVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHsKJiM0MzsJCW1tID0gZGFtb25fZ2V0X21tKHQpOwomIzQzOwkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHsKJiM0MzsJCQlpZiAoc2V0X3NhbXBsZXMpCiYjNDM7CQkJCXItJmd0O3NhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci0mZ3Q7YXIuc3RhcnQsCiYjNDM7CQkJCQkJci0mZ3Q7YXIuZW5kKTsKJiM0MzsJCQlfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTsKJiM0MzsJCQlpZiAocmV0dXJuX21heF93c3VtKQomIzQzOwkJCQltYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsCiYjNDM7CQkJCQkJCWN0eCksIG1heF93c3VtKTsKJiM0MzsJCX0KJiM0MzsJCWlmIChtbSkKJiM0MzsJCQltbXB1dChtbSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG1heF93c3VtOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsCiAJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcCkKQEAgLTkzOCw2ICYjNDM7MTE2OCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpCiAJCS51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsCiAJCS5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsCiAJCS5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLAomIzQzOwkJLnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsCiYjNDM7CQkuYXBwbHlfcHJvYmVzID0gZGFtb25fdmFfYXBwbHlfcHJvYmVzLAogCQkudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLAogCQkuY2xlYW51cF90YXJnZXQgPSBkYW1vbl92YV9jbGVhbnVwX3RhcmdldCwKIAkJLmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ4OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBldmFsdWF0ZSB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMuIFRoZSBnb2FsIGlzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcgdG8gc2VlIOKAkyBtb3JlIHJvYnVzdCBrZXJuZWxzIGFyZSBiZXR0ZXIgZm9yIGV2ZXJ5b25lLiBMZXQmIzM5O3MgZGl2ZSBpbi4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHBhdGNoLiBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCBpdCYjMzk7cyB0b3VjaGluZy4gT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgbW0vZGFtb24vYDogc3BlY2lmaWNhbGx5IGBvcHMtY29tbW9uLmNgLCBgb3BzLWNvbW1vbi5oYCwgYHBhZGRyLmNgLCBhbmQgYHZhZGRyLmNgLiBEQU1PTi4uLiBEYXRhIEFjY2VzcyBNT05pdG9yLiBJbnRlcmVzdGluZy4gVGhpcyBsaWtlbHkgbWVhbnMgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIG1lbW9yeSBhY2Nlc3MgcHJvZmlsaW5nIG9yIG1vbml0b3JpbmcuIEkgd29uZGVyIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIHRoYXQuCgpOb3csIGluc3RlYWQgb2YganVzdCByZWFkaW5nIGNvZGUsIGl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgKnJlYWwqIHBpY3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gZ3JlcCwgY29kZSBzZWFyY2gsIHdoYXRldmVyIGdldHMgdGhlIGpvYiBkb25lIOKAkyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O2xsIHNlYXJjaCB0aGUga2VybmVsIHRyZWUgZm9yIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIERBTU9OLCBhbnkgY2FsbGVycyBvZiB0aGVzZSBmdW5jdGlvbnMsIGFuZCBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgY29kZSBpcyBkb2luZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqaG93KiB0aGlzIGlzIHVzZWQsIHdoYXQgaXQmIzM5O3MgY29ubmVjdGVkIHRvLCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3Igc3lzdGVtIGJlaGF2aW9yLgoKSSYjMzk7bGwgc3RhcnQgd2l0aCBzb21lIHF1aWNrIGdyZXBzIHRvIGdldCBhIGJyb2FkIG92ZXJ2aWV3LiBUaGVuLCBJIGNhbiBkcmlsbCBkb3duIGZ1cnRoZXIgYmFzZWQgb24gd2hhdCB0aG9zZSBpbml0aWFsIHNlYXJjaGVzIHJldmVhbC4gR290dGEga25vdyB0aGUgJiMzNDt3aG8sIHdoYXQsIHdoZXJlLCB3aGVuLCBhbmQgd2h5JiMzNDsgYmVmb3JlIEkgY2FuIGV2ZW4gc3RhcnQgdG8gdGhpbmsgYWJvdXQgZnV6emluZyBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT05fVkFERFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTI2PWNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnPTQ3PWNvbmZpZyBEQU1PTl9QQUREUlxuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTU5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9NYWtlZmlsZT0zPW9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbm1tL2RhbW9uL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG5tbS9kYW1vbi9NYWtlZmlsZS01LW9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuLS1cbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZz04PUNPTkZJR19QQUdFX0lETEVfRkxBRz15XG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6OTpDT05GSUdfREFNT05fVkFERFI9eVxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnOjEwOkNPTkZJR19EQU1PTl9WQUREUl9LVU5JVF9URVNUPXlcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZy0xMS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDE4PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQyNi1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0Mjc6XHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkZJR19EQU1PTl9WQUREUiBpcyBzZXQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MjgtXHRpZiAoIWRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKERBTU9OX09QU19WQUREUikpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTUtXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjY6I2lmZGVmIENPTkZJR19EQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTctXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjg6I2lmbmRlZiBfREFNT05fVkFERFJfVEVTVF9IXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjk6I2RlZmluZSBfREFNT05fVkFERFJfVEVTVF9IXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwLVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9MjgyPWt1bml0X3Rlc3Rfc3VpdGUoZGFtb25fdGVzdF9zdWl0ZSk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTI4My1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6Mjg0OiNlbmRpZiAvKiBfREFNT05fVkFERFJfVEVTVF9IICovXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTI4NS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6Mjg2OiNlbmRpZlx0LyogQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1QgKi9cbi0tXG5tbS9kYW1vbi92YWRkci5jLTE5LVxubW0vZGFtb24vdmFkZHIuYzoyMDojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL3ZhZGRyLmMtMjEtI3VuZGVmIERBTU9OX01JTl9SRUdJT05fU1pcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gS2NvbmZpZyBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgYEtjb25maWdgIGZpbGUuIEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgdG9wLWxldmVsIHZpZXcgb2YgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGV4cG9zZSBhbGwgb2YgdGhlIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgZmlsZSB3aWxsIGRlZmluZSBhbGwgdGhlIGBDT05GSUdfREFNT05fKmAgc3ltYm9scywgYW5kIHRyYWNpbmcgdGhvc2UgYmFjayB1cCB0aGUgZGVwZW5kZW5jeSB0cmVlIHdpbGwgaWxsdW1pbmF0ZSBleGFjdGx5IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgYmVpbmcgaW1wYWN0ZWQgYnkgYSBEQU1PTiBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoYXQgS2NvbmZpZyBzdHJ1Y3R1cmUgZnVsbHkgYWxsb3dzIG9uZSB0byBzZWUgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IERBTU9OIGNhbiBiZSBidWlsdCBhbmQgY29uZmlndXJlZC4gV2l0aCB0aGlzIGluIGhhbmQsIEkgY2FuIGVmZmVjdGl2ZWx5IG5hdmlnYXRlIHRoZSBlbnRpcmUgREFNT04gc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuICAyMTpcdFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuICAyMjpcdFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxuICAyNzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDI5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDM0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICAzNTpcdFxuICAzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBEQU1PTl9WQUREUlxuICAzOTpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbiAgNDA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA0MTpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDQyOlx0XHRkZWZhdWx0IERBTU9OXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNDU6XHRcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBEQU1PTl9QQUREUlxuICA0ODpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNTA6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA1MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDU0Olx0XHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxuICA1NTpcdFxuICA1NjpcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG4gIDU3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA1ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA1OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNjA6XHRcdGhlbHBcbiAgNjE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgNjI6XHRcbiAgNjM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDY0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA2NTpcdFxuICA2NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBEQU1PTl9TWVNGU1xuICA2OTpcdFx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbiAgNzA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG4gIDcxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDcyOlx0XHRoZWxwXG4gIDczOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxuICA3NDpcdFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxuICA3NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA3OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgODA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjAxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcg4oCTIG1vc3QgbGlrZWx5LCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1NL0RBTU9OIHN1YnN5c3RlbS4gSSBzZWUgdGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRvIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZSBpbnRlcmVzdGluZyBkZXRhaWwgdGhlcmUgdGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBmZWF0dXJlcywgb3IgbWF5YmUgZXZlbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucyB3aXRoaW4gREFNT04mIzM5O3MgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ7IGlkZW50aWZ5IHBvdGVudGlhbCBjdXN0b21pemF0aW9uIHBvaW50cyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEdpdmVuIHRoaXMgaXMgYSBLY29uZmlnIGZpbGUsIGl0IGNvbnRhaW5zIHRoZSBidWlsZCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCB3aGF0IGxvZ2ljIGdvdmVybnMgdGhlbSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhbmQgYmVoYXZpb3Igb2YgREFNT04uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb21wbGV4IGRlcGVuZGVuY3kgdHJlZSwgd2l0aCBwb3RlbnRpYWwgY3Jvc3MtYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucy4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSB3aGF0IG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIG15IGN1cnJlbnQgYXJlYSBvZiBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgODI6XHRcbiAgODM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDg0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA4NTpcdFxuICA4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NzpcdFxuICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4gIDk4Olx0XHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxuIDEwMTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4gMTAyOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gMTAzOlx0XHRoZWxwXG4gMTA0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xuIDEwNTpcdFx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuIDEwNjpcdFx0ICBwYWdlcyByZWNsYWltZWQgZmlyc3QgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuIDEwNzpcdFxuIDEwODpcdGNvbmZpZyBEQU1PTl9TVEFUXG4gMTA5Olx0XHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbiAxMTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAxMTE6XHRcdGhlbHBcbiAxMTI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIGFjY2VzcyBtb25pdG9yaW5nIHN0YXRpc3RpY3Mgc3Vic3lzdGVtLlxuIDExMzpcdFx0ICBJdCBydW5zIERBTU9OIGFuZCBleHBvc2UgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cyBpbiBzaW1wbGUgc3RhdFxuIDExNDpcdFx0ICBtZXRyaWNzLlxuIDExNTpcdFxuIDExNjpcdGNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxuIDExNzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4gMTE4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NUQVRcbiAxMTk6XHRcdGRlZmF1bHQgREFNT05fU1RBVFxuIDEyMDpcdFx0aGVscFxuIDEyMTpcdFx0ICBXaGV0aGVyIHRvIGVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHQuICBVc2VycyBjYW4gZGlzYWJsZSBpdCBpblxuIDEyMjpcdFx0ICBib290IG9yIHJ1bnRpbWUgdXNpbmcgaXRzICYjMzk7ZW5hYmxlZCYjMzk7IHBhcmFtZXRlci5cbiAxMjM6XHRcbiAxMjQ6XHRlbmRtZW51XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBEYW1vbiBQcm9iZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlIERBTU9OIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGZpbHRlcmluZyBhbmQgcHJvYmUgYXBwbGljYXRpb24gcHJvY2Vzc2VzIGFyZSBpbml0aWF0ZWQgYW5kIG1hbmFnZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gdGhlIGNvcmUgZnVuY3Rpb25zOiBgZGFtb25fZmlsdGVyYCwgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLCBgcHJlcF9wcm9iZXNgLCBhbmQgYGFwcGx5X3Byb2Jlc2AuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBrZXJuZWwmIzM5O3Mgc3lzZnMgaW50ZXJmYWNlLCBvciBwZXJoYXBzIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIGhvb2tzIGludG8gdGhlc2UgZnVuY3Rpb25zIGFuZCB0cmlnZ2VycyB0aGVpciBleGVjdXRpb24uIEkgZXhwZWN0IHRvIGZpbmQgdGhpcyBpbmZvcm1hdGlvbiBieSBsb29raW5nIGF0IHRoZSBjYWxsIHN0YWNrcy4gVGhlcmVmb3JlLCBJIHdpbGwgYmVnaW4gYnkgc2VhcmNoaW5nIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGNhbGxzIHRvIGBwcmVwX3Byb2Jlc2AgYW5kIGBhcHBseV9wcm9iZXNgLiBUaGlzIHNlYXJjaCB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlc2Ugb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJlcF9wcm9iZXN8YXBwbHlfcHJvYmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTM4OTM9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM5MzMtXG5tbS9kYW1vbi9jb3JlLmM6MzkzNDpcdFx0ZG9fcHJlcCA9IGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXMgXHUwMDI2XHUwMDI2IGRhbW9uX2hhc19wcmVwKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzkzNS1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkzOC1cdFx0aWYgKGRvX3ByZXApXG5tbS9kYW1vbi9jb3JlLmM6MzkzOTpcdFx0XHRjdHgtXHUwMDNlb3BzLnByZXBfcHJvYmVzKGN0eCwgYWNjZXNzX2NoZWNrX2Rpc2FibGVkKTtcbm1tL2RhbW9uL2NvcmUuYy0zOTQwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTQ1LVx0XHRcdG1heF9tZXJnZV9zY29yZSA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzozOTQ2Olx0XHRpZiAoY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXMpIHtcbm1tL2RhbW9uL2NvcmUuYy0zOTQ3LVx0XHRcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk1Mi1cdFx0XHRcdGdldF9tYXhfd3N1bSA9IGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjM5NTM6XHRcdFx0bWF4X3dzdW0gPSBjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2JlcyhjdHgsXG5tbS9kYW1vbi9jb3JlLmMtMzk1NC1cdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiAhZG9fcHJlcCxcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTkyPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTA3LVxubW0vZGFtb24vcGFkZHIuYzoxMDg6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9wYWRkci5jLTEwOS1cdFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTI0LVxubW0vZGFtb24vcGFkZHIuYzoxMjU6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxubW0vZGFtb24vcGFkZHIuYy0xMjYte1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTM2LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eClcbm1tL2RhbW9uL3BhZGRyLmM6MTM3Olx0XHRcdFx0ZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHIsIHAsIGN0eCk7XG5tbS9kYW1vbi9wYWRkci5jLTEzOC1cdFx0fVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MTYwPXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTc1LVxubW0vZGFtb24vcGFkZHIuYzoxNzY6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vcGFkZHIuYy0xNzctXHRcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9NDU2PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy00NjMtXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxubW0vZGFtb24vcGFkZHIuYzo0NjQ6XHRcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYzo0NjU6XHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXG5tbS9kYW1vbi9wYWRkci5jLTQ2Ni1cdFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXG4tLVxubW0vZGFtb24vdmFkZHIuYz01MTM9c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTI5LVxubW0vZGFtb24vdmFkZHIuYzo1MzA6c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxubW0vZGFtb24vdmFkZHIuYy01MzEte1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NjY5PXN0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNjk2LVxubW0vZGFtb24vdmFkZHIuYzo2OTc6c3RhdGljIHZvaWQgX19kYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vdmFkZHIuYy02OTgtXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTcxNi1cbm1tL2RhbW9uL3ZhZGRyLmM6NzE3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi92YWRkci5jLTczMC1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi92YWRkci5jOjczMTpcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNzMyLVx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xMTcwLVx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE3MTpcdFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXG5tbS9kYW1vbi92YWRkci5jOjExNzI6XHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXG5tbS9kYW1vbi92YWRkci5jLTExNzMtXHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODcwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBEQU1PTiBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgUHJvYmVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHNlY3Rpb24gaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIHN1YnN5c3RlbSwgREFNT04sIGxvY2F0ZWQgaW4gYG1tL2RhbW9uL2AuIEl0JiMzOTtzIHByZXR0eSBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHVzZXItY29udHJvbGxhYmxlIHRocm91Z2ggc3lzZnMsIHdoaWNoIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIGludGVyYWN0aW9uLCBhc3N1bWluZyBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBlbmFibGVkLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGFkZCBwcm9iaW5nIHN1cHBvcnQgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIHdpdGhpbiBEQU1PTi4gVGhpcyBpbmNsdWRlcyBmdW5jdGlvbnMgbGlrZSBgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCwgYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAsIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCwgYW5kIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLiBUaGV5JiMzOTt2ZSBhbHNvIHJlZmFjdG9yZWQgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGludG8gYG9wcy1jb21tb24uY2AuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIGxvZ2ljLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBhZ2UgdGFibGUgd2Fsa2luZyBhbmQgVEhQL2h1Z2V0bGIgbG9ja2luZywgYW5kIGZvbGlvIGNoZWNrcy4gVGhhdCYjMzk7cyBhIGxvdCBvZiB0b3VjaHBvaW50cyBpbiBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLgoKR2l2ZW4gaXRzIHJlYWNoIGludG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWNjZXNzaWJpbGl0eSB0aHJvdWdoIHN5c2ZzLCBpdCYjMzk7cyBpbW1lZGlhdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBleGVjdXRhYmxlIGNvZGUgYW5kIGludGVyYWN0cyB3aXRoIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGUgZnV6emluZyBjcml0ZXJpYToKCiogICAqKldvcnRoRnV6emluZzogVFJVRSoqIC0gQ2hlY2shCgoqICAgKipFbmFibGVDb25maWdzOioqIEFscmlnaHQsIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGdldCB0aGlzIHJ1bm5pbmcgYW5kIGFjY2Vzc2libGU/IEkgbmVlZCB0byBjaGVjayBLY29uZmlnIGRlcGVuZGVuY2llczoKCiAgICAqICAgYERBTU9OYCAob2J2aW91c2x5LCBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSkKICAgICogICBgREFNT05fVkFERFJgCiAgICAqICAgYERBTU9OX1BBRERSYCAoYmVjYXVzZSBgb3BzLWNvbW1vbmAgaXMgY29tcGlsZWQgaWYgZWl0aGVyIGBEQU1PTl9WQUREUmAgb3IgYERBTU9OX1BBRERSYCBpcyBlbmFibGVkKQogICAgKiAgIGBEQU1PTl9TWVNGU2AgKHZpdGFsIHRvIGNvbnRyb2wgREFNT04gYW5kIGNvbmZpZ3VyZSBwcm9iZXMvZmlsdGVycyB2aWEgc3lzZnMgZnJvbSB1c2Vyc3BhY2UpLgogICAgKiAgIGBNRU1DR2AgKGltcG9ydGFudCBmb3IgYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYCBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBgZm9saW9fbWVtY2dfY2hlY2tgKQogICAgKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgKGVzc2VudGlhbCBmb3IgdGhlIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGZ1bmN0aW9uKQogICAgKiAgIGBIVUdFVExCX1BBR0VgIChuZWVkZWQgZm9yIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YCkuCgogICAgVGhlIGxhc3QgZmV3IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gcmVsYXRlIHRvIGh1Z2UgcGFnZSBzdXBwb3J0LCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIHRlc3Qgc2V0dXAuCgpOZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIHV0aWxpemVzIG1lbWNnIGFuZCB2ZXJpZnkgd2hldGhlciB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBmb3IgaXQuCgpMb29raW5nIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCB0aGUgZm9sbG93aW5nIGxpbmVzIG9mIGNvZGUgYXJlIG9mIHJlbGV2YW5jZS4KCmBgYGMKbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CmZpbHRlci0mZ3Q7bWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7CmBgYAoKT2theSwgc28gdGhlIGBmb2xpb19tZW1jZ19jaGVja2AgZnVuY3Rpb24gcmVxdWlyZXMgYENPTkZJR19NRU1DR2AuIEdvb2QgdG8ga25vdy4KCkxhc3RseSwgSSBzaG91bGQgc2VhcmNoIGZvciBgZGFtb25fcHJvYmVgIG9yIGBwcm9iZXNgIGluIGBtbS9kYW1vbi9zeXNmcypgIHRvIGNvbmZpcm0gdGhhdCBzeXNmcyBzdXBwb3J0cyB0aGUgcHJvYmVzLiBUaGVuLCBJIGNhbiBzdGFydCBidWlsZGluZyBzb21lIGluaXRpYWwgZnV6emluZyBoYXJuZXNzZXMgYW5kIHRlc3Qgc2V0dXBzLCBmb2N1c2luZyBvbiB2YXJpYXRpb25zIGluIHRoZSBwcm9iZWQgYWRkcmVzcyBzcGFjZSwgdGhlIGZpbHRlciBjb25maWd1cmF0aW9ucywgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgdGFibGVzIGFuZCBodWdlIHBhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTQzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9kYW1vbi9jb3JlLmM9MTE0PXN0cnVjdCBkYW1vbl9wcmVwICpkYW1vbl9uZXdfcHJlcChlbnVtIGRhbW9uX3ByZXBfYWN0aW9uIGFjdGlvbilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTI1LVxubW0vZGFtb24vY29yZS5jOjEyNjp2b2lkIGRhbW9uX2FkZF9wcmVwKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX3ByZXAgKnByZXApXG5tbS9kYW1vbi9jb3JlLmMtMTI3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTQxPXN0YXRpYyB2b2lkIGRhbW9uX2Rlc3Ryb3lfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqcClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ2LVxubW0vZGFtb24vY29yZS5jOjE0NzpzdGF0aWMgc3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX250aF9wcmVwKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9jb3JlLmMtMTQ4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE2MS1cdHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwO1xubW0vZGFtb24vY29yZS5jOjE2MjpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG5tbS9kYW1vbi9jb3JlLmMtMTYzLVxubW0vZGFtb24vY29yZS5jOjE2NDpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjKSB7XG5tbS9kYW1vbi9jb3JlLmM6MTY1Olx0XHRkYW1vbl9mb3JfZWFjaF9wcmVwKHByZXAsIHByb2JlKVxubW0vZGFtb24vY29yZS5jLTE2Ni1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTcxPXN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODUtXG5tbS9kYW1vbi9jb3JlLmM6MTg2OnZvaWQgZGFtb25fYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTg3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAxPXZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA2LVxubW0vZGFtb24vY29yZS5jOjIwNzpzdGF0aWMgc3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbnRoX2ZpbHRlcihpbnQgbiwgc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTIwOC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxOC1cbm1tL2RhbW9uL2NvcmUuYzoyMTk6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0yMjAte1xubW0vZGFtb24vY29yZS5jOjIyMTpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbm1tL2RhbW9uL2NvcmUuYy0yMjItXG4tLVxubW0vZGFtb24vY29yZS5jLTIzMi1cbm1tL2RhbW9uL2NvcmUuYzoyMzM6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxubW0vZGFtb24vY29yZS5jLTIzNC17XG5tbS9kYW1vbi9jb3JlLmM6MjM1Olx0bGlzdF9hZGRfdGFpbChcdTAwMjZwcm9iZS1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlcHJvYmVzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMzYtfVxubW0vZGFtb24vY29yZS5jLTIzNy1cbm1tL2RhbW9uL2NvcmUuYzoyMzg6c3RhdGljIHZvaWQgZGFtb25fZGVsX3Byb2JlKHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcbm1tL2RhbW9uL2NvcmUuYy0yMzkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDItXG5tbS9kYW1vbi9jb3JlLmM6MjQzOnN0YXRpYyB2b2lkIGRhbW9uX2ZyZWVfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwKVxubW0vZGFtb24vY29yZS5jLTI0NC17XG4tLVxubW0vZGFtb24vY29yZS5jLTI1NC1cbm1tL2RhbW9uL2NvcmUuYzoyNTU6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9jb3JlLmMtMjU2LXtcbm1tL2RhbW9uL2NvcmUuYzoyNTc6XHRkYW1vbl9kZWxfcHJvYmUocCk7XG5tbS9kYW1vbi9jb3JlLmM6MjU4Olx0ZGFtb25fZnJlZV9wcm9iZShwKTtcbm1tL2RhbW9uL2NvcmUuYy0yNTktfVxubW0vZGFtb24vY29yZS5jLTI2MC1cbm1tL2RhbW9uL2NvcmUuYzoyNjE6c3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjYyLXtcbm1tL2RhbW9uL2NvcmUuYzoyNjM6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG5tbS9kYW1vbi9jb3JlLmMtMjY0LVx0aW50IGkgPSAwO1xubW0vZGFtb24vY29yZS5jLTI2NS1cbm1tL2RhbW9uL2NvcmUuYzoyNjY6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYy0yNjctXHRcdGlmIChpJiM0MzsmIzQzOyA9PSBuKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzItXG5tbS9kYW1vbi9jb3JlLmM6MjczOnN0YXRpYyBib29sIGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMjc0LXtcbm1tL2RhbW9uL2NvcmUuYzoyNzU6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG5tbS9kYW1vbi9jb3JlLmMtMjc2LVxubW0vZGFtb24vY29yZS5jOjI3NzpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYy0yNzgtXHRcdGlmIChwLVx1MDAzZXdlaWdodClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDgtXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM1MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjYtXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXG5tbS9kYW1vbi9jb3JlLmM6MzY3Olx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXG5tbS9kYW1vbi9jb3JlLmM6MzY5Olx0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxubW0vZGFtb24vY29yZS5jOjM3MDpcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NDAzOlx0XHRyZWdpb24tXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NDA0Olx0XHRyZWdpb24tXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy00MDUtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTQ2Mj1zdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXG5tbS9kYW1vbi9jb3JlLmM6NDY5OiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbm1tL2RhbW9uL2NvcmUuYy00NzAtICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbm1tL2RhbW9uL2NvcmUuYzo0NzE6ICogQGxhc3Q6XHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxubW0vZGFtb24vY29yZS5jLTQ3Mi0gKiBAY3R4Olx0Y29udGV4dCBvZiBcdTAwMjZyLlxubW0vZGFtb24vY29yZS5jLTQ3My0gKlxubW0vZGFtb24vY29yZS5jOjQ3NDogKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLlxubW0vZGFtb24vY29yZS5jLTQ3NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0NzY6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmMtNDc3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtNDc4LXtcbm1tL2RhbW9uL2NvcmUuYzo0Nzk6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xubW0vZGFtb24vY29yZS5jLTQ4MC1cdHVuc2lnbmVkIGludCBzdW0gPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy00ODItXG5tbS9kYW1vbi9jb3JlLmM6NDgzOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xubW0vZGFtb24vY29yZS5jLTQ4NC1cdFx0aWYgKGxhc3QpXG5tbS9kYW1vbi9jb3JlLmM6NDg1Olx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtXHUwMDNld2VpZ2h0O1xubW0vZGFtb24vY29yZS5jLTQ4Ni1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjQ4NzpcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDg4LVx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYz05MDE9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05MjctXG5tbS9kYW1vbi9jb3JlLmM6OTI4Olx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXByb2Jlcyk7XG5tbS9kYW1vbi9jb3JlLmMtOTI5LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz05NTA9dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTk1Mi1cdHN0cnVjdCBkYW1vcyAqcywgKm5leHRfcztcbm1tL2RhbW9uL2NvcmUuYzo5NTM6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsICpuZXh0X3A7XG5tbS9kYW1vbi9jb3JlLmMtOTU0LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTktXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShwLCBuZXh0X3AsIGN0eClcbm1tL2RhbW9uL2NvcmUuYzo5NjE6XHRcdGRhbW9uX2Rlc3Ryb3lfcHJvYmUocCk7XG5tbS9kYW1vbi9jb3JlLmMtOTYyLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAwOS1cbm1tL2RhbW9uL2NvcmUuYzoxMDEwOnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9jb3JlLmMtMTAxMS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDEzLXtcbm1tL2RhbW9uL2NvcmUuYzoxMDE0Olx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xubW0vZGFtb24vY29yZS5jLTEwMTUtXHRpbnQgaSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTAxNi1cbm1tL2RhbW9uL2NvcmUuYzoxMDE3Olx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTAxODpcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXG5tbS9kYW1vbi9jb3JlLmM6MTAxOTpcdFx0XHRcdHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTAyMC1cdFx0aWYgKCFhZ2dyZWdhdGluZylcbm1tL2RhbW9uL2NvcmUuYzoxMDIxOlx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYzoxMDIyOlx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0sIG9sZF9hdHRycyxcbm1tL2RhbW9uL2NvcmUuYy0xMDIzLVx0XHRcdFx0XHRuZXdfYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTEwMjQtXHRcdGVsc2Vcbm1tL2RhbW9uL2NvcmUuYzoxMDI1Olx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMTAyNi1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMzA9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzMte1xubW0vZGFtb24vY29yZS5jOjEwMzQ6XHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMTAzNS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTQxNj1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0MjYtXG5tbS9kYW1vbi9jb3JlLmM6MTQyNzpzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTE0Mjgte1xubW0vZGFtb24vY29yZS5jLTE0MjktXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbm1tL2RhbW9uL2NvcmUuYzoxNDMwOlx0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYzoxNDMxOlx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbm1tL2RhbW9uL2NvcmUuYy0xNDMyLVx0dW5zaWduZWQgaW50IHdzdW0sIHdzdW1fdG9fYWRkO1xubW0vZGFtb24vY29yZS5jOjE0MzM6XHRpbnQgbnJfcHJvYmVzO1xubW0vZGFtb24vY29yZS5jLTE0MzQtXG5tbS9kYW1vbi9jb3JlLmM6MTQzNTpcdG5yX3Byb2JlcyA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6MTQzNjpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXG5tbS9kYW1vbi9jb3JlLmM6MTQzNzpcdFx0bnJfcHJvYmVzJiM0MzsmIzQzOztcbm1tL2RhbW9uL2NvcmUuYzoxNDM4Olx0aWYgKG5yX3Byb2JlcyBcdTAwM2UgREFNT05fTUFYX1BST0JFUylcbm1tL2RhbW9uL2NvcmUuYy0xNDM5LVx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmMtMTQ0MC1cbm1tL2RhbW9uL2NvcmUuYzoxNDQxOlx0aWYgKCFkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpKVxubW0vZGFtb24vY29yZS5jLTE0NDItXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNDQ3LVxubW0vZGFtb24vY29yZS5jOjE0NDg6XHQvKiBpbnZhbGlkIGlmIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbiBvdmVyZmxvdyAqL1xubW0vZGFtb24vY29yZS5jOjE0NDk6XHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0xNDUwLVx0d3N1bSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6MTQ1MTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNDUyOlx0XHRpZiAocHJvYmUtXHUwMDNld2VpZ2h0IFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jLTE0NTMtXHRcdFx0cmV0dXJuIGZhbHNlO1xubW0vZGFtb24vY29yZS5jOjE0NTQ6XHRcdHdzdW1fdG9fYWRkID0gcHJvYmUtXHUwMDNld2VpZ2h0ICogbWF4X3Byb2JlX2hpdHM7XG5tbS9kYW1vbi9jb3JlLmMtMTQ1NS1cdFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcdTAwM2Mgd3N1bV90b19hZGQpXG4tLVxubW0vZGFtb24vY29yZS5jPTE3NjE9c3RhdGljIHZvaWQgZGFtb25fY29tbWl0X3ByZXAoc3RydWN0IGRhbW9uX3ByZXAgKmRzdCwgc3RydWN0IGRhbW9uX3ByZXAgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc2NS1cbm1tL2RhbW9uL2NvcmUuYzoxNzY2OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3ByZXBzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xNzY3LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTc5MT1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgwNS1cbm1tL2RhbW9uL2NvcmUuYzoxODA2OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG5tbS9kYW1vbi9jb3JlLmM6MTgwNzpcdFx0c3RydWN0IGRhbW9uX3Byb2JlICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTgwOC17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4MzktXG5tbS9kYW1vbi9jb3JlLmM6MTg0MDpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTg0MS17XG5tbS9kYW1vbi9jb3JlLmM6MTg0MjpcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqbmV4dCwgKnNyY19wcm9iZSwgKm5ld19wcm9iZTtcbm1tL2RhbW9uL2NvcmUuYy0xODQzLVx0aW50IGkgPSAwLCBqID0gMCwgZXJyO1xubW0vZGFtb24vY29yZS5jLTE4NDQtXG5tbS9kYW1vbi9jb3JlLmM6MTg0NTpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUoZHN0X3Byb2JlLCBuZXh0LCBkc3QpIHtcbm1tL2RhbW9uL2NvcmUuYzoxODQ2Olx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSYjNDM7JiM0MzssIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmM6MTg0NzpcdFx0aWYgKHNyY19wcm9iZSkge1xubW0vZGFtb24vY29yZS5jOjE4NDg6XHRcdFx0ZHN0X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmM6MTg0OTpcdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xubW0vZGFtb24vY29yZS5jLTE4NTAtXHRcdFx0aWYgKGVycilcbm1tL2RhbW9uL2NvcmUuYy0xODUxLVx0XHRcdFx0cmV0dXJuIGVycjtcbm1tL2RhbW9uL2NvcmUuYzoxODUyOlx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcbm1tL2RhbW9uL2NvcmUuYy0xODUzLVx0XHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jLTE4NTUtXHRcdH0gZWxzZSB7XG5tbS9kYW1vbi9jb3JlLmM6MTg1NjpcdFx0XHRkYW1vbl9kZXN0cm95X3Byb2JlKGRzdF9wcm9iZSk7XG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny1cdFx0fVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODU5LVxubW0vZGFtb24vY29yZS5jOjE4NjA6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKHNyY19wcm9iZSwgbmV4dCwgc3JjKSB7XG5tbS9kYW1vbi9jb3JlLmMtMTg2MS1cdFx0aWYgKGomIzQzOyYjNDM7IFx1MDAzYyBpKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODYzLVxubW0vZGFtb24vY29yZS5jOjE4NjQ6XHRcdG5ld19wcm9iZSA9IGRhbW9uX25ld19wcm9iZSgpO1xubW0vZGFtb24vY29yZS5jOjE4NjU6XHRcdGlmICghbmV3X3Byb2JlKVxubW0vZGFtb24vY29yZS5jLTE4NjYtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTg2NzpcdFx0ZGFtb25fYWRkX3Byb2JlKGRzdCwgbmV3X3Byb2JlKTtcbm1tL2RhbW9uL2NvcmUuYzoxODY4Olx0XHRuZXdfcHJvYmUtXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVx1MDAzZXdlaWdodDtcbm1tL2RhbW9uL2NvcmUuYzoxODY5Olx0XHRlcnIgPSBkYW1vbl9jb21taXRfcHJlcHMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xubW0vZGFtb24vY29yZS5jLTE4NzAtXHRcdGlmIChlcnIpXG5tbS9kYW1vbi9jb3JlLmMtMTg3MS1cdFx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vY29yZS5jOjE4NzI6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbm1tL2RhbW9uL2NvcmUuYy0xODczLVx0XHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODc5PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTAxLVxubW0vZGFtb24vY29yZS5jOjE5MDI6XHRpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKVxubW0vZGFtb24vY29yZS5jLTE5MDMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTI2LVx0ZHN0LVx1MDAzZW9wcyA9IHNyYy1cdTAwM2VvcHM7XG5tbS9kYW1vbi9jb3JlLmM6MTkyNzpcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTE5MjgtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjkzPXN0YXRpYyB2b2lkIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjk2LVx0dW5zaWduZWQgaW50IHRpID0gMDtcdC8qIHRhcmdldCYjMzk7cyBpbmRleCAqL1xubW0vZGFtb24vY29yZS5jOjIyOTc6XHR1bnNpZ25lZCBpbnQgbnJfcHJvYmVzID0gMDtcbm1tL2RhbW9uL2NvcmUuYzoyMjk4Olx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbm1tL2RhbW9uL2NvcmUuYy0yMjk5LVxubW0vZGFtb24vY29yZS5jLTIzMDAtXHRpZiAodHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWRfZW5hYmxlZCgpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjMwMTpcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGMpXG5tbS9kYW1vbi9jb3JlLmM6MjMwMjpcdFx0XHRucl9wcm9iZXMmIzQzOyYjNDM7O1xubW0vZGFtb24vY29yZS5jLTIzMDMtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jLTIzMTItXHRcdFx0dHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWQodGksIHIsXG5tbS9kYW1vbi9jb3JlLmM6MjMxMzpcdFx0XHRcdFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgbnJfcHJvYmVzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMzE0LVx0XHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXM7XG4tLVxubW0vZGFtb24vY29yZS5jLTIzMTYtXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMzE3Olx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSByLVx1MDAzZXByb2JlX2hpdHNbaV07XG5tbS9kYW1vbi9jb3JlLmM6MjMxODpcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmMtMjMxOS1cdFx0XHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTM0MjY9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQzNS1cdGwtXHUwMDNlYXIuZW5kID0gci1cdTAwM2Vhci5lbmQ7XG5tbS9kYW1vbi9jb3JlLmM6MzQzNjpcdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xubW0vZGFtb24vY29yZS5jLTM0MzctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOylcbm1tL2RhbW9uL2NvcmUuYzozNDM4Olx0XHRsLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAobC1cdTAwM2Vwcm9iZV9oaXRzW2ldICogc3pfbCAmIzQzOyByLVx1MDAzZXByb2JlX2hpdHNbaV1cbm1tL2RhbW9uL2NvcmUuYy0zNDM5LVx0XHRcdFx0KiBzel9yKSAvIChzel9sICYjNDM7IHN6X3IpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxubW0vZGFtb24vY29yZS5jOjM0NDU6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcbm1tL2RhbW9uL2NvcmUuYy0zNDQ2LXtcbm1tL2RhbW9uL2NvcmUuYzozNDQ3Olx0aWYgKHVzZV9wcm9iZV9oaXRzKVxubW0vZGFtb24vY29yZS5jOjM0NDg6XHRcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNDQ5LVx0aWYgKGxhc3QpXG4tLVxubW0vZGFtb24vY29yZS5jPTM0NjE9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM0NjQtXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xubW0vZGFtb24vY29yZS5jOjM0NjU6XHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNDY2LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDY5LVxubW0vZGFtb24vY29yZS5jOjM0NzA6XHRcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xubW0vZGFtb24vY29yZS5jOjM0NzE6XHRcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDcyLVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDg2LVx0XHRkaWZmID0gYWJzX2RpZmYoc2NvcmUsIGRhbW9uX21lcmdlX3Njb3JlKHByZXYsIGZhbHNlLCBjdHgsXG5tbS9kYW1vbi9jb3JlLmM6MzQ4NzpcdFx0XHRcdFx0dXNlX3Byb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDg4LVx0XHRpZiAoZGlmZiBcdTAwM2UgdGhyZXMpXG4tLVxubW0vZGFtb24vY29yZS5jPTM1NjY9c3RhdGljIGludCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzU4MC1cdG5ldy1cdTAwM2Vucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXM7XG5tbS9kYW1vbi9jb3JlLmM6MzU4MTpcdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xubW0vZGFtb24vY29yZS5jOjM1ODI6XHRtZW1jcHkobmV3LVx1MDAzZXByb2JlX2hpdHMsIHItXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXHUwMDNlcHJvYmVfaGl0cykpO1xubW0vZGFtb24vY29yZS5jOjM1ODM6XHRtZW1jcHkobmV3LVx1MDAzZWxhc3RfcHJvYmVfaGl0cywgci1cdTAwM2VsYXN0X3Byb2JlX2hpdHMsXG5tbS9kYW1vbi9jb3JlLmM6MzU4NDpcdFx0XHRzaXplb2Yoci1cdTAwM2VsYXN0X3Byb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYy0zNTg1LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zODkzPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTI1LVx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWw7XG5tbS9kYW1vbi9jb3JlLmM6MzkyNjpcdFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xubW0vZGFtb24vY29yZS5jLTM5MjctXHRcdGJvb2wgZG9fcHJlcDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkzMy1cbm1tL2RhbW9uL2NvcmUuYzozOTM0Olx0XHRkb19wcmVwID0gY3R4LVx1MDAzZW9wcy5wcmVwX3Byb2JlcyBcdTAwMjZcdTAwMjYgZGFtb25faGFzX3ByZXAoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zOTM1LVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTM4LVx0XHRpZiAoZG9fcHJlcClcbm1tL2RhbW9uL2NvcmUuYzozOTM5Olx0XHRcdGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXMoY3R4LCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpO1xubW0vZGFtb24vY29yZS5jLTM5NDAtXG4tLVxubW0vZGFtb24vY29yZS5jLTM5NDUtXHRcdFx0bWF4X21lcmdlX3Njb3JlID0gY3R4LVx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcyhjdHgpO1xubW0vZGFtb24vY29yZS5jOjM5NDY6XHRcdGlmIChjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2Jlcykge1xubW0vZGFtb24vY29yZS5jLTM5NDctXHRcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTUyLVx0XHRcdFx0Z2V0X21heF93c3VtID0gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6Mzk1MzpcdFx0XHRtYXhfd3N1bSA9IGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcbm1tL2RhbW9uL2NvcmUuYy0zOTU0LVx0XHRcdFx0XHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXHUwMDI2XHUwMDI2ICFkb19wcmVwLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9OTI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMDctXG5tbS9kYW1vbi9wYWRkci5jOjEwODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL3BhZGRyLmM6MTA5Olx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9wYWRkci5jLTExMC17XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMTItXG5tbS9kYW1vbi9wYWRkci5jOjExMzpcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcbm1tL2RhbW9uL3BhZGRyLmMtMTE0LVx0XHRzd2l0Y2ggKHAtXHUwMDNlYWN0aW9uKSB7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMjQtXG5tbS9kYW1vbi9wYWRkci5jOjEyNTpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXG5tbS9kYW1vbi9wYWRkci5jLTEyNi17XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xMjgtXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xubW0vZGFtb24vcGFkZHIuYzoxMjk6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG5tbS9kYW1vbi9wYWRkci5jLTEzMC1cbi0tXG5tbS9kYW1vbi9wYWRkci5jLTEzNS1cdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG5tbS9kYW1vbi9wYWRkci5jOjEzNjpcdFx0XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXG5tbS9kYW1vbi9wYWRkci5jOjEzNzpcdFx0XHRcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xubW0vZGFtb24vcGFkZHIuYy0xMzgtXHRcdH1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE2MD1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2RhbW9uL3BhZGRyLmM6MTYxOlx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG5tbS9kYW1vbi9wYWRkci5jLTE2Mi17XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzUtXG5tbS9kYW1vbi9wYWRkci5jOjE3NjpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9wYWRkci5jLTE3Ny1cdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xODAtXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xubW0vZGFtb24vcGFkZHIuYzoxODE6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG5tbS9kYW1vbi9wYWRkci5jLTE4Mi1cdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XG4tLVxubW0vZGFtb24vcGFkZHIuYy0xOTUtXHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbm1tL2RhbW9uL3BhZGRyLmM6MTk2Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xubW0vZGFtb24vcGFkZHIuYy0xOTctXHRcdFx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcbm1tL2RhbW9uL3BhZGRyLmM6MTk4Olx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xubW0vZGFtb24vcGFkZHIuYy0xOTktXHRcdFx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTIwMy1cdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxubW0vZGFtb24vcGFkZHIuYzoyMDQ6XHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG5tbS9kYW1vbi9wYWRkci5jLTIwNS1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDYzLVx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDY0Olx0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl9wYV9wcmVwX3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDY1Olx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYy00NjYtXHRcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMS0vKlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyOiAqIHByb2JlIGRpcmVjdG9yeVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzLSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1OnN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTYtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpkYW1vc19zeXNmc19wcm9iZV9hbGxvYyh1bnNpZ25lZCBjaGFyIGhpdHMpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIyOlx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpwcm9iZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDpcdHByb2JlID0ga3phbGxvY19vYmooKnByb2JlKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNTpcdGlmICghcHJvYmUpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYtXHRcdHJldHVybiBOVUxMO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3Olx0cHJvYmUtXHUwMDNlaGl0cyA9IGhpdHM7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg6XHRyZXR1cm4gcHJvYmU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjktfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMT1zdGF0aWMgc3NpemVfdCBoaXRzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzMte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM0Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1Olx0XHRcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mzc6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVoaHVcXG5cJiMzNDssIHByb2JlLVx1MDAzZWhpdHMpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4LX1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zOS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MDpzdGF0aWMgdm9pZCBkYW1vc19zeXNmc19wcm9iZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MjpcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqcHJvYmUgPSBjb250YWluZXJfb2Yoa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzpcdFx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUsIGtvYmopO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ1Olx0a2ZyZWUocHJvYmUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ2LX1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Ny1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3Byb2JlX2hpdHNfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDktXHRcdF9fQVRUUl9ST19NT0RFKGhpdHMsIDA0MDApO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTUwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUxOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19wcm9iZV9hdHRyc1tdID0ge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOlx0XHUwMDI2ZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMtXHROVUxMLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0LX07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTU6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19wcm9iZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTc6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb3Nfc3lzZnNfcHJvYmVfa3R5cGUgPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTg6XHQucmVsZWFzZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2UsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTktXHQuc3lzZnNfb3BzID0gXHUwMDI2a29ial9zeXNmc19vcHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjA6XHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19wcm9iZV9ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjEtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjMtLypcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2NDogKiBwcm9iZXMgZGlyZWN0b3J5XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjUtICovXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjYtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Njc6c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY5Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICoqcHJvYmVzX2Fycjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MC1cdGludCBucjtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NzM6c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKmRhbW9zX3N5c2ZzX3Byb2Jlc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Ni19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Nzg6c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcHJvYmVzX3JtX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc5LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4MDpcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqKnByb2Jlc19hcnIgPSBwcm9iZXMtXHUwMDNlcHJvYmVzX2Fycjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04MS1cdGludCBpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTgyLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjgzOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvYmVzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOylcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4NDpcdFx0a29iamVjdF9wdXQoXHUwMDI2cHJvYmVzX2FycltpXS1cdTAwM2Vrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4NTpcdHByb2Jlcy1cdTAwM2VuciA9IDA7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6ODY6XHRrZnJlZShwcm9iZXNfYXJyKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4NzpcdHByb2Jlcy1cdTAwM2Vwcm9iZXNfYXJyID0gTlVMTDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04OC19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTA6c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkxLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTM6XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk0Olx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICoqcHJvYmVzX2Fycjtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05NS1cdGludCBpID0gMDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05Ni1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5NzpcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTgtXHRcdGkmIzQzOyYjNDM7O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTAzOlx0cHJvYmVzX2FyciA9IGttYWxsb2Nfb2JqcygqcHJvYmVzX2FyciwgaSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA0Olx0aWYgKCFwcm9iZXNfYXJyKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwNS1cdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA2Olx0cHJvYmVzLVx1MDAzZXByb2Jlc19hcnIgPSBwcm9iZXNfYXJyO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDgtXHRpID0gMDtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDk6XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTEwOlx0XHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKnN5c19wcm9iZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTEtXHRcdGludCBlcnI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEyLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExMzpcdFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0Olx0XHRcdFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExNTpcdFx0aWYgKCFzeXNfcHJvYmUpIHtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTY6XHRcdFx0ZGFtb3Nfc3lzZnNfcHJvYmVzX3JtX2RpcnMocHJvYmVzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTctXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE4LVx0XHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE5Olx0XHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZzeXNfcHJvYmUtXHUwMDNla29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjA6XHRcdFx0XHRcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9rdHlwZSwgXHUwMDI2cHJvYmVzLVx1MDAzZWtvYmosIFwmIzM0OyVkXCYjMzQ7LFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMS1cdFx0XHRcdGkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMi1cdFx0aWYgKGVycikge1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMzpcdFx0XHRrb2JqZWN0X3B1dChcdTAwMjZzeXNfcHJvYmUtXHUwMDNla29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI0Olx0XHRcdGRhbW9zX3N5c2ZzX3Byb2Jlc19ybV9kaXJzKHByb2Jlcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI1LVx0XHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI2LVx0XHR9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI3Olx0XHRwcm9iZXNfYXJyW2kmIzQzOyYjNDM7XSA9IHN5c19wcm9iZTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkyNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBEQU1PTiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIGRlY2VudC1zaXplZCBzZXQgb2YgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIFNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZyBhcmUgZWl0aGVyIG5ldyBvciBoYXZlIGJlZW4gY2hhbmdlZDoKCiogICBJbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgd2UgaGF2ZSBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAuCiogICBJbiBgbW0vZGFtb24vcGFkZHIuY2AsIGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgIGlzIGluIHRoZSBtaXguCiogICBUaGUgYnVsayBvZiB0aGUgd29yayBzZWVtcyB0byBiZSBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHdpdGggYWRkaXRpb25zIGFuZCBtb2RpZmljYXRpb25zIHRvIGZ1bmN0aW9uczoKICAgICogICBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gCiAgICAqICAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYAogICAgKiAgIGBkYW1vbl92YV95b3VuZ19hZGRyYAogICAgKiAgIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgCiAgICAqICAgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYAogICAgKiAgIGBkYW1vbl92YV9wcm9iZV9mb2xpb2AKICAgICogICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YAogICAgKiAgIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YAogICAgKiAgIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AKICAgICogICBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYAoKTmV4dCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhwb3N1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgaW50ZWdyYXRpb24gd2l0aCB0b29scyBvciBhbmFseXNlcy4gSSBzaG91bGQgcXVpY2tseSBzb3J0IHRoZSBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgc3ltYm9scy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgd2hpbGUgbm90IGRpcmVjdGx5IHZpc2libGUsIGNhbiBzdGlsbCBpbXBhY3QgdGhlIGludGVyZmFjZSBpZiB0aGVpciBjYWxsZXJzIG9yIGVudHJ5IHBvaW50cyBhcmUgbm9uLXN0YXRpYyBvciBjYW4gYmUgaW5saW5lZC4gS2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGluY2x1ZGU6CgoqICAgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIChhcHBlYXJzIHRvIGJlIG5vbi1zdGF0aWMgaW4gb3BzLWNvbW1vbi5jKS4KKiAgIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AKKiAgIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgCiogICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YAoqICAgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgCiogICBgZGFtb25fdmFfZmlsdGVyX21hdGNoYAoqICAgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYAoqICAgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAKCkZpbmFsbHksIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBxdWlja2x5IGRvIGEgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZpbGVzIG9yIHN5bWJvbHMgdGhhdCBoYXZlIGJlZW4gYWZmZWN0ZWQuIFRoZW4sIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGdpdCBsb2cgYW5kIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZXNlIGNoYW5nZXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgJiMzOTt3aHkmIzM5OyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgYmFzaXMgZm9yIGEgZGV0YWlsZWQgY29kZSBpbnNwZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi92YWRkci5jPTY2OT1zdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY5Ni1cbm1tL2RhbW9uL3ZhZGRyLmM6Njk3OnN0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3ZhZGRyLmMtNjk4LVx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MTYtXG5tbS9kYW1vbi92YWRkci5jOjcxNzpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi92YWRkci5jLTcxOC1cdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MzAtXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xubW0vZGFtb24vdmFkZHIuYzo3MzE6XHRcdFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XG5tbS9kYW1vbi92YWRkci5jLTczMi1cdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MTE2Mz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMTE3MS1cdFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXG5tbS9kYW1vbi92YWRkci5jOjExNzI6XHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXG5tbS9kYW1vbi92YWRkci5jLTExNzMtXHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzgyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIEltcGxlbWVudGF0aW9uIGFuZCBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBEQU1PTiBjb3JlIGltcGxlbWVudGF0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSByZXZpZXcgaG93IERBTU9OIHJ1bnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBga2RhbW9uZF9mbmAgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB3aGVuIERBTU9OIGlzIGVuYWJsZWQsIGxpa2VseSB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UgYXQgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLy4uLmAsIHRoaXMgYGtkYW1vbmRfZm5gIGZ1bmN0aW9uIGdldHMgaW5pdGlhdGVkLiBGcm9tIHRoZXJlLCBpdCBtYWtlcyBjYWxscyB0byBgY3R4LSZndDtvcHMucHJlcF9wcm9iZXNgIGFuZCBgY3R4LSZndDtvcHMuYXBwbHlfcHJvYmVzYC4gR2l2ZW4gdGhlIGBEQU1PTl9WQUREUmAgcmVnaXN0cmF0aW9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjdHgtJmd0O29wcy5wcmVwX3Byb2Jlc2AgaXMsIGFzIGV4cGVjdGVkLCBwb2ludGluZyB0byBgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBhbmQgYGN0eC0mZ3Q7b3BzLmFwcGx5X3Byb2Jlc2AgaXMgc2V0IHRvIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBJdCYjMzk7cyBhbHNvIHdvcnRoIGNvbmZpcm1pbmcgdGhhdCBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgaXMgY29ycmVjdGx5IGludm9rZWQgZnJvbSBib3RoIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgIGFuZCBgZGFtb25fcGFfZmlsdGVyX21hdGNoYAoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbGlzdCB0aGVtIG91dCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWxsIHRoZXJlOgoKKiAgIGBEQU1PTmA6IFRoZSBEQU1PTiBmcmFtZXdvcmsgaXRzZWxmLgoqICAgYERBTU9OX1ZBRERSYDogVGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIOKAkyB0aGlzIGRlcGVuZHMgb24gREFNT04gYW5kLCBuYXR1cmFsbHksIHRoZSBNTVUuCiogICBgREFNT05fUEFERFJgOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBhbHNvIGRlcGVuZGVudCBvbiBEQU1PTiBhbmQgdGhlIE1NVS4KKiAgIGBEQU1PTl9TWVNGU2A6IFRoZSBzeXNmcyBpbnRlcmZhY2UsIGVzc2VudGlhbCBmb3IgY29uZmlndXJpbmcgcHJvYmVzIGFuZCB0YXJnZXRzIGZyb20gdXNlcnNwYWNlLgoqICAgYE1FTUNHYDogVGhpcyBvbmUgaXMgdXNlZCBpbiBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgd2hlbiBgREFNT05fRklMVEVSX1RZUEVfTUVNQ0dgIGlzIGFjdGl2ZSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhdmFpbGFibGUuCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgOiBUaGlzIGlzIGltcG9ydGFudCBmb3IgYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAuCiogICBgSFVHRVRMQl9QQUdFYDogQW5kIHRoaXMgaXMgdXNlZCBpbiBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGltcG9ydGFudCBmb3IgbGFyZ2UgcGFnZXMuCgpKdXN0IHRvIGNvbmZpcm0sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBjb25maWcgbmFtZXMgYW5kIHRoZW4gSSYjMzk7bGwgZ3JlcCB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY29uZmlnIG9wdGlvbnMgYXJlIGluZGVlZCBkZWZpbmVkIGFuZCBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGBDT05GSUdfREFNT05fUEFERFJgLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19NRU1DR2AsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBBZnRlciB0aGlzLCBpdCYjMzk7cyBqdXN0IGEgbWF0dGVyIG9mIGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBhbGwgZXhpc3QgYW5kIHRoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKE1FTUNHfFRSQU5TUEFSRU5UX0hVR0VQQUdFfEhVR0VUTEJfUEFHRSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02ODk9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy02OTEtXG5tbS9LY29uZmlnOjY5Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNjkzLVx0ZGVmX2Jvb2wgblxuLS1cbm1tL0tjb25maWc9ODI3PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODI5LVxubW0vS2NvbmZpZzo4MzA6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzEtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg0OD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1My1cbm1tL0tjb25maWc6ODU0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTUtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjAtXG5tbS9LY29uZmlnOjg2MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2Mi1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzEtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3Nz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4Ni1cbm1tL0tjb25maWc6ODg3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODg4LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTYtXG5tbS9LY29uZmlnOjg5NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy04OTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDQtXG5tbS9LY29uZmlnOjkwNTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwNi1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTIyPWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMxLVxubW0vS2NvbmZpZzo5MzI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0MC1cbm1tL0tjb25maWc6OTQxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0Mi1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0OC1cbm1tL0tjb25maWc6OTQ5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUwLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjcxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEtleSBLZXJuZWwgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBzb21ldGhpbmcgdGhhdCBsaWtlbHkgaW52b2x2ZXMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlc291cmNlIGNvbnN0cmFpbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0d28gY3JpdGljYWwga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYW5kIGBDT05GSUdfTUVNQ0dgLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIG9mdGVuIGF0IHRoZSBoZWFydCBvZiBwZXJmb3JtYW5jZSB0dW5pbmcgYW5kIHJlc291cmNlIGlzb2xhdGlvbiBpbiBjb250YWluZXJpemVkIG9yIGhpZ2gtcGVyZm9ybWFuY2UgZW52aXJvbm1lbnRzLiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgY3J1Y2lhbCBmb3IgYXBwbGljYXRpb25zIHRoYXQgYmVuZWZpdCBmcm9tIGxhcmdlIHBhZ2Ugc2l6ZXMsIHJlZHVjaW5nIFRMQiBtaXNzZXMgYW5kIGltcHJvdmluZyBtZW1vcnkgYWNjZXNzIHNwZWVkcy4gSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBhc2NlcnRhaW4gaWYgaXQgaXMgZW5hYmxlZC4gQXQgdGhlIHNhbWUgdGltZSwgYENPTkZJR19NRU1DR2AgaXMgZXF1YWxseSBpbXBvcnRhbnQsIGl0IGVuYWJsZXMgY29udHJvbCBncm91cHMgZm9yIG1lbW9yeSwgYWxsb3dpbmcgZ3JhbnVsYXIgYWxsb2NhdGlvbiBhbmQgaXNvbGF0aW9uIG9mIG1lbW9yeSByZXNvdXJjZXMgYmV0d2VlbiBwcm9jZXNzZXMuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBjb25maWd1cmVkLCBhbmQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGludGVycGxheSwgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoSFVHRVRMQl9QQUdFfE1FTUNHKSQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzctXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc5LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nLCBhbmQgdGhlIGh1Z2V0bGIgc3Vic3lzdGVtIGlzIGltbWVkaWF0ZWx5IHBvcHBpbmcgaW50byBteSBoZWFkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTm8gcG9pbnQgaW4gY2hhc2luZyBnaG9zdHMgaWYgSHVnZVRMQiBzdXBwb3J0IGlzbiYjMzk7dCBldmVuIGNvbXBpbGVkIGluLiBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBjaGVjayBhcmUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWcgZmlsZXMg4oCTIGxpa2VseSBgbW0vS2NvbmZpZ2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBtaWdodCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCBpZiBpdCYjMzk7cyBiZWVuIG1vdmVkIG9yIGlmIGl04oCZcyBhIGRlcGVuZGVuY3kgb2Ygc29tZXRoaW5nIGVsc2UuIFRoaXMgY2hlY2sgd2lsbCBzYXZlIG1lIGEgdG9uIG9mIGRlYnVnZ2luZyB0aW1lIGxhdGVyIG9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb24gaXMgdGhlcmUgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBmb3IgYXJjaGl0ZWN0dXJhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBIVUdFVExCX1BBR0UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBjb25maWcgSFVHRVRMQl9QQUdFYCBzeW1ib2wgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzcGFjZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcsIGF1ZGl0aW5nLCBvciBwZXJoYXBzIGV2ZW4gaW1wbGVtZW50aW5nIGEgY2hhbmdlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIG1hbmFnZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBwcm9iYWJseSBhbHJlYWR5IGhhdmUgYSBkZWNlbnQgaWRlYSBvZiB3aGVyZSB0byAqc3RhcnQqIGxvb2tpbmcsIGJ1dCBhIHN5c3RlbWF0aWMgc2VhcmNoIGlzIHRoZSBiZXN0IGFwcHJvYWNoLiBNeSBtZW50YWwgbW9kZWwgaXMgcHJvYmFibHkgZm9ybWluZyBhIHF1ZXJ5IHRoYXQgSSYjMzk7bGwgcnVuIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBidWlsZCBzeXN0ZW0gKGxpa2VseSBga2NvbmZpZ2ApLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGlzIGlzIHdoZXJlIEkgd291bGQgc3RhcnQuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBmb3JtaW5nIGEgcGxhbiB0byByYXBpZGx5IGxvY2F0ZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbiBhbmQgaXRzIGFzc29jaWF0ZWQgY29udGV4dC4gVGhlIGdvYWwgaXMgZWZmaWNpZW5jeS4gTGV0JiMzOTtzIGRvIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTQyCgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBQYXRjaCBSZXZpZXc6IFZpcnR1YWwgQWRkcmVzcyBTcGFjZSBQcm9iaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZm91bmRhdGlvbjogYEhVR0VUTEJGU2AgZW5hYmxlcyBgSFVHRVRMQl9QQUdFYC4gR290IGl0LiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIGEgbGlzdCBvZiByZWxldmFudCBGb2N1c1N5bWJvbHM6IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCwgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AsIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAuIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIHNwZWNpZmljIHRvIHRoZSBjaGFuZ2VzIGluIGBtbS9kYW1vbi92YWRkci5jYCwgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGFuZCBgbW0vZGFtb24vcGFkZHIuY2Ag4oCTIG5vdCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBidXQgZGlyZWN0bHkgcGFydCBvZiB0aGlzIERBTU9OIHBhdGNoLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIERBTU9OIHByb2JlIHByZXAgYW5kIGFwcGxpY2F0aW9uIHNwZWNpZmljYWxseSBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIGZvciBzZXR0aW5nIHVwIHByb2JlcyAoYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2ApLCB0aGVuIHdhbGtpbmcgcGFnZSB0YWJsZXMsIGFuZCBoYW5kbGluZyBib3RoIHJlZ3VsYXIgYW5kIGh1Z2UgcGFnZSBlbnRyaWVzIChgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBgZGFtb25fdmFfeW91bmdfYWRkcmApLiBUaGVyZSYjMzk7cyBmaWx0ZXIgbG9naWMgaW5jbHVkZWQgYXMgd2VsbCAoYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGAsIGBkYW1vbl92YV9maWx0ZXJfcGFzc2ApLCBhbmQgd2UmIzM5O3JlIHNlZWluZyBzb21lIGNvbW1vbiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgcmVmYWN0b3JlZCBpbnRvIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKClgLiBJdCYjMzk7cyBjbGVhcmx5IG1vZGlmeWluZyBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIHZpYSBEQU1PTiwgYW5kIGl0JiMzOTtzIHJlbGV2YW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgd2VsbC1kZWZpbmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXIuIEkmIzM5O3ZlIHZlcmlmaWVkIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvLCBzbyBJJiMzOTtsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9wcmVwX3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfZmlsdGVyX21hdGNoJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ZpbHRlcl9tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgYWNyb3NzIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzIGJ5IGludHJvZHVjaW5nIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKSBhbmQgaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcHJvYmUgaGFuZGxpbmcgKGRhbW9uX3ZhX3ByZXBfcHJvYmVzLCBkYW1vbl92YV9hcHBseV9wcm9iZXMsIGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSkuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHkgYW5kIHNhbml0aXplciBhcHBsaWNhYmlsaXR5OlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IEFsbCBzdGFjay1hbGxvY2F0ZWQgc3RydWN0cyAoc3VjaCBhcyBzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFuZCBzdHJ1Y3QgbW1fd2Fsa19vcHMpIGFuZCBzY2FsYXIgdmFyaWFibGVzIChlLmcuIGJvb2xlYW5zLCBsb29wIGNvdW50ZXJzLCBhY2N1bXVsYXRvciBzdW1zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzZS5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIG91dHB1dHMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cbjMuIE1lbW9yeSBzYWZldHkgY29uc2lkZXJhdGlvbnM6IEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHBhZ2UtdGFibGUgd2Fsa2luZywgZm9saW8gbG9ja2luZy9yZWZlcmVuY2UgY291bnRpbmcsIGNvbmN1cnJlbmN5LCBvciBhcnJheSBpbmRleGluZyAoZS5nLiwgcHJvYmVfaGl0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRzKS5cblxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDUxY2NkZGFlYTUxODY3NTU3MGQyOTRhMjVjNjgxY2ZmZWU1MTY4MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzg6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uYwpAQCAtNDQ0LDMgJiM0Mzs0NDQsMzUgQEAgYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKIH0KJiM0MzsKJiM0Mztib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsKJiM0MzsJc3dpdGNoIChmaWx0ZXItJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgomIzQzOwkJaWYgKCFmb2xpbykgewomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCW1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6CiYjNDM7CQlpZiAoIWZvbGlvKSB7CiYjNDM7CQkJbWF0Y2hlZCA9IGZhbHNlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7CiYjNDM7CQlpZiAoIW1lbWNnKQomIzQzOwkJCW1hdGNoZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltYXRjaGVkID0gZmlsdGVyLSZndDttZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwomIzQzO30KZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uaCBiL21tL2RhbW9uL29wcy1jb21tb24uaAppbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oCkBAIC0yMSwzICYjNDM7MjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwogdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTsKIAogYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpOwomIzQzOwomIzQzO2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vcGFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jCkBAIC0xNDMsMjkgJiM0MzsxNDMsOCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLAogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAogCXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7Ci0JY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOgotCQlpZiAoIWZvbGlvKSB7Ci0JCQltYXRjaGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCQltYXRjaGVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTsKLQkJYnJlYWs7Ci0JY2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzoKLQkJaWYgKCFmb2xpbykgewotCQkJbWF0Y2hlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQltZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTsKLQkJaWYgKCFtZW1jZykKLQkJCW1hdGNoZWQgPSBmYWxzZTsKLQkJZWxzZQotCQkJbWF0Y2hlZCA9IGZpbHRlci0mZ3Q7bWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlicmVhazsKIAljYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDoKIAkJaWYgKCFmb2xpbykKIAkJCW1hdGNoZWQgPSBmYWxzZTsKQEAgLTE3Myw3ICYjNDM7MTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKIAkJCW1hdGNoZWQgPSBkYW1vbl9mb2xpb195b3VuZyhmb2xpbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7CiAJfQogCXJldHVybiBtYXRjaGVkID09IGZpbHRlci0mZ3Q7bWF0Y2hpbmc7CiB9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NAotLS0gYS9tbS9kYW1vbi92YWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmMKQEAgLTUxMCw2ICYjNDM7NTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gbWF4X25yX2FjY2Vzc2VzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3ByZXAgKnA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHsKJiM0MzsJCXN3aXRjaCAocC0mZ3Q7YWN0aW9uKSB7CiYjNDM7CQljYXNlIERBTU9OX1BSRVBfU0VUX1BHSURMRToKJiM0MzsJCQlkYW1vbl92YV9ta29sZChtbSwgci0mZ3Q7c2FtcGxpbmdfYWRkcik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwomIzQzOwlzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHsKJiM0MzsJCW1tID0gZGFtb25fZ2V0X21tKHQpOwomIzQzOwkJaWYgKCFtbSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7CiYjNDM7CQkJaWYgKHNldF9zYW1wbGVzKQomIzQzOwkJCQlyLSZndDtzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItJmd0O2FyLnN0YXJ0LAomIzQzOwkJCQkJCXItJmd0O2FyLmVuZCk7CiYjNDM7CQkJZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KQomIzQzOwkJCQlkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihjdHgsIG1tLCByLCBwKTsKJiM0MzsJCX0KJiM0MzsJCW1tcHV0KG1tKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYm9vbCB5b3VuZyA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAocHRlKQomIzQzOwkJeW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7CiYjNDM7CWVsc2UgaWYgKHBtZCkKJiM0MzsJCXlvdW5nID0gcG1kX3lvdW5nKCpwbWQpOwomIzQzOwl5b3VuZyA9IHlvdW5nIHx8ICFmb2xpb190ZXN0X2lkbGUoZm9saW8pIHx8CiYjNDM7CQltbXVfbm90aWZpZXJfdGVzdF95b3VuZyhtbSwgYWRkcik7CiYjNDM7CXJldHVybiB5b3VuZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJYm9vbCBtYXRjaGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZmlsdGVyLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOgomIzQzOwkJaWYgKCFmb2xpbykKJiM0MzsJCQltYXRjaGVkID0gZmFsc2U7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSwKJiM0MzsJCQkJCWFkZHIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItJmd0O21hdGNoaW5nOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfcGFzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsCiYjNDM7CQlwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7CiYjNDM7CWJvb2wgcGFzcyA9IHRydWU7CiYjNDM7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7CiYjNDM7CQlpZiAoZGFtb25fdmFfZmlsdGVyX21hdGNoKGYsIGZvbGlvLCBwdGUsIHBtZCwgbW0sIGFkZHIpKSB7CiYjNDM7CQkJcGFzcyA9IGYtJmd0O2FsbG93OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJcGFzcyA9ICFmLSZndDthbGxvdzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcGFzczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmN0eDsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQlwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkgewomIzQzOwkJaWYgKGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKGZvbGlvLCBwcm9iZSwgcHRlLCBwbWQsIG1tLAomIzQzOwkJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkcikpCiYjNDM7CQkJci0mZ3Q7cHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7CiYjNDM7CQlpJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQl1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQomIzQzO3sKJiM0MzsJcHRlX3QgKnB0ZTsKJiM0MzsJcHRlX3QgcHRlbnQ7CiYjNDM7CXNwaW5sb2NrX3QgKnB0bDsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay0mZ3Q7dm1hKTsKJiM0MzsJaWYgKHB0bCkgewomIzQzOwkJcG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXBtZF9wcmVzZW50KHBtZGUpKQomIzQzOwkJCWdvdG8gaHVnZV9vdXQ7CiYjNDM7CQlmb2xpbyA9IHZtX25vcm1hbF9mb2xpb19wbWQod2Fsay0mZ3Q7dm1hLCBhZGRyLCBwbWRlKTsKJiM0MzsJCWlmICghZm9saW8pCiYjNDM7CQkJZ290byBodWdlX291dDsKJiM0MzsJCWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sIE5VTEwsICZhbXA7cG1kZSwKJiM0MzsJCQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CiYjNDM7aHVnZV9vdXQ6CiYjNDM7CQlzcGluX3VubG9jayhwdGwpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsjZW5kaWYJLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiYjNDM7CiYjNDM7CXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay0mZ3Q7bW0sIHBtZCwgYWRkciwgJmFtcDtwdGwpOwomIzQzOwlpZiAoIXB0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQocHRlbnQpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstJmd0O3ZtYSwgYWRkciwgcHRlbnQpOwomIzQzOwlpZiAoIWZvbGlvKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtJmd0O2N0eCwgcHJpdi0mZ3Q7ciwgZm9saW8sICZhbXA7cHRlbnQsIE5VTEwsCiYjNDM7CQkJd2Fsay0mZ3Q7dm1hLSZndDt2bV9tbSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiYjNDM7c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh3YWxrLSZndDt2bWEpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzcGlubG9ja190ICpwdGw7CiYjNDM7CXB0ZV90IGVudHJ5OwomIzQzOwomIzQzOwlwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstJmd0O21tLCBwdGUpOwomIzQzOwllbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay0mZ3Q7bW0sIGFkZHIsIHB0ZSk7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQoZW50cnkpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTsKJiM0MzsJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsJZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi0mZ3Q7Y3R4LCBwcml2LSZndDtyLCBmb2xpbywgJmFtcDtlbnRyeSwgTlVMTCwKJiM0MzsJCQl3YWxrLSZndDt2bWEtJmd0O3ZtX21tKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNwaW5fdW5sb2NrKHB0bCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMCiYjNDM7I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiYjNDM7CQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHsKJiM0MzsJCS5jdHggPSBjdHgsCiYjNDM7CQkuciA9IHIsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHsKJiM0MzsJCS5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksCiYjNDM7CQkuaHVnZXRsYl9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9IHItJmd0O3NhbXBsaW5nX2FkZHI7CiYjNDM7CiYjNDM7CWlmICghbW0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCAmYW1wO2RhbW9uX3Byb2JlX3dhbGtfb3BzLAomIzQzOwkJCSZhbXA7YXJnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAomIzQzOwkJYm9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF93c3VtID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkgewomIzQzOwkJbW0gPSBkYW1vbl9nZXRfbW0odCk7CiYjNDM7CQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewomIzQzOwkJCWlmIChzZXRfc2FtcGxlcykKJiM0MzsJCQkJci0mZ3Q7c2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLSZndDthci5zdGFydCwKJiM0MzsJCQkJCQlyLSZndDthci5lbmQpOwomIzQzOwkJCV9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKGN0eCwgbW0sIHIpOwomIzQzOwkJCWlmIChyZXR1cm5fbWF4X3dzdW0pCiYjNDM7CQkJCW1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSwKJiM0MzsJCQkJCQkJY3R4KSwgbWF4X3dzdW0pOwomIzQzOwkJfQomIzQzOwkJaWYgKG1tKQomIzQzOwkJCW1tcHV0KG1tKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbWF4X3dzdW07CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHBtZF90ICpwbWRwKQpAQCAtOTM4LDYgJiM0MzsxMTY4LDggQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZCkKIAkJLnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSwKIAkJLnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcywKIAkJLmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsCiYjNDM7CQkucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcywKJiM0MzsJCS5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsCiAJCS50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsCiAJCS5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LAogCQkuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PTiBwYXRjaCBhbmQgc2VlIGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHdoZXRoZXIgc3RhbmRhcmQgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gd2lsbCBzdWZmaWNlIG9yIGlmIHRoaXMgd2FycmFudHMgYSBtb3JlIGluLWRlcHRoIGludmVzdGlnYXRpb24uCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2U6CgoxLiAgV2UgaGF2ZSBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCB3aGljaCBkZWZpbmVzIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCB0aGF0IGNoZWNrcyB0aGUgZmlsdGVyIHR5cGUg4oCTIGBEQU1PTl9GSUxURVJfVFlQRV9BTk9OYCBhbmQgYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYCDigJMgYW5kIGNvbnNvbGlkYXRlcyBzb21lIGV4aXN0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYy4KMi4gIFRoZSBoZWFkZXIgZmlsZSBgbW0vZGFtb24vb3BzLWNvbW1vbi5oYCBkZWNsYXJlcyB0aGUgbmV3bHkgYWRkZWQgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIGZ1bmN0aW9uLgozLiAgYG1tL2RhbW9uL3BhZGRyLmNgIGlzIGp1c3QgYSBzaW1wbGUgcmVmYWN0b3IsIHJlcGxhY2luZyB0aGUgZHVwbGljYXRlIGNvZGUgd2l0aCBhIGNhbGwgdG8gdGhlIG5ldyBmdW5jdGlvbi4KNC4gIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHdoaWNoIGltcGxlbWVudHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JpbmcgZm9yIERBTU9OLiBJdCBpbnRyb2R1Y2VzIGEgc2xldyBvZiBuZXcgZnVuY3Rpb25zOiBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gLCBgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBgZGFtb25fdmFfeW91bmdfYWRkcmAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgLCBgZGFtb25fdmFfcHJvYmVfZm9saW9gLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBgX19kYW1vbl92YV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIFRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQgaW4gYGRhbW9uX3ZhX2luaXRjYWxsYCB2aWEgdGhlIG9wcyB0YWJsZS4KCk5vdywgbXkga2V5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBjb3BpZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiB0aGUgbmV3IHN0cnVjdHMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBwcm9iYWJseSBncmVwIHRoZSBrZXJuZWwgdHJlZSBvciByZWFkIHRocm91Z2ggdGhlIHJlbGV2YW50IGZpbGVzIHRvIHVuZGVyc3RhbmQgaG93IGByLSZndDtwcm9iZV9oaXRzYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBob3cgdGhlc2UgZmlsdGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIGFuZCBnZW5lcmFsbHkgaG93IHRoZSBuZXcgZnVuY3Rpb25zIGFyZSB3b3JraW5nIHVuZGVyIHRoZSBob29kLiBJIGhhdmUgdG8gbG9vayBmb3IgZGF0YSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb250cm9sIGZsb3cgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC4gSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaWYgdGhlIG5ldyBmdW5jdGlvbnMgYXJlIGFjY2Vzc2luZyBhbnkgbWVtb3J5IG5vdCBwcm9wZXJseSBwcm90ZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlX2hpdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDgtXG5tbS9kYW1vbi9jb3JlLmM6MzQ5OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTM1MC1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjYtXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXG5tbS9kYW1vbi9jb3JlLmM6MzY3Olx0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXG5tbS9kYW1vbi9jb3JlLmM6MzY5Olx0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxubW0vZGFtb24vY29yZS5jOjM3MDpcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9jb3JlLmM6NDAzOlx0XHRyZWdpb24tXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG5tbS9kYW1vbi9jb3JlLmM6NDA0Olx0XHRyZWdpb24tXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy00MDUtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTQ2Mj1zdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXG5tbS9kYW1vbi9jb3JlLmM6NDY5OiAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbm1tL2RhbW9uL2NvcmUuYy00NzAtICogQHI6XHRcdHJlZ2lvbiB0byBnZXQgdGhlIHdlaWdodGVkIHN1bSBvZi5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDc1LSAqL1xubW0vZGFtb24vY29yZS5jOjQ3Njp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYy00NzctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDg0LVx0XHRpZiAobGFzdClcbm1tL2RhbW9uL2NvcmUuYzo0ODU6XHRcdFx0c3VtICYjNDM7PSByLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpJiM0MzsmIzQzO10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG5tbS9kYW1vbi9jb3JlLmMtNDg2LVx0XHRlbHNlXG5tbS9kYW1vbi9jb3JlLmM6NDg3Olx0XHRcdHN1bSAmIzQzOz0gci1cdTAwM2Vwcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbm1tL2RhbW9uL2NvcmUuYy00ODgtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMDM9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDA5LVxubW0vZGFtb24vY29yZS5jOjEwMTA6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0xMDExLVx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMTctXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzoxMDE4Olx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYzoxMDE5Olx0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0xMDIwLVx0XHRpZiAoIWFnZ3JlZ2F0aW5nKVxubW0vZGFtb24vY29yZS5jOjEwMjE6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxubW0vZGFtb24vY29yZS5jOjEwMjI6XHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxubW0vZGFtb24vY29yZS5jLTEwMjMtXHRcdFx0XHRcdG5ld19hdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTAyNC1cdFx0ZWxzZVxubW0vZGFtb24vY29yZS5jOjEwMjU6XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xMDI2LVx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTAzMD1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAzMy17XG5tbS9kYW1vbi9jb3JlLmM6MTAzNDpcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0xMDM1LVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDI3PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0MjktXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbm1tL2RhbW9uL2NvcmUuYzoxNDMwOlx0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYy0xNDMxLVx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQ0OC1cdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OTpcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjdHgtXHUwMDNlYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTE0NTAtXHR3c3VtID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0xNDUxLVx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xubW0vZGFtb24vY29yZS5jOjE0NTI6XHRcdGlmIChwcm9iZS1cdTAwM2V3ZWlnaHQgXHUwMDNlIFVJTlRfTUFYIC8gbWF4X3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmMtMTQ1My1cdFx0XHRyZXR1cm4gZmFsc2U7XG5tbS9kYW1vbi9jb3JlLmM6MTQ1NDpcdFx0d3N1bV90b19hZGQgPSBwcm9iZS1cdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcbm1tL2RhbW9uL2NvcmUuYy0xNDU1LVx0XHRpZiAoVUlOVF9NQVggLSB3c3VtIFx1MDAzYyB3c3VtX3RvX2FkZClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjI5Mz1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMxNi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIzMTc6XHRcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IHItXHUwMDNlcHJvYmVfaGl0c1tpXTtcbm1tL2RhbW9uL2NvcmUuYzoyMzE4Olx0XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbm1tL2RhbW9uL2NvcmUuYy0yMzE5LVx0XHRcdH1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQyNj1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDM3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MzQzODpcdFx0bC1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXHUwMDNlcHJvYmVfaGl0c1tpXSAqIHN6X2wgJiM0Mzsgci1cdTAwM2Vwcm9iZV9oaXRzW2ldXG5tbS9kYW1vbi9jb3JlLmMtMzQzOS1cdFx0XHRcdCogc3pfcikgLyAoc3pfbCAmIzQzOyBzel9yKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQ0ND1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbm1tL2RhbW9uL2NvcmUuYzozNDQ1Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmMtMzQ0Ni17XG5tbS9kYW1vbi9jb3JlLmM6MzQ0NzpcdGlmICh1c2VfcHJvYmVfaGl0cylcbm1tL2RhbW9uL2NvcmUuYzozNDQ4Olx0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ0OS1cdGlmIChsYXN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNDYxPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDY0LVx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcbm1tL2RhbW9uL2NvcmUuYzozNDY1Olx0Ym9vbCB1c2VfcHJvYmVfaGl0cyA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ2Ni1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ2OS1cbm1tL2RhbW9uL2NvcmUuYzozNDcwOlx0XHRzY29yZSA9IGRhbW9uX21lcmdlX3Njb3JlKHIsIGZhbHNlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcbm1tL2RhbW9uL2NvcmUuYzozNDcxOlx0XHRsYXN0X3Njb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgdHJ1ZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ3Mi1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzQ4Ni1cdFx0ZGlmZiA9IGFic19kaWZmKHNjb3JlLCBkYW1vbl9tZXJnZV9zY29yZShwcmV2LCBmYWxzZSwgY3R4LFxubW0vZGFtb24vY29yZS5jOjM0ODc6XHRcdFx0XHRcdHVzZV9wcm9iZV9oaXRzKSk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ4OC1cdFx0aWYgKGRpZmYgXHUwMDNlIHRocmVzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNTY2PXN0YXRpYyBpbnQgZGFtb25fc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTM1ODEtXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbm1tL2RhbW9uL2NvcmUuYzozNTgyOlx0bWVtY3B5KG5ldy1cdTAwM2Vwcm9iZV9oaXRzLCByLVx1MDAzZXByb2JlX2hpdHMsIHNpemVvZihyLVx1MDAzZXByb2JlX2hpdHMpKTtcbm1tL2RhbW9uL2NvcmUuYzozNTgzOlx0bWVtY3B5KG5ldy1cdTAwM2VsYXN0X3Byb2JlX2hpdHMsIHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzLFxubW0vZGFtb24vY29yZS5jOjM1ODQ6XHRcdFx0c2l6ZW9mKHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzKSk7XG5tbS9kYW1vbi9jb3JlLmMtMzU4NS1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE3Nj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xOTctXHRcdFx0XHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcbm1tL2RhbW9uL3BhZGRyLmM6MTk4Olx0XHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0mIzQzOyYjNDM7O1xubW0vZGFtb24vcGFkZHIuYy0xOTktXHRcdFx0XHRpJiM0MzsmIzQzOztcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTIwMy1cdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxubW0vZGFtb24vcGFkZHIuYzoyMDQ6XHRcdFx0XHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXG5tbS9kYW1vbi9wYWRkci5jLTIwNS1cdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NDA9c3RhdGljIHZvaWQgZGFtb3Nfc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDg6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIgPVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5LVx0XHRfX0FUVFJfUk9fTU9ERShoaXRzLCAwNDAwKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTI6XHRcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01My1cdE5VTEwsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwPXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2Jlcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVx0XHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XHRcdFx0XHRkYW1vbl9wcm9iZV9oaXRzX212c3VtKGksIHJlZ2lvbiwgY3R4KSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVx0XHRpZiAoIXN5c19wcm9iZSkge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1NC1cdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IDE1O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1NTpcdHItXHUwMDNlcHJvYmVfaGl0c1swXSA9IDc7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU2Olx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0gPSAzO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1Ny1cdHItXHUwMDNlYWdlID0gMTA7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3Mi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIHJfbmV3LVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE3MzpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZXByb2JlX2hpdHNbMF0sIHJfbmV3LVx1MDAzZXByb2JlX2hpdHNbMF0pO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE3NDpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1swXSwgcl9uZXctXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzUtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VhZ2UsIHJfbmV3LVx1MDAzZWFnZSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE4MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5NS1cdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAxMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxOTY6XHRyLVx1MDAzZXByb2JlX2hpdHNbMF0gPSA2O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE5Ny1cdHItXHUwMDNlYWdlID0gOTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjA0LVx0cjItXHUwMDNlbnJfYWNjZXNzZXMgPSAyMDtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoyMDU6XHRyMi1cdTAwM2Vwcm9iZV9oaXRzWzBdID0gMTQ7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjA2LVx0cjItXHUwMDNlYWdlID0gMjE7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIxMi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNnUpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjIxMzpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZXByb2JlX2hpdHNbMF0sIDExKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMTQtXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VhZ2UsIDE3dSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE1MTQ9c3RhdGljIHZvaWQgZGFtb25fdGVzdF92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTM4LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1Mzk6XHQvKiBNb3JlIHNhbXBsZXMgY291bGQgb3ZlcmZsb3cgdGhlIHByb2JlX2hpdHMgY291bnRlcnMuICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU0MC1cdGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID0gMjU2O1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NjA4PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTYxNy1cdFx0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyKSlcbm1tL2RhbW9uL3ZhZGRyLmM6NjE4Olx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSYjNDM7JiM0Mzs7XG5tbS9kYW1vbi92YWRkci5jLTYxOS1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vdmFkZHIuYz03MTc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzMyLVx0XHRcdGlmIChyZXR1cm5fbWF4X3dzdW0pXG5tbS9kYW1vbi92YWRkci5jOjczMzpcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbm1tL2RhbW9uL3ZhZGRyLmMtNzM0LVx0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRob3NlIGNvZGUgc2VjdGlvbnM6CgoqKkRpdmluZyBEZWVwIGludG8gREFNT04mIzM5O3MgVmlydHVhbCBBZGRyZXNzIFNwYWNlIFByb2JlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGhhbmRsZSBvbiBob3cgREFNT04gaXMgaGFuZGxpbmcgdmlydHVhbCBhZGRyZXNzIHByb2JpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgIGZ1bmN0aW9uIGFuZCBhbnkgY29ubmVjdGVkIG1vZGlmaWNhdGlvbnMuIEkmIzM5O20gd29ycmllZCBhYm91dCBwb3RlbnRpYWwgaW5pdGlhbGl6YXRpb24gaXNzdWVzIGhlcmUsIHNvIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZm9jdXMuIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIGJ1dCBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgYnVncyBsdXJraW5nIGluIHRoZSBzaGFkb3dzLgoKVGhlcmVmb3JlLCBJJiMzOTttIHplcm9pbmcgaW4gb24gYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWAgYW5kIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBpZiBhbnkgb2YgdGhlIG5ldyBjaGFuZ2VzIGhhdmUgaW50cm9kdWNlZCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGlzIHdob2xlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBwcm9iaW5nIG1lY2hhbmlzbSBpcyByb2J1c3QgYW5kIHNhZmUuIEkmIzM5O2xsIGJlIG1ldGljdWxvdXNseSBleGFtaW5pbmcgdGhlIGxvZ2ljIGZsb3cgYW5kIGRhdGEgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYz0yMTc9c3RhdGljIHZvaWQgZGFtb25fdmFfdXBkYXRlKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi92YWRkci5jLTIyOC1cbm1tL2RhbW9uL3ZhZGRyLmM6MjI5OnN0YXRpYyB2b2lkIGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2RhbW9uL3ZhZGRyLmMtMjMwLVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsIHZvaWQgKnByaXZhdGUpXG4tLVxubW0vZGFtb24vdmFkZHIuYz0zMzY9c3RhdGljIHZvaWQgZGFtb25fdmFfbWtvbGQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTM0Mi1cbm1tL2RhbW9uL3ZhZGRyLmM6MzQzOlx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICYjNDM7IDEsIFx1MDAyNmRhbW9uX21rb2xkX29wcywgTlVMTCk7XG5tbS9kYW1vbi92YWRkci5jLTM0NC19XG4tLVxubW0vZGFtb24vdmFkZHIuYz00NTg9c3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQ2OC1cbm1tL2RhbW9uL3ZhZGRyLmM6NDY5Olx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICYjNDM7IDEsIFx1MDAyNmRhbW9uX3lvdW5nX29wcywgXHUwMDI2YXJnKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNDcwLVx0cmV0dXJuIGFyZy55b3VuZztcbi0tXG5tbS9kYW1vbi92YWRkci5jPTY5Nz1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MTItXG5tbS9kYW1vbi92YWRkci5jOjcxMzpcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciAmIzQzOyAxLCBcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE0LVx0XHRcdFx1MDAyNmFyZyk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz05NjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfdmFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy05OTItXG5tbS9kYW1vbi92YWRkci5jOjk5MzpcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgci1cdTAwM2Vhci5zdGFydCwgci1cdTAwM2Vhci5lbmQsIFx1MDAyNndhbGtfb3BzLCBcdTAwMjZwcml2KTtcbm1tL2RhbW9uL3ZhZGRyLmMtOTk0LVx0bW1wdXQobW0pO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MTA4MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9zdGF0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTEwOTktXG5tbS9kYW1vbi92YWRkci5jOjExMDA6XHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIHItXHUwMDNlYXIuc3RhcnQsIHItXHUwMDNlYXIuZW5kLCBcdTAwMjZ3YWxrX29wcywgXHUwMDI2cHJpdik7XG5tbS9kYW1vbi92YWRkci5jLTExMDEtXHRtbXB1dChtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTkyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCB3aXRoaW4gYHZhZGRyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugd2Fsa2luZyBsb2dpYyByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW4gdGhlIGNvbnRleHQgb2YgREFNT04mIzM5O3Mgb3BlcmF0aW9uLiBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHRhYmxlIGxldmVscywgaG93IGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIHJlbGV2YW50IHZpcnR1YWwgYWRkcmVzcyByYW5nZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgbGlrZSByYWNlIGNvbmRpdGlvbnMsIGhvdyBpdCBoYW5kbGVzIFRMQiBpbnZhbGlkYXRpb25zIGlmIG5lZWRlZCwgYW5kIGFsc28gYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgbWlnaHQgY29tZSB1cCwgc3BlY2lmaWNhbGx5IHdpdGggZGlmZmVyZW50IHBhZ2Ugc2l6ZXMgYW5kIE5VTUEgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIGNvcnJlY3RseSBoYW5kbGluZyB1bm1hcHBlZCByZWdpb25zIGFuZCwgb2YgY291cnNlLCB0aGF0IGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzk7cyBwYWdlIHRhYmxlIGZvcm1hdC4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgZG9uZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGUgZm9yIHRoZSBrZXkgYWxnb3JpdGhtcyBhbmQgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgaGFwcGVucyBkdXJpbmcgZWFjaCBzdGVwIG9mIHRoZSBwYWdlIHdhbGsuIEkgd2lsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIHJhbmdlIGlzIGJyb2tlbiBkb3duLCBhbmQgaG93IGluZGl2aWR1YWwgcGFnZXMgYXJlIGlkZW50aWZpZWQgYW5kIHByb2Nlc3NlZC4gSSBzaG91bGQgYWxzbyBjaGVjayBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBEQU1PTiBpbmZyYXN0cnVjdHVyZSBmb3IgbW9uaXRvcmluZyBhbmQgcHJvZmlsaW5nIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI1Olx0XHRcdGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xuIDIyNjpcdFx0fVxuIDIyNzpcdH1cbiAyMjg6XHRcbiAyMjk6XHRzdGF0aWMgdm9pZCBkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gMjMwOlx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSlcbiAyMzE6XHR7XG4gMjMyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAyMzM6XHRcbiAyMzQ6XHRcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgc3RhcnQpO1xuIDIzNTpcdFx0aWYgKCF2bWEpXG4gMjM2Olx0XHRcdGdvdG8gbG9ja19tbWFwO1xuIDIzNzpcdFxuIDIzODpcdFx0aWYgKGVuZCBcdTAwM2Ugdm1hLVx1MDAzZXZtX2VuZCkge1xuIDIzOTpcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiAyNDA6XHRcdFx0Z290byBsb2NrX21tYXA7XG4gMjQxOlx0XHR9XG4gMjQyOlx0XG4gMjQzOlx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkpIHtcbiAyNDQ6XHRcdFx0b3BzLVx1MDAzZXdhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWTtcbiAyNDU6XHRcdFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHN0YXJ0LCBlbmQsIG9wcywgcHJpdmF0ZSk7XG4gMjQ2Olx0XHR9XG4gMjQ3Olx0XG4gMjQ4Olx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiAyNDk6XHRcdHJldHVybjtcbiAyNTA6XHRcbiAyNTE6XHRsb2NrX21tYXA6XG4gMjUyOlx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4gMjUzOlx0XHRvcHMtXHUwMDNld2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSztcbiAyNTQ6XHRcdHdhbGtfcGFnZV9yYW5nZShtbSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcbiAyNTU6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIDI1NjpcdH1cbiAyNTc6XHRcbiAyNTg6XHRzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gMjU5Olx0XHRcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4gMjYwOlx0e1xuIDI2MTpcdFx0cHRlX3QgKnB0ZTtcbiAyNjI6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiAyNjM6XHRcbiAyNjQ6XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTkwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBgZGFtb25fZmlsdGVyYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgZGFtb25fZmlsdGVyYCBzdHJ1Y3QgaXMgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQuIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBzZWUgaXRzIHN0cnVjdHVyZS4gSSB3YW50IHRvIGxvb2sgZm9yIHRoZSBrZXkgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLiBJIGFtIGV4cGVjdGluZyBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBhbmQgcHJvYmFibHkgc29tZSBzdGF0ZSBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IGlzIGJlaW5nIHBvcHVsYXRlZCwgYXJlIHRoZXJlIGhhcmRjb2RlZCB2YWx1ZXMsIG9yIGFyZSB0aGV5IHNvdXJjZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBJIHdpbGwgbG9vayBmb3Igb3RoZXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMgb3IgbWFjcm8gdXNlcy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgYGRhbW9uX2ZpbHRlcmAgY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vbl9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTc2ND1zdHJ1Y3QgZGFtb25fcHJlcCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTc3MS0vKipcbmluY2x1ZGUvbGludXgvZGFtb24uaDo3NzI6ICogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSAtIFR5cGUgb2YgXHUwMDI2c3RydWN0IGRhbW9uX2ZpbHRlclxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTc3My0gKlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD03Nzg9ZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTc4NC0vKipcbmluY2x1ZGUvbGludXgvZGFtb24uaDo3ODU6ICogc3RydWN0IGRhbW9uX2ZpbHRlciAtIERBTU9OIHJlZ2lvbiBmaWx0ZXIgZm9yIFx1MDAyNnN0cnVjdCBkYW1vbl9wcm9iZS5cbmluY2x1ZGUvbGludXgvZGFtb24uaC03ODYtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzkxLSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjc5MjpzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaC03OTMtXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTM9dm9pZCBkYW1vbl9hZGRfcHJlcChzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsIHN0cnVjdCBkYW1vbl9wcmVwICpwcmVwKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDU0LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTU6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1Ni1cdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA1Nzp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZik7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA1ODp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERBTU9OIEZpbHRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGxvb2sgYXQgdGhlIGBkYW1vbl9maWx0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaWx0ZXIgd29ya3MgaW4gdGhlIGNvbnRleHQgb2YgREFNT04uIFJpZ2h0LCBzbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgaW5jbHVkZSBmaWxlOiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgbGlrZWx5IHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgc2hvdWxkIHJlc2lkZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZDsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjbGVhciBzdHJ1Y3QgbWVtYmVycyBhbmQgbWF5YmUgc29tZSBpbnNpZ2h0ZnVsIGZ1bmN0aW9uIHByb3RvdHlwZXMgcmVsYXRlZCB0byBob3cgdGhlIGZpbHRlcmluZyBsb2dpYyBpcyBhY3R1YWxseSBhcHBsaWVkIHRvIG1lbW9yeSBhY2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBhZGRyZXNzIHJhbmdlcywgYWNjZXNzIHR5cGVzLCBhbmQgcG90ZW50aWFsbHkgZXZlbiB1c2VyLWRlZmluZWQgY3JpdGVyaWEuIEl04oCZcyBpbXBvcnRhbnQgdG8gc2VlIHdoYXQgaG9va3MgaXQgaGFzIGludG8gdGhlIGNvcmUgREFNT04gZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBtb25pdG9yaW5nIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzgwOlx0XHREQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcbiA3ODE6XHRcdERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVCxcbiA3ODI6XHR9O1xuIDc4MzpcdFxuIDc4NDpcdC8qKlxuIDc4NTpcdCAqIHN0cnVjdCBkYW1vbl9maWx0ZXIgLSBEQU1PTiByZWdpb24gZmlsdGVyIGZvciBcdTAwMjZzdHJ1Y3QgZGFtb25fcHJvYmUuXG4gNzg2Olx0ICpcbiA3ODc6XHQgKiBAdHlwZTpcdFR5cGUgb2YgdGhlIHJlZ2lvbi5cbiA3ODg6XHQgKiBAbWF0Y2hpbmc6XHRXaGV0aGVyIHRoaXMgZmlsdGVyIGlzIGZvciB0aGUgdHlwZS1tYXRjaGluZyBvbmVzLlxuIDc4OTpcdCAqIEBhbGxvdzpcdFdoZXRoZXIgdGhlIEB0eXBlLUBtYXRjaGluZyBvbmVzIHNob3VsZCBwYXNzIHRoaXMgZmlsdGVyLlxuIDc5MDpcdCAqIEBtZW1jZ19pZDpcdE1lbWNnIGlkIG9mIHRoZSBxdWVzdGlvbiBpZiBAdHlwZSBpcyBEQU1PTl9GSUxURVJfTUVNQ0cuXG4gNzkxOlx0ICovXG4gNzkyOlx0c3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gNzkzOlx0XHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG4gNzk0Olx0XHRib29sIG1hdGNoaW5nO1xuIDc5NTpcdFx0Ym9vbCBhbGxvdztcbiA3OTY6XHRcdHVuaW9uIHtcbiA3OTc6XHRcdFx0dTY0IG1lbWNnX2lkO1xuIDc5ODpcdFx0fTtcbiA3OTk6XHQvKiBwcml2YXRlOiAqL1xuIDgwMDpcdFx0LyogU2libGluZ3MgbGlzdC4gKi9cbiA4MDE6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiA4MDI6XHR9O1xuIDgwMzpcdFxuIDgwNDpcdC8qKlxuIDgwNTpcdCAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cbiA4MDY6XHQgKlxuIDgwNzpcdCAqIEB3ZWlnaHQ6XHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxuIDgwODpcdCAqL1xuIDgwOTpcdHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4gODEwOlx0XHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuIDgxMTpcdC8qIHByaXZhdGU6ICovXG4gODEyOlx0XHQvKiBQcmVwYXJhdGlvbiBhY3Rpb25zIHRvIGFwcGx5IHRvIGVhY2ggcHJvYmluZyBtZW1vcnkuICovXG4gODEzOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHByZXBzO1xuIDgxNDpcdFx0LyogRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLiAqL1xuIDgxNTpcdFx0c3RydWN0IGxpc3RfaGVhZCBmaWx0ZXJzO1xuIDgxNjpcdFx0LyogU2libGluZ3MgbGlzdC4gKi9cbiA4MTc6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiA4MTg6XHR9O1xuIDgxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYGRhbW9uX25ld19maWx0ZXJgJiMzOTtzIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gaG93IGBkYW1vbl9uZXdfZmlsdGVyYCBoYW5kbGVzIHRoZSBjcnVjaWFsIHRhc2tzIG9mIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBhIGBkYW1vbl9maWx0ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaGVyZS4gV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgdXNpbmcgYSBjdXN0b20gYWxsb2NhdG9yLCBvciByZWx5aW5nIG9uIHNvbWV0aGluZyBzdGFuZGFyZCBsaWtlIGBrbWFsbG9jYD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBmbGFncyBvciBzaXplcyBwYXNzZWQgdG8gdGhlIGFsbG9jYXRvciB0aGF0IG1pZ2h0IGhpbnQgYXQgaXRzIGludGVuZGVkIHVzZSBjYXNlPyBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2l0aCByZWdhcmQgdG8gTlVNQSBub2RlcyBvciBjYWNoZSBsaW5lIGFsaWdubWVudD8KCk5leHQsIEkmIzM5O2xsIHNjcnV0aW5pemUgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgYGRhbW9uX2ZpbHRlcmAgYXJlIGJlaW5nIHBvcHVsYXRlZD8gQXJlIGFueSBtdXRleGVzIG9yIHNwaW5sb2NrcyBpbml0aWFsaXplZD8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgSSBzaG91bGQgYmUgd2F0Y2hpbmcgb3V0IGZvcj8gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHdoZXRoZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mIHNvbWUgZmllbGRzIGRlcGVuZHMgb24gdGhlIHN1Y2Nlc3Mgb2Ygb3RoZXJzLiBBbHNvLCBkb2VzIGl0IGhhdmUgYSBkZXN0cnVjdG9yIHRoYXQgZnJlZXMgcmVzb3VyY2VzLCBhbmQgd2hhdCBtaWdodCBiZSB0aGUgZWZmZWN0cyBvZiBhbnkgc3VjaCB0ZWFyZG93bj8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBmaWx0ZXImIzM5O3MgaW50ZXJuYWwgc3RhdGUgaXMgc2V0IHVwLiBEb2VzIGl0IHVzZSBhbnkgaW50ZXJuYWwgc3RydWN0dXJlcz8gSG93IGFyZSBpdHMgcGFyYW1ldGVycyBjb25maWd1cmVkPyBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNhbml0eSBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSB0aGUgZmlsdGVyIG9wZXJhdGVzIGNvcnJlY3RseT8gSXMgdGhlcmUgYSBuZWVkIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGBpbml0YCBhbmQgYHJlc2V0YCBpbiB0aGUgZnV0dXJlPwoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBgZGFtb25fZmlsdGVyYCBjb21lcyBpbnRvIGV4aXN0ZW5jZSwgZW5zdXJpbmcgaXQgY2FuIHBlcmZvcm0gaXRzIGludGVuZGVkIGZ1bmN0aW9uIHJlbGlhYmx5LiBUaGlzIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGFyZSB0aGUgYmVkcm9jayBvZiB0aGUgZW50aXJlIGZpbHRlcmluZyBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX25ld19maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3MC1cbm1tL2RhbW9uL2NvcmUuYzoxNzE6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXG5tbS9kYW1vbi9jb3JlLmMtMTcyLVx0XHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODA2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MjMtXG5tbS9kYW1vbi9jb3JlLmM6MTgyNDpcdFx0bmV3X2ZpbHRlciA9IGRhbW9uX25ld19maWx0ZXIoc3JjX2ZpbHRlci1cdTAwM2V0eXBlLFxubW0vZGFtb24vY29yZS5jLTE4MjUtXHRcdFx0XHRzcmNfZmlsdGVyLVx1MDAzZW1hdGNoaW5nLCBzcmNfZmlsdGVyLVx1MDAzZWFsbG93KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxOTk9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjIwOC1cbm1tL2RhbW9uL3N5c2ZzLmM6MjIwOTpcdFx0ZmlsdGVyID0gZGFtb25fbmV3X2ZpbHRlcihzeXNfZmlsdGVyLVx1MDAzZXR5cGUsXG5tbS9kYW1vbi9zeXNmcy5jLTIyMTAtXHRcdFx0XHRzeXNfZmlsdGVyLVx1MDAzZW1hdGNoaW5nLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkYW1vbl9uZXdfZmlsdGVyYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZGFtb25fbmV3X2ZpbHRlcmAgZnVuY3Rpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBEQU1PTiBoYW5kbGVzIGl0cyBuZXcgZmlsdGVyIGxvZ2ljIHdpdGhpbiB0aGUgY29yZS4gSeKAmW0gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgY2FsbCBncmFwaCBhbmQgc2NydXRpbml6aW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIERBTU9OIGNvbXBvbmVudHMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGVycm9yIGhhbmRsaW5nIGFuZCB3aGF0IG1ldHJpY3MgaXQmIzM5O3MgdXNpbmcgKG9yIHNob3VsZCBiZSkuIEkmIzM5O20gbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBmaWx0ZXIgY3JlYXRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyBpdHMgcGVyZm9ybWFuY2UgaW1wYWN0IGluIGRpZmZlcmVudCBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcbiAxNzE6XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbiAxNzI6XHRcdFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcbiAxNzM6XHR7XG4gMTc0Olx0XHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXI7XG4gMTc1Olx0XG4gMTc2Olx0XHRmaWx0ZXIgPSBrbWFsbG9jX29iaigqZmlsdGVyKTtcbiAxNzc6XHRcdGlmICghZmlsdGVyKVxuIDE3ODpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxNzk6XHRcdGZpbHRlci1cdTAwM2V0eXBlID0gdHlwZTtcbiAxODA6XHRcdGZpbHRlci1cdTAwM2VtYXRjaGluZyA9IG1hdGNoaW5nO1xuIDE4MTpcdFx0ZmlsdGVyLVx1MDAzZWFsbG93ID0gYWxsb3c7XG4gMTgyOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmaWx0ZXItXHUwMDNlbGlzdCk7XG4gMTgzOlx0XHRyZXR1cm4gZmlsdGVyO1xuIDE4NDpcdH1cbiAxODU6XHRcbiAxODY6XHR2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxuIDE4NzpcdHtcbiAxODg6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Zi1cdTAwM2VsaXN0LCBcdTAwMjZwLVx1MDAzZWZpbHRlcnMpO1xuIDE4OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG1lbWNnX2lkYCBpbiBEQU1PTiBGaWx0ZXIgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyBgbWVtY2dfaWRgIGdldHMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBEQU1PTl9GSUxURVJfVFlQRV9NRU1DR2AuIEkgbmVlZCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBhbmQgdW5kZXJzdGFuZCB3aGVyZSB0aGlzIHZhbHVlIG9yaWdpbmF0ZXMgYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcywgbWF5YmUgbG9vayBmb3IgYXJlYXMgd2hlcmUgYSByYWNlIGNvdWxkIGV4aXN0IG9yIHdoZXJlIHRoZSBJRCBtaWdodCBub3QgYmUgd2hhdCB0aGUgdXNlciBleHBlY3RzLiBJJiMzOTttIGFzc3VtaW5nIGZhbWlsaWFyaXR5IHdpdGggdGhlIERBTU9OIGNvZGUgYmFzZSwgc28gSSYjMzk7bSBub3QgZ29pbmcgdG8gYmUgc3VwZXIgZXhwbGljaXQgYWJvdXQgZXZlcnkgZnVuY3Rpb24uIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyBiZWhhdmluZyBleGFjdGx5IGhvdyBJIGV4cGVjdCBpdCB0by4gVWx0aW1hdGVseSwgSSBhbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgdGhlIHJlbGlhYmxlIHBsYWNlIHRvIGFjY2VzcyB0aGlzIHZhbHVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jZ19pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMTkxPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMjA0LVx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbm1tL2RhbW9uL2NvcmUuYzoxMjA1Olx0XHRkc3QtXHUwMDNlbWVtY2dfaWQgPSBzcmMtXHUwMDNlbWVtY2dfaWQ7XG5tbS9kYW1vbi9jb3JlLmMtMTIwNi1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jPTEzMTU9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X2ZpbHRlcl9hcmcoXG4tLVxubW0vZGFtb24vY29yZS5jLTEzMTktXHRjYXNlIERBTU9TX0ZJTFRFUl9UWVBFX01FTUNHOlxubW0vZGFtb24vY29yZS5jOjEzMjA6XHRcdGRzdC1cdTAwM2VtZW1jZ19pZCA9IHNyYy1cdTAwM2VtZW1jZ19pZDtcbm1tL2RhbW9uL2NvcmUuYy0xMzIxLVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTc5MT1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc5OC1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi9jb3JlLmM6MTc5OTpcdFx0ZHN0LVx1MDAzZW1lbWNnX2lkID0gc3JjLVx1MDAzZW1lbWNnX2lkO1xubW0vZGFtb24vY29yZS5jLTE4MDAtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODA2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE4MjktXHRcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi9jb3JlLmM6MTgzMDpcdFx0XHRuZXdfZmlsdGVyLVx1MDAzZW1lbWNnX2lkID0gc3JjX2ZpbHRlci1cdTAwM2VtZW1jZ19pZDtcbm1tL2RhbW9uL2NvcmUuYy0xODMxLVx0XHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOTQzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTI5NTctXG5tbS9kYW1vbi9jb3JlLmM6Mjk1ODpcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChnb2FsLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL2NvcmUuYy0yOTU5LVx0aWYgKCFtZW1jZykge1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0yNjY9Ym9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODQtXHRcdGVsc2Vcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyODU6XHRcdFx0bWF0Y2hlZCA9IGZpbHRlci1cdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODYtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz00NDg9Ym9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDcwLVx0XHRlbHNlXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDcxOlx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDcyLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjgyMi1cdFx0XHRcdFx0c3lzZnNfZmlsdGVyLVx1MDAzZW1lbWNnX3BhdGgsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgyMzpcdFx0XHRcdFx0XHUwMDI2ZmlsdGVyLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODI0LVx0XHRcdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg1MT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3OS1cdFx0XHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4ODA6XHRcdFx0XHRcdHN5c2ZzX2dvYWwtXHUwMDNlcGF0aCwgXHUwMDI2Z29hbC1cdTAwM2VtZW1jZ19pZCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg4MS1cdFx0XHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTk5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyMTgtXHRcdFx0XHRcdHN5c19maWx0ZXItXHUwMDNlcGF0aCxcbm1tL2RhbW9uL3N5c2ZzLmM6MjIxOTpcdFx0XHRcdFx0XHUwMDI2ZmlsdGVyLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjIyMC1cdFx0XHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgwND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyNC1cdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VuaWQsIHNyYy1cdTAwM2VuaWQpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgyNTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjYtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MzI9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg3Mi1cdFx0XHQubmlkID0gNixcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NzM6XHRcdFx0Lm1lbWNnX2lkID0gNyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NzQtXHRcdFx0fSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4MC1cdFx0XHQubmlkID0gMTAsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODgxOlx0XHRcdC5tZW1jZ19pZCA9IDEsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODgyLVx0XHRcdH0pO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTE4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTI2LVx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTI3Olx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZW1lbWNnX2lkLCBzcmMtXHUwMDNlbWVtY2dfaWQpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjgtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTQ3PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExNjUtXHRcdFx0LmFsbG93ID0gZmFsc2UsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTE2NjpcdFx0XHQubWVtY2dfaWQgPSAxMjMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE2Ny1cdFx0XHR9KTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTM2Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXJfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM3NS1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTM3NjpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VtZW1jZ19pZCwgc3JjLVx1MDAzZW1lbWNnX2lkKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMzc3LVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTM4Mz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNDAxLVx0XHRcdC5hbGxvdyA9IGZhbHNlLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE0MDI6XHRcdFx0Lm1lbWNnX2lkID0gMTIzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0MDMtXHRcdFx0fSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTk3CgkJCQkJCQlvdXRwdXQ6IDMwNwoJCQkJCQkJdGhvdWdodHM6IDEzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXM6IERBTU9OIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBEQU1PTiBjb2RlIGNoYW5nZXMgZnJvbSBhIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgcGVyc3BlY3RpdmUuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1lbnRpb25lZCBhbmQgaG93IHRoZXkgaGFuZGxlIG1lbW9yeS4KCkZpcnN0LCBJIGV4YW1pbmUgdGhlIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBgbWF0Y2hlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgaXMgYXNzaWduZWQgYSB2YWx1ZSBpbiBhbGwgY29kZSBwYXRocywgZGVwZW5kaW5nIG9uIHRoZSBmaWx0ZXIgdHlwZSAoYW5vbiBvciBtZW1jZykuIE5vIGNvbmNlcm5zIGhlcmUgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTmV4dCwgSSBsb29rIGF0IGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcsIGFuZCBsaWtlIHRoZSBwcmV2aW91cyBvbmUsIGBtYXRjaGVkYCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGFuZCBnZXRzIGFzc2lnbmVkIGEgdmFsdWUuCgpNb3Zpbmcgb24gdG8gYG1tL2RhbW9uL3ZhZGRyLmNgLCBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGVzZSBjaGFuZ2VzIG1vcmUgY2xvc2VseS4gYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYCBhbmQgYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCBzZWVtIGxpa2UgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGFuZCBJJiMzOTttIG5vdCBzZWVpbmcgaW1tZWRpYXRlIHJlZCBmbGFncy4gYGRhbW9uX3ZhX3lvdW5nX2FkZHJgIGhhcyBgeW91bmdgIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIHdoaWNoIGlzIHNhZmUuCgpJIHRoZW4gZ28gdGhyb3VnaCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgd2hpY2ggdXNlcyBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAgYW5kIGFsc28gaGFzIGBtYXRjaGVkYCBpbml0aWFsaXplZCBhbmQgYXNzaWduZWQsIGFuZCBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgIHdoZXJlIGBwYXNzYCBpcyBpbml0aWFsaXplZCB0byBgdHJ1ZWAuIE5vIGlzc3VlcyB0aGVyZS4KClRoZSBgZGFtb25fdmFfcHJvYmVfZm9saW9gIGZ1bmN0aW9uIGluY3JlbWVudHMgYHItJmd0O3Byb2JlX2hpdHNbaV0mIzQzOyYjNDM7YCBpZiB0aGUgZmlsdGVyIHBhc3NlZC4gSXQgaXMgY3J1Y2lhbCB0byBjaGVjayB0aGlzLiBgaWAgaXMgaW5pdGlhbGl6ZWQgdG8gYDBgIGFuZCB0aHVzIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdGhhdCBjb3VsZCBjcmVhdGUgYW4gaXNzdWUuCgpUaGUgZnVuY3Rpb25zIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGFuZCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAgZW1wbG95IGxvY2FsIHN0cnVjdHMuIGBhcmdgIGlzIGNvbnN0cnVjdGVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzcGVjaWZpY2FsbHkgYC5jdHggPSBjdHgsIC5yID0gcmAsIGFuZCBgZGFtb25fcHJvYmVfd2Fsa19vcHNgIGlzIGFsc28gaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVyczogYC5wbWRfZW50cnkgPSAuLi4sIC5odWdldGxiX2VudHJ5ID0gLi4uYC4gVGhpcyBhcHByb2FjaCBlbnN1cmVzIHRoYXQgYWxsIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkLCB0aHVzIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBJbnNpZGUgdGhlc2UgZnVuY3Rpb25zLCBgZm9saW9gIGlzIGRlcml2ZWQgZnJvbSBlaXRoZXIgYHB0ZV9wZm5gIG9yIGB2bV9ub3JtYWxfZm9saW9gIGFuZCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLgoKRmluYWxseSwgSSBjaGVja2VkIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AgYW5kIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBgbWF4X3dzdW1gIGlzIGluaXRpYWxpemVkIHRvIGAwYC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBleGFtaW5lZCBhbGwgdGhlIGNvZGUgcGF0aHMgYW5kIGluaXRpYWxpemF0aW9ucyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTttIG5vdCBkZXRlY3RpbmcgYW55IGluc3RhbmNlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB1c2VkIGluIGNvbmRpdGlvbnMsIGJyYW5jaGVzLCBvciBwYXNzZWQgYXJvdW5kLiBObyBjb3B5X3RvX3VzZXIgb3IgcG90ZW50aWFsIGluZm8gbGVhayBwYXRod2F5cyBhcmUgcHJlc2VudC4gVGhlcmUgYXJlIGFsc28gbm8gY29tcGxleCBidWZmZXJzIG9yIG1lbW9yeSBwYXNzZWQgYWNyb3NzIGJvdW5kYXJpZXMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLgoKV2hpbGUgdGhlcmUgKmNvdWxkKiBiZSByYWNlIGNvbmRpdGlvbnMsIHBhZ2UgdGFibGUgd2FsayBidWdzLCBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB0byBgcHJvYmVfaGl0c2AsIHRoZXNlIGFyZSBpc3N1ZXMgdGhhdCB3b3VsZCBiZSBwaWNrZWQgdXAgYnkgZXhpc3RpbmcgdG9vbHMgc3VjaCBhcyBMT0NLREVQLCBLQVNBTiwgYW5kIERBTU9OJiMzOTtzIG93biB2YWxpZGF0aW9uLCBhbmQgdGhleSBhcmUgbm90IHJlbGF0ZWQgdG8gS01TQU4tc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzICh1bmluaXRpYWxpemVkIG1lbW9yeSkuCgoqKkNvbmNsdXNpb246KiogQmFzZWQgb24gdGhpcyB0aG9yb3VnaCByZXZpZXcsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLCBhbmQgdGhlIGFuYWx5c2lzIGlzIGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgYWNyb3NzIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzIGJ5IGludHJvZHVjaW5nIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKSBhbmQgaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcHJvYmUgaGFuZGxpbmcgKGRhbW9uX3ZhX3ByZXBfcHJvYmVzLCBkYW1vbl92YV9hcHBseV9wcm9iZXMsIGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSkuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHkgYW5kIHNhbml0aXplciBhcHBsaWNhYmlsaXR5OlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IEFsbCBzdGFjay1hbGxvY2F0ZWQgc3RydWN0cyAoc3VjaCBhcyBzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFuZCBzdHJ1Y3QgbW1fd2Fsa19vcHMpIGFuZCBzY2FsYXIgdmFyaWFibGVzIChlLmcuIGJvb2xlYW5zLCBsb29wIGNvdW50ZXJzLCBhY2N1bXVsYXRvciBzdW1zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzZS5cbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIG91dHB1dHMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cbjMuIE1lbW9yeSBzYWZldHkgY29uc2lkZXJhdGlvbnM6IEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHBhZ2UtdGFibGUgd2Fsa2luZywgZm9saW8gbG9ja2luZy9yZWZlcmVuY2UgY291bnRpbmcsIGNvbmN1cnJlbmN5LCBvciBhcnJheSBpbmRleGluZyAoZS5nLiwgcHJvYmVfaGl0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRzKS5cblxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIERBTU9OIGZpbHRlciBtYXRjaGluZyBsb2dpYyBhY3Jvc3MgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYnkgaW50cm9kdWNpbmcgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpIGFuZCBpbXBsZW1lbnRzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBwcm9iZSBoYW5kbGluZyAoZGFtb25fdmFfcHJlcF9wcm9iZXMsIGRhbW9uX3ZhX2FwcGx5X3Byb2JlcywgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5LCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KS5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eSBhbmQgc2FuaXRpemVyIGFwcGxpY2FiaWxpdHk6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIHN0YWNrLWFsbG9jYXRlZCBzdHJ1Y3RzIChzdWNoIGFzIHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYW5kIHN0cnVjdCBtbV93YWxrX29wcykgYW5kIHNjYWxhciB2YXJpYWJsZXMgKGUuZy4gYm9vbGVhbnMsIGxvb3AgY291bnRlcnMsIGFjY3VtdWxhdG9yIHN1bXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgb3IgemVyby1pbml0aWFsaXphdGlvbiBiZWZvcmUgdXNlLlxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBtZXNzYWdlcywgb3IgaW9jdGwgb3V0cHV0cyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LlxuMy4gTWVtb3J5IHNhZmV0eSBjb25zaWRlcmF0aW9uczogQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gcGFnZS10YWJsZSB3YWxraW5nLCBmb2xpbyBsb2NraW5nL3JlZmVyZW5jZSBjb3VudGluZywgY29uY3VycmVuY3ksIG9yIGFycmF5IGluZGV4aW5nIChlLmcuLCBwcm9iZV9oaXRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydHMpLlxuXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjEzLjQ1NTEwOTM0NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODEyMjk1NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX29wc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3ZhX3ByZXBfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl9wYV9maWx0ZXJfbWF0Y2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgYWNyb3NzIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzIGJ5IGludHJvZHVjaW5nIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKSBhbmQgaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcHJvYmUgaGFuZGxpbmcgKGRhbW9uX3ZhX3ByZXBfcHJvYmVzLCBkYW1vbl92YV9hcHBseV9wcm9iZXMsIGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSkuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eSBhbmQgc2FuaXRpemVyIGFwcGxpY2FiaWxpdHk6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IEFsbCBzdGFjay1hbGxvY2F0ZWQgc3RydWN0cyAoc3VjaCBhcyBzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFuZCBzdHJ1Y3QgbW1fd2Fsa19vcHMpIGFuZCBzY2FsYXIgdmFyaWFibGVzIChlLmcuIGJvb2xlYW5zLCBsb29wIGNvdW50ZXJzLCBhY2N1bXVsYXRvciBzdW1zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzZS5cXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCBvdXRwdXRzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXFxuMy4gTWVtb3J5IHNhZmV0eSBjb25zaWRlcmF0aW9uczogQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gcGFnZS10YWJsZSB3YWxraW5nLCBmb2xpbyBsb2NraW5nL3JlZmVyZW5jZSBjb3VudGluZywgY29uY3VycmVuY3ksIG9yIGFycmF5IGluZGV4aW5nIChlLmcuLCBwcm9iZV9oaXRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydHMpLlxcblxcbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MTMuNDU1MTEzODY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAxNjQ5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTFjY2RkYWVhNTE4Njc1NTcwZDI5NGEyNWM2ODFjZmZlZTUxNjgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzg6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcXG5AQCAtNDQ0LDMgKzQ0NCwzNSBAQCBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcylcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbitcXG4rYm9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXG4rXFx0c3dpdGNoIChmaWx0ZXItXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxcbitcXHRcXHRpZiAoIWZvbGlvKSB7XFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxcbitcXHRcXHRpZiAoIWZvbGlvKSB7XFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcXG4rXFx0XFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cXHUwMDNlbWF0Y2hpbmc7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXFxuaW5kZXggMzhkMjk1NDg4ZmExOC4uYjgzMjE2OWIxY2Y4YyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcXG5AQCAtMjEsMyArMjEsNSBAQCBib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpO1xcbiBcXG4gYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpO1xcbitcXG4rYm9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXFxuaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXFxuKysrIGIvbW0vZGFtb24vcGFkZHIuY1xcbkBAIC0xNDMsMjkgKzE0Myw4IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4gXFxuIFxcdHN3aXRjaCAoZmlsdGVyLVxcdTAwM2V0eXBlKSB7XFxuLVxcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfQU5PTjpcXG4tXFx0XFx0aWYgKCFmb2xpbykge1xcbi1cXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdG1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG4tXFx0XFx0aWYgKCFmb2xpbykge1xcbi1cXHRcXHRcXHRtYXRjaGVkID0gZmFsc2U7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XFxuLVxcdFxcdGlmICghbWVtY2cpXFxuLVxcdFxcdFxcdG1hdGNoZWQgPSBmYWxzZTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRtYXRjaGVkID0gZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCA9PSBtZW1fY2dyb3VwX2lkKG1lbWNnKTtcXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcXG4gXFx0XFx0aWYgKCFmb2xpbylcXG4gXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbkBAIC0xNzMsNyArMTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcXG4gXFx0XFx0XFx0bWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXFx1MDAzZW1hdGNoaW5nO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXFxuaW5kZXggZjg4NGQzZjc4ZjMwYS4uMDkwMzE3MTkxOTczYiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXFxuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xcbkBAIC01MTAsNiArNTEwLDIzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFx0cmV0dXJuIG1heF9ucl9hY2Nlc3NlcztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbitcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4rXFx0XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcXG4rXFx0XFx0c3dpdGNoIChwLVxcdTAwM2VhY3Rpb24pIHtcXG4rXFx0XFx0Y2FzZSBEQU1PTl9QUkVQX1NFVF9QR0lETEU6XFxuK1xcdFxcdFxcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVxcdTAwM2VzYW1wbGluZ19hZGRyKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuK1xcdFxcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xcbitcXHRcXHRpZiAoIW1tKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4rXFx0XFx0XFx0aWYgKHNldF9zYW1wbGVzKVxcbitcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXFx1MDAzZWFyLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbitcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXFxuK1xcdFxcdFxcdFxcdGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKGN0eCwgbW0sIHIsIHApO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1tcHV0KG1tKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXFxuK1xcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKHB0ZSlcXG4rXFx0XFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XFxuK1xcdGVsc2UgaWYgKHBtZClcXG4rXFx0XFx0eW91bmcgPSBwbWRfeW91bmcoKnBtZCk7XFxuK1xcdHlvdW5nID0geW91bmcgfHwgIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcXG4rXFx0XFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpO1xcbitcXHRyZXR1cm4geW91bmc7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXFxuK1xcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuK3tcXG4rXFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XFxuK1xcbitcXHRzd2l0Y2ggKGZpbHRlci1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcXG4rXFx0XFx0aWYgKCFmb2xpbylcXG4rXFx0XFx0XFx0bWF0Y2hlZCA9IGZhbHNlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1hdGNoZWQgPSBkYW1vbl92YV95b3VuZ19hZGRyKGZvbGlvLCBwdGUsIHBtZCwgbW0sXFxuK1xcdFxcdFxcdFxcdFxcdGFkZHIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVxcdTAwM2VtYXRjaGluZztcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX3Bhc3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9uX3Byb2JlICpwLFxcbitcXHRcXHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XFxuK1xcdGJvb2wgcGFzcyA9IHRydWU7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9maWx0ZXIoZiwgcCkge1xcbitcXHRcXHRpZiAoZGFtb25fdmFfZmlsdGVyX21hdGNoKGYsIGZvbGlvLCBwdGUsIHBtZCwgbW0sIGFkZHIpKSB7XFxuK1xcdFxcdFxcdHBhc3MgPSBmLVxcdTAwM2VhbGxvdztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cGFzcyA9ICFmLVxcdTAwM2VhbGxvdztcXG4rXFx0fVxcbitcXHRyZXR1cm4gcGFzcztcXG4rfVxcbitcXG4rc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSB7XFxuK1xcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4rXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0cHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcXG4rXFx0aW50IGkgPSAwO1xcbitcXG4rXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xcbitcXHRcXHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXFxuK1xcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXNhbXBsaW5nX2FkZHIpKVxcbitcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldKys7XFxuK1xcdFxcdGkrKztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuK3tcXG4rXFx0cHRlX3QgKnB0ZTtcXG4rXFx0cHRlX3QgcHRlbnQ7XFxuK1xcdHNwaW5sb2NrX3QgKnB0bDtcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuK1xcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVxcdTAwM2V2bWEpO1xcbitcXHRpZiAocHRsKSB7XFxuK1xcdFxcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xcbitcXG4rXFx0XFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSlcXG4rXFx0XFx0XFx0Z290byBodWdlX291dDtcXG4rXFx0XFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHdhbGstXFx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XFxuK1xcdFxcdGlmICghZm9saW8pXFxuK1xcdFxcdFxcdGdvdG8gaHVnZV9vdXQ7XFxuK1xcdFxcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXFx1MDAzZWN0eCwgcHJpdi1cXHUwMDNlciwgZm9saW8sIE5VTEwsIFxcdTAwMjZwbWRlLFxcbitcXHRcXHRcXHRcXHR3YWxrLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4rXFxuK2h1Z2Vfb3V0OlxcbitcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbisjZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4rXFxuK1xcdHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay1cXHUwMDNlbW0sIHBtZCwgYWRkciwgXFx1MDAyNnB0bCk7XFxuK1xcdGlmICghcHRlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZW50KSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXFx1MDAzZXZtYSwgYWRkciwgcHRlbnQpO1xcbitcXHRpZiAoIWZvbGlvKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cXHUwMDNlY3R4LCBwcml2LVxcdTAwM2VyLCBmb2xpbywgXFx1MDAyNnB0ZW50LCBOVUxMLFxcbitcXHRcXHRcXHR3YWxrLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4rXFxuK291dDpcXG4rXFx0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuK1xcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXFx1MDAzZXZtYSk7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHNwaW5sb2NrX3QgKnB0bDtcXG4rXFx0cHRlX3QgZW50cnk7XFxuK1xcbitcXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbitcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxuK1xcdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4oZW50cnkpKTtcXG4rXFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4rXFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cXHUwMDNlY3R4LCBwcml2LVxcdTAwM2VyLCBmb2xpbywgXFx1MDAyNmVudHJ5LCBOVUxMLFxcbitcXHRcXHRcXHR3YWxrLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFxuK291dDpcXG4rXFx0c3Bpbl91bmxvY2socHRsKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4rI2RlZmluZSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5IE5VTExcXG4rI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4rXFxuK3N0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4rXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYXJnID0ge1xcbitcXHRcXHQuY3R4ID0gY3R4LFxcbitcXHRcXHQuciA9IHIsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcXG4rXFx0XFx0LnBtZF9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSxcXG4rXFx0XFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5LFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSByLVxcdTAwM2VzYW1wbGluZ19hZGRyO1xcbitcXG4rXFx0aWYgKCFtbSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICsgMSwgXFx1MDAyNmRhbW9uX3Byb2JlX3dhbGtfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2YXJnKTtcXG4rfVxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbitcXHRcXHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4rXFx0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcXG4rXFx0XFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XFxuK1xcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxuK1xcdFxcdFxcdGlmIChzZXRfc2FtcGxlcylcXG4rXFx0XFx0XFx0XFx0ci1cXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVxcdTAwM2Vhci5zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG4rXFx0XFx0XFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XFxuK1xcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxuK1xcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChtbSlcXG4rXFx0XFx0XFx0bW1wdXQobW0pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbWF4X3dzdW07XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcXG5AQCAtOTM4LDYgKzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxcbiBcXHRcXHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxcbiBcXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcbiBcXHRcXHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyxcXG4rXFx0XFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXFxuK1xcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXFxuIFxcdFxcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXFxuIFxcdFxcdC5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LFxcbiBcXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoxMy45MjYwMDgxODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNDExNjQ3MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX29wc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3ZhX3ByZXBfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl9wYV9maWx0ZXJfbWF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTFjY2RkYWVhNTE4Njc1NTcwZDI5NGEyNWM2ODFjZmZlZTUxNjgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNjozODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggNzIxOWM2MDhiMTk1Mi4uY2ZjZDRlZGVlMzQ2YSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtNDQ0LDMgKzQ0NCwzNSBAQCBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuK1xuK2Jvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXG4rXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XG4rXHRcdGlmICghZm9saW8pIHtcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbitcdFx0aWYgKCFmb2xpbykge1xuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuK1x0XHRpZiAoIW1lbWNnKVxuK1x0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0cmV0dXJuIG1hdGNoZWQgPT0gZmlsdGVyLVx1MDAzZW1hdGNoaW5nO1xuK31cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmggYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbmluZGV4IDM4ZDI5NTQ4OGZhMTguLmI4MzIxNjliMWNmOGMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uaFxuQEAgLTIxLDMgKzIxLDUgQEAgYm9vbCBkYW1vc19mb2xpb19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB1bnNpZ25lZCBsb25nIGRhbW9uX21pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwgaW50IHRhcmdldF9uaWQpO1xuIFxuIGJvb2wgZGFtb3Nfb3BzX2hhc19maWx0ZXIoc3RydWN0IGRhbW9zICpzKTtcbitcbitib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggYzFlN2Q3YTRmNDBkZi4uZmZkZTg4ZWE3YTEzYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0xNDMsMjkgKzE0Myw4IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG4gXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX0FOT046XG4tXHRcdGlmICghZm9saW8pIHtcbi1cdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0bWF0Y2hlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdG1lbWNnID0gZm9saW9fbWVtY2dfY2hlY2soZm9saW8pO1xuLVx0XHRpZiAoIW1lbWNnKVxuLVx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG1hdGNoZWQgPSBmaWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfUEdJRExFX1VOU0VUOlxuIFx0XHRpZiAoIWZvbGlvKVxuIFx0XHRcdG1hdGNoZWQgPSBmYWxzZTtcbkBAIC0xNzMsNyArMTUyLDcgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcixcbiBcdFx0XHRtYXRjaGVkID0gZGFtb25fZm9saW9feW91bmcoZm9saW8pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcbiBcdH1cbiBcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGY4ODRkM2Y3OGYzMGEuLjA5MDMxNzE5MTk3M2IgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNTEwLDYgKzUxMCwyMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gbWF4X25yX2FjY2Vzc2VzO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuK1x0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcmVwICpwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJlcChwLCBwcm9iZSkge1xuK1x0XHRzd2l0Y2ggKHAtXHUwMDNlYWN0aW9uKSB7XG4rXHRcdGNhc2UgREFNT05fUFJFUF9TRVRfUEdJRExFOlxuK1x0XHRcdGRhbW9uX3ZhX21rb2xkKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRhbW9uX3ZhX3ByZXBfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBzZXRfc2FtcGxlcylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuK1x0XHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcbitcdFx0aWYgKCFtbSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbitcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4rXHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbitcdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG4rXHRcdFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxuK1x0XHRcdFx0ZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oY3R4LCBtbSwgciwgcCk7XG4rXHRcdH1cbitcdFx0bW1wdXQobW0pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZ19hZGRyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuK1xuK1x0aWYgKHB0ZSlcbitcdFx0eW91bmcgPSBwdGVfeW91bmcoKnB0ZSk7XG4rXHRlbHNlIGlmIChwbWQpXG4rXHRcdHlvdW5nID0gcG1kX3lvdW5nKCpwbWQpO1xuK1x0eW91bmcgPSB5b3VuZyB8fCAhZm9saW9fdGVzdF9pZGxlKGZvbGlvKSB8fFxuK1x0XHRtbXVfbm90aWZpZXJfdGVzdF95b3VuZyhtbSwgYWRkcik7XG4rXHRyZXR1cm4geW91bmc7XG4rfVxuK1xuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4re1xuK1x0Ym9vbCBtYXRjaGVkID0gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKGZpbHRlci1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdGVsc2VcbitcdFx0XHRtYXRjaGVkID0gZGFtb25fdmFfeW91bmdfYWRkcihmb2xpbywgcHRlLCBwbWQsIG1tLFxuK1x0XHRcdFx0XHRhZGRyKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChmaWx0ZXIsIGZvbGlvKTtcbitcdH1cbitcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfZmlsdGVyX3Bhc3Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9uX3Byb2JlICpwLFxuK1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmY7XG4rXHRib29sIHBhc3MgPSB0cnVlO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfZmlsdGVyKGYsIHApIHtcbitcdFx0aWYgKGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaChmLCBmb2xpbywgcHRlLCBwbWQsIG1tLCBhZGRyKSkge1xuK1x0XHRcdHBhc3MgPSBmLVx1MDAzZWFsbG93O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHBhc3MgPSAhZi1cdTAwM2VhbGxvdztcbitcdH1cbitcdHJldHVybiBwYXNzO1xuK31cbitcbitzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIHtcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdHB0ZV90ICpwdGUsIHBtZF90ICpwbWQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXHRpbnQgaSA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XG4rXHRcdGlmIChkYW1vbl92YV9maWx0ZXJfcGFzcyhmb2xpbywgcHJvYmUsIHB0ZSwgcG1kLCBtbSxcbitcdFx0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyKSlcbitcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0rKztcbitcdFx0aSsrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4re1xuK1x0cHRlX3QgKnB0ZTtcbitcdHB0ZV90IHB0ZW50O1xuK1x0c3BpbmxvY2tfdCAqcHRsO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgKnByaXYgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4rXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbitcdGlmIChwdGwpIHtcbitcdFx0cG1kX3QgcG1kZSA9IHBtZHBfZ2V0KHBtZCk7XG4rXG4rXHRcdGlmICghcG1kX3ByZXNlbnQocG1kZSkpXG4rXHRcdFx0Z290byBodWdlX291dDtcbitcdFx0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW9fcG1kKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwbWRlKTtcbitcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRnb3RvIGh1Z2Vfb3V0O1xuK1x0XHRkYW1vbl92YV9wcm9iZV9mb2xpbyhwcml2LVx1MDAzZWN0eCwgcHJpdi1cdTAwM2VyLCBmb2xpbywgTlVMTCwgXHUwMDI2cG1kZSxcbitcdFx0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcbitodWdlX291dDpcbitcdFx0c3Bpbl91bmxvY2socHRsKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rI2VuZGlmXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbitcbitcdHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay1cdTAwM2VtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuK1x0aWYgKCFwdGUpXG4rXHRcdHJldHVybiAwO1xuK1x0cHRlbnQgPSBwdGVwX2dldChwdGUpO1xuK1x0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Zm9saW8gPSB2bV9ub3JtYWxfZm9saW8od2Fsay1cdTAwM2V2bWEsIGFkZHIsIHB0ZW50KTtcbitcdGlmICghZm9saW8pXG4rXHRcdGdvdG8gb3V0O1xuK1x0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIFx1MDAyNnB0ZW50LCBOVUxMLFxuK1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcbitvdXQ6XG4rXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTtcbitcdHJldHVybiAwO1xuK31cbitcbisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuK3N0YXRpYyBpbnQgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEod2Fsay1cdTAwM2V2bWEpO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHNwaW5sb2NrX3QgKnB0bDtcbitcdHB0ZV90IGVudHJ5O1xuK1xuK1x0cHRsID0gaHVnZV9wdGVfbG9jayhoLCB3YWxrLVx1MDAzZW1tLCBwdGUpO1xuK1x0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG4rXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4rXHRmb2xpb19nZXQoZm9saW8pO1xuK1x0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIFx1MDAyNmVudHJ5LCBOVUxMLFxuK1x0XHRcdHdhbGstXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbitcdGZvbGlvX3B1dChmb2xpbyk7XG4rXG4rb3V0OlxuK1x0c3Bpbl91bmxvY2socHRsKTtcbitcdHJldHVybiAwO1xuK31cbisjZWxzZVxuKyNkZWZpbmUgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSBOVUxMXG4rI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbitcbitzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbit7XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFyZyA9IHtcbitcdFx0LmN0eCA9IGN0eCxcbitcdFx0LnIgPSByLFxuK1x0fTtcbitcdHN0cnVjdCBtbV93YWxrX29wcyBkYW1vbl9wcm9iZV93YWxrX29wcyA9IHtcbitcdFx0LnBtZF9lbnRyeSA9IGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSxcbitcdFx0Lmh1Z2V0bGJfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5LFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkciA9IHItXHUwMDNlc2FtcGxpbmdfYWRkcjtcbitcbitcdGlmICghbW0pXG4rXHRcdHJldHVybjtcbitcbitcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFx1MDAyNmRhbW9uX3Byb2JlX3dhbGtfb3BzLFxuK1x0XHRcdFx1MDAyNmFyZyk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbitcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XG4rXG4rXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4rXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuK1x0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuK1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbitcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkciA9IGRhbW9uX3JhbmQoY3R4LCByLVx1MDAzZWFyLnN0YXJ0LFxuK1x0XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kKTtcbitcdFx0XHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcbitcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuK1x0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdFx0Y3R4KSwgbWF4X3dzdW0pO1xuK1x0XHR9XG4rXHRcdGlmIChtbSlcbitcdFx0XHRtbXB1dChtbSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbWF4X3dzdW07XG4rfVxuK1xuIHN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwbWRfdCAqcG1kcClcbkBAIC05MzgsNiArMTE2OCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4gXHRcdC51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsXG4gXHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG4gXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxuK1x0XHQucHJlcF9wcm9iZXMgPSBkYW1vbl92YV9wcmVwX3Byb2JlcyxcbitcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyxcbiBcdFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcbiBcdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4gXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl92YV9hcHBseV9zY2hlbWUsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoxMy45MjYwMDk3OTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM5MDM1NjIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgTGludXgga2VybmVsIHBhdGNoIHNlcmllcy4gVGhlIGdvYWwgaXMgZnV6emluZyB3aXRoIHN5emthbGxlciwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZyB0byBzZWUg4oCTIG1vcmUgcm9idXN0IGtlcm5lbHMgYXJlIGJldHRlciBmb3IgZXZlcnlvbmUuIExldCdzIGRpdmUgaW4uXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcGF0Y2guIEkgbmVlZCB0byBrbm93ICpleGFjdGx5KiB3aGF0IGl0J3MgdG91Y2hpbmcuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYG1tL2RhbW9uL2A6IHNwZWNpZmljYWxseSBgb3BzLWNvbW1vbi5jYCwgYG9wcy1jb21tb24uaGAsIGBwYWRkci5jYCwgYW5kIGB2YWRkci5jYC4gREFNT04uLi4gRGF0YSBBY2Nlc3MgTU9OaXRvci4gSW50ZXJlc3RpbmcuIFRoaXMgbGlrZWx5IG1lYW5zIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtZW1vcnkgYWNjZXNzIHByb2ZpbGluZyBvciBtb25pdG9yaW5nLiBJIHdvbmRlciBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIHRoYXQuXG5cbk5vdywgaW5zdGVhZCBvZiBqdXN0IHJlYWRpbmcgY29kZSwgaXQncyB0aW1lIHRvIGdldCBhICpyZWFsKiBwaWN0dXJlLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gZ3JlcCwgY29kZSBzZWFyY2gsIHdoYXRldmVyIGdldHMgdGhlIGpvYiBkb25lIOKAkyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEknbGwgc2VhcmNoIHRoZSBrZXJuZWwgdHJlZSBmb3IgS2NvbmZpZyBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04sIGFueSBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucywgYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5ICpob3cqIHRoaXMgaXMgdXNlZCwgd2hhdCBpdCdzIGNvbm5lY3RlZCB0bywgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHN5c3RlbSBiZWhhdmlvci5cblxuSSdsbCBzdGFydCB3aXRoIHNvbWUgcXVpY2sgZ3JlcHMgdG8gZ2V0IGEgYnJvYWQgb3ZlcnZpZXcuIFRoZW4sIEkgY2FuIGRyaWxsIGRvd24gZnVydGhlciBiYXNlZCBvbiB3aGF0IHRob3NlIGluaXRpYWwgc2VhcmNoZXMgcmV2ZWFsLiBHb3R0YSBrbm93IHRoZSBcIndobywgd2hhdCwgd2hlcmUsIHdoZW4sIGFuZCB3aHlcIiBiZWZvcmUgSSBjYW4gZXZlbiBzdGFydCB0byB0aGluayBhYm91dCBmdXp6aW5nIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ4OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjI0LjMxNjM2ODA0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODUwNjI5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT05fVkFERFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0yNj1jb25maWcgREFNT05fS1VOSVRfVEVTVFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZz00Nz1jb25maWcgREFNT05fUEFERFJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vTWFrZWZpbGU9Mz1vYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbm1tL2RhbW9uL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxubW0vZGFtb24vTWFrZWZpbGUtNS1vYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZz04PUNPTkZJR19QQUdFX0lETEVfRkxBRz15XFxubW0vZGFtb24vdGVzdHMvLmt1bml0Y29uZmlnOjk6Q09ORklHX0RBTU9OX1ZBRERSPXlcXG5tbS9kYW1vbi90ZXN0cy8ua3VuaXRjb25maWc6MTA6Q09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1Q9eVxcbm1tL2RhbW9uL3Rlc3RzLy5rdW5pdGNvbmZpZy0xMS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD00MTg9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MjYtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQyNzpcXHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkZJR19EQU1PTl9WQUREUiBpcyBzZXQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDI4LVxcdGlmICghZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoREFNT05fT1BTX1ZBRERSKSkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC01LVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NjojaWZkZWYgQ09ORklHX0RBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTctXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo4OiNpZm5kZWYgX0RBTU9OX1ZBRERSX1RFU1RfSFxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6OTojZGVmaW5lIF9EQU1PTl9WQUREUl9URVNUX0hcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwLVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0yODI9a3VuaXRfdGVzdF9zdWl0ZShkYW1vbl90ZXN0X3N1aXRlKTtcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTI4My1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjI4NDojZW5kaWYgLyogX0RBTU9OX1ZBRERSX1RFU1RfSCAqL1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMjg1LVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6Mjg2OiNlbmRpZlxcdC8qIENPTkZJR19EQU1PTl9WQUREUl9LVU5JVF9URVNUICovXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTE5LVxcbm1tL2RhbW9uL3ZhZGRyLmM6MjA6I2lmZGVmIENPTkZJR19EQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vdmFkZHIuYy0yMS0jdW5kZWYgREFNT05fTUlOX1JFR0lPTl9TWlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoyNC43MDE0MzU3ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjkyMzIwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBLY29uZmlnIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBEQU1PTiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGBLY29uZmlnYCBmaWxlLiBJJ2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgdG9wLWxldmVsIHZpZXcgb2YgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGV4cG9zZSBhbGwgb2YgdGhlIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgZmlsZSB3aWxsIGRlZmluZSBhbGwgdGhlIGBDT05GSUdfREFNT05fKmAgc3ltYm9scywgYW5kIHRyYWNpbmcgdGhvc2UgYmFjayB1cCB0aGUgZGVwZW5kZW5jeSB0cmVlIHdpbGwgaWxsdW1pbmF0ZSBleGFjdGx5IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBhcmUgYmVpbmcgaW1wYWN0ZWQgYnkgYSBEQU1PTiBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoYXQgS2NvbmZpZyBzdHJ1Y3R1cmUgZnVsbHkgYWxsb3dzIG9uZSB0byBzZWUgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IERBTU9OIGNhbiBiZSBidWlsdCBhbmQgY29uZmlndXJlZC4gV2l0aCB0aGlzIGluIGhhbmQsIEkgY2FuIGVmZmVjdGl2ZWx5IG5hdmlnYXRlIHRoZSBlbnRpcmUgREFNT04gc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MjcuOTkzNzU4OTczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MjcuOTkzODQ1MzMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyMzI2MjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIOKAkyBtb3N0IGxpa2VseSwgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNTS9EQU1PTiBzdWJzeXN0ZW0uIEkgc2VlIHRoZSBzdGFydGluZyBwb2ludCBpcyB0byBkaXZlIGludG8gdGhlIHJlc3Qgb2YgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21lIGludGVyZXN0aW5nIGRldGFpbCB0aGVyZSB0aGF0IHdhcnJhbnRzIGEgZGVlcGVyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIGZlYXR1cmVzLCBvciBtYXliZSBldmVuIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIHdpdGhpbiBEQU1PTidzIEtjb25maWcgZmlsZS4gSSdtIGhvcGluZyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ7IGlkZW50aWZ5IHBvdGVudGlhbCBjdXN0b21pemF0aW9uIHBvaW50cyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEdpdmVuIHRoaXMgaXMgYSBLY29uZmlnIGZpbGUsIGl0IGNvbnRhaW5zIHRoZSBidWlsZCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kIHdoYXQgbG9naWMgZ292ZXJucyB0aGVtIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBiZWhhdmlvciBvZiBEQU1PTi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29tcGxleCBkZXBlbmRlbmN5IHRyZWUsIHdpdGggcG90ZW50aWFsIGNyb3NzLWFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIEkgYW0gaW50ZXJlc3RlZCB0byBzZWUgd2hhdCBvcHRpb25zIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBteSBjdXJyZW50IGFyZWEgb2YgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjMwLjQxNzExMDkwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA4NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuICA4OTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxuICA5MzpcXHRcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG4gIDk0OlxcdFxcdCAgdGhvc2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcXG4gIDk3OlxcdFxcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxcbiAgOTg6XFx0XFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxuIDEwMTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbiAxMDI6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAxMDM6XFx0XFx0aGVscFxcbiAxMDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG4gMTA1OlxcdFxcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcXG4gMTA2OlxcdFxcdCAgcGFnZXMgcmVjbGFpbWVkIGZpcnN0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4gMTA3OlxcdFxcbiAxMDg6XFx0Y29uZmlnIERBTU9OX1NUQVRcXG4gMTA5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuIDExMDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuIDExMTpcXHRcXHRoZWxwXFxuIDExMjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG4gMTEzOlxcdFxcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcXG4gMTE0OlxcdFxcdCAgbWV0cmljcy5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxuIDExNzpcXHRcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbiAxMTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxuIDExOTpcXHRcXHRkZWZhdWx0IERBTU9OX1NUQVRcXG4gMTIwOlxcdFxcdGhlbHBcXG4gMTIxOlxcdFxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG4gMTIyOlxcdFxcdCAgYm9vdCBvciBydW50aW1lIHVzaW5nIGl0cyAnZW5hYmxlZCcgcGFyYW1ldGVyLlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRlbmRtZW51XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjMwLjQxNzE4ODQ4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTEzOTk2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgRGFtb24gUHJvYmVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCB0aGUgREFNT04gZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgZmlsdGVyaW5nIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBwcm9jZXNzZXMgYXJlIGluaXRpYXRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byB0aGUgY29yZSBmdW5jdGlvbnM6IGBkYW1vbl9maWx0ZXJgLCBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAsIGBwcmVwX3Byb2Jlc2AsIGFuZCBgYXBwbHlfcHJvYmVzYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUga2VybmVsJ3Mgc3lzZnMgaW50ZXJmYWNlLCBvciBwZXJoYXBzIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBtZWNoYW5pc20sIGhvb2tzIGludG8gdGhlc2UgZnVuY3Rpb25zIGFuZCB0cmlnZ2VycyB0aGVpciBleGVjdXRpb24uIEkgZXhwZWN0IHRvIGZpbmQgdGhpcyBpbmZvcm1hdGlvbiBieSBsb29raW5nIGF0IHRoZSBjYWxsIHN0YWNrcy4gVGhlcmVmb3JlLCBJIHdpbGwgYmVnaW4gYnkgc2VhcmNoaW5nIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGNhbGxzIHRvIGBwcmVwX3Byb2Jlc2AgYW5kIGBhcHBseV9wcm9iZXNgLiBUaGlzIHNlYXJjaCB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlc2Ugb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjMyLjYyODU5MDY0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNDgzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcF9wcm9iZXN8YXBwbHlfcHJvYmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zODkzPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MzMtXFxubW0vZGFtb24vY29yZS5jOjM5MzQ6XFx0XFx0ZG9fcHJlcCA9IGN0eC1cXHUwMDNlb3BzLnByZXBfcHJvYmVzIFxcdTAwMjZcXHUwMDI2IGRhbW9uX2hhc19wcmVwKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTM5MzUtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzkzOC1cXHRcXHRpZiAoZG9fcHJlcClcXG5tbS9kYW1vbi9jb3JlLmM6MzkzOTpcXHRcXHRcXHRjdHgtXFx1MDAzZW9wcy5wcmVwX3Byb2JlcyhjdHgsIGFjY2Vzc19jaGVja19kaXNhYmxlZCk7XFxubW0vZGFtb24vY29yZS5jLTM5NDAtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk0NS1cXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgPSBjdHgtXFx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzozOTQ2OlxcdFxcdGlmIChjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMzk0Ny1cXHRcXHRcXHRpZiAodGltZV9hZnRlcl9lcShjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NTItXFx0XFx0XFx0XFx0Z2V0X21heF93c3VtID0gZmFsc2U7XFxubW0vZGFtb24vY29yZS5jOjM5NTM6XFx0XFx0XFx0bWF4X3dzdW0gPSBjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zOTU0LVxcdFxcdFxcdFxcdFxcdGFjY2Vzc19jaGVja19kaXNhYmxlZCBcXHUwMDI2XFx1MDAyNiAhZG9fcHJlcCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9OTI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEwNy1cXG5tbS9kYW1vbi9wYWRkci5jOjEwODpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2Jlc19yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9wYWRkci5jLTEwOS1cXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTEyNC1cXG5tbS9kYW1vbi9wYWRkci5jOjEyNTpzdGF0aWMgdm9pZCBkYW1vbl9wYV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXFxubW0vZGFtb24vcGFkZHIuYy0xMjYte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMzYtXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KVxcbm1tL2RhbW9uL3BhZGRyLmM6MTM3OlxcdFxcdFxcdFxcdGRhbW9uX3BhX3ByZXBfcHJvYmVzX3JlZ2lvbihyLCBwLCBjdHgpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTM4LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTYwPXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNzUtXFxubW0vZGFtb24vcGFkZHIuYzoxNzY6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00NTY9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDYzLVxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDY0OlxcdFxcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3BhX3ByZXBfcHJvYmVzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDY1OlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYy00NjYtXFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTUxMz1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUyOS1cXG5tbS9kYW1vbi92YWRkci5jOjUzMDpzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXFxubW0vZGFtb24vdmFkZHIuYy01MzEte1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz02Njk9c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTY5Ni1cXG5tbS9kYW1vbi92YWRkci5jOjY5NzpzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vdmFkZHIuYy02OTgtXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MTYtXFxubW0vZGFtb24vdmFkZHIuYzo3MTc6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzAtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi92YWRkci5jOjczMTpcXHRcXHRcXHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcXG5tbS9kYW1vbi92YWRkci5jLTczMi1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTExNzAtXFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMsXFxubW0vZGFtb24vdmFkZHIuYzoxMTcxOlxcdFxcdC5wcmVwX3Byb2JlcyA9IGRhbW9uX3ZhX3ByZXBfcHJvYmVzLFxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE3MjpcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fdmFfYXBwbHlfcHJvYmVzLFxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE3My1cXHRcXHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODozMi42Nzc5NDUzMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAwODI2NDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogREFNT04gVmlydHVhbCBBZGRyZXNzIFNwYWNlIFByb2JlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgc2VjdGlvbiBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIERhdGEgQWNjZXNzIE1vbml0b3Jpbmcgc3Vic3lzdGVtLCBEQU1PTiwgbG9jYXRlZCBpbiBgbW0vZGFtb24vYC4gSXQncyBwcmV0dHkgaW50ZXJlc3RpbmcsIGFuZCBkZWZpbml0ZWx5IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIHVzZXItY29udHJvbGxhYmxlIHRocm91Z2ggc3lzZnMsIHdoaWNoIGlzIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQgZm9yIGludGVyYWN0aW9uLCBhc3N1bWluZyBgQ09ORklHX0RBTU9OX1NZU0ZTYCBpcyBlbmFibGVkLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYWRkIHByb2Jpbmcgc3VwcG9ydCB0byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgd2l0aGluIERBTU9OLiBUaGlzIGluY2x1ZGVzIGZ1bmN0aW9ucyBsaWtlIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AsIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBhbmQgYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGAuIFRoZXkndmUgYWxzbyByZWZhY3RvcmVkIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBpbnRvIGBvcHMtY29tbW9uLmNgLiBFc3NlbnRpYWxseSwgd2UncmUgdGFsa2luZyBhYm91dCBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIGxvZ2ljLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBhZ2UgdGFibGUgd2Fsa2luZyBhbmQgVEhQL2h1Z2V0bGIgbG9ja2luZywgYW5kIGZvbGlvIGNoZWNrcy4gVGhhdCdzIGEgbG90IG9mIHRvdWNocG9pbnRzIGluIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuXG5cbkdpdmVuIGl0cyByZWFjaCBpbnRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWNjZXNzaWJpbGl0eSB0aHJvdWdoIHN5c2ZzLCBpdCdzIGltbWVkaWF0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgZXhlY3V0YWJsZSBjb2RlIGFuZCBpbnRlcmFjdHMgd2l0aCBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcy5cblxuTGV0J3MgdmVyaWZ5IHRoZSBmdXp6aW5nIGNyaXRlcmlhOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRSVUUqKiAtIENoZWNrIVxuXG4qICAgKipFbmFibGVDb25maWdzOioqIEFscmlnaHQsIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGdldCB0aGlzIHJ1bm5pbmcgYW5kIGFjY2Vzc2libGU/IEkgbmVlZCB0byBjaGVjayBLY29uZmlnIGRlcGVuZGVuY2llczpcblxuICAgICogICBgREFNT05gIChvYnZpb3VzbHksIGl0J3MgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkpXG4gICAgKiAgIGBEQU1PTl9WQUREUmBcbiAgICAqICAgYERBTU9OX1BBRERSYCAoYmVjYXVzZSBgb3BzLWNvbW1vbmAgaXMgY29tcGlsZWQgaWYgZWl0aGVyIGBEQU1PTl9WQUREUmAgb3IgYERBTU9OX1BBRERSYCBpcyBlbmFibGVkKVxuICAgICogICBgREFNT05fU1lTRlNgICh2aXRhbCB0byBjb250cm9sIERBTU9OIGFuZCBjb25maWd1cmUgcHJvYmVzL2ZpbHRlcnMgdmlhIHN5c2ZzIGZyb20gdXNlcnNwYWNlKS5cbiAgICAqICAgYE1FTUNHYCAoaW1wb3J0YW50IGZvciBgREFNT05fRklMVEVSX1RZUEVfTUVNQ0dgIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGBmb2xpb19tZW1jZ19jaGVja2ApXG4gICAgKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgKGVzc2VudGlhbCBmb3IgdGhlIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGZ1bmN0aW9uKVxuICAgICogICBgSFVHRVRMQl9QQUdFYCAobmVlZGVkIGZvciBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWApLlxuXG4gICAgVGhlIGxhc3QgZmV3IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gcmVsYXRlIHRvIGh1Z2UgcGFnZSBzdXBwb3J0LCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3IgdGVzdCBzZXR1cC5cblxuTmV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCB1dGlsaXplcyBtZW1jZyBhbmQgdmVyaWZ5IHdoZXRoZXIgdGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGl0LlxuXG5Mb29raW5nIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCB0aGUgZm9sbG93aW5nIGxpbmVzIG9mIGNvZGUgYXJlIG9mIHJlbGV2YW5jZS5cblxuYGBgY1xubWVtY2cgPSBmb2xpb19tZW1jZ19jaGVjayhmb2xpbyk7XG5maWx0ZXItXHUwMDNlbWVtY2dfaWQgPT0gbWVtX2Nncm91cF9pZChtZW1jZyk7XG5gYGBcblxuT2theSwgc28gdGhlIGBmb2xpb19tZW1jZ19jaGVja2AgZnVuY3Rpb24gcmVxdWlyZXMgYENPTkZJR19NRU1DR2AuIEdvb2QgdG8ga25vdy5cblxuTGFzdGx5LCBJIHNob3VsZCBzZWFyY2ggZm9yIGBkYW1vbl9wcm9iZWAgb3IgYHByb2Jlc2AgaW4gYG1tL2RhbW9uL3N5c2ZzKmAgdG8gY29uZmlybSB0aGF0IHN5c2ZzIHN1cHBvcnRzIHRoZSBwcm9iZXMuIFRoZW4sIEkgY2FuIHN0YXJ0IGJ1aWxkaW5nIHNvbWUgaW5pdGlhbCBmdXp6aW5nIGhhcm5lc3NlcyBhbmQgdGVzdCBzZXR1cHMsIGZvY3VzaW5nIG9uIHZhcmlhdGlvbnMgaW4gdGhlIHByb2JlZCBhZGRyZXNzIHNwYWNlLCB0aGUgZmlsdGVyIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggcGFnZSB0YWJsZXMgYW5kIGh1Z2UgcGFnZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODcwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjM5LjY4NjIxMjI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA2NjAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExNDMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL2RhbW9uL2NvcmUuYz0xMTQ9c3RydWN0IGRhbW9uX3ByZXAgKmRhbW9uX25ld19wcmVwKGVudW0gZGFtb25fcHJlcF9hY3Rpb24gYWN0aW9uKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEyNS1cXG5tbS9kYW1vbi9jb3JlLmM6MTI2OnZvaWQgZGFtb25fYWRkX3ByZXAoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcClcXG5tbS9kYW1vbi9jb3JlLmMtMTI3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDE9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9wcmVwKHN0cnVjdCBkYW1vbl9wcmVwICpwKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0Ni1cXG5tbS9kYW1vbi9jb3JlLmM6MTQ3OnN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJlcCAqZGFtb25fbnRoX3ByZXAoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMTQ4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTk9c3RhdGljIGJvb2wgZGFtb25faGFzX3ByZXAoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjEtXFx0c3RydWN0IGRhbW9uX3ByZXAgKnByZXA7XFxubW0vZGFtb24vY29yZS5jOjE2MjpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbm1tL2RhbW9uL2NvcmUuYy0xNjMtXFxubW0vZGFtb24vY29yZS5jOjE2NDpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgYykge1xcbm1tL2RhbW9uL2NvcmUuYzoxNjU6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcHJlcChwcmVwLCBwcm9iZSlcXG5tbS9kYW1vbi9jb3JlLmMtMTY2LVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3MT1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODUtXFxubW0vZGFtb24vY29yZS5jOjE4Njp2b2lkIGRhbW9uX2FkZF9maWx0ZXIoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fZmlsdGVyICpmKVxcbm1tL2RhbW9uL2NvcmUuYy0xODcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMT12b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDc6c3RhdGljIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX250aF9maWx0ZXIoaW50IG4sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcClcXG5tbS9kYW1vbi9jb3JlLmMtMjA4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTgtXFxubW0vZGFtb24vY29yZS5jOjIxOTpzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxcbm1tL2RhbW9uL2NvcmUuYy0yMjAte1xcbm1tL2RhbW9uL2NvcmUuYzoyMjE6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjItXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMyLVxcbm1tL2RhbW9uL2NvcmUuYzoyMzM6dm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzQte1xcbm1tL2RhbW9uL2NvcmUuYzoyMzU6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cHJvYmUtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZXByb2Jlcyk7XFxubW0vZGFtb24vY29yZS5jLTIzNi19XFxubW0vZGFtb24vY29yZS5jLTIzNy1cXG5tbS9kYW1vbi9jb3JlLmM6MjM4OnN0YXRpYyB2b2lkIGRhbW9uX2RlbF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxubW0vZGFtb24vY29yZS5jLTIzOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNDM6c3RhdGljIHZvaWQgZGFtb25fZnJlZV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxubW0vZGFtb24vY29yZS5jLTI0NC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU0LVxcbm1tL2RhbW9uL2NvcmUuYzoyNTU6c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxubW0vZGFtb24vY29yZS5jLTI1Ni17XFxubW0vZGFtb24vY29yZS5jOjI1NzpcXHRkYW1vbl9kZWxfcHJvYmUocCk7XFxubW0vZGFtb24vY29yZS5jOjI1ODpcXHRkYW1vbl9mcmVlX3Byb2JlKHApO1xcbm1tL2RhbW9uL2NvcmUuYy0yNTktfVxcbm1tL2RhbW9uL2NvcmUuYy0yNjAtXFxubW0vZGFtb24vY29yZS5jOjI2MTpzdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjYyLXtcXG5tbS9kYW1vbi9jb3JlLmM6MjYzOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG5tbS9kYW1vbi9jb3JlLmMtMjY0LVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMjY1LVxcbm1tL2RhbW9uL2NvcmUuYzoyNjY6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jLTI2Ny1cXHRcXHRpZiAoaSsrID09IG4pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjcyLVxcbm1tL2RhbW9uL2NvcmUuYzoyNzM6c3RhdGljIGJvb2wgZGFtb25faGFzX3Byb2JlX3dlaWdodHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9jb3JlLmMtMjc0LXtcXG5tbS9kYW1vbi9jb3JlLmM6Mjc1OlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG5tbS9kYW1vbi9jb3JlLmMtMjc2LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzc6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgYykge1xcbm1tL2RhbW9uL2NvcmUuYy0yNzgtXFx0XFx0aWYgKHAtXFx1MDAzZXdlaWdodClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMjU9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQ4LVxcbm1tL2RhbW9uL2NvcmUuYzozNDk6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTM1MC1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzY2LVxcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcXG5tbS9kYW1vbi9jb3JlLmM6MzY3OlxcdFxcdHJldHVybiByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcXG5tbS9kYW1vbi9jb3JlLmMtMzY4LVxcbm1tL2RhbW9uL2NvcmUuYzozNjk6XFx0cmV0dXJuIGRhbW9uX212c3VtKHItXFx1MDAzZXByb2JlX2hpdHNbcHJvYmVfaWR4XSxcXG5tbS9kYW1vbi9jb3JlLmM6MzcwOlxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XFxubW0vZGFtb24vY29yZS5jLTM3MS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzg5PXN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6NDAzOlxcdFxcdHJlZ2lvbi1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XFxubW0vZGFtb24vY29yZS5jOjQwNDpcXHRcXHRyZWdpb24tXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTQwNS1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDYyPXN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDY4LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzo0Njk6ICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxcbm1tL2RhbW9uL2NvcmUuYy00NzAtICogQHI6XFx0XFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxcbm1tL2RhbW9uL2NvcmUuYzo0NzE6ICogQGxhc3Q6XFx0aWYgdGhlIHJlcXVlc3QgaXMgZm9yIGxhc3Qtd2luZG93IGFnZ3JlZ2F0ZWQgcHJvYmUgaGl0cy5cXG5tbS9kYW1vbi9jb3JlLmMtNDcyLSAqIEBjdHg6XFx0Y29udGV4dCBvZiBcXHUwMDI2ci5cXG5tbS9kYW1vbi9jb3JlLmMtNDczLSAqXFxubW0vZGFtb24vY29yZS5jOjQ3NDogKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLlxcbm1tL2RhbW9uL2NvcmUuYy00NzUtICovXFxubW0vZGFtb24vY29yZS5jOjQ3Njp1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG5tbS9kYW1vbi9jb3JlLmMtNDc3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtNDc4LXtcXG5tbS9kYW1vbi9jb3JlLmM6NDc5OlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxubW0vZGFtb24vY29yZS5jLTQ4MC1cXHR1bnNpZ25lZCBpbnQgc3VtID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00ODItXFxubW0vZGFtb24vY29yZS5jOjQ4MzpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jLTQ4NC1cXHRcXHRpZiAobGFzdClcXG5tbS9kYW1vbi9jb3JlLmM6NDg1OlxcdFxcdFxcdHN1bSArPSByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaSsrXSAqIHByb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jLTQ4Ni1cXHRcXHRlbHNlXFxubW0vZGFtb24vY29yZS5jOjQ4NzpcXHRcXHRcXHRzdW0gKz0gci1cXHUwMDNlcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmMtNDg4LVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05MDE9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTkyNy1cXG5tbS9kYW1vbi9jb3JlLmM6OTI4OlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZXByb2Jlcyk7XFxubW0vZGFtb24vY29yZS5jLTkyOS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05NTA9dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTUyLVxcdHN0cnVjdCBkYW1vcyAqcywgKm5leHRfcztcXG5tbS9kYW1vbi9jb3JlLmM6OTUzOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgKm5leHRfcDtcXG5tbS9kYW1vbi9jb3JlLmMtOTU0LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTk1OS1cXG5tbS9kYW1vbi9jb3JlLmM6OTYwOlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUocCwgbmV4dF9wLCBjdHgpXFxubW0vZGFtb24vY29yZS5jOjk2MTpcXHRcXHRkYW1vbl9kZXN0cm95X3Byb2JlKHApO1xcbm1tL2RhbW9uL2NvcmUuYy05NjItXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAwMz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAwOS1cXG5tbS9kYW1vbi9jb3JlLmM6MTAxMDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDExLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDEzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTAxNDpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XFxubW0vZGFtb24vY29yZS5jLTEwMTUtXFx0aW50IGkgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDE2LVxcbm1tL2RhbW9uL2NvcmUuYzoxMDE3OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxMDE4OlxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcXG5tbS9kYW1vbi9jb3JlLmM6MTAxOTpcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAyMC1cXHRcXHRpZiAoIWFnZ3JlZ2F0aW5nKVxcbm1tL2RhbW9uL2NvcmUuYzoxMDIxOlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxubW0vZGFtb24vY29yZS5jOjEwMjI6XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxcbm1tL2RhbW9uL2NvcmUuYy0xMDIzLVxcdFxcdFxcdFxcdFxcdG5ld19hdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTEwMjQtXFx0XFx0ZWxzZVxcbm1tL2RhbW9uL2NvcmUuYzoxMDI1OlxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDI2LVxcdFxcdGkrKztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDMwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzMte1xcbm1tL2RhbW9uL2NvcmUuYzoxMDM0OlxcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMTAzNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNDE2PXN0YXRpYyB2b2lkIGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDI2LVxcbm1tL2RhbW9uL2NvcmUuYzoxNDI3OnN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTE0Mjgte1xcbm1tL2RhbW9uL2NvcmUuYy0xNDI5LVxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDMwOlxcdHVuc2lnbmVkIGNoYXIgbWF4X3Byb2JlX2hpdHM7XFxubW0vZGFtb24vY29yZS5jOjE0MzE6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQzMi1cXHR1bnNpZ25lZCBpbnQgd3N1bSwgd3N1bV90b19hZGQ7XFxubW0vZGFtb24vY29yZS5jOjE0MzM6XFx0aW50IG5yX3Byb2JlcztcXG5tbS9kYW1vbi9jb3JlLmMtMTQzNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTQzNTpcXHRucl9wcm9iZXMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDM2OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXFxubW0vZGFtb24vY29yZS5jOjE0Mzc6XFx0XFx0bnJfcHJvYmVzKys7XFxubW0vZGFtb24vY29yZS5jOjE0Mzg6XFx0aWYgKG5yX3Byb2JlcyBcXHUwMDNlIERBTU9OX01BWF9QUk9CRVMpXFxubW0vZGFtb24vY29yZS5jLTE0MzktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDQwLVxcbm1tL2RhbW9uL2NvcmUuYzoxNDQxOlxcdGlmICghZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KSlcXG5tbS9kYW1vbi9jb3JlLmMtMTQ0Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDQ3LVxcbm1tL2RhbW9uL2NvcmUuYzoxNDQ4OlxcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXFxubW0vZGFtb24vY29yZS5jOjE0NDk6XFx0bWF4X3Byb2JlX2hpdHMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZjdHgtXFx1MDAzZWF0dHJzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1MC1cXHR3c3VtID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ1MTpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vY29yZS5jOjE0NTI6XFx0XFx0aWYgKHByb2JlLVxcdTAwM2V3ZWlnaHQgXFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0xNDUzLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ1NDpcXHRcXHR3c3VtX3RvX2FkZCA9IHByb2JlLVxcdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcXG5tbS9kYW1vbi9jb3JlLmMtMTQ1NS1cXHRcXHRpZiAoVUlOVF9NQVggLSB3c3VtIFxcdTAwM2Mgd3N1bV90b19hZGQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTc2MT1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfcHJlcChzdHJ1Y3QgZGFtb25fcHJlcCAqZHN0LCBzdHJ1Y3QgZGFtb25fcHJlcCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3NjUtXFxubW0vZGFtb24vY29yZS5jOjE3NjY6c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJlcHMoc3RydWN0IGRhbW9uX3Byb2JlICpkc3QsIHN0cnVjdCBkYW1vbl9wcm9iZSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNzY3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNzkxPXN0YXRpYyB2b2lkIGRhbW9uX2NvbW1pdF9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MDUtXFxubW0vZGFtb24vY29yZS5jOjE4MDY6c3RhdGljIGludCBkYW1vbl9jb21taXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCxcXG5tbS9kYW1vbi9jb3JlLmM6MTgwNzpcXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnNyYylcXG5tbS9kYW1vbi9jb3JlLmMtMTgwOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS1cXG5tbS9kYW1vbi9jb3JlLmM6MTg0MDpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE4NDEte1xcbm1tL2RhbW9uL2NvcmUuYzoxODQyOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0X3Byb2JlLCAqbmV4dCwgKnNyY19wcm9iZSwgKm5ld19wcm9iZTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg0My1cXHRpbnQgaSA9IDAsIGogPSAwLCBlcnI7XFxubW0vZGFtb24vY29yZS5jLTE4NDQtXFxubW0vZGFtb24vY29yZS5jOjE4NDU6XFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShkc3RfcHJvYmUsIG5leHQsIGRzdCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxODQ2OlxcdFxcdHNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShpKyssIHNyYyk7XFxubW0vZGFtb24vY29yZS5jOjE4NDc6XFx0XFx0aWYgKHNyY19wcm9iZSkge1xcbm1tL2RhbW9uL2NvcmUuYzoxODQ4OlxcdFxcdFxcdGRzdF9wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jOjE4NDk6XFx0XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3ByZXBzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg1MC1cXHRcXHRcXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xODUxLVxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE4NTI6XFx0XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODUzLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg1NS1cXHRcXHR9IGVsc2Uge1xcbm1tL2RhbW9uL2NvcmUuYzoxODU2OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfcHJvYmUoZHN0X3Byb2JlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg1Ny1cXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg1OS1cXG5tbS9kYW1vbi9jb3JlLmM6MTg2MDpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKHNyY19wcm9iZSwgbmV4dCwgc3JjKSB7XFxubW0vZGFtb24vY29yZS5jLTE4NjEtXFx0XFx0aWYgKGorKyBcXHUwMDNjIGkpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTg2My1cXG5tbS9kYW1vbi9jb3JlLmM6MTg2NDpcXHRcXHRuZXdfcHJvYmUgPSBkYW1vbl9uZXdfcHJvYmUoKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTg2NTpcXHRcXHRpZiAoIW5ld19wcm9iZSlcXG5tbS9kYW1vbi9jb3JlLmMtMTg2Ni1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9jb3JlLmM6MTg2NzpcXHRcXHRkYW1vbl9hZGRfcHJvYmUoZHN0LCBuZXdfcHJvYmUpO1xcbm1tL2RhbW9uL2NvcmUuYzoxODY4OlxcdFxcdG5ld19wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxubW0vZGFtb24vY29yZS5jOjE4Njk6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3ByZXBzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTg3MC1cXHRcXHRpZiAoZXJyKVxcbm1tL2RhbW9uL2NvcmUuYy0xODcxLVxcdFxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vY29yZS5jOjE4NzI6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMobmV3X3Byb2JlLCBzcmNfcHJvYmUpO1xcbm1tL2RhbW9uL2NvcmUuYy0xODczLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTg3OT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTAxLVxcbm1tL2RhbW9uL2NvcmUuYzoxOTAyOlxcdGlmICghZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHNyYykpXFxubW0vZGFtb24vY29yZS5jLTE5MDMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNi1cXHRkc3QtXFx1MDAzZW9wcyA9IHNyYy1cXHUwMDNlb3BzO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTI3OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9wcm9iZXMoZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xOTI4LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjI5Mz1zdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjk2LVxcdHVuc2lnbmVkIGludCB0aSA9IDA7XFx0LyogdGFyZ2V0J3MgaW5kZXggKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjI5NzpcXHR1bnNpZ25lZCBpbnQgbnJfcHJvYmVzID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6MjI5ODpcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjk5LVxcbm1tL2RhbW9uL2NvcmUuYy0yMzAwLVxcdGlmICh0cmFjZV9kYW1vbl9yZWdpb25fYWdncmVnYXRlZF9lbmFibGVkKCkpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjMwMTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgYylcXG5tbS9kYW1vbi9jb3JlLmM6MjMwMjpcXHRcXHRcXHRucl9wcm9iZXMrKztcXG5tbS9kYW1vbi9jb3JlLmMtMjMwMy1cXHR9XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMxMi1cXHRcXHRcXHR0cmFjZV9kYW1vbl9yZWdpb25fYWdncmVnYXRlZCh0aSwgcixcXG5tbS9kYW1vbi9jb3JlLmM6MjMxMzpcXHRcXHRcXHRcXHRcXHRkYW1vbl9ucl9yZWdpb25zKHQpLCBucl9wcm9iZXMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzE0LVxcdFxcdFxcdHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSByLVxcdTAwM2Vucl9hY2Nlc3NlcztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMzE2LVxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjMxNzpcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2ldO1xcbm1tL2RhbW9uL2NvcmUuYzoyMzE4OlxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0yMzE5LVxcdFxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDI2PXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQzNS1cXHRsLVxcdTAwM2Vhci5lbmQgPSByLVxcdTAwM2Vhci5lbmQ7XFxubW0vZGFtb24vY29yZS5jOjM0MzY6XFx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXFxubW0vZGFtb24vY29yZS5jLTM0MzctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MzQzODpcXHRcXHRsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gKGwtXFx1MDAzZXByb2JlX2hpdHNbaV0gKiBzel9sICsgci1cXHUwMDNlcHJvYmVfaGl0c1tpXVxcbm1tL2RhbW9uL2NvcmUuYy0zNDM5LVxcdFxcdFxcdFxcdCogc3pfcikgLyAoc3pfbCArIHN6X3IpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NDQ9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jOjM0NDU6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHVzZV9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYy0zNDQ2LXtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ0NzpcXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jOjM0NDg6XFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDQ5LVxcdGlmIChsYXN0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NjE9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQ2NC1cXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYzozNDY1OlxcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDY2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NjktXFxubW0vZGFtb24vY29yZS5jOjM0NzA6XFx0XFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XFxubW0vZGFtb24vY29yZS5jOjM0NzE6XFx0XFx0bGFzdF9zY29yZSA9IGRhbW9uX21lcmdlX3Njb3JlKHIsIHRydWUsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDcyLVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0ODYtXFx0XFx0ZGlmZiA9IGFic19kaWZmKHNjb3JlLCBkYW1vbl9tZXJnZV9zY29yZShwcmV2LCBmYWxzZSwgY3R4LFxcbm1tL2RhbW9uL2NvcmUuYzozNDg3OlxcdFxcdFxcdFxcdFxcdHVzZV9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM0ODgtXFx0XFx0aWYgKGRpZmYgXFx1MDAzZSB0aHJlcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNTY2PXN0YXRpYyBpbnQgZGFtb25fc3BsaXRfcmVnaW9uX2F0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzU4MC1cXHRuZXctXFx1MDAzZW5yX2FjY2Vzc2VzID0gci1cXHUwMDNlbnJfYWNjZXNzZXM7XFxubW0vZGFtb24vY29yZS5jOjM1ODE6XFx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXFxubW0vZGFtb24vY29yZS5jOjM1ODI6XFx0bWVtY3B5KG5ldy1cXHUwMDNlcHJvYmVfaGl0cywgci1cXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXFx1MDAzZXByb2JlX2hpdHMpKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzU4MzpcXHRtZW1jcHkobmV3LVxcdTAwM2VsYXN0X3Byb2JlX2hpdHMsIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0cyxcXG5tbS9kYW1vbi9jb3JlLmM6MzU4NDpcXHRcXHRcXHRzaXplb2Yoci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM1ODUtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzg5Mz1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTI1LVxcdFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWw7XFxubW0vZGFtb24vY29yZS5jOjM5MjY6XFx0XFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTI3LVxcdFxcdGJvb2wgZG9fcHJlcDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTMzLVxcbm1tL2RhbW9uL2NvcmUuYzozOTM0OlxcdFxcdGRvX3ByZXAgPSBjdHgtXFx1MDAzZW9wcy5wcmVwX3Byb2JlcyBcXHUwMDI2XFx1MDAyNiBkYW1vbl9oYXNfcHJlcChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTM1LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MzgtXFx0XFx0aWYgKGRvX3ByZXApXFxubW0vZGFtb24vY29yZS5jOjM5Mzk6XFx0XFx0XFx0Y3R4LVxcdTAwM2VvcHMucHJlcF9wcm9iZXMoY3R4LCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTQwLVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NDUtXFx0XFx0XFx0bWF4X21lcmdlX3Njb3JlID0gY3R4LVxcdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzk0NjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XFxubW0vZGFtb24vY29yZS5jLTM5NDctXFx0XFx0XFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTUyLVxcdFxcdFxcdFxcdGdldF9tYXhfd3N1bSA9IGZhbHNlO1xcbm1tL2RhbW9uL2NvcmUuYzozOTUzOlxcdFxcdFxcdG1heF93c3VtID0gY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtMzk1NC1cXHRcXHRcXHRcXHRcXHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXFx1MDAyNlxcdTAwMjYgIWRvX3ByZXAsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTkyPXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMDctXFxubW0vZGFtb24vcGFkZHIuYzoxMDg6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vcGFkZHIuYzoxMDk6XFx0XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3BhZGRyLmMtMTEwLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTEyLVxcbm1tL2RhbW9uL3BhZGRyLmM6MTEzOlxcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTExNC1cXHRcXHRzd2l0Y2ggKHAtXFx1MDAzZWFjdGlvbikge1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMjQtXFxubW0vZGFtb24vcGFkZHIuYzoxMjU6c3RhdGljIHZvaWQgZGFtb25fcGFfcHJlcF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBib29sIHNldF9zYW1wbGVzKVxcbm1tL2RhbW9uL3BhZGRyLmMtMTI2LXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTI4LVxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vcGFkZHIuYzoxMjk6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTMwLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMzUtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi9wYWRkci5jOjEzNjpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpXFxubW0vZGFtb24vcGFkZHIuYzoxMzc6XFx0XFx0XFx0XFx0ZGFtb25fcGFfcHJlcF9wcm9iZXNfcmVnaW9uKHIsIHAsIGN0eCk7XFxubW0vZGFtb24vcGFkZHIuYy0xMzgtXFx0XFx0fVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xNjA9c3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX3Bhc3MocGh5c19hZGRyX3QgcGEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vZGFtb24vcGFkZHIuYzoxNjE6XFx0XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwKVxcbm1tL2RhbW9uL3BhZGRyLmMtMTYyLXtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTc1LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTc2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9wYWRkci5jLTE3Ny1cXHRcXHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTgwLVxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxubW0vZGFtb24vcGFkZHIuYzoxODE6XFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbm1tL2RhbW9uL3BhZGRyLmMtMTgyLVxcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE5NS1cXHRcXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihwYSkpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MTk2OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMTk3LVxcdFxcdFxcdFxcdGlmIChkYW1vbl9wYV9maWx0ZXJfcGFzcyhwYSwgZm9saW8sIHApKVxcbm1tL2RhbW9uL3BhZGRyLmM6MTk4OlxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0rKztcXG5tbS9kYW1vbi9wYWRkci5jLTE5OS1cXHRcXHRcXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTIwMy1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbm1tL2RhbW9uL3BhZGRyLmM6MjA0OlxcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG5tbS9kYW1vbi9wYWRkci5jLTIwNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjdHgpLCBtYXhfd3N1bSk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NjMtXFx0XFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXFxubW0vZGFtb24vcGFkZHIuYzo0NjQ6XFx0XFx0LnByZXBfcHJvYmVzID0gZGFtb25fcGFfcHJlcF9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYzo0NjU6XFx0XFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyxcXG5tbS9kYW1vbi9wYWRkci5jLTQ2Ni1cXHRcXHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMS0vKlxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjogKiBwcm9iZSBkaXJlY3RvcnlcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMtICovXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNTpzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNi1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMDpzdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpkYW1vc19zeXNmc19wcm9iZV9hbGxvYyh1bnNpZ25lZCBjaGFyIGhpdHMpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjI6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpwcm9iZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0OlxcdHByb2JlID0ga3phbGxvY19vYmooKnByb2JlKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjU6XFx0aWYgKCFwcm9iZSlcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjYtXFx0XFx0cmV0dXJuIE5VTEw7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI3OlxcdHByb2JlLVxcdTAwM2VoaXRzID0gaGl0cztcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg6XFx0cmV0dXJuIHByb2JlO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzE9c3RhdGljIHNzaXplX3QgaGl0c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzMte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNDpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKnByb2JlID0gY29udGFpbmVyX29mKGtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjM1OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSwga29iaik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozNzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlaGh1XFxcXG5cXFwiLCBwcm9iZS1cXHUwMDNlaGl0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzktXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQwOnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQxLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDI6XFx0c3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0MzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NDU6XFx0a2ZyZWUocHJvYmUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy00Ni19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo0ODpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3Byb2JlX2hpdHNfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTQ5LVxcdFxcdF9fQVRUUl9ST19NT0RFKGhpdHMsIDA0MDApO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01MC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTE6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOlxcdFxcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMtXFx0TlVMTCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQtfTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTU6QVRUUklCVVRFX0dST1VQUyhkYW1vc19zeXNmc19wcm9iZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU2LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo1NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vc19zeXNmc19wcm9iZV9rdHlwZSA9IHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NTg6XFx0LnJlbGVhc2UgPSBkYW1vc19zeXNmc19wcm9iZV9yZWxlYXNlLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01OS1cXHQuc3lzZnNfb3BzID0gXFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2MDpcXHQuZGVmYXVsdF9ncm91cHMgPSBkYW1vc19zeXNmc19wcm9iZV9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTYxLX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjMtLypcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6NjQ6ICogcHJvYmVzIGRpcmVjdG9yeVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02NS0gKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNjYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjY3OnN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMge1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy02OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo2OTpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKipwcm9iZXNfYXJyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03MC1cXHRpbnQgbnI7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjczOnN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpkYW1vc19zeXNmc19wcm9iZXNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzQte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2Jlcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc2LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc4OnN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3Byb2Jlc19ybV9kaXJzKHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKnByb2JlcylcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4MDpcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKipwcm9iZXNfYXJyID0gcHJvYmVzLVxcdTAwM2Vwcm9iZXNfYXJyO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04MS1cXHRpbnQgaTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtODItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjgzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9iZXMtXFx1MDAzZW5yOyBpKyspXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjg0OlxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZwcm9iZXNfYXJyW2ldLVxcdTAwM2Vrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6ODU6XFx0cHJvYmVzLVxcdTAwM2VuciA9IDA7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjg2OlxcdGtmcmVlKHByb2Jlc19hcnIpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo4NzpcXHRwcm9iZXMtXFx1MDAzZXByb2Jlc19hcnIgPSBOVUxMO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy04OC19XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTg5LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5MDpzdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkxLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05Mi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjkzOlxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk0OlxcdHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqKnByb2Jlc19hcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk1LVxcdGludCBpID0gMDtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTYtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjk3OlxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTk4LVxcdFxcdGkrKztcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDItXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwMzpcXHRwcm9iZXNfYXJyID0ga21hbGxvY19vYmpzKCpwcm9iZXNfYXJyLCBpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA0OlxcdGlmICghcHJvYmVzX2FycilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA1LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDY6XFx0cHJvYmVzLVxcdTAwM2Vwcm9iZXNfYXJyID0gcHJvYmVzX2FycjtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDgtXFx0aSA9IDA7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwOTpcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExMDpcXHRcXHRzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmUgKnN5c19wcm9iZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTExLVxcdFxcdGludCBlcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMi1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTEzOlxcdFxcdHN5c19wcm9iZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XFx0XFx0XFx0XFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTU6XFx0XFx0aWYgKCFzeXNfcHJvYmUpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE2OlxcdFxcdFxcdGRhbW9zX3N5c2ZzX3Byb2Jlc19ybV9kaXJzKHByb2Jlcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNy1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE4LVxcdFxcdH1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE5OlxcdFxcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFxcdTAwMjZzeXNfcHJvYmUtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMDpcXHRcXHRcXHRcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcHJvYmVfa3R5cGUsIFxcdTAwMjZwcm9iZXMtXFx1MDAzZWtvYmosIFxcXCIlZFxcXCIsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMS1cXHRcXHRcXHRcXHRpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyLVxcdFxcdGlmIChlcnIpIHtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIzOlxcdFxcdFxcdGtvYmplY3RfcHV0KFxcdTAwMjZzeXNfcHJvYmUtXFx1MDAzZWtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjQ6XFx0XFx0XFx0ZGFtb3Nfc3lzZnNfcHJvYmVzX3JtX2RpcnMocHJvYmVzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI1LVxcdFxcdFxcdHJldHVybiBlcnI7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyNi1cXHRcXHR9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyNzpcXHRcXHRwcm9iZXNfYXJyW2krK10gPSBzeXNfcHJvYmU7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjM5LjczMzI4MzM4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDA1NDIwODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IERBTU9OIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGEgZGVjZW50LXNpemVkIHNldCBvZiBmdW5jdGlvbnMgYmVpbmcgdG91Y2hlZC4gU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nIGFyZSBlaXRoZXIgbmV3IG9yIGhhdmUgYmVlbiBjaGFuZ2VkOlxuXG4qICAgSW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIHdlIGhhdmUgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgLlxuKiAgIEluIGBtbS9kYW1vbi9wYWRkci5jYCwgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAgaXMgaW4gdGhlIG1peC5cbiogICBUaGUgYnVsayBvZiB0aGUgd29yayBzZWVtcyB0byBiZSBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHdpdGggYWRkaXRpb25zIGFuZCBtb2RpZmljYXRpb25zIHRvIGZ1bmN0aW9uczpcbiAgICAqICAgYGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uYFxuICAgICogICBgZGFtb25fdmFfcHJlcF9wcm9iZXNgXG4gICAgKiAgIGBkYW1vbl92YV95b3VuZ19hZGRyYFxuICAgICogICBgZGFtb25fdmFfZmlsdGVyX21hdGNoYFxuICAgICogICBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgXG4gICAgKiAgIGBkYW1vbl92YV9wcm9iZV9mb2xpb2BcbiAgICAqICAgYGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeWBcbiAgICAqICAgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgXG4gICAgKiAgIGBfX2RhbW9uX3ZhX2FwcGx5X3Byb2Jlc2BcbiAgICAqICAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2BcblxuTmV4dCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZXhwb3N1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgaW50ZWdyYXRpb24gd2l0aCB0b29scyBvciBhbmFseXNlcy4gSSBzaG91bGQgcXVpY2tseSBzb3J0IHRoZSBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgc3ltYm9scy4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBzdGF0aWMgZnVuY3Rpb25zLCB3aGlsZSBub3QgZGlyZWN0bHkgdmlzaWJsZSwgY2FuIHN0aWxsIGltcGFjdCB0aGUgaW50ZXJmYWNlIGlmIHRoZWlyIGNhbGxlcnMgb3IgZW50cnkgcG9pbnRzIGFyZSBub24tc3RhdGljIG9yIGNhbiBiZSBpbmxpbmVkLiBLZXkgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbiBpbmNsdWRlOlxuXG4qICAgYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIChhcHBlYXJzIHRvIGJlIG5vbi1zdGF0aWMgaW4gb3BzLWNvbW1vbi5jKS5cbiogICBgZGFtb25fdmFfcHJlcF9wcm9iZXNgXG4qICAgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2BcbiogICBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YFxuKiAgIGBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5YFxuKiAgIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgXG4qICAgYGRhbW9uX3ZhX2ZpbHRlcl9wYXNzYFxuKiAgIGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgXG5cbkZpbmFsbHksIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBxdWlja2x5IGRvIGEgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZpbGVzIG9yIHN5bWJvbHMgdGhhdCBoYXZlIGJlZW4gYWZmZWN0ZWQuIFRoZW4sIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGdpdCBsb2cgYW5kIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoZXNlIGNoYW5nZXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgJ3doeScgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGJhc2lzIGZvciBhIGRldGFpbGVkIGNvZGUgaW5zcGVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6NDQuNzM4NzA2ODAyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ1NDEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vdmFkZHIuYz02Njk9c3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTY5Ni1cXG5tbS9kYW1vbi92YWRkci5jOjY5NzpzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxubW0vZGFtb24vdmFkZHIuYy02OTgtXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MTYtXFxubW0vZGFtb24vdmFkZHIuYzo3MTc6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzE4LVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzAtXFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kKTtcXG5tbS9kYW1vbi92YWRkci5jOjczMTpcXHRcXHRcXHRfX2RhbW9uX3ZhX2FwcGx5X3Byb2JlcyhjdHgsIG1tLCByKTtcXG5tbS9kYW1vbi92YWRkci5jLTczMi1cXHRcXHRcXHRpZiAocmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0xMTYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTExNzEtXFx0XFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXFxubW0vZGFtb24vdmFkZHIuYzoxMTcyOlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vdmFkZHIuYy0xMTczLVxcdFxcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjQ0Ljc4NDE2NjkzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDA3MzA5MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEltcGxlbWVudGF0aW9uIGFuZCBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgREFNT04gY29yZSBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgcmV2aWV3IGhvdyBEQU1PTiBydW5zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGtkYW1vbmRfZm5gIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2hlbiBEQU1PTiBpcyBlbmFibGVkLCBsaWtlbHkgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlIGF0IGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8uLi5gLCB0aGlzIGBrZGFtb25kX2ZuYCBmdW5jdGlvbiBnZXRzIGluaXRpYXRlZC4gRnJvbSB0aGVyZSwgaXQgbWFrZXMgY2FsbHMgdG8gYGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXNgIGFuZCBgY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXNgLiBHaXZlbiB0aGUgYERBTU9OX1ZBRERSYCByZWdpc3RyYXRpb24sIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGN0eC1cdTAwM2VvcHMucHJlcF9wcm9iZXNgIGlzLCBhcyBleHBlY3RlZCwgcG9pbnRpbmcgdG8gYGRhbW9uX3ZhX3ByZXBfcHJvYmVzYCwgYW5kIGBjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2Jlc2AgaXMgc2V0IHRvIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLiBJdCdzIGFsc28gd29ydGggY29uZmlybWluZyB0aGF0IGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBpcyBjb3JyZWN0bHkgaW52b2tlZCBmcm9tIGJvdGggYGRhbW9uX3ZhX2ZpbHRlcl9tYXRjaGAgYW5kIGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBsaXN0IHRoZW0gb3V0IHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCB0aGVyZTpcblxuKiAgIGBEQU1PTmA6IFRoZSBEQU1PTiBmcmFtZXdvcmsgaXRzZWxmLlxuKiAgIGBEQU1PTl9WQUREUmA6IFRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyDigJMgdGhpcyBkZXBlbmRzIG9uIERBTU9OIGFuZCwgbmF0dXJhbGx5LCB0aGUgTU1VLlxuKiAgIGBEQU1PTl9QQUREUmA6IFRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIGFsc28gZGVwZW5kZW50IG9uIERBTU9OIGFuZCB0aGUgTU1VLlxuKiAgIGBEQU1PTl9TWVNGU2A6IFRoZSBzeXNmcyBpbnRlcmZhY2UsIGVzc2VudGlhbCBmb3IgY29uZmlndXJpbmcgcHJvYmVzIGFuZCB0YXJnZXRzIGZyb20gdXNlcnNwYWNlLlxuKiAgIGBNRU1DR2A6IFRoaXMgb25lIGlzIHVzZWQgaW4gYGRhbW9uX29wc19maWx0ZXJfbWF0Y2hgIHdoZW4gYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYCBpcyBhY3RpdmUsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYXZhaWxhYmxlLlxuKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWA6IFRoaXMgaXMgaW1wb3J0YW50IGZvciBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YC5cbiogICBgSFVHRVRMQl9QQUdFYDogQW5kIHRoaXMgaXMgdXNlZCBpbiBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGltcG9ydGFudCBmb3IgbGFyZ2UgcGFnZXMuXG5cbkp1c3QgdG8gY29uZmlybSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIGFuZCB0aGVuIEknbGwgZ3JlcCB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY29uZmlnIG9wdGlvbnMgYXJlIGluZGVlZCBkZWZpbmVkIGFuZCBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbC4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX01FTUNHYCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIEFmdGVyIHRoaXMsIGl0J3MganVzdCBhIG1hdHRlciBvZiBjb25maXJtaW5nIHRoYXQgdGhlc2UgYWxsIGV4aXN0IGFuZCB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzODIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6NDkuNzkxNDc4ODg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ5ODU5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKE1FTUNHfFRSQU5TUEFSRU5UX0hVR0VQQUdFfEhVR0VUTEJfUEFHRSlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xcbi0tXFxubW0vS2NvbmZpZy02OTEtXFxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTMtXFx0ZGVmX2Jvb2wgblxcbi0tXFxubW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgyOS1cXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzEtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODQ4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTMtXFxubW0vS2NvbmZpZzo4NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU1LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYwLVxcbm1tL0tjb25maWc6ODYxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjItXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4Ni1cXG5tbS9LY29uZmlnOjg4NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODg4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTYtXFxubW0vS2NvbmZpZzo4OTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04OTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDQtXFxubW0vS2NvbmZpZzo5MDU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwNi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTIyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzEtXFxubW0vS2NvbmZpZzo5MzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzMy1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQwLVxcbm1tL0tjb25maWc6OTQxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQyLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ4LVxcbm1tL0tjb25maWc6OTQ5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTAtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjQ5Ljg0NDk4NTE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDMwNTY3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBLZXkgS2VybmVsIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHNvbWV0aGluZyB0aGF0IGxpa2VseSBpbnZvbHZlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgY29uc3RyYWludHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBjcml0aWNhbCBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhbmQgYENPTkZJR19NRU1DR2AuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0d28gaXMgb2Z0ZW4gYXQgdGhlIGhlYXJ0IG9mIHBlcmZvcm1hbmNlIHR1bmluZyBhbmQgcmVzb3VyY2UgaXNvbGF0aW9uIGluIGNvbnRhaW5lcml6ZWQgb3IgaGlnaC1wZXJmb3JtYW5jZSBlbnZpcm9ubWVudHMuIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBjcnVjaWFsIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBiZW5lZml0IGZyb20gbGFyZ2UgcGFnZSBzaXplcywgcmVkdWNpbmcgVExCIG1pc3NlcyBhbmQgaW1wcm92aW5nIG1lbW9yeSBhY2Nlc3Mgc3BlZWRzLiBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgYXNjZXJ0YWluIGlmIGl0IGlzIGVuYWJsZWQuIEF0IHRoZSBzYW1lIHRpbWUsIGBDT05GSUdfTUVNQ0dgIGlzIGVxdWFsbHkgaW1wb3J0YW50LCBpdCBlbmFibGVzIGNvbnRyb2wgZ3JvdXBzIGZvciBtZW1vcnksIGFsbG93aW5nIGdyYW51bGFyIGFsbG9jYXRpb24gYW5kIGlzb2xhdGlvbiBvZiBtZW1vcnkgcmVzb3VyY2VzIGJldHdlZW4gcHJvY2Vzc2VzLiBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjdXJyZW50bHkgY29uZmlndXJlZCwgYW5kIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbnRlcnBsYXksIHRvIHByb3Blcmx5IGFzc2VzcyB0aGUgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI3MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjUyLjg4ODA0NDkyNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzI5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChIVUdFVExCX1BBR0V8TUVNQ0cpJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6NTIuOTMyODg3MTYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjcwMjE0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHNvbWV0aGluZywgYW5kIHRoZSBodWdldGxiIHN1YnN5c3RlbSBpcyBpbW1lZGlhdGVseSBwb3BwaW5nIGludG8gbXkgaGVhZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGFjdHVhbGx5IGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uIE5vIHBvaW50IGluIGNoYXNpbmcgZ2hvc3RzIGlmIEh1Z2VUTEIgc3VwcG9ydCBpc24ndCBldmVuIGNvbXBpbGVkIGluLiBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIGNoZWNrIGFyZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZyBmaWxlcyDigJMgbGlrZWx5IGBtbS9LY29uZmlnYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG1pZ2h0IG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIGlmIGl0J3MgYmVlbiBtb3ZlZCBvciBpZiBpdOKAmXMgYSBkZXBlbmRlbmN5IG9mIHNvbWV0aGluZyBlbHNlLiBUaGlzIGNoZWNrIHdpbGwgc2F2ZSBtZSBhIHRvbiBvZiBkZWJ1Z2dpbmcgdGltZSBsYXRlciBvbi4gR290dGEgbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uIGlzIHRoZXJlIGJlZm9yZSBJIHN0YXJ0IGxvb2tpbmcgZm9yIGFyY2hpdGVjdHVyYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjU2LjQ1OTkxMDc1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MTUwNjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCX1BBR0UkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjU2LjUwNDMzNjM4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTg5ODg4MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBIVUdFVExCX1BBR0UqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgY29uZmlnIEhVR0VUTEJfUEFHRWAgc3ltYm9sIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzcGFjZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSdtIHRyb3VibGVzaG9vdGluZywgYXVkaXRpbmcsIG9yIHBlcmhhcHMgZXZlbiBpbXBsZW1lbnRpbmcgYSBjaGFuZ2UgcmVsYXRlZCB0byBodWdlIHBhZ2UgbWFuYWdlbWVudC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHByb2JhYmx5IGFscmVhZHkgaGF2ZSBhIGRlY2VudCBpZGVhIG9mIHdoZXJlIHRvICpzdGFydCogbG9va2luZywgYnV0IGEgc3lzdGVtYXRpYyBzZWFyY2ggaXMgdGhlIGJlc3QgYXBwcm9hY2guIE15IG1lbnRhbCBtb2RlbCBpcyBwcm9iYWJseSBmb3JtaW5nIGEgcXVlcnkgdGhhdCBJJ2xsIHJ1biB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gYnVpbGQgc3lzdGVtIChsaWtlbHkgYGtjb25maWdgKS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhpcyBpcyB3aGVyZSBJIHdvdWxkIHN0YXJ0LlxuXG5Fc3NlbnRpYWxseSwgSSdtIGZvcm1pbmcgYSBwbGFuIHRvIHJhcGlkbHkgbG9jYXRlIHRoZSByZWxldmFudCBkZWZpbml0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBjb250ZXh0LiBUaGUgZ29hbCBpcyBlZmZpY2llbmN5LiBMZXQncyBkbyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjU4LjY5NDIyODA5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MzU5NDM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MDAuOTc3ODI3NzA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMzQ3Njk5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggUmV2aWV3OiBWaXJ0dWFsIEFkZHJlc3MgU3BhY2UgUHJvYmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBmb3VuZGF0aW9uOiBgSFVHRVRMQkZTYCBlbmFibGVzIGBIVUdFVExCX1BBR0VgLiBHb3QgaXQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIHNlZSBhIGxpc3Qgb2YgcmVsZXZhbnQgRm9jdXNTeW1ib2xzOiBgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaGAsIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2AsIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBgZGFtb25fdmFfZmlsdGVyX21hdGNoYCwgYW5kIGBkYW1vbl9wYV9maWx0ZXJfbWF0Y2hgLiBSaWdodCwgdGhlc2UgYXJlIGFsbCBzcGVjaWZpYyB0byB0aGUgY2hhbmdlcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBhbmQgYG1tL2RhbW9uL3BhZGRyLmNgIOKAkyBub3QgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgYnV0IGRpcmVjdGx5IHBhcnQgb2YgdGhpcyBEQU1PTiBwYXRjaC5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkaW5nIERBTU9OIHByb2JlIHByZXAgYW5kIGFwcGxpY2F0aW9uIHNwZWNpZmljYWxseSBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy4gV2UncmUgbG9va2luZyBhdCBmdW5jdGlvbnMgZm9yIHNldHRpbmcgdXAgcHJvYmVzIChgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBgZGFtb25fdmFfYXBwbHlfcHJvYmVzYCksIHRoZW4gd2Fsa2luZyBwYWdlIHRhYmxlcywgYW5kIGhhbmRsaW5nIGJvdGggcmVndWxhciBhbmQgaHVnZSBwYWdlIGVudHJpZXMgKGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgLCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAsIGBkYW1vbl92YV95b3VuZ19hZGRyYCkuIFRoZXJlJ3MgZmlsdGVyIGxvZ2ljIGluY2x1ZGVkIGFzIHdlbGwgKGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgKSwgYW5kIHdlJ3JlIHNlZWluZyBzb21lIGNvbW1vbiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgcmVmYWN0b3JlZCBpbnRvIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKClgLiBJdCdzIGNsZWFybHkgbW9kaWZ5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3JpbmcgdmlhIERBTU9OLCBhbmQgaXQncyByZWxldmFudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkxvb2tzIGdvb2QuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgd2VsbC1kZWZpbmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBhcmUgY2xlYXIuIEkndmUgdmVyaWZpZWQgZXZlcnl0aGluZyBJIG5lZWQgdG8sIHNvIEknbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNDIsIk91dHB1dFRva2VucyI6MjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjA1LjIxMjYwMDEzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTA1MDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fb3BzX2ZpbHRlcl9tYXRjaFwiLFxuICAgIFwiZGFtb25fdmFfcHJlcF9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5XCIsXG4gICAgXCJkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5XCIsXG4gICAgXCJkYW1vbl92YV9maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3BhX2ZpbHRlcl9tYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcHJvYmUgcHJlcGFyYXRpb24gYW5kIHByb2JlIGFwcGxpY2F0aW9uIG9wZXJhdGlvbnMgZm9yIERBTU9OIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nLCBpbmNsdWRpbmcgcGFnZSB0YWJsZSB3YWxraW5nIChmb3IgUE1ELCBodWdlIFBNRCwgYW5kIGh1Z2V0bGIgZW50cmllcykgYW5kIGFjY2Vzcy9hZ2UgZmlsdGVyaW5nLiBJdCBhbHNvIGNvbnNvbGlkYXRlcyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgaW50byBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKCkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX29wc19maWx0ZXJfbWF0Y2hcIixcbiAgICBcImRhbW9uX3ZhX3ByZXBfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl92YV9hcHBseV9wcm9iZXNcIixcbiAgICBcImRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiZGFtb25fdmFfZmlsdGVyX21hdGNoXCIsXG4gICAgXCJkYW1vbl9wYV9maWx0ZXJfbWF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHByb2JlIHByZXBhcmF0aW9uIGFuZCBwcm9iZSBhcHBsaWNhdGlvbiBvcGVyYXRpb25zIGZvciBEQU1PTiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZywgaW5jbHVkaW5nIHBhZ2UgdGFibGUgd2Fsa2luZyAoZm9yIFBNRCwgaHVnZSBQTUQsIGFuZCBodWdldGxiIGVudHJpZXMpIGFuZCBhY2Nlc3MvYWdlIGZpbHRlcmluZy4gSXQgYWxzbyBjb25zb2xpZGF0ZXMgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGludG8gZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpLiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MDUuMzM3NjYxMDIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDkyOTczNTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjA1LjMzODU4ODgzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0OTI4ODAzMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgREFNT04gZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGFjcm9zcyBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIHNwYWNlcyBieSBpbnRyb2R1Y2luZyBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKCkgYW5kIGltcGxlbWVudHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JlIGhhbmRsaW5nIChkYW1vbl92YV9wcmVwX3Byb2JlcywgZGFtb25fdmFfYXBwbHlfcHJvYmVzLCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksIGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkpLlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBzYWZldHkgYW5kIHNhbml0aXplciBhcHBsaWNhYmlsaXR5OlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOiBBbGwgc3RhY2stYWxsb2NhdGVkIHN0cnVjdHMgKHN1Y2ggYXMgc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSBhbmQgc3RydWN0IG1tX3dhbGtfb3BzKSBhbmQgc2NhbGFyIHZhcmlhYmxlcyAoZS5nLiBib29sZWFucywgbG9vcCBjb3VudGVycywgYWNjdW11bGF0b3Igc3VtcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBvciB6ZXJvLWluaXRpYWxpemF0aW9uIGJlZm9yZSB1c2UuXFxuMi4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBtZXNzYWdlcywgb3IgaW9jdGwgb3V0cHV0cyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LlxcbjMuIE1lbW9yeSBzYWZldHkgY29uc2lkZXJhdGlvbnM6IEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0aW5nIHRvIHBhZ2UtdGFibGUgd2Fsa2luZywgZm9saW8gbG9ja2luZy9yZWZlcmVuY2UgY291bnRpbmcsIGNvbmN1cnJlbmN5LCBvciBhcnJheSBpbmRleGluZyAoZS5nLiwgcHJvYmVfaGl0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSB0YWJsZSBhc3NlcnRzKS5cXG5cXG5CZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mby1sZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDUxY2NkZGFlYTUxODY3NTU3MGQyOTRhMjVjNjgxY2ZmZWU1MTY4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzg6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IDcyMTljNjA4YjE5NTIuLmNmY2Q0ZWRlZTM0NmEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTQ0NCwzICs0NDQsMzUgQEAgYm9vbCBkYW1vc19vcHNfaGFzX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbitcbitib29sIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1xuK1x0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxuK1x0XHRpZiAoIWZvbGlvKSB7XG4rXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdG1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG4rXHRcdGlmICghZm9saW8pIHtcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcbitcdFx0aWYgKCFtZW1jZylcbitcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4rXHRcdGVsc2VcbitcdFx0XHRtYXRjaGVkID0gZmlsdGVyLVx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcdHJldHVybiBtYXRjaGVkID09IGZpbHRlci1cdTAwM2VtYXRjaGluZztcbit9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG5pbmRleCAzOGQyOTU0ODhmYTE4Li5iODMyMTY5YjFjZjhjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5oXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmhcbkBAIC0yMSwzICsyMSw1IEBAIGJvb2wgZGFtb3NfZm9saW9fZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gdW5zaWduZWQgbG9uZyBkYW1vbl9taWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsIGludCB0YXJnZXRfbmlkKTtcbiBcbiBib29sIGRhbW9zX29wc19oYXNfZmlsdGVyKHN0cnVjdCBkYW1vcyAqcyk7XG4rXG4rYm9vbCBkYW1vbl9vcHNfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IGMxZTdkN2E0ZjQwZGYuLmZmZGU4OGVhN2ExM2MgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4rKysgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTQzLDI5ICsxNDMsOCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuIFx0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuLVx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9BTk9OOlxuLVx0XHRpZiAoIWZvbGlvKSB7XG4tXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG1hdGNoZWQgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XG4tXHRcdGlmICghZm9saW8pIHtcbi1cdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRtZW1jZyA9IGZvbGlvX21lbWNnX2NoZWNrKGZvbGlvKTtcbi1cdFx0aWYgKCFtZW1jZylcbi1cdFx0XHRtYXRjaGVkID0gZmFsc2U7XG4tXHRcdGVsc2Vcbi1cdFx0XHRtYXRjaGVkID0gZmlsdGVyLVx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVDpcbiBcdFx0aWYgKCFmb2xpbylcbiBcdFx0XHRtYXRjaGVkID0gZmFsc2U7XG5AQCAtMTczLDcgKzE1Miw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsXG4gXHRcdFx0bWF0Y2hlZCA9IGRhbW9uX2ZvbGlvX3lvdW5nKGZvbGlvKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRicmVhaztcbitcdFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XG4gXHR9XG4gXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBmODg0ZDNmNzhmMzBhLi4wOTAzMTcxOTE5NzNiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTUxMCw2ICs1MTAsMjM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIG1heF9ucl9hY2Nlc3NlcztcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuK1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbitcdFx0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJlcCAqcDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3ByZXAocCwgcHJvYmUpIHtcbitcdFx0c3dpdGNoIChwLVx1MDAzZWFjdGlvbikge1xuK1x0XHRjYXNlIERBTU9OX1BSRVBfU0VUX1BHSURMRTpcbitcdFx0XHRkYW1vbl92YV9ta29sZChtbSwgci1cdTAwM2VzYW1wbGluZ19hZGRyKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl92YV9wcmVwX3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgc2V0X3NhbXBsZXMpXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbitcdFx0bW0gPSBkYW1vbl9nZXRfbW0odCk7XG4rXHRcdGlmICghbW0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4rXHRcdFx0aWYgKHNldF9zYW1wbGVzKVxuK1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4rXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuK1x0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eClcbitcdFx0XHRcdGRhbW9uX3ZhX3ByZXBfcHJvYmVfcmVnaW9uKGN0eCwgbW0sIHIsIHApO1xuK1x0XHR9XG4rXHRcdG1tcHV0KG1tKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmdfYWRkcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLFxuK1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdGJvb2wgeW91bmcgPSBmYWxzZTtcbitcbitcdGlmIChwdGUpXG4rXHRcdHlvdW5nID0gcHRlX3lvdW5nKCpwdGUpO1xuK1x0ZWxzZSBpZiAocG1kKVxuK1x0XHR5b3VuZyA9IHBtZF95b3VuZygqcG1kKTtcbitcdHlvdW5nID0geW91bmcgfHwgIWZvbGlvX3Rlc3RfaWRsZShmb2xpbykgfHxcbitcdFx0bW11X25vdGlmaWVyX3Rlc3RfeW91bmcobW0sIGFkZHIpO1xuK1x0cmV0dXJuIHlvdW5nO1xuK31cbitcbitzdGF0aWMgYm9vbCBkYW1vbl92YV9maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2ZpbHRlciAqZmlsdGVyLFxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLFxuK1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuK1xuK1x0c3dpdGNoIChmaWx0ZXItXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9QR0lETEVfVU5TRVQ6XG4rXHRcdGlmICghZm9saW8pXG4rXHRcdFx0bWF0Y2hlZCA9IGZhbHNlO1xuK1x0XHRlbHNlXG4rXHRcdFx0bWF0Y2hlZCA9IGRhbW9uX3ZhX3lvdW5nX2FkZHIoZm9saW8sIHB0ZSwgcG1kLCBtbSxcbitcdFx0XHRcdFx0YWRkcik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goZmlsdGVyLCBmb2xpbyk7XG4rXHR9XG4rXHRyZXR1cm4gbWF0Y2hlZCA9PSBmaWx0ZXItXHUwMDNlbWF0Y2hpbmc7XG4rfVxuK1xuK3N0YXRpYyBib29sIGRhbW9uX3ZhX2ZpbHRlcl9wYXNzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vbl9wcm9iZSAqcCxcbitcdFx0cHRlX3QgKnB0ZSwgcG1kX3QgKnBtZCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRzdHJ1Y3QgZGFtb25fZmlsdGVyICpmO1xuK1x0Ym9vbCBwYXNzID0gdHJ1ZTtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX2ZpbHRlcihmLCBwKSB7XG4rXHRcdGlmIChkYW1vbl92YV9maWx0ZXJfbWF0Y2goZiwgZm9saW8sIHB0ZSwgcG1kLCBtbSwgYWRkcikpIHtcbitcdFx0XHRwYXNzID0gZi1cdTAwM2VhbGxvdztcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRwYXNzID0gIWYtXHUwMDNlYWxsb3c7XG4rXHR9XG4rXHRyZXR1cm4gcGFzcztcbit9XG4rXG4rc3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSB7XG4rXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuK307XG4rXG4rc3RhdGljIHZvaWQgZGFtb25fdmFfcHJvYmVfZm9saW8oc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuK1x0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRwdGVfdCAqcHRlLCBwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuK1x0aW50IGkgPSAwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuK1x0XHRpZiAoZGFtb25fdmFfZmlsdGVyX3Bhc3MoZm9saW8sIHByb2JlLCBwdGUsIHBtZCwgbW0sXG4rXHRcdFx0XHRcdHItXHUwMDNlc2FtcGxpbmdfYWRkcikpXG4rXHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldKys7XG4rXHRcdGkrKztcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuK3tcbitcdHB0ZV90ICpwdGU7XG4rXHRwdGVfdCBwdGVudDtcbitcdHNwaW5sb2NrX3QgKnB0bDtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlICpwcml2ID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuK1xuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB3YWxrLVx1MDAzZXZtYSk7XG4rXHRpZiAocHRsKSB7XG4rXHRcdHBtZF90IHBtZGUgPSBwbWRwX2dldChwbWQpO1xuK1xuK1x0XHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKVxuK1x0XHRcdGdvdG8gaHVnZV9vdXQ7XG4rXHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvX3BtZCh3YWxrLVx1MDAzZXZtYSwgYWRkciwgcG1kZSk7XG4rXHRcdGlmICghZm9saW8pXG4rXHRcdFx0Z290byBodWdlX291dDtcbitcdFx0ZGFtb25fdmFfcHJvYmVfZm9saW8ocHJpdi1cdTAwM2VjdHgsIHByaXYtXHUwMDNlciwgZm9saW8sIE5VTEwsIFx1MDAyNnBtZGUsXG4rXHRcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4rXG4raHVnZV9vdXQ6XG4rXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuKyNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4rXG4rXHRwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstXHUwMDNlbW0sIHBtZCwgYWRkciwgXHUwMDI2cHRsKTtcbitcdGlmICghcHRlKVxuK1x0XHRyZXR1cm4gMDtcbitcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcbitcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKVxuK1x0XHRnb3RvIG91dDtcbitcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHdhbGstXHUwMDNldm1hLCBhZGRyLCBwdGVudCk7XG4rXHRpZiAoIWZvbGlvKVxuK1x0XHRnb3RvIG91dDtcbitcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZwdGVudCwgTlVMTCxcbitcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4rXG4rb3V0OlxuK1x0cHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbitzdGF0aWMgaW50IGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4re1xuK1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSAqcHJpdiA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKTtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzcGlubG9ja190ICpwdGw7XG4rXHRwdGVfdCBlbnRyeTtcbitcbitcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbitcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuK1x0aWYgKCFwdGVfcHJlc2VudChlbnRyeSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Zm9saW8gPSBwZm5fZm9saW8ocHRlX3BmbihlbnRyeSkpO1xuK1x0Zm9saW9fZ2V0KGZvbGlvKTtcbitcdGRhbW9uX3ZhX3Byb2JlX2ZvbGlvKHByaXYtXHUwMDNlY3R4LCBwcml2LVx1MDAzZXIsIGZvbGlvLCBcdTAwMjZlbnRyeSwgTlVMTCxcbitcdFx0XHR3YWxrLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuK1xuK291dDpcbitcdHNwaW5fdW5sb2NrKHB0bCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2Vsc2VcbisjZGVmaW5lIGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnkgTlVMTFxuKyNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG4rXG4rc3RhdGljIHZvaWQgX19kYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuK1x0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4re1xuK1x0c3RydWN0IGRhbW9uX3ZhX3Byb2JlX3dhbGtfcHJpdmF0ZSBhcmcgPSB7XG4rXHRcdC5jdHggPSBjdHgsXG4rXHRcdC5yID0gcixcbitcdH07XG4rXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgZGFtb25fcHJvYmVfd2Fsa19vcHMgPSB7XG4rXHRcdC5wbWRfZW50cnkgPSBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnksXG4rXHRcdC5odWdldGxiX2VudHJ5ID0gZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSxcbitcdH07XG4rXHR1bnNpZ25lZCBsb25nIGFkZHIgPSByLVx1MDAzZXNhbXBsaW5nX2FkZHI7XG4rXG4rXHRpZiAoIW1tKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgKyAxLCBcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcbitcdFx0XHRcdTAwMjZhcmcpO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4rXHRcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxuK3tcbitcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X3dzdW0gPSAwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuK1x0XHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcbitcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbitcdFx0XHRpZiAoc2V0X3NhbXBsZXMpXG4rXHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbitcdFx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCk7XG4rXHRcdFx0X19kYW1vbl92YV9hcHBseV9wcm9iZXMoY3R4LCBtbSwgcik7XG4rXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbitcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbitcdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbitcdFx0fVxuK1x0XHRpZiAobW0pXG4rXHRcdFx0bW1wdXQobW0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG1heF93c3VtO1xuK31cbitcbiBzdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcG1kX3QgKnBtZHApXG5AQCAtOTM4LDYgKzExNjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuIFx0XHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxuIFx0XHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxuIFx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyxcbitcdFx0LnByZXBfcHJvYmVzID0gZGFtb25fdmFfcHJlcF9wcm9iZXMsXG4rXHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl92YV9hcHBseV9wcm9iZXMsXG4gXHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG4gXHRcdC5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LFxuIFx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MDUuMzM4NTkwNzkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2MjcyODcwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIERBTU9OIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3Mgd2hldGhlciBzdGFuZGFyZCBkZXRlY3RvcnMgbGlrZSBLQVNBTiB3aWxsIHN1ZmZpY2Ugb3IgaWYgdGhpcyB3YXJyYW50cyBhIG1vcmUgaW4tZGVwdGggaW52ZXN0aWdhdGlvbi5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlOlxuXG4xLiAgV2UgaGF2ZSBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCB3aGljaCBkZWZpbmVzIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCB0aGF0IGNoZWNrcyB0aGUgZmlsdGVyIHR5cGUg4oCTIGBEQU1PTl9GSUxURVJfVFlQRV9BTk9OYCBhbmQgYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYCDigJMgYW5kIGNvbnNvbGlkYXRlcyBzb21lIGV4aXN0aW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYy5cbjIuICBUaGUgaGVhZGVyIGZpbGUgYG1tL2RhbW9uL29wcy1jb21tb24uaGAgZGVjbGFyZXMgdGhlIG5ld2x5IGFkZGVkIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBmdW5jdGlvbi5cbjMuICBgbW0vZGFtb24vcGFkZHIuY2AgaXMganVzdCBhIHNpbXBsZSByZWZhY3RvciwgcmVwbGFjaW5nIHRoZSBkdXBsaWNhdGUgY29kZSB3aXRoIGEgY2FsbCB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuNC4gIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgbW0vZGFtb24vdmFkZHIuY2AsIHdoaWNoIGltcGxlbWVudHMgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JpbmcgZm9yIERBTU9OLiBJdCBpbnRyb2R1Y2VzIGEgc2xldyBvZiBuZXcgZnVuY3Rpb25zOiBgZGFtb25fdmFfcHJlcF9wcm9iZV9yZWdpb25gLCBgZGFtb25fdmFfcHJlcF9wcm9iZXNgLCBgZGFtb25fdmFfeW91bmdfYWRkcmAsIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCBgZGFtb25fdmFfZmlsdGVyX3Bhc3NgLCBgZGFtb25fdmFfcHJvYmVfZm9saW9gLCBgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5YCwgYGRhbW9uX3ZhX3Byb2JlX2h1Z2V0bGJfZW50cnlgLCBgX19kYW1vbl92YV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIFRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQgaW4gYGRhbW9uX3ZhX2luaXRjYWxsYCB2aWEgdGhlIG9wcyB0YWJsZS5cblxuTm93LCBteSBrZXkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIGNvcGllcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIHRoZSBuZXcgc3RydWN0cy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgcHJvYmFibHkgZ3JlcCB0aGUga2VybmVsIHRyZWUgb3IgcmVhZCB0aHJvdWdoIHRoZSByZWxldmFudCBmaWxlcyB0byB1bmRlcnN0YW5kIGhvdyBgci1cdTAwM2Vwcm9iZV9oaXRzYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBob3cgdGhlc2UgZmlsdGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQsIGFuZCBnZW5lcmFsbHkgaG93IHRoZSBuZXcgZnVuY3Rpb25zIGFyZSB3b3JraW5nIHVuZGVyIHRoZSBob29kLiBJIGhhdmUgdG8gbG9vayBmb3IgZGF0YSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb250cm9sIGZsb3cgdGhhdCBjb3VsZCBsZWFkIHRvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC4gSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaWYgdGhlIG5ldyBmdW5jdGlvbnMgYXJlIGFjY2Vzc2luZyBhbnkgbWVtb3J5IG5vdCBwcm9wZXJseSBwcm90ZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozOToxMS45NjU4ODEyMDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDg2NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2JlX2hpdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyNT11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDgtXFxubW0vZGFtb24vY29yZS5jOjM0OTp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMzUwLVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYtXFx0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxcbm1tL2RhbW9uL2NvcmUuYzozNjc6XFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdO1xcbm1tL2RhbW9uL2NvcmUuYy0zNjgtXFxubW0vZGFtb24vY29yZS5jOjM2OTpcXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cXHUwMDNlcHJvYmVfaGl0c1twcm9iZV9pZHhdLFxcbm1tL2RhbW9uL2NvcmUuYzozNzA6XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW3Byb2JlX2lkeF0sIGxlZnRfd2luZG93X2JwKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzcxLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zODk9c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzo0MDM6XFx0XFx0cmVnaW9uLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NDA0OlxcdFxcdHJlZ2lvbi1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtNDA1LVxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz00NjI9c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NjgtLyoqXFxubW0vZGFtb24vY29yZS5jOjQ2OTogKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXFxubW0vZGFtb24vY29yZS5jLTQ3MC0gKiBAcjpcXHRcXHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDc1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0NzY6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxubW0vZGFtb24vY29yZS5jLTQ3Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDg0LVxcdFxcdGlmIChsYXN0KVxcbm1tL2RhbW9uL2NvcmUuYzo0ODU6XFx0XFx0XFx0c3VtICs9IHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpKytdICogcHJvYmUtXFx1MDAzZXdlaWdodDtcXG5tbS9kYW1vbi9jb3JlLmMtNDg2LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9jb3JlLmM6NDg3OlxcdFxcdFxcdHN1bSArPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbm1tL2RhbW9uL2NvcmUuYy00ODgtXFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMDM9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMDktXFxubW0vZGFtb24vY29yZS5jOjEwMTA6c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtMTAxMS1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAxNy1cXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTAxODpcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxubW0vZGFtb24vY29yZS5jOjEwMTk6XFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTEwMjAtXFx0XFx0aWYgKCFhZ2dyZWdhdGluZylcXG5tbS9kYW1vbi9jb3JlLmM6MTAyMTpcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxcbm1tL2RhbW9uL2NvcmUuYzoxMDIyOlxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0sIG9sZF9hdHRycyxcXG5tbS9kYW1vbi9jb3JlLmMtMTAyMy1cXHRcXHRcXHRcXHRcXHRuZXdfYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMDI0LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9jb3JlLmM6MTAyNTpcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG5tbS9kYW1vbi9jb3JlLmMtMTAyNi1cXHRcXHRpKys7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAzMD1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDMzLXtcXG5tbS9kYW1vbi9jb3JlLmM6MTAzNDpcXHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTEwMzUtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTQyNz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0MjktXFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XFxubW0vZGFtb24vY29yZS5jOjE0MzA6XFx0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcXG5tbS9kYW1vbi9jb3JlLmMtMTQzMS1cXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE0NDgtXFx0LyogaW52YWxpZCBpZiBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYW4gb3ZlcmZsb3cgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTQ0OTpcXHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmN0eC1cXHUwMDNlYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDUwLVxcdHdzdW0gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDUxLVxcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTQ1MjpcXHRcXHRpZiAocHJvYmUtXFx1MDAzZXdlaWdodCBcXHUwMDNlIFVJTlRfTUFYIC8gbWF4X3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jLTE0NTMtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDU0OlxcdFxcdHdzdW1fdG9fYWRkID0gcHJvYmUtXFx1MDAzZXdlaWdodCAqIG1heF9wcm9iZV9oaXRzO1xcbm1tL2RhbW9uL2NvcmUuYy0xNDU1LVxcdFxcdGlmIChVSU5UX01BWCAtIHdzdW0gXFx1MDAzYyB3c3VtX3RvX2FkZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMjkzPXN0YXRpYyB2b2lkIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzMTYtXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzoyMzE3OlxcdFxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IHItXFx1MDAzZXByb2JlX2hpdHNbaV07XFxubW0vZGFtb24vY29yZS5jOjIzMTg6XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XFxubW0vZGFtb24vY29yZS5jLTIzMTktXFx0XFx0XFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0MjY9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDM3LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspXFxubW0vZGFtb24vY29yZS5jOjM0Mzg6XFx0XFx0bC1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IChsLVxcdTAwM2Vwcm9iZV9oaXRzW2ldICogc3pfbCArIHItXFx1MDAzZXByb2JlX2hpdHNbaV1cXG5tbS9kYW1vbi9jb3JlLmMtMzQzOS1cXHRcXHRcXHRcXHQqIHN6X3IpIC8gKHN6X2wgKyBzel9yKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbm1tL2RhbW9uL2NvcmUuYzozNDQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcXG5tbS9kYW1vbi9jb3JlLmMtMzQ0Ni17XFxubW0vZGFtb24vY29yZS5jOjM0NDc6XFx0aWYgKHVzZV9wcm9iZV9oaXRzKVxcbm1tL2RhbW9uL2NvcmUuYzozNDQ4OlxcdFxcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ0OS1cXHRpZiAobGFzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDYxPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NjQtXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmM6MzQ2NTpcXHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ2Ni1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDY5LVxcbm1tL2RhbW9uL2NvcmUuYzozNDcwOlxcdFxcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xcbm1tL2RhbW9uL2NvcmUuYzozNDcxOlxcdFxcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQ3Mi1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNDg2LVxcdFxcdGRpZmYgPSBhYnNfZGlmZihzY29yZSwgZGFtb25fbWVyZ2Vfc2NvcmUocHJldiwgZmFsc2UsIGN0eCxcXG5tbS9kYW1vbi9jb3JlLmM6MzQ4NzpcXHRcXHRcXHRcXHRcXHR1c2VfcHJvYmVfaGl0cykpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDg4LVxcdFxcdGlmIChkaWZmIFxcdTAwM2UgdGhyZXMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzU2Nj1zdGF0aWMgaW50IGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1ODEtXFx0LyogdG9kbzogZG8gdGhpcyBmb3Igb25seSBpbnN0YWxsZWQgcHJvYmVzICovXFxubW0vZGFtb24vY29yZS5jOjM1ODI6XFx0bWVtY3B5KG5ldy1cXHUwMDNlcHJvYmVfaGl0cywgci1cXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXFx1MDAzZXByb2JlX2hpdHMpKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzU4MzpcXHRtZW1jcHkobmV3LVxcdTAwM2VsYXN0X3Byb2JlX2hpdHMsIHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0cyxcXG5tbS9kYW1vbi9jb3JlLmM6MzU4NDpcXHRcXHRcXHRzaXplb2Yoci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzKSk7XFxubW0vZGFtb24vY29yZS5jLTM1ODUtXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE3Nj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE5Ny1cXHRcXHRcXHRcXHRpZiAoZGFtb25fcGFfZmlsdGVyX3Bhc3MocGEsIGZvbGlvLCBwKSlcXG5tbS9kYW1vbi9wYWRkci5jOjE5ODpcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldKys7XFxubW0vZGFtb24vcGFkZHIuYy0xOTktXFx0XFx0XFx0XFx0aSsrO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yMDMtXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG5tbS9kYW1vbi9wYWRkci5jOjIwNDpcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxubW0vZGFtb24vcGFkZHIuYy0yMDUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTQwPXN0YXRpYyB2b2lkIGRhbW9zX3N5c2ZzX3Byb2JlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjQ4OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcHJvYmVfaGl0c19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNDktXFx0XFx0X19BVFRSX1JPX01PREUoaGl0cywgMDQwMCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9zX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjUyOlxcdFxcdTAwMjZkYW1vc19zeXNmc19wcm9iZV9oaXRzX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTMtXFx0TlVMTCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTEzLVxcdFxcdHN5c19wcm9iZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMTQ6XFx0XFx0XFx0XFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTUtXFx0XFx0aWYgKCFzeXNfcHJvYmUpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDA9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU0LVxcdHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSAxNTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTU1OlxcdHItXFx1MDAzZXByb2JlX2hpdHNbMF0gPSA3O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTY6XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzWzBdID0gMztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU3LVxcdHItXFx1MDAzZWFnZSA9IDEwO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE3Mi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgcl9uZXctXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNzM6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZXByb2JlX2hpdHNbMF0sIHJfbmV3LVxcdTAwM2Vwcm9iZV9oaXRzWzBdKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTc0OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0sIHJfbmV3LVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbMF0pO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNzUtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFnZSwgcl9uZXctXFx1MDAzZWFnZSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTgxPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTUtXFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSAxMDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTk2OlxcdHItXFx1MDAzZXByb2JlX2hpdHNbMF0gPSA2O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xOTctXFx0ci1cXHUwMDNlYWdlID0gOTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMDQtXFx0cjItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMjA7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjIwNTpcXHRyMi1cXHUwMDNlcHJvYmVfaGl0c1swXSA9IDE0O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMDYtXFx0cjItXFx1MDAzZWFnZSA9IDIxO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTIxMi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIDE2dSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjIxMzpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlcHJvYmVfaGl0c1swXSwgMTEpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yMTQtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFnZSwgMTd1KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNTE0PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTM4LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTM5OlxcdC8qIE1vcmUgc2FtcGxlcyBjb3VsZCBvdmVyZmxvdyB0aGUgcHJvYmVfaGl0cyBjb3VudGVycy4gKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTU0MC1cXHRjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAyNTY7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTYwOD1zdGF0aWMgdm9pZCBkYW1vbl92YV9wcm9iZV9mb2xpbyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTYxNy1cXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyKSlcXG5tbS9kYW1vbi92YWRkci5jOjYxODpcXHRcXHRcXHRyLVxcdTAwM2Vwcm9iZV9oaXRzW2ldKys7XFxubW0vZGFtb24vdmFkZHIuYy02MTktXFx0XFx0aSsrO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03MTc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzItXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG5tbS9kYW1vbi92YWRkci5jOjczMzpcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxubW0vZGFtb24vdmFkZHIuYy03MzQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozOToxMi4wNTczNzIxNDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4NjcxMDMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRob3NlIGNvZGUgc2VjdGlvbnM6XG5cbioqRGl2aW5nIERlZXAgaW50byBEQU1PTidzIFZpcnR1YWwgQWRkcmVzcyBTcGFjZSBQcm9iZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGhhbmRsZSBvbiBob3cgREFNT04gaXMgaGFuZGxpbmcgdmlydHVhbCBhZGRyZXNzIHByb2JpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBkYW1vbl92YV9hcHBseV9wcm9iZXNgIGZ1bmN0aW9uIGFuZCBhbnkgY29ubmVjdGVkIG1vZGlmaWNhdGlvbnMuIEknbSB3b3JyaWVkIGFib3V0IHBvdGVudGlhbCBpbml0aWFsaXphdGlvbiBpc3N1ZXMgaGVyZSwgc28gdGhhdCdzIHRoZSBwcmltYXJ5IGZvY3VzLiBJIGtub3cgdGhpcyBjb2RlIHByZXR0eSB3ZWxsLCBidXQgSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgYnVncyBsdXJraW5nIGluIHRoZSBzaGFkb3dzLlxuXG5UaGVyZWZvcmUsIEknbSB6ZXJvaW5nIGluIG9uIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGFuZCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBob3cgdGhleSdyZSBoYW5kbGluZyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBpZiBhbnkgb2YgdGhlIG5ldyBjaGFuZ2VzIGhhdmUgaW50cm9kdWNlZCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cy4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgbWFrZSBzdXJlIHRoaXMgd2hvbGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHByb2JpbmcgbWVjaGFuaXNtIGlzIHJvYnVzdCBhbmQgc2FmZS4gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBsb2dpYyBmbG93IGFuZCBkYXRhIGRlcGVuZGVuY2llcywgYW5kIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozOToxNC4zNDQwODYwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NDMxOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTIxNz1zdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yMjgtXFxubW0vZGFtb24vdmFkZHIuYzoyMjk6c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL2RhbW9uL3ZhZGRyLmMtMjMwLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcywgdm9pZCAqcHJpdmF0ZSlcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MzM2PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX21rb2xkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTM0Mi1cXG5tbS9kYW1vbi92YWRkci5jOjM0MzpcXHRkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2UobW0sIGFkZHIsIGFkZHIgKyAxLCBcXHUwMDI2ZGFtb25fbWtvbGRfb3BzLCBOVUxMKTtcXG5tbS9kYW1vbi92YWRkci5jLTM0NC19XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTQ1OD1zdGF0aWMgYm9vbCBkYW1vbl92YV95b3VuZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy00NjgtXFxubW0vZGFtb24vdmFkZHIuYzo0Njk6XFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCBhZGRyLCBhZGRyICsgMSwgXFx1MDAyNmRhbW9uX3lvdW5nX29wcywgXFx1MDAyNmFyZyk7XFxubW0vZGFtb24vdmFkZHIuYy00NzAtXFx0cmV0dXJuIGFyZy55b3VuZztcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Njk3PXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzEyLVxcbm1tL2RhbW9uL3ZhZGRyLmM6NzEzOlxcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgYWRkciwgYWRkciArIDEsIFxcdTAwMjZkYW1vbl9wcm9iZV93YWxrX29wcyxcXG5tbS9kYW1vbi92YWRkci5jLTcxNC1cXHRcXHRcXHRcXHUwMDI2YXJnKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9OTYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3ZhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy05OTItXFxubW0vZGFtb24vdmFkZHIuYzo5OTM6XFx0ZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKG1tLCByLVxcdTAwM2Vhci5zdGFydCwgci1cXHUwMDNlYXIuZW5kLCBcXHUwMDI2d2Fsa19vcHMsIFxcdTAwMjZwcml2KTtcXG5tbS9kYW1vbi92YWRkci5jLTk5NC1cXHRtbXB1dChtbSk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTEwODA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfdmFfc3RhdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTEwOTktXFxubW0vZGFtb24vdmFkZHIuYzoxMTAwOlxcdGRhbW9uX3ZhX3dhbGtfcGFnZV9yYW5nZShtbSwgci1cXHUwMDNlYXIuc3RhcnQsIHItXFx1MDAzZWFyLmVuZCwgXFx1MDAyNndhbGtfb3BzLCBcXHUwMDI2cHJpdik7XFxubW0vZGFtb24vdmFkZHIuYy0xMTAxLVxcdG1tcHV0KG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MTQuNDU5NTIzNTYyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTgxMzU2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vbl92YV93YWxrX3BhZ2VfcmFuZ2VgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCdzIGltcGxlbWVudGVkIHdpdGhpbiBgdmFkZHIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB3YWxraW5nIGxvZ2ljIHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbiB0aGUgY29udGV4dCBvZiBEQU1PTidzIG9wZXJhdGlvbi4gSSdtIHByb2JhYmx5IGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHRhYmxlIGxldmVscywgaG93IGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIHJlbGV2YW50IHZpcnR1YWwgYWRkcmVzcyByYW5nZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIHNob3VsZCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgbGlrZSByYWNlIGNvbmRpdGlvbnMsIGhvdyBpdCBoYW5kbGVzIFRMQiBpbnZhbGlkYXRpb25zIGlmIG5lZWRlZCwgYW5kIGFsc28gYW55IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgbWlnaHQgY29tZSB1cCwgc3BlY2lmaWNhbGx5IHdpdGggZGlmZmVyZW50IHBhZ2Ugc2l6ZXMgYW5kIE5VTUEgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIGNvcnJlY3RseSBoYW5kbGluZyB1bm1hcHBlZCByZWdpb25zIGFuZCwgb2YgY291cnNlLCB0aGF0IGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSdzIHBhZ2UgdGFibGUgZm9ybWF0LiBMZXQncyBzZWUgaG93IGl0J3MgYWN0dWFsbHkgZG9uZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSBmb3IgdGhlIGtleSBhbGdvcml0aG1zIGFuZCBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGhhcHBlbnMgZHVyaW5nIGVhY2ggc3RlcCBvZiB0aGUgcGFnZSB3YWxrLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSByYW5nZSBpcyBicm9rZW4gZG93biwgYW5kIGhvdyBpbmRpdmlkdWFsIHBhZ2VzIGFyZSBpZGVudGlmaWVkIGFuZCBwcm9jZXNzZWQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgREFNT04gaW5mcmFzdHJ1Y3R1cmUgZm9yIG1vbml0b3JpbmcgYW5kIHByb2ZpbGluZyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTkyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MTcuMDE3NjYzMTQyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi92YWRkci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyNTpcXHRcXHRcXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCB0aHJlZV9yZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG4gMjI2OlxcdFxcdH1cXG4gMjI3OlxcdH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiAyMzA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLCB2b2lkICpwcml2YXRlKVxcbiAyMzE6XFx0e1xcbiAyMzI6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdFxcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgc3RhcnQpO1xcbiAyMzU6XFx0XFx0aWYgKCF2bWEpXFxuIDIzNjpcXHRcXHRcXHRnb3RvIGxvY2tfbW1hcDtcXG4gMjM3OlxcdFxcbiAyMzg6XFx0XFx0aWYgKGVuZCBcXHUwMDNlIHZtYS1cXHUwMDNldm1fZW5kKSB7XFxuIDIzOTpcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4gMjQwOlxcdFxcdFxcdGdvdG8gbG9ja19tbWFwO1xcbiAyNDE6XFx0XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUEZOTUFQKSkge1xcbiAyNDQ6XFx0XFx0XFx0b3BzLVxcdTAwM2V3YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlk7XFxuIDI0NTpcXHRcXHRcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcXG4gMjQ2OlxcdFxcdH1cXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIDI0OTpcXHRcXHRyZXR1cm47XFxuIDI1MDpcXHRcXG4gMjUxOlxcdGxvY2tfbW1hcDpcXG4gMjUyOlxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4gMjUzOlxcdFxcdG9wcy1cXHUwMDNld2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSztcXG4gMjU0OlxcdFxcdHdhbGtfcGFnZV9yYW5nZShtbSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcXG4gMjU1OlxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiAyNTY6XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRzdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDI1OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAyNjA6XFx0e1xcbiAyNjE6XFx0XFx0cHRlX3QgKnB0ZTtcXG4gMjYyOlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXFx1MDAzZXZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjE3LjAxNzgzODY3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI2ODgzNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBkYW1vbl9maWx0ZXJgIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGRhbW9uX2ZpbHRlcmAgc3RydWN0IGlzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJJ20gZ29pbmcgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBzZWUgaXRzIHN0cnVjdHVyZS4gSSB3YW50IHRvIGxvb2sgZm9yIHRoZSBrZXkgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLiBJIGFtIGV4cGVjdGluZyBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBhbmQgcHJvYmFibHkgc29tZSBzdGF0ZSBpbmZvcm1hdGlvbi4gSSdsbCBmb2N1cyBvbiBob3cgaXQgaXMgYmVpbmcgcG9wdWxhdGVkLCBhcmUgdGhlcmUgaGFyZGNvZGVkIHZhbHVlcywgb3IgYXJlIHRoZXkgc291cmNlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEkgd2lsbCBsb29rIGZvciBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBvciBtYWNybyB1c2VzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBgZGFtb25fZmlsdGVyYCBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjE4Ljk0NDcyNzA3NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAwOTEwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGRhbW9uX2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTc2ND1zdHJ1Y3QgZGFtb25fcHJlcCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzcxLS8qKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo3NzI6ICogZW51bSBkYW1vbl9maWx0ZXJfdHlwZSAtIFR5cGUgb2YgXFx1MDAyNnN0cnVjdCBkYW1vbl9maWx0ZXJcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzczLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9Nzc4PWVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTc4NC0vKipcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6Nzg1OiAqIHN0cnVjdCBkYW1vbl9maWx0ZXIgLSBEQU1PTiByZWdpb24gZmlsdGVyIGZvciBcXHUwMDI2c3RydWN0IGRhbW9uX3Byb2JlLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC03ODYtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC03OTEtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjc5MjpzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzkzLVxcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDUzPXZvaWQgZGFtb25fYWRkX3ByZXAoc3RydWN0IGRhbW9uX3Byb2JlICpwLCBzdHJ1Y3QgZGFtb25fcHJlcCAqcHJlcCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTQtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTU6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTYtXFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdyk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTc6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsIHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDU4OnZvaWQgZGFtb25fZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZik7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjE5LjAyNDgyNDYzMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzUwMTMwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gRmlsdGVyKipcblxuT2theSwgdGltZSB0byBnZXQgYSBsb29rIGF0IHRoZSBgZGFtb25fZmlsdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZmlsdGVyIHdvcmtzIGluIHRoZSBjb250ZXh0IG9mIERBTU9OLiBSaWdodCwgc28gSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLCB0aGUgaW5jbHVkZSBmaWxlOiBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gVGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGFuZCBsaWtlbHkgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBzaG91bGQgcmVzaWRlLiBIb3BlZnVsbHksIGl0J3Mgd2VsbC1jb21tZW50ZWQ7IEknbSBleHBlY3Rpbmcgc29tZSBjbGVhciBzdHJ1Y3QgbWVtYmVycyBhbmQgbWF5YmUgc29tZSBpbnNpZ2h0ZnVsIGZ1bmN0aW9uIHByb3RvdHlwZXMgcmVsYXRlZCB0byBob3cgdGhlIGZpbHRlcmluZyBsb2dpYyBpcyBhY3R1YWxseSBhcHBsaWVkIHRvIG1lbW9yeSBhY2Nlc3MuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGFkZHJlc3MgcmFuZ2VzLCBhY2Nlc3MgdHlwZXMsIGFuZCBwb3RlbnRpYWxseSBldmVuIHVzZXItZGVmaW5lZCBjcml0ZXJpYS4gSXTigJlzIGltcG9ydGFudCB0byBzZWUgd2hhdCBob29rcyBpdCBoYXMgaW50byB0aGUgY29yZSBEQU1PTiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBvdmVyYWxsIG1vbml0b3JpbmcgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYyOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjIxLjM3NDk1NzkwN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHRcXHREQU1PTl9GSUxURVJfVFlQRV9NRU1DRyxcXG4gNzgxOlxcdFxcdERBTU9OX0ZJTFRFUl9UWVBFX1BHSURMRV9VTlNFVCxcXG4gNzgyOlxcdH07XFxuIDc4MzpcXHRcXG4gNzg0OlxcdC8qKlxcbiA3ODU6XFx0ICogc3RydWN0IGRhbW9uX2ZpbHRlciAtIERBTU9OIHJlZ2lvbiBmaWx0ZXIgZm9yIFxcdTAwMjZzdHJ1Y3QgZGFtb25fcHJvYmUuXFxuIDc4NjpcXHQgKlxcbiA3ODc6XFx0ICogQHR5cGU6XFx0VHlwZSBvZiB0aGUgcmVnaW9uLlxcbiA3ODg6XFx0ICogQG1hdGNoaW5nOlxcdFdoZXRoZXIgdGhpcyBmaWx0ZXIgaXMgZm9yIHRoZSB0eXBlLW1hdGNoaW5nIG9uZXMuXFxuIDc4OTpcXHQgKiBAYWxsb3c6XFx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXFxuIDc5MDpcXHQgKiBAbWVtY2dfaWQ6XFx0TWVtY2cgaWQgb2YgdGhlIHF1ZXN0aW9uIGlmIEB0eXBlIGlzIERBTU9OX0ZJTFRFUl9NRU1DRy5cXG4gNzkxOlxcdCAqL1xcbiA3OTI6XFx0c3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuIDc5MzpcXHRcXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XFxuIDc5NDpcXHRcXHRib29sIG1hdGNoaW5nO1xcbiA3OTU6XFx0XFx0Ym9vbCBhbGxvdztcXG4gNzk2OlxcdFxcdHVuaW9uIHtcXG4gNzk3OlxcdFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gNzk4OlxcdFxcdH07XFxuIDc5OTpcXHQvKiBwcml2YXRlOiAqL1xcbiA4MDA6XFx0XFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gODAxOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gODAyOlxcdH07XFxuIDgwMzpcXHRcXG4gODA0OlxcdC8qKlxcbiA4MDU6XFx0ICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLlxcbiA4MDY6XFx0ICpcXG4gODA3OlxcdCAqIEB3ZWlnaHQ6XFx0UmVsYXRpdmUgcHJpb3JpdHkgb2YgdGhlIGF0dHJpYnV0ZSBmb3IgdGhpcyBwcm9iZS5cXG4gODA4OlxcdCAqL1xcbiA4MDk6XFx0c3RydWN0IGRhbW9uX3Byb2JlIHtcXG4gODEwOlxcdFxcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XFxuIDgxMTpcXHQvKiBwcml2YXRlOiAqL1xcbiA4MTI6XFx0XFx0LyogUHJlcGFyYXRpb24gYWN0aW9ucyB0byBhcHBseSB0byBlYWNoIHByb2JpbmcgbWVtb3J5LiAqL1xcbiA4MTM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBwcmVwcztcXG4gODE0OlxcdFxcdC8qIEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4gKi9cXG4gODE1OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcXG4gODE2OlxcdFxcdC8qIFNpYmxpbmdzIGxpc3QuICovXFxuIDgxNzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIDgxODpcXHR9O1xcbiA4MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjIxLjM3NTA5MTY3OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODgzODIyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBkYW1vbl9uZXdfZmlsdGVyYCdzIEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGhvdyBgZGFtb25fbmV3X2ZpbHRlcmAgaGFuZGxlcyB0aGUgY3J1Y2lhbCB0YXNrcyBvZiBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBgZGFtb25fZmlsdGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGhlcmUuIFdoYXQncyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgdXNpbmcgYSBjdXN0b20gYWxsb2NhdG9yLCBvciByZWx5aW5nIG9uIHNvbWV0aGluZyBzdGFuZGFyZCBsaWtlIGBrbWFsbG9jYD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBmbGFncyBvciBzaXplcyBwYXNzZWQgdG8gdGhlIGFsbG9jYXRvciB0aGF0IG1pZ2h0IGhpbnQgYXQgaXRzIGludGVuZGVkIHVzZSBjYXNlPyBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2l0aCByZWdhcmQgdG8gTlVNQSBub2RlcyBvciBjYWNoZSBsaW5lIGFsaWdubWVudD9cblxuTmV4dCwgSSdsbCBzY3J1dGluaXplIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBXaGF0IGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGBkYW1vbl9maWx0ZXJgIGFyZSBiZWluZyBwb3B1bGF0ZWQ/IEFyZSBhbnkgbXV0ZXhlcyBvciBzcGlubG9ja3MgaW5pdGlhbGl6ZWQ/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIEkgc2hvdWxkIGJlIHdhdGNoaW5nIG91dCBmb3I/IEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHdoZXRoZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mIHNvbWUgZmllbGRzIGRlcGVuZHMgb24gdGhlIHN1Y2Nlc3Mgb2Ygb3RoZXJzLiBBbHNvLCBkb2VzIGl0IGhhdmUgYSBkZXN0cnVjdG9yIHRoYXQgZnJlZXMgcmVzb3VyY2VzLCBhbmQgd2hhdCBtaWdodCBiZSB0aGUgZWZmZWN0cyBvZiBhbnkgc3VjaCB0ZWFyZG93bj9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZmlsdGVyJ3MgaW50ZXJuYWwgc3RhdGUgaXMgc2V0IHVwLiBEb2VzIGl0IHVzZSBhbnkgaW50ZXJuYWwgc3RydWN0dXJlcz8gSG93IGFyZSBpdHMgcGFyYW1ldGVycyBjb25maWd1cmVkPyBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNhbml0eSBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSB0aGUgZmlsdGVyIG9wZXJhdGVzIGNvcnJlY3RseT8gSXMgdGhlcmUgYSBuZWVkIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGBpbml0YCBhbmQgYHJlc2V0YCBpbiB0aGUgZnV0dXJlP1xuXG5Fc3NlbnRpYWxseSwgSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGBkYW1vbl9maWx0ZXJgIGNvbWVzIGludG8gZXhpc3RlbmNlLCBlbnN1cmluZyBpdCBjYW4gcGVyZm9ybSBpdHMgaW50ZW5kZWQgZnVuY3Rpb24gcmVsaWFibHkuIFRoaXMgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gYXJlIHRoZSBiZWRyb2NrIG9mIHRoZSBlbnRpcmUgZmlsdGVyaW5nIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjI0LjI1ODkxNzY2OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMwMTc1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2hhc19wcmVwKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcwLVxcbm1tL2RhbW9uL2NvcmUuYzoxNzE6c3RydWN0IGRhbW9uX2ZpbHRlciAqZGFtb25fbmV3X2ZpbHRlcihlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGUsXFxubW0vZGFtb24vY29yZS5jLTE3Mi1cXHRcXHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4MDY9c3RhdGljIGludCBkYW1vbl9jb21taXRfZmlsdGVycyhzdHJ1Y3QgZGFtb25fcHJvYmUgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODIzLVxcbm1tL2RhbW9uL2NvcmUuYzoxODI0OlxcdFxcdG5ld19maWx0ZXIgPSBkYW1vbl9uZXdfZmlsdGVyKHNyY19maWx0ZXItXFx1MDAzZXR5cGUsXFxubW0vZGFtb24vY29yZS5jLTE4MjUtXFx0XFx0XFx0XFx0c3JjX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsIHNyY19maWx0ZXItXFx1MDAzZWFsbG93KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjE5OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyMDgtXFxubW0vZGFtb24vc3lzZnMuYzoyMjA5OlxcdFxcdGZpbHRlciA9IGRhbW9uX25ld19maWx0ZXIoc3lzX2ZpbHRlci1cXHUwMDNldHlwZSxcXG5tbS9kYW1vbi9zeXNmcy5jLTIyMTAtXFx0XFx0XFx0XFx0c3lzX2ZpbHRlci1cXHUwMDNlbWF0Y2hpbmcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjI0LjM1MTkzOTM1M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzkyNzY3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZGFtb25fbmV3X2ZpbHRlcmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZGFtb25fbmV3X2ZpbHRlcmAgZnVuY3Rpb24uIExldCdzIHN0YXJ0IHdpdGggYG1tL2RhbW9uL2NvcmUuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIGhhbmRsZXMgaXRzIG5ldyBmaWx0ZXIgbG9naWMgd2l0aGluIHRoZSBjb3JlLiBJ4oCZbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJ3MgY2FsbCBncmFwaCBhbmQgc2NydXRpbml6aW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgb3RoZXIgREFNT04gY29tcG9uZW50cyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBkaXNzZWN0IGl0cyBlcnJvciBoYW5kbGluZyBhbmQgd2hhdCBtZXRyaWNzIGl0J3MgdXNpbmcgKG9yIHNob3VsZCBiZSkuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIGZpbHRlciBjcmVhdGlvbi4gRnJvbSB0aGVyZSwgSSdsbCBhc3Nlc3MgaXRzIHBlcmZvcm1hbmNlIGltcGFjdCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjI5LjE0NDcxMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXG4gMTcxOlxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbiAxNzI6XFx0XFx0XFx0Ym9vbCBtYXRjaGluZywgYm9vbCBhbGxvdylcXG4gMTczOlxcdHtcXG4gMTc0OlxcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKmZpbHRlcjtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0ZmlsdGVyID0ga21hbGxvY19vYmooKmZpbHRlcik7XFxuIDE3NzpcXHRcXHRpZiAoIWZpbHRlcilcXG4gMTc4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxNzk6XFx0XFx0ZmlsdGVyLVxcdTAwM2V0eXBlID0gdHlwZTtcXG4gMTgwOlxcdFxcdGZpbHRlci1cXHUwMDNlbWF0Y2hpbmcgPSBtYXRjaGluZztcXG4gMTgxOlxcdFxcdGZpbHRlci1cXHUwMDNlYWxsb3cgPSBhbGxvdztcXG4gMTgyOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmaWx0ZXItXFx1MDAzZWxpc3QpO1xcbiAxODM6XFx0XFx0cmV0dXJuIGZpbHRlcjtcXG4gMTg0OlxcdH1cXG4gMTg1OlxcdFxcbiAxODY6XFx0dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG4gMTg3OlxcdHtcXG4gMTg4OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmYtXFx1MDAzZWxpc3QsIFxcdTAwMjZwLVxcdTAwM2VmaWx0ZXJzKTtcXG4gMTg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzk6MjkuMTQ1MDg3ODUxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjQyMjYwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbWVtY2dfaWRgIGluIERBTU9OIEZpbHRlciBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBgbWVtY2dfaWRgIGdldHMgaW5pdGlhbGl6ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHYC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgdmFsdWUgb3JpZ2luYXRlcyBhbmQgaG93IGl0J3MgdXNlZC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIG1heWJlIGxvb2sgZm9yIGFyZWFzIHdoZXJlIGEgcmFjZSBjb3VsZCBleGlzdCBvciB3aGVyZSB0aGUgSUQgbWlnaHQgbm90IGJlIHdoYXQgdGhlIHVzZXIgZXhwZWN0cy4gSSdtIGFzc3VtaW5nIGZhbWlsaWFyaXR5IHdpdGggdGhlIERBTU9OIGNvZGUgYmFzZSwgc28gSSdtIG5vdCBnb2luZyB0byBiZSBzdXBlciBleHBsaWNpdCBhYm91dCBldmVyeSBmdW5jdGlvbi4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIGJlaGF2aW5nIGV4YWN0bHkgaG93IEkgZXhwZWN0IGl0IHRvLiBVbHRpbWF0ZWx5LCBJIGFtIHRyeWluZyB0byBkZXRlcm1pbmUgd2hhdCBpcyB0aGUgcmVsaWFibGUgcGxhY2UgdG8gYWNjZXNzIHRoaXMgdmFsdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzI2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozOTozMS4wNjkzMTYyOTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzU4NDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTE5MT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMjA0LVxcdFxcdGRzdC1cXHUwMDNlbmlkID0gc3JjLVxcdTAwM2VuaWQ7XFxubW0vZGFtb24vY29yZS5jOjEyMDU6XFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxubW0vZGFtb24vY29yZS5jLTEyMDYtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTMxNT1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfZmlsdGVyX2FyZyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzE5LVxcdGNhc2UgREFNT1NfRklMVEVSX1RZUEVfTUVNQ0c6XFxubW0vZGFtb24vY29yZS5jOjEzMjA6XFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxubW0vZGFtb24vY29yZS5jLTEzMjEtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTc5MT1zdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzk4LVxcdGNhc2UgREFNT05fRklMVEVSX1RZUEVfTUVNQ0c6XFxubW0vZGFtb24vY29yZS5jOjE3OTk6XFx0XFx0ZHN0LVxcdTAwM2VtZW1jZ19pZCA9IHNyYy1cXHUwMDNlbWVtY2dfaWQ7XFxubW0vZGFtb24vY29yZS5jLTE4MDAtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTgwNj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9maWx0ZXJzKHN0cnVjdCBkYW1vbl9wcm9iZSAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE4MjktXFx0XFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi9jb3JlLmM6MTgzMDpcXHRcXHRcXHRuZXdfZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCA9IHNyY19maWx0ZXItXFx1MDAzZW1lbWNnX2lkO1xcbm1tL2RhbW9uL2NvcmUuYy0xODMxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI5NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yOTU3LVxcbm1tL2RhbW9uL2NvcmUuYzoyOTU4OlxcdG1lbWNnID0gbWVtX2Nncm91cF9nZXRfZnJvbV9pZChnb2FsLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vY29yZS5jLTI5NTktXFx0aWYgKCFtZW1jZykge1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2Nj1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjg0LVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6Mjg1OlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yODYtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9NDQ4PWJvb2wgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDcwLVxcdFxcdGVsc2VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDcxOlxcdFxcdFxcdG1hdGNoZWQgPSBmaWx0ZXItXFx1MDAzZW1lbWNnX2lkID09IG1lbV9jZ3JvdXBfaWQobWVtY2cpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy00NzItXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjgwND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODIyLVxcdFxcdFxcdFxcdFxcdHN5c2ZzX2ZpbHRlci1cXHUwMDNlbWVtY2dfcGF0aCxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjgyMzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4MjQtXFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NTE9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg3OS1cXHRcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19tZW1jZ19wYXRoX3RvX2lkKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODgwOlxcdFxcdFxcdFxcdFxcdHN5c2ZzX2dvYWwtXFx1MDAzZXBhdGgsIFxcdTAwMjZnb2FsLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4ODEtXFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTk5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2ZpbHRlcnMoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjIxOC1cXHRcXHRcXHRcXHRcXHRzeXNfZmlsdGVyLVxcdTAwM2VwYXRoLFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjIxOTpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmlsdGVyLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjIwLVxcdFxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04MDQ9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyNC1cXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VuaWQsIHNyYy1cXHUwMDNlbmlkKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODI1OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1lbWNnX2lkLCBzcmMtXFx1MDAzZW1lbWNnX2lkKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODI2LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzMj1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NzItXFx0XFx0XFx0Lm5pZCA9IDYsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg3MzpcXHRcXHRcXHQubWVtY2dfaWQgPSA3LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NzQtXFx0XFx0XFx0fSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODgwLVxcdFxcdFxcdC5uaWQgPSAxMCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODgxOlxcdFxcdFxcdC5tZW1jZ19pZCA9IDEsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg4Mi1cXHRcXHRcXHR9KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMTE4PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X2ZpbHRlcl9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjYtXFx0Y2FzZSBEQU1PU19GSUxURVJfVFlQRV9NRU1DRzpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTEyNzpcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVxcdTAwM2VtZW1jZ19pZCwgc3JjLVxcdTAwM2VtZW1jZ19pZCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExMjgtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTE0Nz1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9maWx0ZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTExNjUtXFx0XFx0XFx0LmFsbG93ID0gZmFsc2UsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExNjY6XFx0XFx0XFx0Lm1lbWNnX2lkID0gMTIzLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTY3LVxcdFxcdFxcdH0pO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTEzNjc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfZmlsdGVyX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM3NS1cXHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMzc2OlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZW1lbWNnX2lkLCBzcmMtXFx1MDAzZW1lbWNnX2lkKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTM3Ny1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xMzgzPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X2ZpbHRlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTQwMS1cXHRcXHRcXHQuYWxsb3cgPSBmYWxzZSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTQwMjpcXHRcXHRcXHQubWVtY2dfaWQgPSAxMjMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE0MDMtXFx0XFx0XFx0fSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjMxLjM3MjkwNjg4NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODk0NDYwMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzOiBEQU1PTiBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIERBTU9OIGNvZGUgY2hhbmdlcyBmcm9tIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBwZXJzcGVjdGl2ZS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEknbGwgZm9jdXMgb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtZW50aW9uZWQgYW5kIGhvdyB0aGV5IGhhbmRsZSBtZW1vcnkuXG5cbkZpcnN0LCBJIGV4YW1pbmUgdGhlIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBgbWF0Y2hlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgaXMgYXNzaWduZWQgYSB2YWx1ZSBpbiBhbGwgY29kZSBwYXRocywgZGVwZW5kaW5nIG9uIHRoZSBmaWx0ZXIgdHlwZSAoYW5vbiBvciBtZW1jZykuIE5vIGNvbmNlcm5zIGhlcmUgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5OZXh0LCBJIGxvb2sgYXQgYGRhbW9uX3BhX2ZpbHRlcl9tYXRjaGAuIFRoaXMgYXBwZWFycyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZywgYW5kIGxpa2UgdGhlIHByZXZpb3VzIG9uZSwgYG1hdGNoZWRgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIGdldHMgYXNzaWduZWQgYSB2YWx1ZS5cblxuTW92aW5nIG9uIHRvIGBtbS9kYW1vbi92YWRkci5jYCwgSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlc2UgY2hhbmdlcyBtb3JlIGNsb3NlbHkuIGBkYW1vbl92YV9wcmVwX3Byb2JlX3JlZ2lvbmAgYW5kIGBkYW1vbl92YV9wcmVwX3Byb2Jlc2Agc2VlbSBsaWtlIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBhbmQgSSdtIG5vdCBzZWVpbmcgaW1tZWRpYXRlIHJlZCBmbGFncy4gYGRhbW9uX3ZhX3lvdW5nX2FkZHJgIGhhcyBgeW91bmdgIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIHdoaWNoIGlzIHNhZmUuXG5cbkkgdGhlbiBnbyB0aHJvdWdoIGBkYW1vbl92YV9maWx0ZXJfbWF0Y2hgLCB3aGljaCB1c2VzIGBkYW1vbl9vcHNfZmlsdGVyX21hdGNoYCBhbmQgYWxzbyBoYXMgYG1hdGNoZWRgIGluaXRpYWxpemVkIGFuZCBhc3NpZ25lZCwgYW5kIGBkYW1vbl92YV9maWx0ZXJfcGFzc2Agd2hlcmUgYHBhc3NgIGlzIGluaXRpYWxpemVkIHRvIGB0cnVlYC4gTm8gaXNzdWVzIHRoZXJlLlxuXG5UaGUgYGRhbW9uX3ZhX3Byb2JlX2ZvbGlvYCBmdW5jdGlvbiBpbmNyZW1lbnRzIGByLVx1MDAzZXByb2JlX2hpdHNbaV0rK2AgaWYgdGhlIGZpbHRlciBwYXNzZWQuIEl0IGlzIGNydWNpYWwgdG8gY2hlY2sgdGhpcy4gYGlgIGlzIGluaXRpYWxpemVkIHRvIGAwYCBhbmQgdGh1cyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHRoYXQgY291bGQgY3JlYXRlIGFuIGlzc3VlLlxuXG5UaGUgZnVuY3Rpb25zIGBkYW1vbl92YV9wcm9iZV9wbWRfZW50cnlgIGFuZCBgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeWAgZW1wbG95IGxvY2FsIHN0cnVjdHMuIGBhcmdgIGlzIGNvbnN0cnVjdGVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzcGVjaWZpY2FsbHkgYC5jdHggPSBjdHgsIC5yID0gcmAsIGFuZCBgZGFtb25fcHJvYmVfd2Fsa19vcHNgIGlzIGFsc28gaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVyczogYC5wbWRfZW50cnkgPSAuLi4sIC5odWdldGxiX2VudHJ5ID0gLi4uYC4gVGhpcyBhcHByb2FjaCBlbnN1cmVzIHRoYXQgYWxsIG1lbWJlcnMgYXJlIGluaXRpYWxpemVkLCB0aHVzIHByZXZlbnRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBJbnNpZGUgdGhlc2UgZnVuY3Rpb25zLCBgZm9saW9gIGlzIGRlcml2ZWQgZnJvbSBlaXRoZXIgYHB0ZV9wZm5gIG9yIGB2bV9ub3JtYWxfZm9saW9gIGFuZCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLlxuXG5GaW5hbGx5LCBJIGNoZWNrZWQgYF9fZGFtb25fdmFfYXBwbHlfcHJvYmVzYCBhbmQgYGRhbW9uX3ZhX2FwcGx5X3Byb2Jlc2AuIGBtYXhfd3N1bWAgaXMgaW5pdGlhbGl6ZWQgdG8gYDBgLlxuXG5JJ3ZlIGNhcmVmdWxseSBleGFtaW5lZCBhbGwgdGhlIGNvZGUgcGF0aHMgYW5kIGluaXRpYWxpemF0aW9ucyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJ20gbm90IGRldGVjdGluZyBhbnkgaW5zdGFuY2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQgaW4gY29uZGl0aW9ucywgYnJhbmNoZXMsIG9yIHBhc3NlZCBhcm91bmQuIE5vIGNvcHlfdG9fdXNlciBvciBwb3RlbnRpYWwgaW5mbyBsZWFrIHBhdGh3YXlzIGFyZSBwcmVzZW50LiBUaGVyZSBhcmUgYWxzbyBubyBjb21wbGV4IGJ1ZmZlcnMgb3IgbWVtb3J5IHBhc3NlZCBhY3Jvc3MgYm91bmRhcmllcyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuXG5cbldoaWxlIHRoZXJlICpjb3VsZCogYmUgcmFjZSBjb25kaXRpb25zLCBwYWdlIHRhYmxlIHdhbGsgYnVncywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgdG8gYHByb2JlX2hpdHNgLCB0aGVzZSBhcmUgaXNzdWVzIHRoYXQgd291bGQgYmUgcGlja2VkIHVwIGJ5IGV4aXN0aW5nIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUCwgS0FTQU4sIGFuZCBEQU1PTidzIG93biB2YWxpZGF0aW9uLCBhbmQgdGhleSBhcmUgbm90IHJlbGF0ZWQgdG8gS01TQU4tc3BlY2lmaWMgdnVsbmVyYWJpbGl0aWVzICh1bmluaXRpYWxpemVkIG1lbW9yeSkuXG5cbioqQ29uY2x1c2lvbjoqKiBCYXNlZCBvbiB0aGlzIHRob3JvdWdoIHJldmlldywgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCwgYW5kIHRoZSBhbmFseXNpcyBpcyBjb21wcmVoZW5zaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk5NywiT3V0cHV0VG9rZW5zIjozMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM5OjQwLjI2NzM3MDU4NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIERBTU9OIGZpbHRlciBtYXRjaGluZyBsb2dpYyBhY3Jvc3MgcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYnkgaW50cm9kdWNpbmcgZGFtb25fb3BzX2ZpbHRlcl9tYXRjaCgpIGFuZCBpbXBsZW1lbnRzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBwcm9iZSBoYW5kbGluZyAoZGFtb25fdmFfcHJlcF9wcm9iZXMsIGRhbW9uX3ZhX2FwcGx5X3Byb2JlcywgZGFtb25fdmFfcHJvYmVfcG1kX2VudHJ5LCBkYW1vbl92YV9wcm9iZV9odWdldGxiX2VudHJ5KS5cXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FmZXR5IGFuZCBzYW5pdGl6ZXIgYXBwbGljYWJpbGl0eTpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZTogQWxsIHN0YWNrLWFsbG9jYXRlZCBzdHJ1Y3RzIChzdWNoIGFzIHN0cnVjdCBkYW1vbl92YV9wcm9iZV93YWxrX3ByaXZhdGUgYW5kIHN0cnVjdCBtbV93YWxrX29wcykgYW5kIHNjYWxhciB2YXJpYWJsZXMgKGUuZy4gYm9vbGVhbnMsIGxvb3AgY291bnRlcnMsIGFjY3VtdWxhdG9yIHN1bXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgb3IgemVyby1pbml0aWFsaXphdGlvbiBiZWZvcmUgdXNlLlxcbjIuIE5vIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIG91dHB1dHMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS5cXG4zLiBNZW1vcnkgc2FmZXR5IGNvbnNpZGVyYXRpb25zOiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGluZyB0byBwYWdlLXRhYmxlIHdhbGtpbmcsIGZvbGlvIGxvY2tpbmcvcmVmZXJlbmNlIGNvdW50aW5nLCBjb25jdXJyZW5jeSwgb3IgYXJyYXkgaW5kZXhpbmcgKGUuZy4sIHByb2JlX2hpdHMpIGZhbGwgdW5kZXIgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgdGFibGUgYXNzZXJ0cykuXFxuXFxuQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBEQU1PTiBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgYWNyb3NzIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzIGJ5IGludHJvZHVjaW5nIGRhbW9uX29wc19maWx0ZXJfbWF0Y2goKSBhbmQgaW1wbGVtZW50cyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcHJvYmUgaGFuZGxpbmcgKGRhbW9uX3ZhX3ByZXBfcHJvYmVzLCBkYW1vbl92YV9hcHBseV9wcm9iZXMsIGRhbW9uX3ZhX3Byb2JlX3BtZF9lbnRyeSwgZGFtb25fdmFfcHJvYmVfaHVnZXRsYl9lbnRyeSkuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhZmV0eSBhbmQgc2FuaXRpemVyIGFwcGxpY2FiaWxpdHk6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U6IEFsbCBzdGFjay1hbGxvY2F0ZWQgc3RydWN0cyAoc3VjaCBhcyBzdHJ1Y3QgZGFtb25fdmFfcHJvYmVfd2Fsa19wcml2YXRlIGFuZCBzdHJ1Y3QgbW1fd2Fsa19vcHMpIGFuZCBzY2FsYXIgdmFyaWFibGVzIChlLmcuIGJvb2xlYW5zLCBsb29wIGNvdW50ZXJzLCBhY2N1bXVsYXRvciBzdW1zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIG9yIHplcm8taW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzZS5cXG4yLiBObyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCBvdXRwdXRzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuXFxuMy4gTWVtb3J5IHNhZmV0eSBjb25zaWRlcmF0aW9uczogQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gcGFnZS10YWJsZSB3YWxraW5nLCBmb2xpbyBsb2NraW5nL3JlZmVyZW5jZSBjb3VudGluZywgY29uY3VycmVuY3ksIG9yIGFycmF5IGluZGV4aW5nIChlLmcuLCBwcm9iZV9oaXRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIHRhYmxlIGFzc2VydHMpLlxcblxcbkJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowb889h[1] Phase: Succeeded StartedAt: 2026-09-06 16:39:51 +0000 UTC FinishedAt: 2026-09-06 16:39:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 16:39:51 +0000 UTC FinishedAt: 2026-09-06 16:39:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2] Phase: Succeeded StartedAt: 2026-09-06 16:39:51 +0000 UTC FinishedAt: 2026-09-06 20:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:39:51 +0000 UTC FinishedAt: 2026-09-06 20:18:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:39:51 +0000 UTC FinishedAt: 2026-09-06 16:40:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:39:51 +0000 UTC FinishedAt: 2026-09-06 16:39:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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-workflowb889h/series-workflowb889h-convert-artifact-3637906846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:40:01 +0000 UTC FinishedAt: 2026-09-06 16:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:40:01 +0000 UTC FinishedAt: 2026-09-06 16:55:45 +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:*c125cfb6-9786-4d1b-86dc-eefe1c1bd132,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-workflowb889h/series-workflowb889h-convert-artifact-3637906846/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": "ed35ff76-da51-4075-aa30-782f2c4916c4", "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-workflowb889h/series-workflowb889h-build-action-4146320004/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:40:01 +0000 UTC FinishedAt: 2026-09-06 16:55:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c125cfb6-9786-4d1b-86dc-eefe1c1bd132,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-workflowb889h/series-workflowb889h-convert-artifact-3637906846/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": "ed35ff76-da51-4075-aa30-782f2c4916c4", "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-workflowb889h/series-workflowb889h-build-action-4146320004/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:55:45 +0000 UTC FinishedAt: 2026-09-06 16:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:55:45 +0000 UTC FinishedAt: 2026-09-06 16:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:55:45 +0000 UTC FinishedAt: 2026-09-06 16:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:55:45 +0000 UTC FinishedAt: 2026-09-06 16:55:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-workflowb889h/series-workflowb889h-convert-artifact-1679047505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:55:55 +0000 UTC FinishedAt: 2026-09-06 16:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:55:55 +0000 UTC FinishedAt: 2026-09-06 16:57:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed35ff76-da51-4075-aa30-782f2c4916c4,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-workflowb889h/series-workflowb889h-build-action-4146320004/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-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:57:37 +0000 UTC FinishedAt: 2026-09-06 16:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:57:37 +0000 UTC FinishedAt: 2026-09-06 16:57:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:57:37 +0000 UTC FinishedAt: 2026-09-06 17:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:57:37 +0000 UTC FinishedAt: 2026-09-06 17:13:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c125cfb6-9786-4d1b-86dc-eefe1c1bd132,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-workflowb889h/series-workflowb889h-convert-artifact-1679047505/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": "39f96d52-72fe-46cc-b715-1d95a9ee384d", "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-workflowb889h/series-workflowb889h-build-action-2032017693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 16:57:37 +0000 UTC FinishedAt: 2026-09-06 17:13:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c125cfb6-9786-4d1b-86dc-eefe1c1bd132,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-workflowb889h/series-workflowb889h-convert-artifact-1679047505/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": "39f96d52-72fe-46cc-b715-1d95a9ee384d", "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-workflowb889h/series-workflowb889h-build-action-2032017693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:13:54 +0000 UTC FinishedAt: 2026-09-06 17:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:13:54 +0000 UTC FinishedAt: 2026-09-06 17:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:13:54 +0000 UTC FinishedAt: 2026-09-06 17:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:13:54 +0000 UTC FinishedAt: 2026-09-06 17:15:35 +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:*39f96d52-72fe-46cc-b715-1d95a9ee384d,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-workflowb889h/series-workflowb889h-build-action-2032017693/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-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:15:45 +0000 UTC FinishedAt: 2026-09-06 20:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:15:45 +0000 UTC FinishedAt: 2026-09-06 20:18:34 +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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"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:*ed35ff76-da51-4075-aa30-782f2c4916c4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39f96d52-72fe-46cc-b715-1d95a9ee384d,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-workflowb889h/series-workflowb889h-build-action-4146320004/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-workflowb889h/series-workflowb889h-build-action-2032017693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:15:45 +0000 UTC FinishedAt: 2026-09-06 17:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:15:45 +0000 UTC FinishedAt: 2026-09-06 17:15:53 +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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"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-workflowb889h/series-workflowb889h-convert-artifact-4025301382/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:15:45 +0000 UTC FinishedAt: 2026-09-06 17:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:15:45 +0000 UTC FinishedAt: 2026-09-06 17:15:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:15:46 +0000 UTC FinishedAt: 2026-09-06 17:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:16:06 +0000 UTC FinishedAt: 2026-09-06 20:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb889h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"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":["damon_ops_filter_match","damon_va_prep_probes","damon_va_apply_probes","damon_va_probe_pmd_entry","damon_va_probe_hugetlb_entry","damon_va_filter_match","damon_pa_filter_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","MEMCG","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"96d2b809-bd7e-4727-b306-d7d8a1e74d40","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-06 17:16:06 +0000 UTC FinishedAt: 2026-09-06 20:18:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed35ff76-da51-4075-aa30-782f2c4916c4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39f96d52-72fe-46cc-b715-1d95a9ee384d,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-workflowb889h/series-workflowb889h-build-action-4146320004/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-workflowb889h/series-workflowb889h-build-action-2032017693/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-workflowb889h/series-workflowb889h-convert-artifact-4025301382/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,}