Name: series-workflowpmwwl Phase: Succeeded StartedAt: 2026-08-18 02:59:45 +0000 UTC FinishedAt: 2026-08-18 07:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[0] Phase: Succeeded StartedAt: 2026-08-18 02:59:45 +0000 UTC FinishedAt: 2026-08-18 03:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 02:59:45 +0000 UTC FinishedAt: 2026-08-18 03:42:29 +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": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS" ], "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": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS" ], "series_id": "db2ddf30-018c-412d-9f2d-c3016ce0ddb7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "khugepaged_enter_vma", "hugepage_madvise", "vma_modify_flags" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2todWdlcGFnZWRfZW50ZXJfdm1hJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX21hZHZpc2UmIzM0OywKICAgICYjMzQ7dm1hX21vZGlmeV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdG8gZW5zdXJlIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyB3aGVuIHRoZSBgVk1fSFVHRVBBR0VgIGZsYWcgaXMgc2V0LiBUaGlzIGNoYW5nZSBpbnZvbHZlcyBWTUEgZmxhZyBtYW5hZ2VtZW50IGFuZCBmdW5jdGlvbiBjYWxsIHJlbG9jYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBWTUEgd2l0aCBraHVnZXBhZ2VkIChga2h1Z2VwYWdlZF9lbnRlcl92bWFgKSBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgb24gYSBzbWFsbCByYW5nZSB3aXRoaW4gYSBsYXJnZSBWTUEgd291bGQgaW5jb3JyZWN0bHkgcmVnaXN0ZXIgdGhlIGBtbWAgd2l0aCBraHVnZXBhZ2VkIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBsYXJnZSBWTUEmIzM5O3Mgc2l6ZSwgYmVmb3JlIHRoZSBWTUEgd2FzIHNwbGl0LiBCeSBtb3ZpbmcgdGhlIHJlZ2lzdHJhdGlvbiB0byBgbWFkdmlzZV91cGRhdGVfdm1hYCwgdGhlIHJlZ2lzdHJhdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIG5ld2x5IHNwbGl0L21lcmdlZCBWTUEsIGVuc3VyaW5nIHRoYXQga2h1Z2VwYWdlZCBpcyBvbmx5IHdva2VuIHVwIGlmIHRoZSByZXN1bHRpbmcgVk1BIGlzIGFjdHVhbGx5IGxhcmdlIGVub3VnaCB0byBiZSBjb2xsYXBzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGtodWdlcGFnZWQgd2FrZXVwcyBhbmQgVk1BIGhhbmRsaW5nLCB3aGljaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Yjk0MmY2ZGEyMGExZGVjNjNiZDBmZDY2ZmQ1MWE0N2RjOTg3Mzk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDM6Mzc6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCA1YTA2ZTM5NDJlODg5Li43OWVmZmQzZjNkYTRmIDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC00NTQsMTIgJiM0Mzs0NTQsNiBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX05PSFVHRVBBR0U7XG4gXHRcdCp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTtcbi1cdFx0Lypcbi1cdFx0ICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLFxuLVx0XHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxuLVx0XHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxuLVx0XHQgKi9cbi1cdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuIFx0XHQqdm1fZmxhZ3MgXHUwMDI2PSB+Vk1fSFVHRVBBR0U7XG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCBjMTc5OTM4MDk3YmYwLi5jYjkzY2Y4MmQ4ZGY2IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0xNzgsNiAmIzQzOzE3OCwxNCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcbiBcdC8qIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS4gKi9cbiBcdHZtYV9zdGFydF93cml0ZSh2bWEpO1xuIFx0dm1hLVx1MDAzZWZsYWdzID0gbmV3X3ZtYV9mbGFncztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcbiYjNDM7XHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxuJiM0MztcdCAqIG1heSBub3QgaGFwcGVuIGFueSB0aW1lIHNvb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxuJiM0MztcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcbiYjNDM7XG4gXHRpZiAoc2V0X25ld19hbm9uX25hbWUpXG4gXHRcdHJldHVybiByZXBsYWNlX2Fub25fdm1hX25hbWUodm1hLCBhbm9uX25hbWUpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O3ZtYV9tb2RpZnlfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhIFZNQSB3aXRoIGtodWdlcGFnZWQgKGBraHVnZXBhZ2VkX2VudGVyX3ZtYWApIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNtYWxsIHJhbmdlIHdpdGhpbiBhIGxhcmdlIFZNQSB3b3VsZCBpbmNvcnJlY3RseSByZWdpc3RlciB0aGUgYG1tYCB3aXRoIGtodWdlcGFnZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxhcmdlIFZNQSYjMzk7cyBzaXplLCBiZWZvcmUgdGhlIFZNQSB3YXMgc3BsaXQuIEJ5IG1vdmluZyB0aGUgcmVnaXN0cmF0aW9uIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCB0aGUgcmVnaXN0cmF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgbmV3bHkgc3BsaXQvbWVyZ2VkIFZNQSwgZW5zdXJpbmcgdGhhdCBraHVnZXBhZ2VkIGlzIG9ubHkgd29rZW4gdXAgaWYgdGhlIHJlc3VsdGluZyBWTUEgaXMgYWN0dWFsbHkgbGFyZ2UgZW5vdWdoIHRvIGJlIGNvbGxhcHNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMga2h1Z2VwYWdlZCB3YWtldXBzIGFuZCBWTUEgaGFuZGxpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliOTQyZjZkYTIwYTFkZWM2M2JkMGZkNjZmZDUxYTQ3ZGM5ODczOTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMzozNzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuYwppbmRleCA1YTA2ZTM5NDJlODg5Li43OWVmZmQzZjNkYTRmIDEwMDY0NAotLS0gYS9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jCkBAIC00NTQsMTIgJiM0Mzs0NTQsNiBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAljYXNlIE1BRFZfSFVHRVBBR0U6CiAJCSp2bV9mbGFncyAmYW1wOz0gflZNX05PSFVHRVBBR0U7CiAJCSp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTsKLQkJLyoKLQkJICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLAotCQkgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdAotCQkgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLgotCQkgKi8KLQkJa2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIE1BRFZfTk9IVUdFUEFHRToKIAkJKnZtX2ZsYWdzICZhbXA7PSB+Vk1fSFVHRVBBR0U7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggYzE3OTkzODA5N2JmMC4uY2I5M2NmODJkOGRmNiAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtMTc4LDYgJiM0MzsxNzgsMTQgQEAgc3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsCiAJLyogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLiAqLwogCXZtYV9zdGFydF93cml0ZSh2bWEpOwogCXZtYS0mZ3Q7ZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgdm1hIGJlY29tZSBnb29kIGZvciBraHVnZXBhZ2VkIHRvIHNjYW4sCiYjNDM7CSAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0CiYjNDM7CSAqIG1heSBub3QgaGFwcGVuIGFueSB0aW1lIHNvb24uCiYjNDM7CSAqLwomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3QoJmFtcDtuZXdfdm1hX2ZsYWdzLCBWTUFfSFVHRVBBR0VfQklUKSkKJiM0MzsJCWtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hX2ZsYWdzX3RvX2xlZ2FjeShuZXdfdm1hX2ZsYWdzKSk7CiYjNDM7CiAJaWYgKHNldF9uZXdfYW5vbl9uYW1lKQogCQlyZXR1cm4gcmVwbGFjZV9hbm9uX3ZtYV9uYW1lKHZtYSwgYW5vbl9uYW1lKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBraHVnZXBhZ2VkX2VudGVyX3ZtYSBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBzaGlmdGluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIG92ZXIgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doeT8mIzM0OyBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgbW92ZT8gTGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2guIFdlJiMzOTtyZSByZW1vdmluZyBpdCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AgYW5kIGluc2VydGluZyBpdCBpbnRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGluIGBtbS9tYWR2aXNlLmNgLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGhpZXJhcmNoeS4gSXMgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgZXhjbHVzaXZlbHkgY2FsbGVkIGJ5IGBodWdlcGFnZV9tYWR2aXNlYCwgb3IgYXJlIHRoZXJlIG90aGVyIGNhbGwgc2l0ZXMgd2UgbmVlZCB0byBjb25zaWRlcj8gSXQgbG9va3MgbGlrZSBgbWFkdmlzZV91cGRhdGVfdm1hYCAqaXMqIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbW9kaWZ5aW5nIHRoZSBWTUEgZmxhZ3MgYmFzZWQgb24gYG1hZHZpc2VgIGNhbGxzLCB3aGljaCBtYWtlcyBzZW5zZS4gSG1tLCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgaXRzZWxmIGlzIGFjdHVhbGx5IGludm9rZWQgYnkgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCwgd2hpY2ggKnRoZW4qIGNhbGxzIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBtb3ZpbmcgdGhlIHdvcmssIGluIHRlcm1zIG9mIFZNQSBtb2RpZmljYXRpb25zLCB0byAqYmVmb3JlKiB0aGUgaHVnZXBhZ2Utc3BlY2lmaWMgbG9naWMgZ2V0cyBpbnZvbHZlZC4KClRvIGJlIHN1cmUsIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgY3Jvc3MtcmVmZXJlbmNlIHRoZSByZWxldmFudCBzZWN0aW9ucyBpbiBgbW0vbWFkdmlzZS5jYCBhbmQgYG1tL2todWdlcGFnZWQuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGNoYW5nZS4gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb3ZlIGFmZmVjdHMgdGhlIG92ZXJhbGwgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV91cGRhdGVfdm1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzg9c3RhdGljIGludCByZXBsYWNlX2Fub25fdm1hX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jLTE1MC0gKi9cbm1tL21hZHZpc2UuYzoxNTE6c3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsXG5tbS9tYWR2aXNlLmMtMTUyLVx0XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmM9MTMzNj1zdGF0aWMgYm9vbCBjYW5fbWFkdmlzZV9tb2RpZnkoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEzNDItLypcbm1tL21hZHZpc2UuYzoxMzQzOiAqIEFwcGx5IGFuIG1hZHZpc2UgYmVoYXZpb3IgdG8gYSByZWdpb24gb2YgYSB2bWEuICBtYWR2aXNlX3VwZGF0ZV92bWFcbm1tL21hZHZpc2UuYy0xMzQ0LSAqIHdpbGwgaGFuZGxlIHNwbGl0dGluZyBhIHZtIGFyZWEgaW50byBzZXBhcmF0ZSBhcmVhcywgZWFjaCBhcmVhIHdpdGggaXRzIG93blxuLS1cbm1tL21hZHZpc2UuYz0xMzQ3PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEzNzgtXG5tbS9tYWR2aXNlLmM6MTM3OTpcdC8qIFRoZSBiZWxvdyBiZWhhdmlvdXJzIHVwZGF0ZSBWTUFzIHZpYSBtYWR2aXNlX3VwZGF0ZV92bWEoKS4gKi9cbm1tL21hZHZpc2UuYy0xMzgwLVxuLS1cbm1tL21hZHZpc2UuYy0xNDQwLVxubW0vbWFkdmlzZS5jOjE0NDE6XHRlcnJvciA9IG1hZHZpc2VfdXBkYXRlX3ZtYShuZXdfZmxhZ3MsIG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jLTE0NDItb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtodWdlcGFnZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzaGlmdGluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG92ZXIgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIElzIGl0IGRlZmluZWQgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgIGl0c2VsZj8gT3IgcGVyaGFwcyBpdCYjMzk7cyBhIGRlY2xhcmF0aW9uIHJlc2lkaW5nIGluIGBpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaGA/IEtub3dpbmcgaXRzIGxvY2F0aW9uIGlzIHRoZSBmaXJzdCBzdGVwIHRvIHByb3Blcmx5IGV2YWx1YXRpbmcgd2hhdCB0aGUgY29kZSBjaGFuZ2UgbWVhbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZF9lbnRlcl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTU9ZXh0ZXJuIHZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MTY6ZXh0ZXJuIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0xNy1cdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0zOD1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQwLX1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjQxOnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQyLVx0XHRcdFx0XHR2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMC1cdFx0cmV0dXJuIHJldDtcbm1tL2h1Z2VfbWVtb3J5LmM6MTUzMTpcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMi1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01ODctXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9raHVnZXBhZ2VkLmMtNTg5LVx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbi0tXG5tbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxuLS1cbm1tL21hZHZpc2UuYy0xODYtXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVCkpXG5tbS9tYWR2aXNlLmM6MTg3Olx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYV9mbGFnc190b19sZWdhY3kobmV3X3ZtYV9mbGFncykpO1xubW0vbWFkdmlzZS5jLTE4OC1cbi0tXG5tbS92bWEuYz04ODk9c3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcbi0tXG5tbS92bWEuYy0xMDczLVx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cdTAwM2V0YXJnZXQsIHN0aWNreV9mbGFncyk7XG5tbS92bWEuYzoxMDc0Olx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVx1MDAzZXRhcmdldCwgdm1nLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTEwNzUtXHR2bWctXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcbi0tXG5tbS92bWEuYz0xMTQwPXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX25ld19yYW5nZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxuLS1cbm1tL3ZtYS5jLTExOTUtXHRpZiAodm1nLVx1MDAzZXRhcmdldCBcdTAwMjZcdTAwMjYgIXZtYV9leHBhbmQodm1nKSkge1xubW0vdm1hLmM6MTE5NjpcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVx1MDAzZXRhcmdldCwgdm1nLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTExOTctXHRcdHZtZy1cdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xuLS1cbm1tL3ZtYS5jPTI2MzQ9c3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuLS1cbm1tL3ZtYS5jLTI2OTEtXHQvKlxubW0vdm1hLmM6MjY5MjpcdCAqIHZtYV9tZXJnZV9uZXdfcmFuZ2UoKSBjYWxscyBraHVnZXBhZ2VkX2VudGVyX3ZtYSgpIHRvbywgdGhlIGJlbG93XG5tbS92bWEuYy0yNjkzLVx0ICogY2FsbCBjb3ZlcnMgdGhlIG5vbi1tZXJnZSBjYXNlLlxuLS1cbm1tL3ZtYS5jLTI2OTUtXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSlcbm1tL3ZtYS5jOjI2OTY6XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgbWFwLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTI2OTctXHQqdm1hcCA9IHZtYTtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg9MTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBtcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTE4NS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaDoxODY6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTE4Ny1cdFx0XHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hZHZpc2UgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb3ZpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IHNoaWZ0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBUaGlzIGltcGxpZXMgaXQgd2lsbCBub3cgYmUgdHJpZ2dlcmVkIGJ5ICphbnkqIGBtYWR2aXNlYCBjYWxsIHRoYXQgdXBkYXRlcyBWTUEgZmxhZ3MgYW5kIHNwZWNpZmljYWxseSBzZXRzIHRoZSBgVk1BX0hVR0VQQUdFX0JJVGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGRpcmVjdGx5IHRpZWQgdG8gYFZNX0hVR0VQQUdFYC4gU2VlbXMgcmVhc29uYWJsZSBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJyb2FkZW5pbmcgdGhlIHNjb3BlIGEgYml0LiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcuIGBWTUFfSFVHRVBBR0VfQklUYCwgaXMgdGhhdCB0aGUgcmlnaHQgdGVybWlub2xvZ3k/IExldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNvcnJlY3QgYml0IGluIHRoZSBmbGFnLiBBbmQsIGp1c3QgdG8gYmUgc3VyZSwgSSBzZWUgYHZtYV9mbGFnc190ZXN0KCZhbXA7bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVClgLCBidXQgd2hhdCAqaXMqIGBuZXdfdm1hX2ZsYWdzYCBoZXJlPyBJcyBpdCBhIHN0cmFpZ2h0IGB2bV9mbGFnc190YCwgb3IgaXMgdGhpcyBiZWluZyB1c2VkIGluIGEgYHN0cnVjdCB2bWFfZmxhZ3NgIHNvbWV3aGVyZT8gSSYjMzk7bSBnZXR0aW5nIGEgbGl0dGxlIGZ1enp5IG9uIHRoYXQuIEdvdHRhIGJlIHByZWNpc2UgaGVyZS4gT2theSwgbGV0JiMzOTtzIGp1c3QgZ28gc3RyYWlnaHQgdG8gYG1tL21hZHZpc2UuY2AgYW5kIGRpZyBpbnRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGl0c2VsZi4gSSBuZWVkIHRvIG5haWwgZG93biBleGFjdGx5IHdoYXQgYG5ld192bWFfZmxhZ3NgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBHb3R0YSBiZSBzdXJlIHRoZSBsb2dpYyBpcyBzb3VuZCB3aXRoIHRoZXNlIGZsYWcgbWFuaXB1bGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX3VwZGF0ZV92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTEzOD1zdGF0aWMgaW50IHJlcGxhY2VfYW5vbl92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tYWR2aXNlLmMtMTUwLSAqL1xubW0vbWFkdmlzZS5jOjE1MTpzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcbm1tL21hZHZpc2UuYy0xNTItXHRcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYz0xMzM2PXN0YXRpYyBib29sIGNhbl9tYWR2aXNlX21vZGlmeShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM0Mi0vKlxubW0vbWFkdmlzZS5jOjEzNDM6ICogQXBwbHkgYW4gbWFkdmlzZSBiZWhhdmlvciB0byBhIHJlZ2lvbiBvZiBhIHZtYS4gIG1hZHZpc2VfdXBkYXRlX3ZtYVxubW0vbWFkdmlzZS5jLTEzNDQtICogd2lsbCBoYW5kbGUgc3BsaXR0aW5nIGEgdm0gYXJlYSBpbnRvIHNlcGFyYXRlIGFyZWFzLCBlYWNoIGFyZWEgd2l0aCBpdHMgb3duXG4tLVxubW0vbWFkdmlzZS5jPTEzNDc9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM3OC1cbm1tL21hZHZpc2UuYzoxMzc5Olx0LyogVGhlIGJlbG93IGJlaGF2aW91cnMgdXBkYXRlIFZNQXMgdmlhIG1hZHZpc2VfdXBkYXRlX3ZtYSgpLiAqL1xubW0vbWFkdmlzZS5jLTEzODAtXG4tLVxubW0vbWFkdmlzZS5jLTE0NDAtXG5tbS9tYWR2aXNlLmM6MTQ0MTpcdGVycm9yID0gbWFkdmlzZV91cGRhdGVfdm1hKG5ld19mbGFncywgbWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTQ0Mi1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byBgbWFkdmlzZV91cGRhdGVfdm1hYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFkdmlzZWAgY2FsbHMgYXJlIHByb2Nlc3NlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIHN0cnVjdHVyZXMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBjaGFuZ2VzIHRvIHBhZ2UgYWNjZXNzIHBhdHRlcm5zIGFuZCBjYWNoaW5nIGhpbnRzIHByb3ZpZGVkIHRocm91Z2ggdGhlIGBtYWR2aXNlYCBzeXN0ZW0gY2FsbCwgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgdGFibGVzLiBJIHN1c3BlY3QgdGhlcmUgYXJlIGEgZmV3IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzdWJzeXN0ZW1zLCBsaWtlIHRoZSBwYWdlIGNhY2hlLCB0aGF0IEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB2YXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIGhlcmUgaXMga2V5IHRvIG9wdGltaXppbmcgYXBwbGljYXRpb24gbWVtb3J5IGJlaGF2aW9yIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0JiMzOTtzIHNlZSBob3cgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgYWNjb21wbGlzaGVzIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHQgKi9cbiAxNTE6XHRzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcbiAxNTI6XHRcdFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4gMTUzOlx0e1xuIDE1NDpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZXZtYTtcbiAxNTU6XHRcdHZtYV9mbGFnc190IG5ld192bWFfZmxhZ3MgPSBsZWdhY3lfdG9fdm1hX2ZsYWdzKG5ld19mbGFncyk7XG4gMTU2Olx0XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZXJhbmdlO1xuIDE1NzpcdFx0c3RydWN0IGFub25fdm1hX25hbWUgKmFub25fbmFtZSA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlYW5vbl9uYW1lO1xuIDE1ODpcdFx0Ym9vbCBzZXRfbmV3X2Fub25fbmFtZSA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IgPT0gX19NQURWX1NFVF9BTk9OX1ZNQV9OQU1FO1xuIDE1OTpcdFx0Vk1BX0lURVJBVE9SKHZtaSwgbWFkdl9iZWhhdmlvci1cdTAwM2VtbSwgcmFuZ2UtXHUwMDNlc3RhcnQpO1xuIDE2MDpcdFxuIDE2MTpcdFx0aWYgKHZtYV9mbGFnc19zYW1lX21hc2soXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCBuZXdfdm1hX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbiAxNjI6XHRcdCAgICAoIXNldF9uZXdfYW5vbl9uYW1lIHx8XG4gMTYzOlx0XHQgICAgIGFub25fdm1hX25hbWVfZXEoYW5vbl92bWFfbmFtZSh2bWEpLCBhbm9uX25hbWUpKSlcbiAxNjQ6XHRcdFx0cmV0dXJuIDA7XG4gMTY1Olx0XG4gMTY2Olx0XHRpZiAoc2V0X25ld19hbm9uX25hbWUpXG4gMTY3Olx0XHRcdHZtYSA9IHZtYV9tb2RpZnlfbmFtZShcdTAwMjZ2bWksIG1hZHZfYmVoYXZpb3ItXHUwMDNlcHJldiwgdm1hLFxuIDE2ODpcdFx0XHRcdHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIGFub25fbmFtZSk7XG4gMTY5Olx0XHRlbHNlXG4gMTcwOlx0XHRcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3MoXHUwMDI2dm1pLCBtYWR2X2JlaGF2aW9yLVx1MDAzZXByZXYsIHZtYSxcbiAxNzE6XHRcdFx0XHRyYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLCBcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcbiAxNzI6XHRcbiAxNzM6XHRcdGlmIChJU19FUlIodm1hKSlcbiAxNzQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIodm1hKTtcbiAxNzU6XHRcbiAxNzY6XHRcdG1hZHZfYmVoYXZpb3ItXHUwMDNldm1hID0gdm1hO1xuIDE3NzpcdFxuIDE3ODpcdFx0Lyogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLiAqL1xuIDE3OTpcdFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XG4gMTgwOlx0XHR2bWEtXHUwMDNlZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzO1xuIDE4MTpcdFx0LypcbiAxODI6XHRcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcbiAxODM6XHRcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XG4gMTg0Olx0XHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxuIDE4NTpcdFx0ICovXG4gMTg2Olx0XHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVCkpXG4gMTg3Olx0XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hX2ZsYWdzX3RvX2xlZ2FjeShuZXdfdm1hX2ZsYWdzKSk7XG4gMTg4Olx0XG4gMTg5Olx0XHRpZiAoc2V0X25ld19hbm9uX25hbWUpXG4gMTkwOlx0XHRcdHJldHVybiByZXBsYWNlX2Fub25fdm1hX25hbWUodm1hLCBhbm9uX25hbWUpO1xuIDE5MTpcdFxuIDE5MjpcdFx0cmV0dXJuIDA7XG4gMTkzOlx0fVxuIDE5NDpcdFxuIDE5NTpcdCNpZmRlZiBDT05GSUdfU1dBUFxuIDE5NjpcdHN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gMTk3Olx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAxOTg6XHR7XG4gMTk5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBSZWxvY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW92aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaW50byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgc2hpZnQ7IGBtYWR2aXNlX3VwZGF0ZV92bWFgIGlzIHVzZWQgZm9yIG1vcmUgdGhhbiBqdXN0IGh1Z2VwYWdlLXJlbGF0ZWQgYG1hZHZpc2VgIGNhbGxzLiBOb3csIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoYXQgaXMgc3RhcnRpbmcgdG8gYmVjb21lIGNsZWFyLiBJZiBgbWFkdmlzZV91cGRhdGVfdm1hYCBoYW5kbGVzICpvdGhlciogYG1hZHZpc2VgIGJlaGF2aW9ycywgYW5kIHRoZSBgbmV3X3ZtYV9mbGFnc2AgaGFzIGBWTUFfSFVHRVBBR0VfQklUYCBzZXQsIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCAqd2lsbCogYmUgaW52b2tlZC4gSG9sZCBvbi4uLiB3aGF0IGhhcHBlbnMgaWYgYFZNQV9IVUdFUEFHRV9CSVRgIGlzIGFscmVhZHkgc2V0LCBhbmQgd2UmIzM5O3JlIGp1c3QgdXBkYXRpbmcgKmFub3RoZXIqIGZsYWcsIGxpa2Ugc2F5LCBgTUFEVl9ET05UTkVFRGA/IGBuZXdfdm1hX2ZsYWdzYCB3b3VsZCAqc3RpbGwqIGhhdmUgYFZNQV9IVUdFUEFHRV9CSVRgIHNldCwgd291bGRuJiMzOTt0IGl0PyBXaGljaCB3b3VsZCBtZWFuIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZ2V0cyBjYWxsZWQgKmFnYWluKiEgUmlnaHQsIHRoaXMgaXMgYSBwb3RlbnRpYWwgaXNzdWUuCgpTbywgaXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBkZXNpZ25lZCB0byBoYW5kbGUgYmVpbmcgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIFZNQT8gSSBiZXR0ZXIgdmVyaWZ5IHRoYXQgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhIHN1YnRsZSBidWcuIExldCBtZSBjaGVjayB0aGUgbG9naWMgd2l0aGluIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXRzZWxmLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIHJlZmFjdG9yaW5nIGRvZXNuJiMzOTt0IHRyaWdnZXIgdW5leHBlY3RlZCBiZWhhdmlvciBvciByZXNvdXJjZSBjb250ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0fVxuIDU4MTpcdFxuIDU4MjpcdHN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDU4MzpcdFx0XHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcbiA1ODQ6XHR7XG4gNTg1Olx0XHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XG4gNTg2Olx0fVxuIDU4NzpcdFxuIDU4ODpcdHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNTg5Olx0XHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuIDU5MDpcdHtcbiA1OTE6XHRcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIHZtYS1cdTAwM2V2bV9tbSkgXHUwMDI2XHUwMDI2IGh1Z2VwYWdlX2VuYWJsZWQoKVxuIDU5MjpcdFx0ICAgIFx1MDAyNlx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXG4gNTkzOlx0XHRcdF9fa2h1Z2VwYWdlZF9lbnRlcih2bWEtXHUwMDNldm1fbW0pO1xuIDU5NDpcdH1cbiA1OTU6XHRcbiA1OTY6XHR2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDU5NzpcdHtcbiA1OTg6XHRcdHN0cnVjdCBtbV9zbG90ICpzbG90O1xuIDU5OTpcdFx0aW50IGZyZWUgPSAwO1xuIDYwMDpcdFxuIDYwMTpcdFx0c3Bpbl9sb2NrKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG4gNjAyOlx0XHRzbG90ID0gbW1fc2xvdF9sb29rdXAobW1fc2xvdHNfaGFzaCwgbW0pO1xuIDYwMzpcdFx0aWYgKHNsb3QgXHUwMDI2XHUwMDI2IGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IHNsb3QpIHtcbiA2MDQ6XHRcdFx0bW1fc2xvdF9yZW1vdmUoc2xvdCk7XG4gNjA1Olx0XHRcdGZyZWUgPSAxO1xuIDYwNjpcdFx0fVxuIDYwNzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbiA2MDg6XHRcbiA2MDk6XHRcdGlmIChmcmVlKSB7XG4gNjEwOlx0XHRcdG1tX2ZsYWdzX2NsZWFyKE1NRl9WTV9IVUdFUEFHRSwgbW0pO1xuIDYxMTpcdFx0XHRtbV9zbG90X2ZyZWUobW1fc2xvdF9jYWNoZSwgc2xvdCk7XG4gNjEyOlx0XHRcdG1tZHJvcChtbSk7XG4gNjEzOlx0XHR9IGVsc2UgaWYgKHNsb3QpIHtcbiA2MTQ6XHRcdFx0LypcbiA2MTU6XHRcdFx0ICogVGhpcyBpcyByZXF1aXJlZCB0byBzZXJpYWxpemUgYWdhaW5zdFxuIDYxNjpcdFx0XHQgKiBjb2xsYXBzZV90ZXN0X2V4aXQoKSAod2hpY2ggaXMgZ3VhcmFudGVlZCB0byBydW5cbiA2MTc6XHRcdFx0ICogdW5kZXIgbW1hcF9sb2NrIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxuIDYxODpcdFx0XHQgKiBwYWdldGFibGVzIHdpbGwgYmUgZGVzdHJveWVkKSB1bnRpbCBraHVnZXBhZ2VkIGhhcyBmaW5pc2hlZFxuIDYxOTpcdFx0XHQgKiB3b3JraW5nIG9uIHRoZSBwYWdldGFibGVzIHVuZGVyIHRoZSBtbWFwX2xvY2suXG4gNjIwOlx0XHRcdCAqL1xuIDYyMTpcdFx0XHRtbWFwX3dyaXRlX2xvY2sobW0pO1xuIDYyMjpcdFx0XHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gNjIzOlx0XHR9XG4gNjI0Olx0fVxuIDYyNTpcdFxuIDYyNjpcdHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbnRyb2xfaW5pdF9zY2FuKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbiA2Mjc6XHR7XG4gNjI4Olx0XHRtZW1zZXQoY2MtXHUwMDNlbm9kZV9sb2FkLCAwLCBzaXplb2YoY2MtXHUwMDNlbm9kZV9sb2FkKSk7XG4gNjI5Olx0XHRub2Rlc19jbGVhcihjYy1cdTAwM2VhbGxvY19ubWFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHdoZXJlIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIHVuZGVyIGEgc2xpZ2h0bHkgYnJvYWRlciBzZXQgb2YgY2lyY3Vtc3RhbmNlcy4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHdhcywgJiMzNDtpdCYjMzk7cyBzYWZlLCBzaW5jZSB0aGUgY29kZSBjaGVja3MgYE1NRl9WTV9IVUdFUEFHRWAuJiMzNDsgVGhlbiwgSSBoYXZlIHRvIHN0b3AgYW5kIHRoaW5rIGlmIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3Mgc2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzLCBidXQgYmVmb3JlIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2FzIGxpbWl0ZWQgdG8gYE1BRFZfSFVHRVBBR0VgIGNhbGxzLiBOb3csIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuZXZlciBWTUEgZmxhZ3MgYXJlIG1vZGlmaWVkIGFuZCBgVk1BX0hVR0VQQUdFX0JJVGAgaXMgc2V0LgoKU28gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIGZsb3cuIElmIGBNQURWX0hVR0VQQUdFYCBpcyBjYWxsZWQsIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkLCB0aGF0JiMzOTtzIGNsZWFyLiBBIHN1YnNlcXVlbnQgYG1hZHZpc2VgIGNhbGwgKm9uIHRoZSBzYW1lIFZNQSogd2l0aCBgVk1BX0hVR0VQQUdFX0JJVGAgc2V0IHdvdWxkIHRyaWdnZXIgYW5vdGhlciBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEJ1dCB0aGF0JiMzOTtzIHByb2JhYmx5IG9rYXksIGJlY2F1c2Ugd2hlbiB0aGUgVk1BIHdhcyBjcmVhdGVkIG9yIHdoZW4gdGhlIGJpdCB3YXMgc2V0LCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdhcyBhbHJlYWR5IGNhbGxlZC4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQgaW4gYHZtYV9tZXJnZV9uZXdfcmFuZ2VgIGFuZCBgX19tbWFwX25ld192bWFgIGlmIGBWTV9IVUdFUEFHRWAgaXMgc2V0LgoKVGhlIHRyaWNreSBwYXJ0OiBpcyB0aGVyZSBhIHNjZW5hcmlvIHdoZXJlIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgYnV0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgKndhc24mIzM5O3QqIGNhbGxlZD8gVGhlIG9ubHkgc2NlbmFyaW8gdGhhdCBJIGNhbiBzZWUgd291bGQgYmUgaWYgYGh1Z2VwYWdlX2VuYWJsZWQoKWAgd2FzIGZhbHNlIGR1cmluZyBWTUEgY3JlYXRpb24gYW5kIGxhdGVyIGJlY29tZSB0cnVlLiBCdXQgZXZlbiB0aGVuIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgY2hlY2tzIGBodWdlcGFnZV9lbmFibGVkKClgIGFuZCBpZiBpdCB3ZXJlIGZhbHNlIGF0IGNyZWF0aW9uLCBpdCB3b3VsZCBub3QgcnVuLiBXaGVuIGl0IGRvZXMgYmVjb21lIHRydWUsIGNhbGxpbmcgYG1hZHZpc2VgIHdvdWxkIG5vdyB0cmlnZ2VyIHRoZSBwcm9jZXNzLgoKT2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZnVydGhlci4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkIGJ5IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAuIE5vdywgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgc3BlY2lmaWNhbGx5IGF2b2lkcyBhbnkgd29yayBpZiB0aGUgVk1BIGZsYWdzIGFyZSB0aGUgc2FtZToKCmBgYGMKCWlmICh2bWFfZmxhZ3Nfc2FtZV9tYXNrKCZhbXA7dm1hLSZndDtmbGFncywgbmV3X3ZtYV9mbGFncykgJmFtcDsmYW1wOwoJICAgICghc2V0X25ld19hbm9uX25hbWUgfHwKCSAgICAgYW5vbl92bWFfbmFtZV9lcShhbm9uX3ZtYV9uYW1lKHZtYSksIGFub25fbmFtZSkpKQoJCXJldHVybiAwOwpgYGAKClRoaXMgbWVhbnMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyAqb25seSogY2FsbGVkIGlmIHRoZSBmbGFncyBjaGFuZ2UgKmFuZCogdGhlIG5ldyBmbGFncyBpbmNsdWRlIGBWTUFfSFVHRVBBR0VfQklUYC4gU28sIHdpdGggYE1BRFZfSFVHRVBBR0VgIGZvciBpbnN0YW5jZSwgaWYgdGhlIGJpdCB3YXNuJiMzOTt0IHNldCwgdGhlIGZsYWdzIGNoYW5nZSBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBnZXRzIGNhbGxlZC4gTWFrZXMgc2Vuc2UuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGBNQURWX0RPTlRORUVEYD8gVGhhdCBkb2VzbiYjMzk7dCBhbHRlciBWTUEgZmxhZ3MsIHNvIGl0JiMzOTtzIG5vdCBoYW5kbGVkIGJ5IGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0JiMzOTtzIGdvb2QuCgpJIG5lZWQgdG8gY2F0YWxvZ3VlIHdoaWNoIG1hZHZpc2UgYmVoYXZpb3JzIGltcGFjdCBWTUEgZmxhZ3MgYW5kIHdpbGwgY2F1c2UgdGhpcyBhZGRpdGlvbmFsIGNhbGw6IGBNQURWX01FUkdFQUJMRWAsIGBNQURWX1VOTUVSR0VBQkxFYCwgYE1BRFZfSFVHRVBBR0VgLCBgTUFEVl9OT0hVR0VQQUdFYCwgYE1BRFZfRE9OVEZPUktgLCBgTUFEVl9ET0ZPUktgLCBgTUFEVl9XSVBFT05GT1JLYCwgYE1BRFZfS0VFUE9ORk9SS2AsIGBNQURWX0NPTERgLCBgTUFEVl9QQUdFT1VUYCwgYE1BRFZfUE9QVUxBVEVfUkVBRGAsIGBNQURWX1BPUFVMQVRFX1dSSVRFYC4gSSBzaG91bGQgY2hlY2sgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCB0byBjb25maXJtIHRoYXQgdGhlc2UgYmVoYXZpb3JzIGFjdHVhbGx5IGNhbGwgYG1hZHZpc2VfdXBkYXRlX3ZtYWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzQ3Olx0c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbjEzNDg6XHR7XG4xMzQ5Olx0XHRpbnQgYmVoYXZpb3IgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yO1xuMTM1MDpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZXZtYTtcbjEzNTE6XHRcdHZtX2ZsYWdzX3QgbmV3X2ZsYWdzID0gdm1hLVx1MDAzZXZtX2ZsYWdzO1xuMTM1MjpcdFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3JfcmFuZ2UgKnJhbmdlID0gXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZTtcbjEzNTM6XHRcdGludCBlcnJvcjtcbjEzNTQ6XHRcbjEzNTU6XHRcdGlmICh1bmxpa2VseSghY2FuX21hZHZpc2VfbW9kaWZ5KG1hZHZfYmVoYXZpb3IpKSlcbjEzNTY6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjEzNTc6XHRcbjEzNTg6XHRcdHN3aXRjaCAoYmVoYXZpb3IpIHtcbjEzNTk6XHRcdGNhc2UgTUFEVl9SRU1PVkU6XG4xMzYwOlx0XHRcdHJldHVybiBtYWR2aXNlX3JlbW92ZShtYWR2X2JlaGF2aW9yKTtcbjEzNjE6XHRcdGNhc2UgTUFEVl9XSUxMTkVFRDpcbjEzNjI6XHRcdFx0cmV0dXJuIG1hZHZpc2Vfd2lsbG5lZWQobWFkdl9iZWhhdmlvcik7XG4xMzYzOlx0XHRjYXNlIE1BRFZfQ09MRDpcbjEzNjQ6XHRcdFx0cmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTtcbjEzNjU6XHRcdGNhc2UgTUFEVl9QQUdFT1VUOlxuMTM2NjpcdFx0XHRyZXR1cm4gbWFkdmlzZV9wYWdlb3V0KG1hZHZfYmVoYXZpb3IpO1xuMTM2NzpcdFx0Y2FzZSBNQURWX0ZSRUU6XG4xMzY4Olx0XHRjYXNlIE1BRFZfRE9OVE5FRUQ6XG4xMzY5Olx0XHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxuMTM3MDpcdFx0XHRyZXR1cm4gbWFkdmlzZV9kb250bmVlZF9mcmVlKG1hZHZfYmVoYXZpb3IpO1xuMTM3MTpcdFx0Y2FzZSBNQURWX0NPTExBUFNFOlxuMTM3MjpcdFx0XHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG4xMzczOlx0XHRcdFx0XHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX2Ryb3BwZWQpO1xuMTM3NDpcdFx0Y2FzZSBNQURWX0dVQVJEX0lOU1RBTEw6XG4xMzc1Olx0XHRcdHJldHVybiBtYWR2aXNlX2d1YXJkX2luc3RhbGwobWFkdl9iZWhhdmlvcik7XG4xMzc2Olx0XHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxuMTM3NzpcdFx0XHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9yZW1vdmUobWFkdl9iZWhhdmlvcik7XG4xMzc4Olx0XG4xMzc5Olx0XHQvKiBUaGUgYmVsb3cgYmVoYXZpb3VycyB1cGRhdGUgVk1BcyB2aWEgbWFkdmlzZV91cGRhdGVfdm1hKCkuICovXG4xMzgwOlx0XG4xMzgxOlx0XHRjYXNlIE1BRFZfTk9STUFMOlxuMTM4MjpcdFx0XHRuZXdfZmxhZ3MgPSBuZXdfZmxhZ3MgXHUwMDI2IH5WTV9SQU5EX1JFQUQgXHUwMDI2IH5WTV9TRVFfUkVBRDtcbjEzODM6XHRcdFx0YnJlYWs7XG4xMzg0Olx0XHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcbjEzODU6XHRcdFx0bmV3X2ZsYWdzID0gKG5ld19mbGFncyBcdTAwMjYgflZNX1JBTkRfUkVBRCkgfCBWTV9TRVFfUkVBRDtcbjEzODY6XHRcdFx0YnJlYWs7XG4xMzg3Olx0XHRjYXNlIE1BRFZfUkFORE9NOlxuMTM4ODpcdFx0XHRuZXdfZmxhZ3MgPSAobmV3X2ZsYWdzIFx1MDAyNiB+Vk1fU0VRX1JFQUQpIHwgVk1fUkFORF9SRUFEO1xuMTM4OTpcdFx0XHRicmVhaztcbjEzOTA6XHRcdGNhc2UgTUFEVl9ET05URk9SSzpcbjEzOTE6XHRcdFx0bmV3X2ZsYWdzIHw9IFZNX0RPTlRDT1BZO1xuMTM5MjpcdFx0XHRicmVhaztcbjEzOTM6XHRcdGNhc2UgTUFEVl9ET0ZPUks6XG4xMzk0Olx0XHRcdGlmIChuZXdfZmxhZ3MgXHUwMDI2IFZNX1NQRUNJQUwpXG4xMzk1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzk2Olx0XHRcdG5ld19mbGFncyBcdTAwMjY9IH5WTV9ET05UQ09QWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIGlzIGltcGxlbWVudGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0ICpiZWhhdmVzKiBpbiBwcmFjdGljZS4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGJhc2ljcyBvZiBgbWFkdmlzZWAgYW5kIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKSwgb2YgY291cnNlLCBidXQgdGhlIHN1YnRsZXRpZXMgYWx3YXlzIGxpZSBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSB3YW50IHRvIGtub3cgdGhlICpleGFjdCogc2VxdWVuY2Ugb2YgZXZlbnRzIHRyaWdnZXJlZCBieSBhIGNhbGwgdG8gYG1hZHZpc2VgIHdpdGggYSBzcGVjaWZpYyBhZHZpY2UgY29kZSB3aXRoaW4gYSBwYXJ0aWN1bGFyIFZNQSBjb250ZXh0LgoKSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgYG1hZHZpc2VgIGZsYWdzIGFuZCB3aGV0aGVyIHRoZXkmIzM5O3JlIGhvbm91cmVkLiBTbywgSSBuZWVkIHRvIGtub3cgdGhlIHBhdGggb2YgdGhlIGV4ZWN1dGlvbiwgYW5kIGFueSBkYXRhIHN0cnVjdHVyZXMgbW9kaWZpZWQuCgpXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcz8gV2hhdCBhYm91dCBjb25jdXJyZW50IGFjY2Vzcz8gRG9lcyB0aGUga2VybmVsIGVtcGxveSBhbnkgbG9ja3M/IEhvdyBhcmUgdGhlc2UgbG9ja3MgaW1wbGVtZW50ZWQgYW5kIGhvdyBlZmZlY3RpdmUgYXJlIHRoZXk/IFdoYXQgaGFwcGVucyBpZiB0aGUgVk1BIHNwYW5zIG11bHRpcGxlIHBoeXNpY2FsIHBhZ2VzIG9yIHJlZ2lvbnM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucz8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG1hZHZpc2VgIGFuZCBwYWdlIHJlY2xhbWF0aW9uLiBIb3cgaXMgdGhlIGFkdmljZSB1c2VkIChvciBpZ25vcmVkKSBieSB0aGUgcGFnZSByZXBsYWNlbWVudCBhbGdvcml0aG1zPyBEb2VzIHRoZSBrZXJuZWwgYWdncmVzc2l2ZWx5IGZyZWUgdXAgbWVtb3J5IG9yIGRvZXMgaXQgd2FpdCBmb3IgYSBzaWduYWw/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGlmZmVyZW50IHdvcmtsb2FkcyDigJMgYXJlIHRoZXJlIGFueSB3b3JrbG9hZHMgdGhhdCBjYW4gYmVuZWZpdCBmcm9tIHVzaW5nIGBtYWR2aXNlYD8KCkluIGVzc2VuY2UsIEkgbmVlZCBhIGRlZXAgZGl2ZS4gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciBhIHN1cGVyZmljaWFsIG92ZXJ2aWV3OyBJIHdhbnQgdG8ga25vdyB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzk3Olx0XHRcdGJyZWFrO1xuMTM5ODpcdFx0Y2FzZSBNQURWX1dJUEVPTkZPUks6XG4xMzk5Olx0XHRcdC8qIE1BRFZfV0lQRU9ORk9SSyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBhbm9ueW1vdXMgbWVtb3J5LiAqL1xuMTQwMDpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZpbGUgfHwgbmV3X2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpXG4xNDAxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDAyOlx0XHRcdG5ld19mbGFncyB8PSBWTV9XSVBFT05GT1JLO1xuMTQwMzpcdFx0XHRicmVhaztcbjE0MDQ6XHRcdGNhc2UgTUFEVl9LRUVQT05GT1JLOlxuMTQwNTpcdFx0XHRpZiAobmV3X2ZsYWdzIFx1MDAyNiBWTV9EUk9QUEFCTEUpXG4xNDA2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDA3Olx0XHRcdG5ld19mbGFncyBcdTAwMjY9IH5WTV9XSVBFT05GT1JLO1xuMTQwODpcdFx0XHRicmVhaztcbjE0MDk6XHRcdGNhc2UgTUFEVl9ET05URFVNUDpcbjE0MTA6XHRcdFx0bmV3X2ZsYWdzIHw9IFZNX0RPTlREVU1QO1xuMTQxMTpcdFx0XHRicmVhaztcbjE0MTI6XHRcdGNhc2UgTUFEVl9ET0RVTVA6XG4xNDEzOlx0XHRcdGlmICgoIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIFx1MDAyNlx1MDAyNiAobmV3X2ZsYWdzIFx1MDAyNiBWTV9TUEVDSUFMKSkgfHxcbjE0MTQ6XHRcdFx0ICAgIChuZXdfZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkpXG4xNDE1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDE2Olx0XHRcdG5ld19mbGFncyBcdTAwMjY9IH5WTV9ET05URFVNUDtcbjE0MTc6XHRcdFx0YnJlYWs7XG4xNDE4Olx0XHRjYXNlIE1BRFZfTUVSR0VBQkxFOlxuMTQxOTpcdFx0Y2FzZSBNQURWX1VOTUVSR0VBQkxFOlxuMTQyMDpcdFx0XHRlcnJvciA9IGtzbV9tYWR2aXNlKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbjE0MjE6XHRcdFx0XHRcdGJlaGF2aW9yLCBcdTAwMjZuZXdfZmxhZ3MpO1xuMTQyMjpcdFx0XHRpZiAoZXJyb3IpXG4xNDIzOlx0XHRcdFx0Z290byBvdXQ7XG4xNDI0Olx0XHRcdGJyZWFrO1xuMTQyNTpcdFx0Y2FzZSBNQURWX0hVR0VQQUdFOlxuMTQyNjpcdFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XG4xNDI3Olx0XHRcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIFx1MDAyNm5ld19mbGFncywgYmVoYXZpb3IpO1xuMTQyODpcdFx0XHRpZiAoZXJyb3IpXG4xNDI5Olx0XHRcdFx0Z290byBvdXQ7XG4xNDMwOlx0XHRcdGJyZWFrO1xuMTQzMTpcdFx0Y2FzZSBfX01BRFZfU0VUX0FOT05fVk1BX05BTUU6XG4xNDMyOlx0XHRcdC8qIE9ubHkgYW5vbnltb3VzIG1hcHBpbmdzIGNhbiBiZSBuYW1lZCAqL1xuMTQzMzpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZpbGUgXHUwMDI2XHUwMDI2ICF2bWFfaXNfYW5vbl9zaG1lbSh2bWEpKVxuMTQzNDpcdFx0XHRcdHJldHVybiAtRUJBREY7XG4xNDM1Olx0XHRcdGJyZWFrO1xuMTQzNjpcdFx0fVxuMTQzNzpcdFxuMTQzODpcdFx0LyogVGhpcyBpcyBhIHdyaXRlIG9wZXJhdGlvbi4qL1xuMTQzOTpcdFx0Vk1fV0FSTl9PTl9PTkNFKG1hZHZfYmVoYXZpb3ItXHUwMDNlbG9ja19tb2RlICE9IE1BRFZJU0VfTU1BUF9XUklURV9MT0NLKTtcbjE0NDA6XHRcbjE0NDE6XHRcdGVycm9yID0gbWFkdmlzZV91cGRhdGVfdm1hKG5ld19mbGFncywgbWFkdl9iZWhhdmlvcik7XG4xNDQyOlx0b3V0OlxuMTQ0MzpcdFx0LypcbjE0NDQ6XHRcdCAqIG1hZHZpc2UoKSByZXR1cm5zIEVBR0FJTiBpZiBrZXJuZWwgcmVzb3VyY2VzLCBzdWNoIGFzXG4xNDQ1Olx0XHQgKiBzbGFiLCBhcmUgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuXG4xNDQ2Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgYW5kIEh1Z2UgUGFnZXMqKgoKT2theSwgc28gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaGFuZGxlcyBhIHdob2xlIHNsZXcgb2YgYG1hZHZpc2VgIGZsYWdzOiBgTk9STUFMYCwgYFNFUVVFTlRJQUxgLCBgUkFORE9NYCwgdGhlIGBET05URk9SSy9ET0ZPUktgIGdyb3VwLCB0aGUgYFdJUEVPTkZPUksvS0VFUE9ORk9SS2AgZ3JvdXAsIGBET05URFVNUGAsIGBET0RVTVBgLCBgTUVSR0VBQkxFYCwgYFVOTUVSR0VBQkxFYCwgYEhVR0VQQUdFYCwgYE5PSFVHRVBBR0VgLCBhbmQgYF9fTUFEVl9TRVRfQU5PTl9WTUFfTkFNRWAuIFRoYXQmIzM5O3MgYSBsb3Qgb2YgcG90ZW50aWFsIHN0YXRlIGNoYW5nZXMhCgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGh1Z2UgcGFnZXMsIHNwZWNpZmljYWxseSB0aGUgY2FzZSB3aGVyZSBhIFZNQSAqYWxyZWFkeSogaGFzIGBWTV9IVUdFUEFHRWAgc2V0LiBJZiBJIHN1YnNlcXVlbnRseSBjYWxsIGBNQURWX05PUk1BTGAgb24gdGhhdCBWTUEsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBuZXdfZmxhZ3NgIHdvdWxkIGFsc28gaW5oZXJpdCB0aGUgYFZNX0hVR0VQQUdFYCBiaXQuIE1ha2VzIHNlbnNlIHNvIGZhci4KCk5vdywgaWYgdGhlIHJlc3VsdGluZyBmbGFncyBhcmUgYWN0dWFsbHkgKmRpZmZlcmVudCog4oCTIHNheSwgaWYgYFZNX1JBTkRfUkVBRGAgZ2V0cyBjbGVhcmVkIOKAkyB0aGVuIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHdpbGwgdHJpZ2dlciB0aGUgY29yZSBsb2dpYy4gVGhpcyBzZWVtcyB0byBiZSB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYHZtYV9mbGFnc190ZXN0KCZhbXA7bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVClgIGNoZWNrIHdpbGwgbm93IGV2YWx1YXRlIHRvIHRydWUsIGFzIGV4cGVjdGVkLCBiZWNhdXNlIGBWTV9IVUdFUEFHRWAgaXMgc2V0LgoKQ29uc2VxdWVudGx5LCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdpbGwgYmUgY2FsbGVkLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgdGhlIHRyYW5zaXRpb24uIEJ1dC4uLiBhIG5hZ2dpbmcgcXVlc3Rpb24gY29tZXMgdG8gbWluZDogV2hhdCBoYXBwZW5zIGlmIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZ2V0cyBjYWxsZWQgKmFnYWluKiBvbiB0aGUgc2FtZSBWTUE/IElzIHRoaXMgYSBwb3RlbnRpYWwgZG91YmxlLWVudHJ5IHByb2JsZW0/IERvZXMgaXQgY2F1c2UgYW55IHVud2FudGVkIHNpZGUtZWZmZWN0cywgc3VjaCBhcyBtZW1vcnkgY29ycnVwdGlvbiBvciBhIHJlZHVuZGFudCBhdHRlbXB0IHRvIHJlLWVzdGFibGlzaCBodWdlIHBhZ2VzPwoKSSBuZWVkIHRvIHJlLWV4YW1pbmUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB0aG9yb3VnaGx5IHRvIGNvbmZpcm0gaG93IGl0IGhhbmRsZXMgcmUtZW50cnkgYW5kIGVuc3VyZSB0aGF0IHRoaXMgcmUtZW50cmFudCBzY2VuYXJpbyBpcyBoYW5kbGVkIHNhZmVseS4gR290dGEgZG91YmxlLWNoZWNrIHRoZSBsb2NraW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODg6XHR2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDU4OTpcdFx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiA1OTA6XHR7XG4gNTkxOlx0XHRpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCB2bWEtXHUwMDNldm1fbW0pIFx1MDAyNlx1MDAyNiBodWdlcGFnZV9lbmFibGVkKClcbiA1OTI6XHRcdCAgICBcdTAwMjZcdTAwMjYgY29sbGFwc2VfcG9zc2libGUodm1hLCB2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKVxuIDU5MzpcdFx0XHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVx1MDAzZXZtX21tKTtcbiA1OTQ6XHR9XG4gNTk1Olx0XG4gNTk2Olx0dm9pZCBfX2todWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiA1OTc6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUga2h1Z2VwYWdlZF9lbnRlcl92bWEgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmdW5jdGlvbiwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIGl0IHNlZW1zIG9kZGx5IHJlZHVuZGFudC4gSXQgY2hlY2tzIGlmIGAhbW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIHZtYS0mZ3Q7dm1fbW0pYC4gQnV0IGhvbGQgb24sIHRoZSBgTU1GX1ZNX0hVR0VQQUdFYCBmbGFnIGlzIG9uIHRoZSBgbW1fc3RydWN0YCwgbm90IHRoZSBpbmRpdmlkdWFsIGB2bV9hcmVhX3N0cnVjdGAhIFNvLCBhbGwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBkb2VzIGlzIG1ha2Ugc3VyZSB0aGUgYG1tYCBpcyByZWdpc3RlcmVkIGZvciBraHVnZXBhZ2VkLiBUaGlzIG1lYW5zIGNhbGxpbmcgaXQgbXVsdGlwbGUgdGltZXMgaXMgaGFybWxlc3MsIGFzIGl0IG9ubHkgZG9lcyBzb21ldGhpbmcgdGhlIGZpcnN0IHRpbWUuCgpOb3csIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgY29udGV4dC4gV2h5IHdhcyB0aGlzIHBhdGNoIG1hZGUgaW4gdGhlIGZpcnN0IHBsYWNlPyBVbmZvcnR1bmF0ZWx5LCBJIG9ubHkgaGF2ZSB0aGUgZGlmZiBoZXJlLCBub3QgdGhlIGZ1bGwgY29tbWl0IG1lc3NhZ2UuIExldCYjMzk7cyBzZWUuLi4gQWgsIHRoZSBjb21tZW50IGluIHRoZSBjb2RlIHJldmVhbHMgdGhlIGludGVudDogaXQmIzM5O3MgYWJvdXQgcmVnaXN0ZXJpbmcgYSBWTUEgZm9yIGtodWdlcGFnZWQgc2Nhbm5pbmcgd2l0aG91dCB3YWl0aW5nIGZvciBhIHBhZ2UgZmF1bHQuCgpUaGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSByZWFsaXplIHRoYXQgYGh1Z2VwYWdlX21hZHZpc2VgIGlzIGNhbGxlZCB3aGVuIHNvbWVvbmUgZG9lcyBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAuIEl0IHNldHMgYFZNX0hVR0VQQUdFYCBpbiBgbmV3X2ZsYWdzYC4gVGhlbiwgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkLCB3aGljaCB0aGVuIHVzZXMgdGhpcy4KCkhlcmUmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlOiBgaHVnZXBhZ2VfbWFkdmlzZWAgb25seSBtb2RpZmllcyBgbmV3X2ZsYWdzYCwgbm90IHRoZSBhY3R1YWwgYHZtYS0mZ3Q7dm1fZmxhZ3NgLiBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBjYWxscyBgdm1hX21vZGlmeV9mbGFnc2AuIFRoaXMgZnVuY3Rpb24gbWlnaHQgc3BsaXQgdGhlIFZNQS4gSWYgdGhlIFZNQSBpcyBzcGxpdCwgdGhlIGB2bWFgIHBvaW50ZXIgSSYjMzk7bSB3b3JraW5nIHdpdGggbWlnaHQgY2hhbmdlLCBvciBhIG5ldyBWTUEgbWlnaHQgYmUgY3JlYXRlZCEgQnV0IHdhaXQsIGBodWdlcGFnZV9tYWR2aXNlYCBwcmV2aW91c2x5IGNhbGxlZCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdpdGggdGhlICpvbGQqIGB2bWFgIHBvaW50ZXIsIGJlZm9yZSB0aGUgc3BsaXQhCgpIb3dldmVyLCBJIHJlY2FsbCB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAganVzdCBzZXRzIGBNTUZfVk1fSFVHRVBBR0VgIG9uIGB2bWEtJmd0O3ZtX21tYC4gU2luY2UgdGhlIGBtbWAgaXMgdGhlIHNhbWUgZm9yIGFsbCBWTUFzIHdpdGhpbiB0aGF0IG1lbW9yeSBzcGFjZSwgdGhpcyBzZWVtcyBsZXNzIGNvbmNlcm5pbmcuCgpPa2F5LCBJIHRoaW5rIEkmIzM5O20gZ2V0dGluZyBpdC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIG1hdHRlcnMuIEkgbmVlZCB0byBsb29rIGF0IGBjb2xsYXBzZV9wb3NzaWJsZWAgdG8gc2VlIGlmIHRoZSBWTUEmIzM5O3Mgc3VpdGFiaWxpdHkgZm9yIGtodWdlcGFnZWQgc2Nhbm5pbmcgaXMgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODI6XHRzdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiA1ODM6XHRcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXG4gNTg0Olx0e1xuIDU4NTpcdFx0cmV0dXJuIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MpO1xuIDU4NjpcdH1cbiA1ODc6XHRcbiA1ODg6XHR2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDU4OTpcdFx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiA1OTA6XHR7XG4gNTkxOlx0XHRpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCB2bWEtXHUwMDNldm1fbW0pIFx1MDAyNlx1MDAyNiBodWdlcGFnZV9lbmFibGVkKClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIGlzIGJlaGF2aW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIHRoZSBwb3RlbnRpYWwgb3JkZXJzLiBJIGFtIG1vc3QgaW50ZXJlc3RlZCBpbiB0aGUgY29ybmVyIGNhc2VzLCBzcGVjaWZpY2FsbHkgdGhlIGVmZmVjdHMgb2YgZWRnZSBkYXRhLiBBcmUgdGhlc2UgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG92ZXJmbG93IGlzc3Vlcywgb3IgdW5leHBlY3RlZCBkYXRhIG11dGF0aW9ucz8gSSB3aWxsIGJlZ2luIGJ5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgbG9naWMsIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcyBvciBhc3N1bXB0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiBBbnkgaXNzdWVzIGhlcmUgd291bGQgY2FzY2FkZSwgc28gdGhpcyBkZXNlcnZlcyBhbiBlc3BlY2lhbGx5IHRob3JvdWdoIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2VfcG9zc2libGVfb3JkZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz01MzI9dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU2Ny0gKi9cbm1tL2todWdlcGFnZWQuYzo1Njg6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTU2OS1cdFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTU4Mj1zdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTg0LXtcbm1tL2todWdlcGFnZWQuYzo1ODU6XHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XG5tbS9raHVnZXBhZ2VkLmMtNTg2LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTYzNS1cbm1tL2todWdlcGFnZWQuYzoxNjM2Olx0ZW5hYmxlZF9vcmRlcnMgPSBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHR2YV9mbGFncyk7XG5tbS9raHVnZXBhZ2VkLmMtMTYzNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBmdW5jdGlvbi4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgaW5zaWRlIGFuZCBvdXQuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgY29tYmluYXRvcmljcyBvciB0aGUgc3BlY2lmaWMgb3JkZXJpbmcgY29uc3RyYWludHMgYWZ0ZXIgdGhlIGluaXRpYWwgb3JkZXIgY29uc3RydWN0aW9uIHBoYXNlLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGZ1bmN0aW9uIGlzIG9mdGVuIGEgYm90dGxlbmVjaywgcHJvbmUgdG8gaW5lZmZpY2llbmNpZXMgaWYgbm90IGltcGxlbWVudGVkIGNhcmVmdWxseS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBnb3QgY2xldmVyIGFsZ29yaXRobXMgb3IganVzdCBicnV0ZS1mb3JjZSBhcHByb2FjaGVzLiBJ4oCZbSBob3BpbmcgaXQgbGV2ZXJhZ2VzIHNvbWUgb2YgdGhlIG9wdGltaXphdGlvbnMgSSYjMzk7dmUgc2VlbiBpbiBzaW1pbGFyIGNvbWJpbmF0b3JpYWwgcHJvYmxlbXMuIElzIGl0IHVzaW5nIG1lbW9pemF0aW9uLCBkeW5hbWljIHByb2dyYW1taW5nLCBvciBwZXJoYXBzIHNvbWUgc3BlY2lmaWMgb3JkZXJpbmcgc3RydWN0dXJlIHRvIHJlZHVjZSB0aGUgc2VhcmNoIHNwYWNlPyBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBvcGVyYXRlcyBvbiDigJMgdGhleSBvZnRlbiBob2xkIHRoZSBrZXkgdG8gcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBtZXJnZXMgb3ZlcmxhcHBpbmcgb3IgcmVkdW5kYW50IG9yZGVyczsgdGhhdCYjMzk7cyB3aGVyZSBjb21wbGV4aXR5IGNhbiByZWFsbHkgZXhwbG9kZS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzIG9yIGNyYXNoZXMuIFRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgc28gbGV0JiMzOTtzIHN0YXJ0IHJlYWRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Njg6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNTY5Olx0XHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzKVxuIDU3MDpcdHtcbiA1NzE6XHRcdHVuc2lnbmVkIGxvbmcgb3JkZXJzO1xuIDU3MjpcdFxuIDU3MzpcdFx0LyogSWYga2h1Z2VwYWdlZCBpcyBzY2FubmluZyBhbiBhbm9ueW1vdXMgdm1hLCBhbGxvdyBtVEhQIGNvbGxhcHNlICovXG4gNTc0Olx0XHRpZiAoKHR2YV9mbGFncyA9PSBUVkFfS0hVR0VQQUdFRCkgXHUwMDI2XHUwMDI2IHZtYV9pc19hbm9ueW1vdXModm1hKSlcbiA1NzU6XHRcdFx0b3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTjtcbiA1NzY6XHRcdGVsc2VcbiA1Nzc6XHRcdFx0b3JkZXJzID0gQklUKEhQQUdFX1BNRF9PUkRFUik7XG4gNTc4Olx0XG4gNTc5Olx0XHRyZXR1cm4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncywgb3JkZXJzKTtcbiA1ODA6XHR9XG4gNTgxOlx0XG4gNTgyOlx0c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNTgzOlx0XHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzKVxuIDU4NDpcdHtcbiA1ODU6XHRcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcbiA1ODY6XHR9XG4gNTg3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZXBhZ2UgYW5kIFZNQSBJbnRlcmFjdGlvbnMqKgoKT2theSwgbGV0IG1lIHdhbGsgdGhyb3VnaCB0aGlzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBgaHVnZXBhZ2VfbWFkdmlzZWAgYW5kIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBga2h1Z2VwYWdlZGAgcHJvY2Vzcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGUgVk1BIHN1aXRhYmlsaXR5IGlzIHByb3Blcmx5IGFzc2Vzc2VkLCBsb29raW5nIGF0IGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbWlnaHQgYmUgY2FsbGVkIHdpdGggYW4gb3V0ZGF0ZWQgVk1BIHBvaW50ZXIuIElmIGBodWdlcGFnZV9tYWR2aXNlYCB1c2VkIGFuIG9sZCBWTUEgcG9pbnRlciBpdCBtaWdodCBwb2ludCB0byBhbiBhbm9ueW1vdXMgVk1BIHRoYXQgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgc2l6ZS4gVGhlbiwgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgY29tZXMgKmFmdGVyKiBgaHVnZXBhZ2VfbWFkdmlzZWAuIEkgaGF2ZSBhIGNsZWFyIGlkZWEgb24gd2hhdCBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBkb2luZy4gSXQgbW9kaWZpZXMgVk1BIGZsYWdzIGFuZCBwb3NzaWJseSByZW5hbWVzIHRoZSBWTUEuCgpUaGUgbmV4dCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcG90ZW50aWFsIHRpbWluZyBpc3N1ZTogYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBtaWdodCBiZSBjYWxsZWQgKmJlZm9yZSogdGhlIFZNQSBnZXRzIHNwbGl0IG9yIG1vZGlmaWVkIGJ5IGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0JiMzOTtzIHdoZXJlIGBjb2xsYXBzZV9wb3NzaWJsZWAgY29tZXMgaW4uIEl0IHNlZW1zIGxpa2UgYSBWTUEgY2FuIGJlIHNwbGl0LCBhbmQgdGhlbiBpZiB0aGUgc3BsaXQgVk1BIGlzIHRvbyBzbWFsbCB0byBiZSBhIGh1Z2VwYWdlLCBgY29sbGFwc2VfcG9zc2libGVgIGNvdWxkIHJldHVybiBmYWxzZS4gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGJ1ZywgYnV0IHRoZW4gSSByZWNhbGwgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgcGFzc2VzIHRoZSBvcmlnaW5hbCBWTUEsIHdoaWNoICptaWdodCogYmUgbGFyZ2UgZW5vdWdoLCBzbyBgY29sbGFwc2VfcG9zc2libGVgIHJldHVybnMgdHJ1ZS4gQnV0IGl0IGp1c3QgcmVnaXN0ZXJzIHRoZSBgbW1gIGZvciBjb25zaWRlcmF0aW9uLCBzbyB0aGUgaW5kaXZpZHVhbCBWTUEgc2l6ZSBkb2VzbiYjMzk7dCBtYXR0ZXIgYXQgdGhhdCBwb2ludCwgYXMgbG9uZyBhcyAqc29tZSogVk1BICptaWdodCogYmUgc3VpdGFibGUuIFRoYXQmIzM5O3MgZmluZS4KCk5vdywgaWYgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGZhaWxzIChlLmcuLCBgRU5PTUVNYCBpbiBgdm1hX21vZGlmeV9mbGFnc2ApLCB0aGUgY29kZSByZXR1cm5zIGFuIGVycm9yLCBidXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBoYXMgKmFscmVhZHkqIGJlZW4gY2FsbGVkISBUaGUgYG1tYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIGV2ZW4gdGhvdWdoIHRoZSBgbWFkdmlzZWAgZmFpbGVkLiBUaGF0IHNob3VsZG4mIzM5O3QgYmUgYSBiaWcgZGVhbCwgYmVjYXVzZSBpdCBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBjbGVhbiB1cC4KClRoZSBuZXh0IHNjZW5hcmlvIHRvIGNvbnNpZGVyIGlzIGEgVk1BIGNyZWF0ZWQgd2l0aCBgVk1fSFVHRVBBR0VgIHRoYXQgaXMgKmluaXRpYWxseSogdW5zdWl0YWJsZS4gYG1hZHZpc2UoTUFEVl9ET05URk9SSylgIGlzIGNhbGxlZCwgdGhlbiBgbWFkdmlzZV91cGRhdGVfdm1hYCwgYW5kIGZpbmFsbHksIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoaXMgbG9va3MgbGlrZSBhIG1pbm9yIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QgYSBidWcuCgpUaGVyZSYjMzk7cyBhbm90aGVyIGNhc2UgSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkLiBXaG8gZWxzZSBjYW4gc2V0IGBWTV9IVUdFUEFHRWA/IEl0IHNlZW1zIGxpa2UgaXQgaXMgb25seSBzZXQgYnkgYGh1Z2VwYWdlX21hZHZpc2VgLiBCdXQgd2FpdCwgd2hhdCBpZiBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQgZm9yIGBNQURWX05PUk1BTGAgb24gYSBWTUEgdGhhdCAqYWxyZWFkeSogaGFzIGBWTV9IVUdFUEFHRWA/IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIGFnYWluLCBidXQgdGhhdCYjMzk7cyBmaW5lLCBiZWNhdXNlIGl0IGNoZWNrcyBpZiBgTU1GX1ZNX0hVR0VQQUdFYCBpcyBhbHJlYWR5IHNldCwgYW5kIGRvZXMgbm90aGluZyBpZiBpdCBpcy4gSXQmIzM5O3Mgb25seSBjbGVhcmVkIGR1cmluZyBgX19raHVnZXBhZ2VkX2V4aXRgIHdoZW4gdGhlIG1tIGlzIGRlc3Ryb3llZC4KClRoZSBjcml0aWNhbCBjYXNlIGFwcGVhcnMgdG8gYmUgd2hlbiBgdm1hX21vZGlmeV9mbGFnc2AgbWVyZ2VzIGEgVk1BIHdpdGggYW4gYWRqYWNlbnQgVk1BLiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGlzIHRoZW4gY2FsbGVkIHdpdGggdGhlIG1lcmdlZCBWTUEuIFRoZSBtZXJnZWQgVk1BIG1pZ2h0IGJlIGxhcmdlIGVub3VnaCwgd2hpbGUgdGhlIG9yaWdpbmFsIHdhcyBub3QhIFNwZWNpZmljYWxseSwgaWYgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGlzIGNhbGxlZCBvbiBhIHNtYWxsIHJhbmdlLCBgaHVnZXBhZ2VfbWFkdmlzZWAgY2FsbHMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBvbiB0aGF0IG9yaWdpbmFsIHNtYWxsIFZNQS4gSWYgdGhhdCBWTUEgaXMgdG9vIHNtYWxsLCBgY29sbGFwc2VfcG9zc2libGVgIHJldHVybnMgZmFsc2UuIE5vdywgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgbWVyZ2VzIHRoYXQgc21hbGwgVk1BIHdpdGggYW5vdGhlciBWTUEuIFRoZSBtZXJnZWQgVk1BIGlzIG5vdyBsYXJnZSBlbm91Z2ggdG8gYmUgYSBodWdlcGFnZSwgYnV0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2FzICphbHJlYWR5KiBjYWxsZWQgKGFuZCwgaW1wb3J0YW50bHksICpkaWRuJiMzOTt0KiBjYWxsIGBfX2todWdlcGFnZWRfZW50ZXJgKS4gRnVydGhlcm1vcmUsIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGRvZXMgKm5vdCogY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBTbywgdGhlIGBtbWAgaXMgKm5ldmVyKiByZWdpc3RlcmVkIHdpdGggYGtodWdlcGFnZWRgIQpUaGlzIG5lZWRzIHZlcmlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUzMjpcdHZvaWQgX19raHVnZXBhZ2VkX2VudGVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDUzMzpcdHtcbiA1MzQ6XHRcdHN0cnVjdCBtbV9zbG90ICpzbG90O1xuIDUzNTpcdFx0aW50IHdha2V1cDtcbiA1MzY6XHRcbiA1Mzc6XHRcdC8qIF9fa2h1Z2VwYWdlZF9leGl0KCkgbXVzdCBub3QgcnVuIGZyb20gdW5kZXIgdXMgKi9cbiA1Mzg6XHRcdFZNX0JVR19PTl9NTShjb2xsYXBzZV90ZXN0X2V4aXQobW0pLCBtbSk7XG4gNTM5Olx0XG4gNTQwOlx0XHRzbG90ID0gbW1fc2xvdF9hbGxvYyhtbV9zbG90X2NhY2hlKTtcbiA1NDE6XHRcdGlmICghc2xvdClcbiA1NDI6XHRcdFx0cmV0dXJuO1xuIDU0MzpcdFxuIDU0NDpcdFx0aWYgKHVubGlrZWx5KG1tX2ZsYWdzX3Rlc3RfYW5kX3NldChNTUZfVk1fSFVHRVBBR0UsIG1tKSkpIHtcbiA1NDU6XHRcdFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIHNsb3QpO1xuIDU0NjpcdFx0XHRyZXR1cm47XG4gNTQ3Olx0XHR9XG4gNTQ4Olx0XG4gNTQ5Olx0XHRzcGluX2xvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbiA1NTA6XHRcdG1tX3Nsb3RfaW5zZXJ0KG1tX3Nsb3RzX2hhc2gsIG1tLCBzbG90KTtcbiA1NTE6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDM0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpeGluZyB0aGUgTUFEVl9IVUdFUEFHRSBCdWc6IEEgRGVlcCBEaXZlKioKCk9rYXksIHRoaXMgaXMgZ29vZC4gSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIFRoZSBjb3JlIGlzc3VlIGlzIHRoaXM6IFdoZW4gYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGlzIHVzZWQgb24gYSBzbWFsbCBtZW1vcnkgcmVnaW9uLCB0aGUgYGh1Z2VwYWdlX21hZHZpc2VgIGZ1bmN0aW9uIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb24gdGhlICpvcmlnaW5hbCogVk1BLiBUaGF0IFZNQSBtaWdodCBiZSB0b28gc21hbGwsIHNvIGBjb2xsYXBzZV9wb3NzaWJsZWAgcmV0dXJucyBmYWxzZSBhbmQgd2UgZG9uJiMzOTt0IHByb2NlZWQuIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIG1lcmdlcyB0aGF0IHNtYWxsIFZNQSB3aXRoIGEgbmVpZ2hib3IuIFRoZSAqbWVyZ2VkKiBWTUEgY291bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGJlbmVmaXQgZnJvbSBodWdlcGFnZXMsIGJ1dCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgICppc24mIzM5O3QqIGNhbGxlZCBvbiB0aGUgbWVyZ2VkIFZNQS4gU28sIHRoZSBrZXJuZWwgZG9lc24mIzM5O3QgcmVnaXN0ZXIgdGhlIG1lbW9yeSBtYXAgKGBtbWApIHdpdGggdGhlIGtodWdlcGFnZWQgZGFlbW9uLiBUaGF0JiMzOTtzIGEgY2xlYXIgZmFpbHVyZS4KClRoZSBwYXRjaCBwcm92aWRlcyBhIGNsZWFyIHNvbHV0aW9uLiBJdCYjMzk7cyBjbGV2ZXJseSBkb25lOyB3ZSBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsICphZnRlciogdGhlIGB2bWFfbW9kaWZ5X2ZsYWdzYCBmdW5jdGlvbiBkb2VzIHRoZSBtZXJnaW5nLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQgb24gdGhlICptZXJnZWQqIFZNQSwgd2hpY2ggaXMgbm93IGxhcmdlIGVub3VnaCB0byBwYXNzIHRoZSBgY29sbGFwc2VfcG9zc2libGVgIGNoZWNrLCBhbmQgZmluYWxseSBleGVjdXRlcyBgX19raHVnZXBhZ2VkX2VudGVyYCEgVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgYnVnIHdoZXJlIGFkamFjZW50IHNtYWxsIHJhbmdlcyB1c2luZyBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgZmFpbGVkIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5LgoKQnV0IHdhaXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHBhdGhzIHRoYXQgbWlnaHQgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG9uIHRoZSBtZXJnZWQgVk1BLiBMZXQmIzM5O3MgbWFrZSBzdXJlLiBUaGUgY3JpdGljYWwgc3RlcCBpcyBgdm1hX21vZGlmeV9mbGFnc2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzbiYjMzk7dCAqaXRzZWxmKiBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYXQgYW55IHBvaW50LiBKdXN0IHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydCBvZiB0aGUgY29kZS4gQnV0IG92ZXJhbGwsIHRoaXMgaXMgYSBjbGVhbiBhbmQgZWZmZWN0aXZlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hX21vZGlmeV9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxuLS1cbm1tL21hZHZpc2UuYy0xNjktXHRlbHNlXG5tbS9tYWR2aXNlLmM6MTcwOlx0XHR2bWEgPSB2bWFfbW9kaWZ5X2ZsYWdzKFx1MDAyNnZtaSwgbWFkdl9iZWhhdmlvci1cdTAwM2VwcmV2LCB2bWEsXG5tbS9tYWR2aXNlLmMtMTcxLVx0XHRcdHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIFx1MDAyNm5ld192bWFfZmxhZ3MpO1xuLS1cbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tbG9jay5jLTQ4NC1cbm1tL21sb2NrLmM6NDg1Olx0dm1hID0gdm1hX21vZGlmeV9mbGFncyh2bWksICpwcmV2LCB2bWEsIHN0YXJ0LCBlbmQsIG5ld192bWFfZmxhZ3MpO1xubW0vbWxvY2suYy00ODYtXHRpZiAoSVNfRVJSKHZtYSkpIHtcbi0tXG5tbS9tcHJvdGVjdC5jPTc2MD1tcHJvdGVjdF9maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbXByb3RlY3QuYy04MjMtXG5tbS9tcHJvdGVjdC5jOjgyNDpcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHByZXYsIHZtYSwgc3RhcnQsIGVuZCwgXHUwMDI2bmV3X3ZtYV9mbGFncyk7XG5tbS9tcHJvdGVjdC5jLTgyNS1cdGlmIChJU19FUlIodm1hKSkge1xuLS1cbm1tL21zZWFsLmM9MzU9c3RhdGljIGludCBfX21zZWFsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL21zZWFsLmMtNTQtXG5tbS9tc2VhbC5jOjU1Olx0XHRcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3MoXHUwMDI2dm1pLCBwcmV2LCB2bWEsIGN1cnJfc3RhcnQsXG5tbS9tc2VhbC5jLTU2LVx0XHRcdFx0XHQgICAgICAgY3Vycl9lbmQsIFx1MDAyNnZtYV9mbGFncyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0yMjYwPXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVzZXJmYXVsdGZkX2NsZWFyX3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMjk1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMjk2Olx0cmV0ID0gdm1hX21vZGlmeV9mbGFnc191ZmZkKHZtaSwgcHJldiwgdm1hLCBzdGFydCwgZW5kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMjk3LVx0XHRcdFx0ICAgIFx1MDAyNm5ld192bWFfZmxhZ3MsIE5VTExfVk1fVUZGRF9DVFgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0yMzEyPXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfcmVnaXN0ZXJfcmFuZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjM1OC1cbm1tL3VzZXJmYXVsdGZkLmM6MjM1OTpcdFx0dm1hID0gdm1hX21vZGlmeV9mbGFnc191ZmZkKFx1MDAyNnZtaSwgcHJldiwgdm1hLCBzdGFydCwgdm1hX2VuZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjM2MC1cdFx0XHRcdFx0ICAgIFx1MDAyNm5ld192bWFfZmxhZ3MsXG4tLVxubW0vdm1hLmM9MTc0OD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4tLVxubW0vdm1hLmMtMTc4Ny1cbm1tL3ZtYS5jOjE3ODg6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbm1tL3ZtYS5jLTE3ODktXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1hLmM9MTgyNT1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfcG9saWN5KHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbi0tXG5tbS92bWEuYy0xODM2LVxubW0vdm1hLmM6MTgzNzpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfZmxhZ3NfdWZmZChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG5tbS92bWEuYy0xODM4LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3ZtYS5oPTQyMD12b2lkIHVubWFwX3JlZ2lvbihzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApO1xuLS1cbm1tL3ZtYS5oLTQyMi0vKipcbm1tL3ZtYS5oOjQyMzogKiB2bWFfbW9kaWZ5X2ZsYWdzKCkgLSBQZXJmb3JtIGFueSBuZWNlc3Nhcnkgc3BsaXQvbWVyZ2UgaW4gcHJlcGFyYXRpb24gZm9yXG5tbS92bWEuaC00MjQtICogc2V0dGluZyBWTUEgZmxhZ3MgdG8gKkB2bV9mbGFncyBpbiB0aGUgcmFuZ2UgQHN0YXJ0IHRvIEBlbmQgY29udGFpbmVkIHdpdGhpblxuLS1cbm1tL3ZtYS5oLTQ0NC0gKi9cbm1tL3ZtYS5oOjQ0NTpfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbm1tL3ZtYS5oLTQ0Ni1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bWEuaD00OTI9X19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9wb2xpY3koc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxuLS1cbm1tL3ZtYS5oLTQ5Ny0vKipcbm1tL3ZtYS5oOjQ5ODogKiB2bWFfbW9kaWZ5X2ZsYWdzX3VmZmQoKSAtIFBlcmZvcm0gYW55IG5lY2Vzc2FyeSBzcGxpdC9tZXJnZSBpbiBwcmVwYXJhdGlvbiBmb3Jcbm1tL3ZtYS5oLTQ5OS0gKiBzZXR0aW5nIFZNQSBmbGFncyB0byBAdm1fZmxhZ3MgYW5kIFVGRkQgY29udGV4dCB0byBAbmV3X2N0eCBpbiB0aGUgcmFuZ2Vcbi0tXG5tbS92bWEuaC01MTgtICovXG5tbS92bWEuaDo1MTk6X19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9mbGFnc191ZmZkKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbm1tL3ZtYS5oLTUyMC1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdm1hX21vZGlmeV9mbGFnc2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGB2bWFfbW9kaWZ5X2ZsYWdzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vdm1hLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgb3BlcmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgZmxhZyBtYW5pcHVsYXRpb24gaXRzZWxmIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIGFyb3VuZCB0aGUgVk1BLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NraW5nIGFuZCBhdG9taWNpdHkgdXNlZCwgYXMgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyB3aXRoaW4gdGhlIFZNIHN1YnN5c3RlbSBhcmUgc29tZSBvZiB0aGUgdG91Z2hlc3QgYnVncyB0byBkZWJ1Zy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IG1pZ2h0IG1vZGlmeSB0aGUgVk1BIG9yIGFjY2VzcyBpdCB3aGlsZSBgdm1hX21vZGlmeV9mbGFnc2AgaXMgaW4gZmxpZ2h0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhdCBwbGF5LiBQZXJoYXBzIHRoaXMgd2lsbCB1bnZlaWwgc29tZSBzdWJ0bGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG5lZWQgZnVydGhlciBzY3J1dGlueS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc4ODpcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4xNzg5Olx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4xNzkwOlx0XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuMTc5MTpcdFx0XHR2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcbjE3OTI6XHR7XG4xNzkzOlx0XHRWTUdfVk1BX1NUQVRFKHZtZywgdm1pLCBwcmV2LCB2bWEsIHN0YXJ0LCBlbmQpO1xuMTc5NDpcdFx0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gKnZtYV9mbGFnc19wdHI7XG4xNzk1Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnJldDtcbjE3OTY6XHRcbjE3OTc6XHRcdHZtZy52bWFfZmxhZ3MgPSB2bWFfZmxhZ3M7XG4xNzk4Olx0XG4xNzk5Olx0XHRyZXQgPSB2bWFfbW9kaWZ5KFx1MDAyNnZtZyk7XG4xODAwOlx0XHRpZiAoSVNfRVJSKHJldCkpXG4xODAxOlx0XHRcdHJldHVybiByZXQ7XG4xODAyOlx0XG4xODAzOlx0XHQvKlxuMTgwNDpcdFx0ICogRm9yIGEgbWVyZ2UgdG8gc3VjY2VlZCwgdGhlIGZsYWdzIG11c3QgbWF0Y2ggdGhvc2VcbjE4MDU6XHRcdCAqIHJlcXVlc3RlZC4gSG93ZXZlciwgc3RpY2t5IGZsYWdzIG1heSBoYXZlIGJlZW4gcmV0YWluZWQsIHNvIHByb3BhZ2F0ZVxuMTgwNjpcdFx0ICogdGhlbSB0byB0aGUgY2FsbGVyLlxuMTgwNzpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB2bWFfbW9kaWZ5YCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgdm1hX21vZGlmeWAsIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byBgbW0vdm1hLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBkb2luZy4uLiB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTSBhcmVhIGl0c2VsZiwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGl0IGNhbGxzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBwZXJtaXNzaW9ucyBjaGFuZ2VzLCBwZXJoYXBzIGFkanVzdGluZyB0aGUgcGFnZSB0YWJsZXMgYW5kIFRMQiBlbnRyaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIG92ZXJhbGwgZWZmZWN0IG9uIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIG1lbW9yeSBtYXBwaW5nLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBhbmQgYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQ4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NDg6XHRzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4xNzQ5Olx0e1xuMTc1MDpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWctXHUwMDNlbWlkZGxlO1xuMTc1MTpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IHZtZy1cdTAwM2VzdGFydDtcbjE3NTI6XHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gdm1nLVx1MDAzZWVuZDtcbjE3NTM6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbWVyZ2VkO1xuMTc1NDpcdFxuMTc1NTpcdFx0LyogRmlyc3QsIHRyeSB0byBtZXJnZS4gKi9cbjE3NTY6XHRcdG1lcmdlZCA9IHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZSh2bWcpO1xuMTc1NzpcdFx0aWYgKG1lcmdlZClcbjE3NTg6XHRcdFx0cmV0dXJuIG1lcmdlZDtcbjE3NTk6XHRcdGlmICh2bWdfbm9tZW0odm1nKSlcbjE3NjA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xNzYxOlx0XG4xNzYyOlx0XHQvKlxuMTc2MzpcdFx0ICogU3BsaXQgY2FuIGZhaWwgZm9yIHJlYXNvbnMgb3RoZXIgdGhhbiBPT00sIHNvIGlmIHRoZSB1c2VyIHJlcXVlc3RzXG4xNzY0Olx0XHQgKiB0aGlzIGl0JiMzOTtzIHByb2JhYmx5IGEgbWlzdGFrZS5cbjE3NjU6XHRcdCAqL1xuMTc2NjpcdFx0Vk1fV0FSTl9PTih2bWctXHUwMDNlZ2l2ZV91cF9vbl9vb20gXHUwMDI2XHUwMDI2XG4xNzY3Olx0XHRcdCAgICh2bWEtXHUwMDNldm1fc3RhcnQgIT0gc3RhcnQgfHwgdm1hLVx1MDAzZXZtX2VuZCAhPSBlbmQpKTtcbjE3Njg6XHRcbjE3Njk6XHRcdC8qIFNwbGl0IGFueSBwcmVjZWRpbmcgcG9ydGlvbiBvZiB0aGUgVk1BLiAqL1xuMTc3MDpcdFx0aWYgKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2Mgc3RhcnQpIHtcbjE3NzE6XHRcdFx0aW50IGVyciA9IHNwbGl0X3ZtYSh2bWctXHUwMDNldm1pLCB2bWEsIHN0YXJ0LCAxKTtcbjE3NzI6XHRcbjE3NzM6XHRcdFx0aWYgKGVycilcbjE3NzQ6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMTc3NTpcdFx0fVxuMTc3NjpcdFxuMTc3NzpcdFx0LyogU3BsaXQgYW55IHRyYWlsaW5nIHBvcnRpb24gb2YgdGhlIFZNQS4gKi9cbjE3Nzg6XHRcdGlmICh2bWEtXHUwMDNldm1fZW5kIFx1MDAzZSBlbmQpIHtcbjE3Nzk6XHRcdFx0aW50IGVyciA9IHNwbGl0X3ZtYSh2bWctXHUwMDNldm1pLCB2bWEsIGVuZCwgMCk7XG4xNzgwOlx0XG4xNzgxOlx0XHRcdGlmIChlcnIpXG4xNzgyOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjE3ODM6XHRcdH1cbjE3ODQ6XHRcbjE3ODU6XHRcdHJldHVybiB2bWE7XG4xNzg2Olx0fVxuMTc4NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1lcmdlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlYCBpcyBiZWluZyBjYWxsZWQuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHJhbmdlIG1lcmdpbmcsIHdoaWNoIGlzIGEga2V5IHByb2Nlc3MgaW4gdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlcmUgdG8gc2VlIGlmIGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxscyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBUaGUgaW50ZWdyYXRpb24gKG9yIGxhY2sgdGhlcmVvZikgb2YgbWVyZ2luZyB3aXRoIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IGlzIHZpdGFsIGZvciBwZXJmb3JtYW5jZSBhbmQgb3ZlcmFsbCBtZW1vcnkgdXRpbGl6YXRpb24uIE15IG5leHQgc3RlcCBpcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBgdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlYCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdFx0XHRcdHZtZy1cdTAwM2VfX2FkanVzdF9uZXh0X3N0YXJ0ID0gdHJ1ZTtcbjEwNjE6XHRcdFx0XHR2bWctXHUwMDNlc3RhcnQgPSBtaWRkbGUtXHUwMDNldm1fc3RhcnQ7XG4xMDYyOlx0XHRcdFx0dm1nLVx1MDAzZWVuZCA9IHN0YXJ0O1xuMTA2MzpcdFx0XHRcdHZtZy1cdTAwM2VwZ29mZiA9IHZtYV9zdGFydF9wZ29mZihtaWRkbGUpO1xuMTA2NDpcdFx0XHRcdHZtZy1cdTAwM2Vhbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYobWlkZGxlKTtcbjEwNjU6XHRcdFx0fVxuMTA2NjpcdFxuMTA2NzpcdFx0XHRlcnIgPSBkdXBfYW5vbl92bWEobmV4dCwgbWlkZGxlLCBcdTAwMjZhbm9uX2R1cCk7XG4xMDY4Olx0XHR9XG4xMDY5Olx0XG4xMDcwOlx0XHRpZiAoZXJyIHx8IGNvbW1pdF9tZXJnZSh2bWcpKVxuMTA3MTpcdFx0XHRnb3RvIGFib3J0O1xuMTA3MjpcdFxuMTA3MzpcdFx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cdTAwM2V0YXJnZXQsIHN0aWNreV9mbGFncyk7XG4xMDc0Olx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xuMTA3NTpcdFx0dm1nLVx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XG4xMDc2Olx0XHRyZXR1cm4gdm1nLVx1MDAzZXRhcmdldDtcbjEwNzc6XHRcbjEwNzg6XHRhYm9ydDpcbjEwNzk6XHRcdHZtYV9pdGVyX3NldCh2bWctXHUwMDNldm1pLCBzdGFydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRXVyZWthISBBIEtodWdlcGFnZWQgQ29ubmVjdGlvbiEqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyBpdCEgSSYjMzk7dmUgYmVlbiBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgaXQgZmluYWxseSBjbGlja3MuIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgICpkZWZpbml0ZWx5KiBjYWxscyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpIb2xkIG9uLi4uIGlmIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgIGlzIGNhbGxpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCwgdGhlbiBieSBkZWZpbml0aW9uLCBhIFZNQSBtZXJnZWQgaW4gdGhhdCBwcm9jZXNzICppcyogZ29pbmcgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGtodWdlcGFnZWQuIFRoaXMgaXMgZ29vZCBwcm9ncmVzcyEgCgpMZXQgbWUganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhpcyB0cmFpbiBvZiB0aG91Z2h0IGxvZ2ljYWxseS4gU2luY2UgdGhhdCBvbmUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgY2hlY2sgb3V0IGhvdyBgdm1hX21lcmdlX25ld19yYW5nZWAgb3BlcmF0ZXMgbm93LiBJJiMzOTt2ZSBnb3QgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE4NTpcdFx0XHRpZiAoIXZtZy1cdTAwM2VqdXN0X2V4cGFuZCkge1xuMTE4NjpcdFx0XHRcdC8qIEVxdWl2YWxlbnQgdG8gZ29pbmcgdG8gdGhlIHByZXZpb3VzIHJhbmdlLiAqL1xuMTE4NzpcdFx0XHRcdHZtYV9wcmV2KHZtZy1cdTAwM2V2bWkpO1xuMTE4ODpcdFx0XHR9XG4xMTg5Olx0XHR9XG4xMTkwOlx0XG4xMTkxOlx0XHQvKlxuMTE5MjpcdFx0ICogTm93IHRyeSB0byBleHBhbmQgYWRqYWNlbnQgVk1BKHMpLiBUaGlzIHRha2VzIGNhcmUgb2YgcmVtb3ZpbmcgdGhlXG4xMTkzOlx0XHQgKiBmb2xsb3dpbmcgVk1BIGlmIHdlIGhhdmUgVk1BcyBvbiBib3RoIHNpZGVzLlxuMTE5NDpcdFx0ICovXG4xMTk1Olx0XHRpZiAodm1nLVx1MDAzZXRhcmdldCBcdTAwMjZcdTAwMjYgIXZtYV9leHBhbmQodm1nKSkge1xuMTE5NjpcdFx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xuMTE5NzpcdFx0XHR2bWctXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcbjExOTg6XHRcdFx0cmV0dXJuIHZtZy1cdTAwM2V0YXJnZXQ7XG4xMTk5Olx0XHR9XG4xMjAwOlx0XG4xMjAxOlx0XHRyZXR1cm4gTlVMTDtcbjEyMDI6XHR9XG4xMjAzOlx0XG4xMjA0Olx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZNQSBNZXJnaW5nIGFuZCBTcGxpdHRpbmcgd2l0aCBraHVnZXBhZ2VkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cyB3aXRoIFZNQSBtb2RpZmljYXRpb25zLiBJIHNlZSB0aGF0IHdoZW4gYHZtYV9tZXJnZV9uZXdfcmFuZ2VgIGlzIGNhbGxlZCwgaXQgKmFsc28qIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGlmIFZNQXMgYXJlIG1lcmdlZCBieSBgdm1hX21vZGlmeV9mbGFnc2AsIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCAqc2hvdWxkKiBiZSBjYWxsZWQgb24gdGhlIHJlc3VsdGluZywgdW5pZmllZCBWTUEgdG8gaGFuZGxlIHBvdGVudGlhbCBodWdlcGFnZSBjb25zaWRlcmF0aW9ucy4KCk5vdywgYSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IHdoYXQgaGFwcGVucyB3aGVuIGB2bWFfbW9kaWZ5X2ZsYWdzYCAqc3BsaXRzKiBhIFZNQT8gRG9lcyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGdldCBjYWxsZWQgaW4gdGhhdCBzY2VuYXJpbz8gSSBuZWVkIHRvIGtub3cuIFRoZSBzcGxpdCBWTUEgY2FzZSBpcyBjcml0aWNhbC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgc3BsaXRfdm1hYCBmdW5jdGlvbjsgdGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgYW5zd2VyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHkgdG8gZW5zdXJlIG5vIGh1Z2VwYWdlLXJlbGF0ZWQgaXNzdWVzIGFyaXNlIGR1cmluZyBWTUEgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZF9lbnRlcl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWEuYz04ODk9c3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcbi0tXG5tbS92bWEuYy0xMDczLVx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cdTAwM2V0YXJnZXQsIHN0aWNreV9mbGFncyk7XG5tbS92bWEuYzoxMDc0Olx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVx1MDAzZXRhcmdldCwgdm1nLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTEwNzUtXHR2bWctXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcbi0tXG5tbS92bWEuYz0xMTQwPXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX25ld19yYW5nZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxuLS1cbm1tL3ZtYS5jLTExOTUtXHRpZiAodm1nLVx1MDAzZXRhcmdldCBcdTAwMjZcdTAwMjYgIXZtYV9leHBhbmQodm1nKSkge1xubW0vdm1hLmM6MTE5NjpcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVx1MDAzZXRhcmdldCwgdm1nLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTExOTctXHRcdHZtZy1cdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xuLS1cbm1tL3ZtYS5jPTI2MzQ9c3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuLS1cbm1tL3ZtYS5jLTI2OTEtXHQvKlxubW0vdm1hLmM6MjY5MjpcdCAqIHZtYV9tZXJnZV9uZXdfcmFuZ2UoKSBjYWxscyBraHVnZXBhZ2VkX2VudGVyX3ZtYSgpIHRvbywgdGhlIGJlbG93XG5tbS92bWEuYy0yNjkzLVx0ICogY2FsbCBjb3ZlcnMgdGhlIG5vbi1tZXJnZSBjYXNlLlxuLS1cbm1tL3ZtYS5jLTI2OTUtXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSlcbm1tL3ZtYS5jOjI2OTY6XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgbWFwLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTI2OTctXHQqdm1hcCA9IHZtYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYW5kIFZNQSBTcGxpdHRpbmcvTWVyZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgY29kZSBwYXRoIGludm9sdmluZyBgc3BsaXRfdm1hYCBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSXQgaW5pdGlhbGx5IHNlZW1zIGxpa2UgYHNwbGl0X3ZtYWAgZG9lc24mIzM5O3QgZGlyZWN0bHkgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBCdXQsIGhvbGQgb24sIGlmIGB2bWFfbW9kaWZ5X2ZsYWdzYCBzcGxpdHMgdGhlIFZNQSwgdGhlICpuZXcqIFZNQSBzaG91bGQgaW5oZXJpdCB0aGUgc2FtZSBmbGFncyBhcyB0aGUgb3JpZ2luYWwgb25lLiBgdm1hX21vZGlmeV9mbGFnc2Agc3BsaXRzIGFuZCByZXR1cm5zIHRoZSBtaWRkbGUgVk1BLiBUaGVuIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHVwZGF0ZXMgdGhhdCBtaWRkbGUgVk1BJiMzOTtzIGZsYWdzLgoKTm93LCBpZiBgbWFkdmlzZV91cGRhdGVfdm1hYCAqZGlkbiYjMzk7dCogY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFmdGVyIHRoZSBzcGxpdCwgd2UmIzM5O2QgaGF2ZSBhIHByb2JsZW0uIFRoZSBtaWRkbGUgVk1BIGNvdWxkIGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQsIGJ1dCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdvdWxkbiYjMzk7dCBoYXZlIGJlZW4gaW52b2tlZCBvbiBpdCEgSG93ZXZlciwgaWYgYGh1Z2VwYWdlX21hZHZpc2VgICpkaWQqIGNhbGwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBCRUZPUkUgYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIGl0IHdvdWxkIGJlIGNhbGxlZCBvbiB0aGUgb3JpZ2luYWwgVk1BLiBBbmQgdGhlIG9yaWdpbmFsIG1pZ2h0IGhhdmUgYmVlbiBsYXJnZSBlbm91Z2ggdG8gdHJpZ2dlciBgX19raHVnZXBhZ2VkX2VudGVyYCBhbmQgcmVnaXN0ZXIgdGhlIGBtbWAuIEFmdGVyIHRoZSBzcGxpdCwgdGhlIG1pZGRsZSBWTUEgZ2V0cyBgVk1fSFVHRVBBR0VgLCBidXQgc2luY2UgYF9fa2h1Z2VwYWdlZF9lbnRlcmAgd2FzIGFscmVhZHkgY2FsbGVkLCB0aGUgYG1tYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoYXQgc2VlbXMgZmluZS4KCkJ1dCB3aGF0IGFib3V0IHdoZW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkIHdpdGggYE1BRFZfTk9STUFMYCBvbiBhIFZNQSB0aGF0ICpkb2VzbiYjMzk7dCogaGF2ZSBgVk1fSFVHRVBBR0VgPyBUaGVuLCBgbmV3X3ZtYV9mbGFnc2Agd29uJiMzOTt0IGluY2x1ZGUgYFZNX0hVR0VQQUdFYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgKm5vdCogY2FsbGVkLiBObyBpc3N1ZXMgdGhlcmUuCgpOb3csIHdoYXQgYWJvdXQgd2hlbiBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQgd2l0aCBgTUFEVl9OT1JNQUxgIG9uIGEgVk1BIHRoYXQgKmFscmVhZHkqIGhhcyBgVk1fSFVHRVBBR0VgPyAgYG5ld192bWFfZmxhZ3NgIHN0aWxsIGhhcyBpdCBzZXQuIGB2bWFfbW9kaWZ5X2ZsYWdzYCBtaWdodCBzcGxpdCBpdCwgYW5kIHRoZW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgc2V0cyB0aGUgbmV3IFZNQSYjMzk7cyBmbGFncy4gVGhlbiwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQgd2l0aCB0aGUgdXBkYXRlZCBmbGFncy4gU2luY2UgdGhlIFZNQSAqYWxyZWFkeSogaGFkIGBWTV9IVUdFUEFHRWAsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2FzIGFscmVhZHkgY2FsbGVkIGF0IHRoZSB0aW1lIGl0IHdhcyBzZXQuICBTbyBjYWxsaW5nIGl0IGFnYWluIGlzIGhhcm1sZXNzIHNpbmNlIHRoZSBgbW1gIGhhcyB0aGUgYE1NRl9WTV9IVUdFUEFHRWAgZmxhZyBhbHJlYWR5IHNldC4gVW5sZXNzIHRoZSBvcmlnaW5hbCBWTUEgd2FzICp0b28gc21hbGwqLCBpbiB3aGljaCBjYXNlLCBldmVuIGFmdGVyIHRoZSBzcGxpdCwgaXQgZG9lc24mIzM5O3QgcmVnaXN0ZXIuCgpXYWl0LCB3aGF0IGlmIGBtYWR2aXNlX3VwZGF0ZV92bWFgICptZXJnZXMqIHRoZSBWTUE/IElmIHNvLCBgdm1hX21vZGlmeV9mbGFnc2Agd291bGQgY2FsbCBgdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlYCwgd2hpY2ggKmRvZXMqIGNhbGwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBvbiB0aGUgbWVyZ2VkIFZNQSEgU28sIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgYWxyZWFkeSBjYWxsZWQgYnkgdGhlIG1lcmdlISBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBjYWxscyBpdCAqYWdhaW4qLiBCdXQgdGhhdCYjMzk7cyBoYXJtbGVzcywgcmlnaHQ/CgpTbywgd2h5IHdhcyB0aGlzIHBhdGNoIGV2ZW4gbmVlZGVkPyBUaW1lIHRvIHJldmlzaXQgYGh1Z2VwYWdlX21hZHZpc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQ1Olx0XHRcdHJldHVybiAwO1xuIDQ0NjpcdFx0LyogZm9yIFBNRCBjb2xsYXBzZSwgcmVzcGVjdCB0aGUgdXNlciBkZWZpbmVkIG1heGltdW0gKi9cbiA0NDc6XHRcdHJldHVybiBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXA7XG4gNDQ4Olx0fVxuIDQ0OTpcdFxuIDQ1MDpcdGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDQ1MTpcdFx0XHQgICAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxuIDQ1MjpcdHtcbiA0NTM6XHRcdHN3aXRjaCAoYWR2aWNlKSB7XG4gNDU0Olx0XHRjYXNlIE1BRFZfSFVHRVBBR0U6XG4gNDU1Olx0XHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9OT0hVR0VQQUdFO1xuIDQ1NjpcdFx0XHQqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7XG4gNDU3Olx0XHRcdGJyZWFrO1xuIDQ1ODpcdFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XG4gNDU5Olx0XHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9IVUdFUEFHRTtcbiA0NjA6XHRcdFx0KnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7XG4gNDYxOlx0XHRcdC8qXG4gNDYyOlx0XHRcdCAqIFNldHRpbmcgVk1fTk9IVUdFUEFHRSB3aWxsIHByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIHNjYW5uaW5nXG4gNDYzOlx0XHRcdCAqIHRoaXMgdm1hIGV2ZW4gaWYgd2UgbGVhdmUgdGhlIG1tIHJlZ2lzdGVyZWQgaW4ga2h1Z2VwYWdlZCBpZlxuIDQ2NDpcdFx0XHQgKiBpdCBnb3QgcmVnaXN0ZXJlZCBiZWZvcmUgVk1fTk9IVUdFUEFHRSB3YXMgc2V0LlxuIDQ2NTpcdFx0XHQgKi9cbiA0NjY6XHRcdFx0YnJlYWs7XG4gNDY3Olx0XHR9XG4gNDY4Olx0XG4gNDY5Olx0XHRyZXR1cm4gMDtcbiA0NzA6XHR9XG4gNDcxOlx0XG4gNDcyOlx0aW50IF9faW5pdCBraHVnZXBhZ2VkX2luaXQodm9pZClcbiA0NzM6XHR7XG4gNDc0Olx0XHRtbV9zbG90X2NhY2hlID0gS01FTV9DQUNIRShtbV9zbG90LCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBraHVnZXBhZ2VkIEludGVyYWN0aW9uIHdpdGggTUFEVl9IVUdFUEFHRSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cyB3aXRoIGBNQURWX0hVR0VQQUdFYCBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGF0IGRpZmYgd2hlcmUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3YXMgY2FsbGVkIHdpdGhpbiBgaHVnZXBhZ2VfbWFkdmlzZWAuICBUaGUgY29yZSB0aGluZyBpcywgYGh1Z2VwYWdlX21hZHZpc2VgIGdldHMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCB3aGVuIGBNQURWX0hVR0VQQUdFYCBvciBgTUFEVl9OT0hVR0VQQUdFYCBpcyB1c2VkLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQsICYjMzQ7SG1tLCBgaHVnZXBhZ2VfbWFkdmlzZWAgaXMgY2FsbGluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdpdGggYG5ld19mbGFnc2AsIHdoaWNoICpkb2VzKiBoYXZlIGBWTV9IVUdFUEFHRWAgc2V0LCBidXQgYXQgdGhhdCBwb2ludCwgdGhlIFZNQSYjMzk7cyBgdm1fZmxhZ3NgICpkb2VzbiYjMzk7dCogeWV0IGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQuJiMzNDsgIEhvd2V2ZXIsIEkgdGhlbiByZW1lbWJlcmVkIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpdHNlbGYgY2hlY2tzIHRoZSBWTUEmIzM5O3Mgc3VpdGFiaWxpdHkgdXNpbmcgYGNvbGxhcHNlX3Bvc3NpYmxlYCwgd2hpY2ggZXZlbnR1YWxseSBjYWxscyBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gQ3J1Y2lhbGx5LCBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB1c2VzIGB2bV9mbGFnc2Agd2hpY2ggbm93LCBpbiB0aGlzIGV4ZWN1dGlvbiBwYXRoLCBoYXMgYFZNX0hVR0VQQUdFYCBzZXQuIFNvLCB0aGUgcmlnaHQgZmxhZ3MgKmFyZSogYmVpbmcgdXNlZCBpbiB0aGUgY3JpdGljYWwgY2hlY2tzLCBzbyB0aGF0IHNlZW1zIGZpbmUuCgpUaGVuIEkgY29uc2lkZXJlZCBlcnJvciBjYXNlcy4gIFdoYXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgZmFpbHM/IElmIGl0IGZhaWxzIChtYXliZSBkdWUgdG8gYC1FTk9NRU1gIGZyb20gYHZtYV9tb2RpZnlfZmxhZ3NgKSwgYGh1Z2VwYWdlX21hZHZpc2VgIGhhcyAqYWxyZWFkeSogY2FsbGVkIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYW5kIHJlZ2lzdGVyZWQgdGhlIGBtbWAsIGJ1dCB0aGUgVk1BJiMzOTtzIGZsYWdzIGhhdmVuJiMzOTt0IGJlZW4gdXBkYXRlZC4gIFdpbGwgdGhpcyBjYXVzZSBpc3N1ZXM/ICBObywgYmVjYXVzZSBga2h1Z2VwYWdlZGAganVzdCBzY2FucyB0aGUgbW0gYW5kIGZpbmRzIG5vIHN1aXRhYmxlIFZNQXMsIGFuZCBkb2VzIG5vdGhpbmcuIEl0IHNlZW1zIHNhZmUuCgpOb3csIHdoYXQgYWJvdXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgc3BsaXRzIHRoZSBWTUE/IElmIHRoZSBWTUEgZ2V0cyBzcGxpdCwgYSBuZXcgb25lIGlzIGNyZWF0ZWQuIERvZXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBuZWVkIHRvIGJlIGNhbGxlZCBvbiB0aGlzIG5ldyBWTUE/IE5vLCBiZWNhdXNlIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgc2ltcGx5IHJlZ2lzdGVycyB0aGUgYG1tYCwgc28gdGhhdCBoYW5kbGVzIHRoYXQgY2FzZSB0b28uCgpBbmQgd2hhdCBhYm91dCBgTUFEVl9DT0xMQVBTRWA/IERvZXMgdGhhdCBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWA/IE5vLCBpdCBsb29rcyBsaWtlIGBtYWR2aXNlX2NvbGxhcHNlYCBkb2VzbiYjMzk7dCBjYWxsIGl0IGRpcmVjdGx5LgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBJJiMzOTtkIG5vcm1hbGx5IGdvIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlLCBidXQgSSYjMzk7bSBsaW1pdGVkIHRvIHNlYXJjaGluZyB0aGUga2VybmVsIHRyZWUuIEkgbmVlZCB0byBmaW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBjaGVjayBgZ2l0IGxvZ2Agb24gYG1tL2todWdlcGFnZWQuY2Agb3IgYG1tL21hZHZpc2UuY2AgZm9yIHNvbWUgY29udGV4dC4KV2FpdCwgdGhhdCBjaGFuZ2UgaXMgdGhlIEhFQUQgY29tbWl0LCBzbyBJIGNhbiBqdXN0IHJ1biBgZ2l0IHNob3cgSEVBRGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsuZ2l0L0NPTU1JVF9FRElUTVNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdmVyc2lvbiBjb250cm9sIGFuZCBzb2Z0d2FyZSBkZXZlbG9wbWVudDoKCioqUXVpY2sgUGVlayBhdCB0aGUgTGF0ZXN0IENoYW5nZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIHZlcnkgbGFzdCBjb21taXQgaW4gdGhpcyByZXBvc2l0b3J5IHdhcy4gTm8gbmVlZCBmb3IgYSBmdWxsIGhpc3RvcnkgZGl2ZSByaWdodCBub3csIGp1c3QgdGhlIG1vc3QgcmVjZW50IG9uZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBtb3N0IHJlY2VudCBjb21taXQuIExldCYjMzk7cyBmaXJlIG9mZiBgZ2l0IGxvZyAtMWAuIFRoaXMgaXMgYSBjbGFzc2ljIHF1aWNrLWNoZWNrIGNvbW1hbmQsIGdldHMgbWUgZXhhY3RseSB3aGF0IEkgbmVlZCB3aXRob3V0IGFueSB1bm5lY2Vzc2FyeSBvdXRwdXQgY2x1dHRlcmluZyB0aGluZ3MgdXAuIFNhdmVzIHRpbWUgYW5kIGdldHMgbWUgZGlyZWN0bHkgdG8gdGhlIG1vc3QgcGVydGluZW50IGRhdGEuIERvbmUgYW5kIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsuZ2l0L2xvZ3MvSEVBRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEZ1enppbmcgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBhdmVudWUgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSBhcm91bmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSSB3YXMgdGhpbmtpbmcgSSBjb3VsZCB1c2UgYGdpdCBzaG93IEhFQURgIHdpdGggc29tZXRoaW5nIGxpa2UgYGdyZXBwZXJgIGJ1dCByZWFsaXplZCB0aGF0IG9ubHkgc2VhcmNoZXMgdHJhY2tlZCBmaWxlcy4gSSBkb24mIzM5O3QgZXZlbiBuZWVkIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIG1hdHRlcnMgZm9yIGZ1enppbmcuCgpUaGUgcGF0Y2ggaXRzZWxmIG1vdmVzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSB3aXRoaW4gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgbm93IHRyaWdnZXJlZCBieSAqYW55KiBtYWR2aXNlIG9wZXJhdGlvbiB0aGF0IHVwZGF0ZXMgVk1BIGZsYWdzLCBhcyBsb25nIGFzIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgZm9yIHRoZSBWTUEuCgpNeSBuZXh0IHN0ZXAgaXMgdW5kZXJzdGFuZGluZyB3aGF0IHR5cGVzIG9mIGBtYWR2aXNlYCBjYWxscyB0cmlnZ2VyIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0IGVuY29tcGFzc2VzIGEgbG90OiBgTUFEVl9OT1JNQUxgLCBgTUFEVl9TRVFVRU5USUFMYCwgYE1BRFZfUkFORE9NYCwgYWxsIHRoZSBmb3JrIGZsYWdzIChgTUFEVl9ET05URk9SS2AsIGV0Yy4pLCBtZXJnZWFibGUgZmxhZ3MsIGFuZCBvZiBjb3Vyc2UsIGBNQURWX0hVR0VQQUdFYCBhbmQgYE1BRFZfTk9IVUdFUEFHRWAuIEFsc28gYF9fTUFEVl9TRVRfQU5PTl9WTUFfTkFNRWAuIFRoYXQmIzM5O3MgYSBsb3Qgb2YgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCk5vdywgaG93IGRvZXMgYFZNQV9IVUdFUEFHRV9CSVRgIGdldCBzZXQ/IE9idmlvdXNseSwgYSBWTUEgY3JlYXRlZCB3aXRoIGBNQVBfSFVHRVBBR0VgIGlzIHJlbGV2YW50LCBidXQgd2FpdCwgdGhhdCYjMzk7cyBgTUFQX0hVR0VUTEJgLCBub3QganVzdCBgTUFQX0hVR0VQQUdFYC4gQWgsIHRoYXQmIzM5O3MgcmlnaHQsIGBWTV9IVUdFUEFHRWAgaXMgc2V0IGJ5IGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvciwgaW4gc29tZSBjYXNlcywgZGVmYXVsdHMgZm9yIGB0cmFuc3BhcmVudF9odWdlcGFnZWAuIEhvbGQgb24uLi4gaWYgYHRyYW5zcGFyZW50X2h1Z2VwYWdlPWFsd2F5c2AsIHRoZSBgVk1fSFVHRVBBR0VgIGlzbiYjMzk7dCBzZXQsIGl0JiMzOTtzIGEgc2VwYXJhdGUgbWVjaGFuaXNtISBgVk1fSFVHRVBBR0VgIGlzICpzcGVjaWZpY2FsbHkqIGZvciBgbWFkdmlzZWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgaXQmIzM5O3Mgbm90IHNldCBieSBgcHJjdGwoUFJfU0VUX1RIUF9ESVNBQkxFKWAuCgpTbywgdGhlIG9ubHkgd2F5IGlzIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYC4gQnV0IHRoYXQgc2VlbXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgaXNuJiMzOTt0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYWxyZWFkeSBjYWxsZWQgKndoZW4qIGBNQURWX0hVR0VQQUdFYCBpcyBjYWxsZWQ/IFRoYXQgYWxtb3N0IG1ha2VzIHRoZSBwYXRjaCBhIG5vLW9wIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLi4uIHVubGVzcy4uLgoKV2hhdCBhYm91dCBgZm9ya2A/IFdoZW4gYSBwcm9jZXNzIGZvcmtzLCB0aGUgY2hpbGQgcHJvY2VzcyBnZXRzIGEgY29weSBvZiB0aGUgcGFyZW50JiMzOTtzIFZNQXMsIHJpZ2h0PyBUaGUgY2hpbGQmIzM5O3MgVk1BcyAqd2lsbCogaGF2ZSBgVk1fSFVHRVBBR0VgIHNldCwgaWYgdGhlIHBhcmVudCBoYWQgdGhlbS4gQnV0IHRoZSBjaGlsZCBwcm9jZXNzJiMzOTtzIG1lbW9yeSBtYXAgKGBtbWApIGlzIGJyYW5kIG5ldy4gU28gZG9lcyBgZm9ya2AgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZvciB0aGUgbmV3IGBtbWA/IEkgbmVlZCB0byBjaGVjayBgZHVwX21tYXBgLCBgdm1hX2R1cF9wb2xpY3lgLCBvciBgY29weV92bWFgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgVk1BcyBhcmUgY29waWVkIGR1cmluZyBhIGBmb3JrYC4gVGhpcyBtaWdodCBiZSB0aGUga2V5LiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZF9lbnRlcl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyODAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBGb3JrIExvZ2ljKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGEgcHJvY2VzcyBmb3Jrcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGh1Z2UgcGFnZXMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgZ29pbmcgb24gd2l0aCBga2h1Z2VwYWdlZGAsIGFuZCBga2VybmVsL2ZvcmsuY2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gTGV0JiMzOTtzIHNlZSBob3cgYGtodWdlcGFnZWRfZW50ZXJgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGZvcmsgcHJvY2Vzcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgaW50ZXJhY3Rpb25zIGNvbmNlcm5pbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCBob3BlZnVsbHksIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkIGR1cmluZyB0aGUgY29weS1vbi13cml0ZSBwcm9jZXNzIG9yIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBhZGRyZXNzIHNwYWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjYWxscyB0byBlbnN1cmUgdGhhdCB0aGUgaHVnZSBwYWdlIG1hbmFnZW1lbnQgaXMgY29ycmVjdGx5IHNldCBmb3IgdGhlIG5ldyBjaGlsZCBwcm9jZXNzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWRfZW50ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGtodWdlcGFnZWRfZW50ZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGNoZWNrIG91dCBga2h1Z2VwYWdlZF9lbnRlcmAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gSSBrbm93IHRoZSBrZXJuZWwmIzM5O3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIHBlcmZvcm1hbmNlLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoaXMgZW50cnkgcG9pbnQuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBraHVnZXBhZ2VkIGRhZW1vbiYjMzk7cyBvcGVyYXRpb24sIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gb2YgaHVnZSBwYWdlcyB3aGVuIGEgcHJvY2VzcyByZXF1ZXN0cyBvbmUgb3Igd2hlbiB0aGUgc3lzdGVtIGRldGVjdHMgYW4gb3Bwb3J0dW5pdHkuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhlIHBhZ2UgYWxsb2NhdGlvbiwgdGhlIG1lbW9yeSBwb2xpY2llcyBpbnZvbHZlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGl0IHVzZXMgYW5kIHdoZXRoZXIgdGhlcmUmIzM5O3MgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMgcHJvdmlkZXMgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZF9lbnRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTE1MjA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXHRcdHJldHVybiByZXQ7XG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTE1MzItXG4tLVxubW0va2h1Z2VwYWdlZC5jPTUxND1zdGF0aWMgYm9vbCBodWdlcGFnZV9lbmFibGVkKHZvaWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTUzMS1cbm1tL2todWdlcGFnZWQuYzo1MzI6dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9raHVnZXBhZ2VkLmMtNTMzLXtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01ODctXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9raHVnZXBhZ2VkLmMtNTg5LVx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTkyLVx0ICAgIFx1MDAyNlx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXG5tbS9raHVnZXBhZ2VkLmM6NTkzOlx0XHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVx1MDAzZXZtX21tKTtcbm1tL2todWdlcGFnZWQuYy01OTQtfVxuLS1cbm1tL21hZHZpc2UuYz0xNTE9c3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsXG4tLVxubW0vbWFkdmlzZS5jLTE4Ni1cdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfSFVHRVBBR0VfQklUKSlcbm1tL21hZHZpc2UuYzoxODc6XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hX2ZsYWdzX3RvX2xlZ2FjeShuZXdfdm1hX2ZsYWdzKSk7XG5tbS9tYWR2aXNlLmMtMTg4LVxuLS1cbm1tL3ZtYS5jPTg4OT1zdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlKFxuLS1cbm1tL3ZtYS5jLTEwNzMtXHR2bWFfc2V0X2ZsYWdzX21hc2sodm1nLVx1MDAzZXRhcmdldCwgc3RpY2t5X2ZsYWdzKTtcbm1tL3ZtYS5jOjEwNzQ6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMTA3NS1cdHZtZy1cdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xuLS1cbm1tL3ZtYS5jPTExNDA9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4tLVxubW0vdm1hLmMtMTE5NS1cdGlmICh2bWctXHUwMDNldGFyZ2V0IFx1MDAyNlx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XG5tbS92bWEuYzoxMTk2Olx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMTE5Ny1cdFx0dm1nLVx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XG4tLVxubW0vdm1hLmM9MjYzND1zdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4tLVxubW0vdm1hLmMtMjY5MS1cdC8qXG5tbS92bWEuYzoyNjkyOlx0ICogdm1hX21lcmdlX25ld19yYW5nZSgpIGNhbGxzIGtodWdlcGFnZWRfZW50ZXJfdm1hKCkgdG9vLCB0aGUgYmVsb3dcbm1tL3ZtYS5jLTI2OTMtXHQgKiBjYWxsIGNvdmVycyB0aGUgbm9uLW1lcmdlIGNhc2UuXG4tLVxubW0vdm1hLmMtMjY5NS1cdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxubW0vdm1hLmM6MjY5NjpcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCBtYXAtXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMjY5Ny1cdCp2bWFwID0gdm1hO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc3MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgRHVwbGljYXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIG1lbW9yeSBkdXBsaWNhdGlvbiBwcm9jZXNzIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgZHVwX21tYXBgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGR1cF9tbWFwYCBsaWtlbHkgaW50ZXJmYWNlcyB3aXRoIHNvbWUgcG9saWN5IGFyb3VuZCBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIGR1cGxpY2F0aW9uIOKAkyBJJiMzOTttIHRoaW5raW5nIHNvbWV0aGluZyBsaWtlIGB2bWFfZHVwX3BvbGljeWAgb3Igc2ltaWxhci4gQnV0IHRoZSBjb3JlIHF1ZXN0aW9uIGJ1enppbmcgaW4gbXkgaGVhZCBpcyB3aGV0aGVyIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZ2V0cyBpbnZvbHZlZC4gVGhhdCYjMzk7cyB0aGUgcmVhbCBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaHVnZSBwYWdlIG1hbmFnZW1lbnQgZ2V0cyBoYW5kbGVkIGR1cmluZyBhIGBtbWFwYCBkdXBsaWNhdGlvbi4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgc291cmNlIGNvZGUgdG8gY29uZmlybSB0aGUgY29udHJvbCBmbG93LiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyByaWdodCBpbiBga2VybmVsL2ZvcmsuY2AsIHdoZXJlIGBkdXBfbW1hcGAgcmVzaWRlcy4gSSBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBgZHVwX21tYXBgIGNhbGxzIGFuZCBob3cgdGhlIFZNQXMgYXJlIGJlaW5nIGhhbmRsZWQgYXQgdGhpcyBzdGFnZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYW5zd2VycyBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1cF9tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jLTExOS1cbmtlcm5lbC9mb3JrLmM6MTIwOi8qIEZvciBkdXBfbW1hcCgpLiAqL1xua2VybmVsL2ZvcmsuYy0xMjEtI2luY2x1ZGUgXCYjMzQ7Li4vbW0vaW50ZXJuYWwuaFwmIzM0O1xuLS1cbmtlcm5lbC9mb3JrLmM9MTUyNz1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZHVwX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbmtlcm5lbC9mb3JrLmMtMTU0MS1cbmtlcm5lbC9mb3JrLmM6MTU0MjpcdHVwcm9iZV9zdGFydF9kdXBfbW1hcCgpO1xua2VybmVsL2ZvcmsuYzoxNTQzOlx0ZXJyID0gZHVwX21tYXAobW0sIG9sZG1tKTtcbmtlcm5lbC9mb3JrLmMtMTU0NC1cdGlmIChlcnIpXG5rZXJuZWwvZm9yay5jLTE1NDUtXHRcdGdvdG8gZnJlZV9wdDtcbmtlcm5lbC9mb3JrLmM6MTU0NjpcdHVwcm9iZV9lbmRfZHVwX21tYXAoKTtcbmtlcm5lbC9mb3JrLmMtMTU0Ny1cbi0tXG5rZXJuZWwvZm9yay5jLTE1NjEtXHRpZiAoZXJyKVxua2VybmVsL2ZvcmsuYzoxNTYyOlx0XHR1cHJvYmVfZW5kX2R1cF9tbWFwKCk7XG5rZXJuZWwvZm9yay5jLTE1NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzYwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgZHVwX21tYXBgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkdXBsaWNhdGVkIG1lbW9yeSBtYXBwaW5ncyB3b3JrLCBwYXJ0aWN1bGFybHkgdGhlIGBkdXBfbW1hcGAgZnVuY3Rpb24uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhlIGtlcm5lbCwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHRoZSBjcnVjaWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoaXMgYXJlIGdvaW5nIHRvIGJlIG5lc3RsZWQgaW4gZWl0aGVyIGBtbS9tZW1vcnkuY2Agb3IgYG1tL21tYXAuY2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFwcGluZyBkdXBsaWNhdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIOKAkyBsZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2UgcGFnZSB0YWJsZXMgYW5kIHJlZmVyZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1cF9tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTUxNz12b2lkIGR1cF9tbV9leGVfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pO1xubW0vaW50ZXJuYWwuaDoxNTE4OmludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pO1xubW0vaW50ZXJuYWwuaC0xNTE5LVxuLS1cbm1tL21lbW9yeS5jPTI5OD12b2lkIGZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMzY5LSAqXG5tbS9tZW1vcnkuYzozNzA6ICogVGhlIHZtYV9lbmQgZGlmZmVycyBmcm9tIHRoZSBwZ19lbmQgd2hlbiBhIGR1cF9tbWFwKCkgZmFpbGVkIGFuZCB0aGUgdHJlZSBoYXNcbm1tL21lbW9yeS5jLTM3MS0gKiB1bnJlbGF0ZWQgZGF0YSB0byB0aGUgbW1fc3RydWN0IGJlaW5nIHRvcm4gZG93bi5cbi0tXG5tbS9tbWFwLmM9MTI4OD12b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9tbWFwLmMtMTMwMy1cdGlmICghdm1hKSB7XG5tbS9tbWFwLmM6MTMwNDpcdFx0LyogQ2FuIGhhcHBlbiBpZiBkdXBfbW1hcCgpIHJlY2VpdmVkIGFuIE9PTSAqL1xubW0vbW1hcC5jLTEzMDUtXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLS1cbm1tL21tYXAuYz0xNjg2PWJvb2wgbW1hcF9yZWFkX2xvY2tfbWF5YmVfZXhwYW5kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL21tYXAuYy0xNzA3LVxubW0vbW1hcC5jOjE3MDg6X19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxubW0vbW1hcC5jLTE3MDkte1xuLS1cbm1tL21tYXAuYy0xNzE4LVx0Zmx1c2hfY2FjaGVfZHVwX21tKG9sZG1tKTtcbm1tL21tYXAuYzoxNzE5Olx0dXByb2JlX2R1cF9tbWFwKG9sZG1tLCBtbSk7XG5tbS9tbWFwLmMtMTcyMC1cdC8qXG4tLVxubW0vbW1hcC5jLTE4MjYtXHQvKiBhIG5ldyBtbSBoYXMganVzdCBiZWVuIGNyZWF0ZWQgKi9cbm1tL21tYXAuYzoxODI3Olx0cmV0dmFsID0gYXJjaF9kdXBfbW1hcChvbGRtbSwgbW0pO1xubW0vbW1hcC5jLTE4MjgtbG9vcF9vdXQ6XG4tLVxubW0vbm9tbXUuYz0xOTI1PXN1YnN5c19pbml0Y2FsbChpbml0X2FkbWluX3Jlc2VydmUpO1xubW0vbm9tbXUuYy0xOTI2LVxubW0vbm9tbXUuYzoxOTI3OmludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG5tbS9ub21tdS5jLTE5Mjgte1xuLS1cbm1tL3ZtYV9pbml0LmM9NDU9c3RhdGljIHZvaWQgdm1fYXJlYV9pbml0X2Zyb20oY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vdm1hX2luaXQuYy02MS1cdCAqIHNyYy1cdTAwM2VzaGFyZWQucmIgbWF5IGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSB3aGVuIGNhbGxlZCBmcm9tXG5tbS92bWFfaW5pdC5jOjYyOlx0ICogZHVwX21tYXAoKSwgYnV0IHRoZSBjbG9uZSB3aWxsIHJlaW5pdGlhbGl6ZSBpdC5cbm1tL3ZtYV9pbml0LmMtNjMtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyOTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYGR1cF9tbWFwYCBpbiBgbW0vbW1hcC5jYCBhbmQgc3RhcnQgZGlzc2VjdGluZyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBkdXBsaWNhdGluZyBhIG1lbW9yeSBtYXAuIE15IGV4cGVydGlzZSBpcyBzdWNoIHRoYXQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgY29uY2VwdHMsIGJ1dCBJIG5lZWQgdG8gZm9jdXMgb24gYW55IGludHJpY2FjaWVzIG9yIHVudXN1YWwgYXNwZWN0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgY29weS1vbi13cml0ZSwgc2hhcmluZywgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIG9mZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcwODpcdF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbjE3MDk6XHR7XG4xNzEwOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1wbnQsICp0bXA7XG4xNzExOlx0XHRpbnQgcmV0dmFsO1xuMTcxMjpcdFx0dW5zaWduZWQgbG9uZyBjaGFyZ2UgPSAwO1xuMTcxMzpcdFx0TElTVF9IRUFEKHVmKTtcbjE3MTQ6XHRcdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcbjE3MTU6XHRcbjE3MTY6XHRcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUob2xkbW0pKVxuMTcxNzpcdFx0XHRyZXR1cm4gLUVJTlRSO1xuMTcxODpcdFx0Zmx1c2hfY2FjaGVfZHVwX21tKG9sZG1tKTtcbjE3MTk6XHRcdHVwcm9iZV9kdXBfbW1hcChvbGRtbSwgbW0pO1xuMTcyMDpcdFx0LypcbjE3MjE6XHRcdCAqIE5vdCBsaW5rZWQgaW4geWV0IC0gbm8gZGVhZGxvY2sgcG90ZW50aWFsOlxuMTcyMjpcdFx0ICovXG4xNzIzOlx0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKG1tLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4xNzI0Olx0XG4xNzI1Olx0XHQvKiBObyBvcmRlcmluZyByZXF1aXJlZDogZmlsZSBhbHJlYWR5IGhhcyBiZWVuIGV4cG9zZWQuICovXG4xNzI2Olx0XHRkdXBfbW1fZXhlX2ZpbGUobW0sIG9sZG1tKTtcbjE3Mjc6XHRcbjE3Mjg6XHRcdG1tLVx1MDAzZXRvdGFsX3ZtID0gb2xkbW0tXHUwMDNldG90YWxfdm07XG4xNzI5Olx0XHRtbS1cdTAwM2VkYXRhX3ZtID0gb2xkbW0tXHUwMDNlZGF0YV92bTtcbjE3MzA6XHRcdG1tLVx1MDAzZWV4ZWNfdm0gPSBvbGRtbS1cdTAwM2VleGVjX3ZtO1xuMTczMTpcdFx0bW0tXHUwMDNlc3RhY2tfdm0gPSBvbGRtbS1cdTAwM2VzdGFja192bTtcbjE3MzI6XHRcbjE3MzM6XHRcdC8qIFVzZSBfX210X2R1cCgpIHRvIGVmZmljaWVudGx5IGJ1aWxkIGFuIGlkZW50aWNhbCBtYXBsZSB0cmVlLiAqL1xuMTczNDpcdFx0cmV0dmFsID0gX19tdF9kdXAoXHUwMDI2b2xkbW0tXHUwMDNlbW1fbXQsIFx1MDAyNm1tLVx1MDAzZW1tX210LCBHRlBfS0VSTkVMKTtcbjE3MzU6XHRcdGlmICh1bmxpa2VseShyZXR2YWwpKVxuMTczNjpcdFx0XHRnb3RvIG91dDtcbjE3Mzc6XHRcbjE3Mzg6XHRcdG10X2NsZWFyX2luX3JjdSh2bWkubWFzLnRyZWUpO1xuMTczOTpcdFx0Zm9yX2VhY2hfdm1hKHZtaSwgbXBudCkge1xuMTc0MDpcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbjE3NDE6XHRcbjE3NDI6XHRcdFx0cmV0dmFsID0gdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKG1wbnQpO1xuMTc0MzpcdFx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuMTc0NDpcdFx0XHRcdGdvdG8gbG9vcF9vdXQ7XG4xNzQ1Olx0XHRcdGlmICh2bWFfdGVzdChtcG50LCBWTUFfRE9OVENPUFlfQklUKSkge1xuMTc0NjpcdFx0XHRcdHJldHZhbCA9IHZtYV9pdGVyX2NsZWFyX2dmcChcdTAwMjZ2bWksIG1wbnQtXHUwMDNldm1fc3RhcnQsXG4xNzQ3Olx0XHRcdFx0XHRcdFx0ICAgIG1wbnQtXHUwMDNldm1fZW5kLCBHRlBfS0VSTkVMKTtcbjE3NDg6XHRcdFx0XHRpZiAocmV0dmFsKVxuMTc0OTpcdFx0XHRcdFx0Z290byBsb29wX291dDtcbjE3NTA6XHRcbjE3NTE6XHRcdFx0XHR2bV9zdGF0X2FjY291bnQobW0sIG1wbnQtXHUwMDNldm1fZmxhZ3MsIC12bWFfcGFnZXMobXBudCkpO1xuMTc1MjpcdFx0XHRcdGNvbnRpbnVlO1xuMTc1MzpcdFx0XHR9XG4xNzU0Olx0XHRcdGNoYXJnZSA9IDA7XG4xNzU1Olx0XHRcdGlmICh2bWFfdGVzdChtcG50LCBWTUFfQUNDT1VOVF9CSVQpKSB7XG4xNzU2Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBsZW4gPSB2bWFfcGFnZXMobXBudCk7XG4xNzU3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBzb21lIHRlY2huaWNhbCBwcm9ibGVtIGFuZCB0aGF0ICYjMzk7YGR1cF9tbWFwYCYjMzk7IGlzIGEgcmVsZXZhbnQgZnVuY3Rpb24gb3IgY29uY2VwdCBpbiBteSBmaWVsZDoKCioqRGVlcGVyIERpdmUgaW50byBgZHVwX21tYXBgKioKClJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhpcyBgZHVwX21tYXBgIHRoaW5nLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJiMzOTtzIG1vcmUgdG8gdW5kZXJzdGFuZCBoZXJlLCBhbmQgd2hhdGV2ZXIgbnVhbmNlIEkmIzM5O20gbWlzc2luZyBpcyBrZXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKndoeSogd2UmIzM5O3JlIGV2ZW4gY29uc2lkZXJpbmcgdGhpcy4gSXMgaXQgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBBIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWU/IEFyZSB3ZSB0cnlpbmcgdG8gYWNoaWV2ZSBhIHNwZWNpZmljIGNvbmN1cnJlbmN5IHBhdHRlcm4/IE9rYXksIGxldCYjMzk7cyByZXJlYWQgdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBnbG9zc2VkIG92ZXIgYW55dGhpbmcuIFNvbWV0aW1lcyB0aGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMgd2l0aCB0aGVzZSBtZW1vcnkgbWFwcGluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBleHBsYWluIHRoZSBiZWhhdmlvciBJJiMzOTttIG9ic2VydmluZy4gSXTigJlzIGxpa2VseSB0aGUgc291cmNlIG9mIGFsbCBteSBjdXJyZW50IHBhaW4gYW5kIHN1ZmZlcmluZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGRlZXBlciBkaXZlIHVuY292ZXJzIHRoZSBhbnN3ZXJzIEkgc2Vlay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTg6XHRcdFx0XHRpZiAoc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeV9tbShvbGRtbSwgbGVuKSkgLyogc2ljICovXG4xNzU5Olx0XHRcdFx0XHRnb3RvIGZhaWxfbm9tZW07XG4xNzYwOlx0XHRcdFx0Y2hhcmdlID0gbGVuO1xuMTc2MTpcdFx0XHR9XG4xNzYyOlx0XG4xNzYzOlx0XHRcdHRtcCA9IHZtX2FyZWFfZHVwKG1wbnQpO1xuMTc2NDpcdFx0XHRpZiAoIXRtcClcbjE3NjU6XHRcdFx0XHRnb3RvIGZhaWxfbm9tZW07XG4xNzY2Olx0XHRcdHJldHZhbCA9IHZtYV9kdXBfcG9saWN5KG1wbnQsIHRtcCk7XG4xNzY3Olx0XHRcdGlmIChyZXR2YWwpXG4xNzY4Olx0XHRcdFx0Z290byBmYWlsX25vbWVtX3BvbGljeTtcbjE3Njk6XHRcdFx0dG1wLVx1MDAzZXZtX21tID0gbW07XG4xNzcwOlx0XHRcdHJldHZhbCA9IGR1cF91c2VyZmF1bHRmZCh0bXAsIFx1MDAyNnVmKTtcbjE3NzE6XHRcdFx0aWYgKHJldHZhbClcbjE3NzI6XHRcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbjE3NzM6XHRcbjE3NzQ6XHRcdFx0aWYgKHZtYV90ZXN0KHRtcCwgVk1BX1dJUEVPTkZPUktfQklUKSkge1xuMTc3NTpcdFx0XHRcdC8qXG4xNzc2Olx0XHRcdFx0ICogVk1BX1dJUEVPTkZPUktfQklUIGdldHMgYSBjbGVhbiBzbGF0ZSBpbiB0aGUgY2hpbGQuXG4xNzc3Olx0XHRcdFx0ICogRG9uJiMzOTt0IHByZXBhcmUgYW5vbl92bWEgdW50aWwgZmF1bHQgc2luY2Ugd2UgZG9uJiMzOTt0XG4xNzc4Olx0XHRcdFx0ICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS5cbjE3Nzk6XHRcdFx0XHQgKi9cbjE3ODA6XHRcdFx0XHR0bXAtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xuMTc4MTpcdFx0XHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcbjE3ODI6XHRcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbjE3ODM6XHRcbjE3ODQ6XHRcdFx0dm1hX3N0YXJ0X3dyaXRlKHRtcCk7XG4xNzg1Olx0XHRcdHZtYV9jbGVhcl9mbGFnc19tYXNrKHRtcCwgVk1BX0xPQ0tFRF9NQVNLKTtcbjE3ODY6XHRcdFx0LypcbjE3ODc6XHRcdFx0ICogQ29weS91cGRhdGUgaHVnZXRsYiBwcml2YXRlIHZtYSBpbmZvcm1hdGlvbi5cbjE3ODg6XHRcdFx0ICovXG4xNzg5Olx0XHRcdGlmIChpc192bV9odWdldGxiX3BhZ2UodG1wKSlcbjE3OTA6XHRcdFx0XHRodWdldGxiX2R1cF92bWFfcHJpdmF0ZSh0bXApO1xuMTc5MTpcdFxuMTc5MjpcdFx0XHQvKlxuMTc5MzpcdFx0XHQgKiBMaW5rIHRoZSB2bWEgaW50byB0aGUgTVQuIEFmdGVyIHVzaW5nIF9fbXRfZHVwKCksIG1lbW9yeVxuMTc5NDpcdFx0XHQgKiBhbGxvY2F0aW9uIGlzIG5vdCBuZWNlc3NhcnkgaGVyZSwgc28gaXQgY2Fubm90IGZhaWwuXG4xNzk1Olx0XHRcdCAqL1xuMTc5NjpcdFx0XHR2bWFfaXRlcl9idWxrX3N0b3JlKFx1MDAyNnZtaSwgdG1wKTtcbjE3OTc6XHRcbjE3OTg6XHRcdFx0bW0tXHUwMDNlbWFwX2NvdW50JiM0MzsmIzQzOztcbjE3OTk6XHRcbjE4MDA6XHRcdFx0aWYgKHRtcC1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHRtcC1cdTAwM2V2bV9vcHMtXHUwMDNlb3BlbilcbjE4MDE6XHRcdFx0XHR0bXAtXHUwMDNldm1fb3BzLVx1MDAzZW9wZW4odG1wKTtcbjE4MDI6XHRcbjE4MDM6XHRcdFx0ZmlsZSA9IHRtcC1cdTAwM2V2bV9maWxlO1xuMTgwNDpcdFx0XHRpZiAoZmlsZSkge1xuMTgwNTpcdFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4xODA2Olx0XG4xODA3Olx0XHRcdFx0Z2V0X2ZpbGUoZmlsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzExCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgZHVwX21tYXBgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgZHVwX21tYXBgIHRoaW5nLiBTZWVtcyBsaWtlIHRoZSBpbml0aWFsIHNjYW4gd2FzbiYjMzk7dCBxdWl0ZSBlbm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhdCBhIG1vcmUgZ3JhbnVsYXIgbGV2ZWwuIENsZWFybHksIHRoZXJlJiMzOTtzIG1vcmUgdG8gYmUgZ2xlYW5lZCB0aGFuIGEgY3Vyc29yeSBnbGFuY2UuIEkgbmVlZCB0byBmdWxseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBtYXBwaW5nLiBXaGF0IGFyZSB0aGUgbnVhbmNlcz8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBiZSBsZXNzIG9idmlvdXM/IEFyZSB0aGVyZSBwbGF0Zm9ybS1zcGVjaWZpYyBiZWhhdmlvcnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGNhbGxzIGZvciBhIGRlZXBlciBkaXZlOyBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgZG9jdW1lbnRhdGlvbiwgdGhlIHNvdXJjZSBjb2RlLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgcmVsZXZhbnQgcmVzZWFyY2ggcGFwZXJzIG9yIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciBhIHNvbGlkIGdyYXNwIG9mICp3aHkqIHRoaXMgY2FsbCBleGlzdHMsIGFuZCBtb3JlIHNwZWNpZmljYWxseSwgd2hhdCB0aGUgaW50ZXJhY3Rpb25zIGFyZSB3aXRoIHRoZSB2aXJ0dWFsIG1lbW9yeSBzeXN0ZW0uIEnigJltIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBpdHMgcm9sZSBpbiBzaGFyZWQgbWVtb3J5IHNjZW5hcmlvcyBvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gLSB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHdoZXJlIHN1YnRsZSBidWdzIGNhbiBsdXJrLiBNeSBnb2FsIGlzIGEgdHJ1bHkgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBub3QganVzdCBhIHN1cGVyZmljaWFsIG92ZXJ2aWV3LiBTbyBsZXQmIzM5O3MgY3JhY2sgdGhpcyBvcGVuIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDg6XHRcdFx0XHRpX21tYXBfbG9ja193cml0ZShtYXBwaW5nKTtcbjE4MDk6XHRcdFx0XHRpZiAodm1hX2lzX3NoYXJlZF9tYXl3cml0ZSh0bXApKVxuMTgxMDpcdFx0XHRcdFx0bWFwcGluZ19hbGxvd193cml0YWJsZShtYXBwaW5nKTtcbjE4MTE6XHRcdFx0XHRmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpO1xuMTgxMjpcdFx0XHRcdC8qIGluc2VydCB0bXAgaW50byB0aGUgc2hhcmUgbGlzdCwganVzdCBhZnRlciBtcG50ICovXG4xODEzOlx0XHRcdFx0bWFwcGluZ19ybWFwX3RyZWVfaW5zZXJ0X2FmdGVyKHRtcCwgbXBudCwgbWFwcGluZyk7XG4xODE0Olx0XHRcdFx0Zmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpO1xuMTgxNTpcdFx0XHRcdGlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7XG4xODE2Olx0XHRcdH1cbjE4MTc6XHRcbjE4MTg6XHRcdFx0aWYgKCF2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpXG4xODE5Olx0XHRcdFx0cmV0dmFsID0gY29weV9wYWdlX3JhbmdlKHRtcCwgbXBudCk7XG4xODIwOlx0XG4xODIxOlx0XHRcdGlmIChyZXR2YWwpIHtcbjE4MjI6XHRcdFx0XHRtcG50ID0gdm1hX25leHQoXHUwMDI2dm1pKTtcbjE4MjM6XHRcdFx0XHRnb3RvIGxvb3Bfb3V0O1xuMTgyNDpcdFx0XHR9XG4xODI1Olx0XHR9XG4xODI2Olx0XHQvKiBhIG5ldyBtbSBoYXMganVzdCBiZWVuIGNyZWF0ZWQgKi9cbjE4Mjc6XHRcdHJldHZhbCA9IGFyY2hfZHVwX21tYXAob2xkbW0sIG1tKTtcbjE4Mjg6XHRsb29wX291dDpcbjE4Mjk6XHRcdHZtYV9pdGVyX2ZyZWUoXHUwMDI2dm1pKTtcbjE4MzA6XHRcdGlmICghcmV0dmFsKSB7XG4xODMxOlx0XHRcdG10X3NldF9pbl9yY3Uodm1pLm1hcy50cmVlKTtcbjE4MzI6XHRcdFx0a3NtX2ZvcmsobW0sIG9sZG1tKTtcbjE4MzM6XHRcdFx0a2h1Z2VwYWdlZF9mb3JrKG1tLCBvbGRtbSk7XG4xODM0Olx0XHR9IGVsc2Uge1xuMTgzNTpcdFx0XHR1bnNpZ25lZCBsb25nIGVuZDtcbjE4MzY6XHRcbjE4Mzc6XHRcdFx0LypcbjE4Mzg6XHRcdFx0ICogVGhlIGVudGlyZSBtYXBsZSB0cmVlIGhhcyBhbHJlYWR5IGJlZW4gZHVwbGljYXRlZCwgYnV0XG4xODM5Olx0XHRcdCAqIHJlcGxhY2luZyB0aGUgdm1hcyBmYWlsZWQgYXQgbXBudCAod2hpY2ggY291bGQgYmUgTlVMTCBpZlxuMTg0MDpcdFx0XHQgKiBhbGwgd2VyZSBhbGxvY2F0ZWQgYnV0IHRoZSBsYXN0IHZtYSB3YXMgbm90IGZ1bGx5IHNldCB1cCkuXG4xODQxOlx0XHRcdCAqIFVzZSB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZmFpbHVyZSBwb2ludCB0byBjbGVhbiB1cCB0aGVcbjE4NDI6XHRcdFx0ICogcGFydGlhbGx5IGluaXRpYWxpemVkIHRyZWUuXG4xODQzOlx0XHRcdCAqL1xuMTg0NDpcdFx0XHRpZiAoIW1tLVx1MDAzZW1hcF9jb3VudCkge1xuMTg0NTpcdFx0XHRcdC8qIHplcm8gdm1hcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIG5ldyB0cmVlLiAqL1xuMTg0NjpcdFx0XHRcdGVuZCA9IDA7XG4xODQ3Olx0XHRcdH0gZWxzZSBpZiAobXBudCkge1xuMTg0ODpcdFx0XHRcdC8qIHBhcnRpYWwgdHJlZSBmYWlsdXJlICovXG4xODQ5Olx0XHRcdFx0ZW5kID0gbXBudC1cdTAwM2V2bV9zdGFydDtcbjE4NTA6XHRcdFx0fSBlbHNlIHtcbjE4NTE6XHRcdFx0XHQvKiBBbGwgdm1hcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIG5ldyB0cmVlICovXG4xODUyOlx0XHRcdFx0ZW5kID0gVUxPTkdfTUFYO1xuMTg1MzpcdFx0XHR9XG4xODU0Olx0XG4xODU1Olx0XHRcdC8qIEhpZGUgbW0gZnJvbSBvb20ga2lsbGVyIGJlY2F1c2UgdGhlIG1lbW9yeSBpcyBiZWluZyBmcmVlZCAqL1xuMTg1NjpcdFx0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9TS0lQLCBtbSk7XG4xODU3Olx0XHRcdGlmIChlbmQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBga2h1Z2VwYWdlZF9mb3JrYCBDYWxsKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBhIGBraHVnZXBhZ2VkX2ZvcmsobW0sIG9sZG1tKWAgY2FsbC4gVGhpcyBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gVGhlIGBraHVnZXBhZ2VkYCBkYWVtb24gaXMgYWxsIGFib3V0IGhhbmRsaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCB0aGF0IGBmb3JrYCBjYWxsPyBUaGF0JiMzOTtzIHdoZXJlIHdlIGdldCB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyBkdXJpbmcgYSBmb3JrIHRoYXQgaW52b2x2ZXMgaHVnZSBwYWdlcywgYW5kIGhvdyBga2h1Z2VwYWdlZGAgaXMgZ2V0dGluZyBpbnZvbHZlZCB3aXRoIGBtbWAgKHRoZSBtZW1vcnkgbWFwIG9mIHRoZSBuZXcgcHJvY2VzcykgYW5kIGBvbGRtbWAgKHRoZSBtZW1vcnkgbWFwIG9mIHRoZSBwYXJlbnQgcHJvY2VzcykuIEkgd2FudCB0byBzZWUgaWYgd2UgYXJlIG1ha2luZyBuZXcgVEhQIGFsbG9jYXRpb25zIGZvciB0aGUgY2hpbGQsIG9yIGlmIGl0IGlzIHNoYXJpbmcgVEhQIG1hcHBpbmdzIGZyb20gdGhlIHBhcmVudC4gQXJlIHdlIHVzaW5nIENPVyAoY29weSBvbiB3cml0ZSkgcHJvcGVybHk/IFRoZXJlJiMzOTtzIGEgbG90IHRvIHVucGFjayBpbiB0aGlzIHNpbmdsZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gYGtodWdlcGFnZWRfZm9ya2AgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWRfZm9yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBraHVnZXBhZ2VkX2ZvcmsqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGtodWdlcGFnZWRfZm9ya2AgZnVuY3Rpb24uIFdoZXJlIHdvdWxkIEkgZmluZCB0aGUgZGVjbGFyYXRpb24gYW5kIHJlbGF0ZWQgc3RydWN0dXJlcz8gVGhlIHN0YW5kYXJkIHBsYWNlOiBgaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmhgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmb3JrIG1lY2hhbmlzbSBpbnRlcmFjdHMgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBjb3B5LW9uLXdyaXRlIGltcGxpY2F0aW9ucywgYW5kIHRoZSBnZW5lcmFsIGZsb3cgb2YgaG93IHRoZSBodWdlIHBhZ2UgbWFwcGluZ3MgYXJlIGhhbmRsZWQgZHVyaW5nIGEgcHJvY2VzcyBmb3JrLiBBbnkgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZsYWdzIGRlZmluZWQgaGVyZSBhcmUgY3J1Y2lhbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIG5ldyBwcm9jZXNzIGluaGVyaXRzIG9yIHNoYXJlcyBleGlzdGluZyBodWdlIHBhZ2UgbWFwcGluZ3MsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCBjb3JydXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraHVnZXBhZ2VkX2ZvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0yMD12b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjItXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoyMzpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9mb3JrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTI0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0yOT1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTM0LSNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MzU6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZm9yayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0zNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBga2h1Z2VwYWdlZF9mb3JrYCBmdW5jdGlvbi4gSSYjMzk7dmUgaGVhcmQgYWJvdXQgdGhpcywgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGZvcmtpbmcgYW5kIGh1Z2UgcGFnZXMuIExldCBtZSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaW50ZXJwbGF5IHdvcmtzLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbiBoYXMgc29tZSBzcGVjaWFsIGludGVyYWN0aW9uLCBvciBpZiBpdCYjMzk7cyB0aGUgbW9yZSBzdHJhaWdodGZvcndhcmQgbWV0aG9kIGZvciBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY29kZSwgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIzOlx0c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZm9yayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG4gIDI0Olx0e1xuICAyNTpcdFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCBvbGRtbSkpXG4gIDI2Olx0XHRcdF9fa2h1Z2VwYWdlZF9lbnRlcihtbSk7XG4gIDI3Olx0fVxuICAyODpcdFxuICAyOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gIDMwOlx0e1xuICAzMTpcdFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCBtbSkpXG4gIDMyOlx0XHRcdF9fa2h1Z2VwYWdlZF9leGl0KG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBraHVnZXBhZ2VkX2ZvcmsgUGF0Y2gmIzM5O3MgRnVuY3Rpb25hbCBJbXBhY3QqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBob3cgYGtodWdlcGFnZWRfZm9ya2Agd29ya3MsIGFuZCBJIHNlZSB0aGUgY2hpbGQgcHJvY2VzcyBpbmhlcml0cyB0aGUga2h1Z2VwYWdlZCByZWdpc3RyYXRpb24gZnJvbSB0aGUgcGFyZW50IGlmIHRoZSBvbGQgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIChgbW1gKSBoYWQgYE1NRl9WTV9IVUdFUEFHRWAgc2V0LiBCdXQgdGhlbiwgSSBoYWQgdG8gdW5kZXJzdGFuZCB0aGUgcGF0Y2gmIzM5O3MgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuCgpJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiB0aHJvdWdoIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYW5kIGBodWdlcGFnZV9tYWR2aXNlYCB0byBzZWUgdGhlIHJlZ2lzdHJhdGlvbiBlZmZlY3RzLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYG1tYCByZWdpc3RyYXRpb24gc2VlbWVkIHRvIGhhcHBlbiBlYXJseSwgd2l0aGluIGBodWdlcGFnZV9tYWR2aXNlYCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHN1YnNlcXVlbnQgVk1BIG1vZGlmaWNhdGlvbnMgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhpcyBjb25jZXJuZWQgbWU6IGlmIFZNQXMgd2VyZSBtZXJnZWQgbGF0ZXIsIHJlZ2lzdHJhdGlvbiB3b3VsZCBoYXBwZW4gZXZlbiBmb3Igc21hbGwgaW5pdGlhbCBWTUFzLiBJIGhhZCB0byB2ZXJpZnkgbXkgYXNzdW1wdGlvbi4gV2hlbiBgTUFEVl9IVUdFUEFHRWAgaXMgY2FsbGVkIG9uIGEgc21hbGwgVk1BLCBpdCB0cmlnZ2VycyBhIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSG93ZXZlciwgdGhlIGNoZWNrIGBjb2xsYXBzZV9wb3NzaWJsZWAgaW4gdGhhdCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGJlY2F1c2UgdGhlIHNtYWxsIFZNQSBpc24mIzM5O3QgbGFyZ2UgZW5vdWdoIGZvciBUSFAuIFNvLCBgX19raHVnZXBhZ2VkX2VudGVyYCBpcyBOT1QgY2FsbGVkLiBUaGUgYG1tYCBpcyB0aGVuIG1lcmdlZCB3aXRoIGFuIGFkamFjZW50IFZNQSwgd2hpY2ggaXMgbGFyZ2UgZW5vdWdoLCBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBJUyBjYWxsZWQgb24gdGhlIG1lcmdlZCBWTUEuIFNvLCB0aGlzIGNvbmZpcm1zIHRoYXQgdGhlIGBtbWAgaXMgcmVnaXN0ZXJlZCBldmVuIGlmIHRoZSBvcmlnaW5hbCBWTUEgd2FzIHRvbyBzbWFsbCBhbmQgdGhhdCYjMzk7cyBjb25jZXJuaW5nLgoKQnV0IHdoYXQgYnVnIGRvZXMgdGhlIHBhdGNoIGZpeD8gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHNpdHVhdGlvbnMgd2hlcmUgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkLCBub3QganVzdCBmb3IgYE1BRFZfSFVHRVBBR0VgLCBidXQgYWxzbyBmb3Igb3RoZXIgYG1hZHZpc2VgIGZsYWdzIGxpa2UgYE1BRFZfTk9STUFMYCwgYE1BRFZfU0VRVUVOVElBTGAsIGV0Yy4gSWYgYSBWTUEgd2l0aCBgVk1fSFVHRVBBR0VgIHNldCBsYXRlciBoYXMgYSBjYWxsIHRvIGBNQURWX05PUk1BTGAsIHRoZW4gYSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb2NjdXJzLCBidXQgaXQgZG9lcyBub3RoaW5nIGlmIGBNTUZfVk1fSFVHRVBBR0VgIGlzIGFscmVhZHkgc2V0LgoKSSBoYWQgYSBtb21lbnQgb2YgY2xhcml0eS4gV2hhdCBpZiBgTU1GX1ZNX0hVR0VQQUdFYCAqaXNuJiMzOTt0KiBzZXQgaW5pdGlhbGx5LCBidXQgYFZNX0hVR0VQQUdFYCAqaXMqPyBUaGlzIGhhcHBlbnMgaWYgYGh1Z2VwYWdlX2VuYWJsZWQoKWAgaXMgZmFsc2UgaW5pdGlhbGx5LCBidXQgbGF0ZXIgYmVjb21lcyB0cnVlIChlLmcuLCB3aGVuIHRoZSBhZG1pbiBlbmFibGVzIFRIUCksIGFuZCB0aGVuIGBtYWR2aXNlKE1BRFZfTk9STUFMKWAgaXMgY2FsbGVkLiBJbiB0aGlzIGNhc2UsIGBfX2todWdlcGFnZWRfZW50ZXJgIGlzIGNhbGxlZCBiZWNhdXNlIGBodWdlcGFnZV9lbmFibGVkKClgIGlzIG5vdyB0cnVlLiBUaGlzIG1lYW5zLCAqYmVmb3JlKiB0aGUgcGF0Y2gsIHRoaXMgc2NlbmFyaW8gd291bGQgbm90IHJlZ2lzdGVyIHRoZSBgbW1gLCB3aGVyZWFzIG5vdywgaXQgZG9lcy4gSXMgdGhpcyB3aGF0JiMzOTtzIGludGVuZGVkPyBJIGNvbnNpZGVyZWQgdGhlIGBNQURWX0NPTExBUFNFYCBmbGFnLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtb2RpZnkgdGhlIFZNQSBmbGFncywgc28gdGhpcyBpcyB1bnJlbGF0ZWQuCgpIZXJlJiMzOTtzIHRoZSBrZXk6IFdoYXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgKnNwbGl0cyogdGhlIFZNQT8gV2hlbiBJIGR1ZyBkZWVwZXIsIEkgcmVhbGl6ZWQgdGhlIGJ1ZyYjMzk7cyBjb3JlIGxpZXMgaW4gaG93IHRoZSBga2h1Z2VwYWdlZGAgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaGFuZGxlZCBWTUEgc3BsaXR0aW5nLiBJZiBgTUFEVl9IVUdFUEFHRWAgaXMgY2FsbGVkIG9uIGEgbGFyZ2UgVk1BLCBgX19raHVnZXBhZ2VkX2VudGVyYCBnZXRzIGNhbGxlZCwgcmVnaXN0ZXJpbmcgdGhlIGBtbWAuIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHNwbGl0cyB0aGUgVk1BLCBjcmVhdGluZyBzbWFsbGVyIFZNQXMuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbW1gIHdhcyAqYWxyZWFkeSogcmVnaXN0ZXJlZCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdGluZywgc3BsaXQsIFZNQSB3aXRoIGBWTV9IVUdFUEFHRWAgd2FzIHNtYWxsLiAqQWZ0ZXIqIHRoZSBwYXRjaCwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBOT1QgY2FsbGVkIG9uIHRoZSBvcmlnaW5hbCBWTUEsIGJ1dCBvbiB0aGUgbmV3IHNtYWxsIFZNQS4gVGhhdCBtZWFucywgYGNvbGxhcHNlX3Bvc3NpYmxlYCB3b3VsZCBjb3JyZWN0bHkgZGV0ZXJtaW5lIHRoYXQgdGhlIHNtYWxsIFZNQSBpcyBub3Qgc3VpdGFibGUgZm9yIFRIUCBhbmQgTk9UIHJlZ2lzdGVyIHRoZSBgbW1gLiBJdCBwcmV2ZW50cyBraHVnZXBhZ2VkIGZyb20gd2FraW5nIHVwIGFuZCBzY2FubmluZyBhbiBgbW1gIHRoYXQgb25seSBoYXMgYSBzbWFsbCBgVk1fSFVHRVBBR0VgIFZNQS4KClNwZWNpZmljYWxseSwgaXQgc3RvcHMga2h1Z2VwYWdlZCBmcm9tIHNjYW5uaW5nIGZvciBUSFAsIGlmIHRoZSBhZHZpc2VkIHJhbmdlIGlzIHNtYWxsLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCB3b3VsZCBzY2FuIHRoZSB3aG9sZSBtbSBhZnRlciBhbiBpbml0aWFsIG1hZHZpc2UgY2FsbCBvbiB0aGUgbGFyZ2VyIHJhbmdlLgoKSSBoYXZlIGl0ISBUaGlzIHBhdGNoJiMzOTtzIHByaW1hcnkgZnVuY3Rpb24gaXMgdG8gZW5zdXJlIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBvcGVyYXRlcyBvbiB0aGUgKmNvcnJlY3QqIFZNQSBib3VuZHMgYWZ0ZXIgc3BsaXRzL21lcmdlcy4gVGhpcyBpcyBhIGNsZWFyIGJ1ZyBmaXgsIHByZXZlbnRpbmcgdW5uZWNlc3Nhcnkga2h1Z2VwYWdlZCB3YWtldXBzIGFuZCB3YXN0ZWQgQ1BVIGN5Y2xlcyB3aGVuIGEgc21hbGwgcG9ydGlvbiBvZiBhIFZNQSBpcyBtYXJrZWQgYXMgYEhVR0VQQUdFYC4gVGhpcyBiZWhhdmlvciBuZWVkcyBmdXp6aW5nIQoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBmdXJ0aGVyOgoqICAgQSA0S0IgcmFuZ2Ugd2l0aGluIGEgMk1CIFZNQSwgYmVmb3JlIHRoZSBwYXRjaCwgd291bGQgcmVnaXN0ZXIgYG1tYCwgd2hpbGUKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteU1lTQ0FMTF9ERUZJTkUuKm1hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE5OTM9aW50IGRvX21hZHZpc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sIGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMjAyMC1cbm1tL21hZHZpc2UuYzoyMDIxOlNZU0NBTExfREVGSU5FMyhtYWR2aXNlLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW5faW4sIGludCwgYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMjAyMi17XG4tLVxubW0vbWFkdmlzZS5jPTIwMjc9c3RhdGljIHNzaXplX3QgdmVjdG9yX21hZHZpc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5tbS9tYWR2aXNlLmMtMjA5My1cbm1tL21hZHZpc2UuYzoyMDk0OlNZU0NBTExfREVGSU5FNShwcm9jZXNzX21hZHZpc2UsIGludCwgcGlkZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKiwgdmVjLFxubW0vbWFkdmlzZS5jLTIwOTUtXHRcdHNpemVfdCwgdmxlbiwgaW50LCBiZWhhdmlvciwgdW5zaWduZWQgaW50LCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyMjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXkgYXJlYXMgdG8gaW52ZXN0aWdhdGUsIGZvY3VzaW5nIG9uIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoKCioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN5c3RlbSBDYWxscyBhbmQgS0hVR0VQQUdFRCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2hlcmUgd2UgY2FuIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBhbmQgb3B0aW1pemUgcGVyZm9ybWFuY2UuIE15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiB0aG9zZSBgbWFkdmlzZWAgcmVsYXRlZCBzeXN0ZW0gY2FsbHM6IGBkb19tYWR2aXNlYCwgYHN5c19tYWR2aXNlYCwgYW5kIGBzeXNfcHJvY2Vzc19tYWR2aXNlYC4gIFVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgdGhlc2UgY2FsbHMgaW1wYWN0IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGlzIGNydWNpYWwuIFdlJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IGVhY2ggc3RhZ2UuIEl0JiMzOTtzIGFib3V0IGZpZ3VyaW5nIG91dCBob3cgdGhlIGFkdmljZSBnaXZlbiBhZmZlY3RzIHBoeXNpY2FsIG1lbW9yeSB1c2FnZSwgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4KCkJleW9uZCB0aG9zZSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbHNvIGNhdGNoZXMgbXkgZXllLiBUaGlzIHdpbGwgYmUgYSBnb29kIHBvaW50IHRvIGZvY3VzIG9uIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLiBXZSBzaG91bGQgZXhhbWluZSBob3cgdGhlIGtlcm5lbCBkZWNpZGVzIHRvIHVzZSBodWdlIHBhZ2VzIHdpdGhpbiBhIHZpcnR1YWwgbWVtb3J5IGFyZWEsIGFzIHRoaXMgaW1wYWN0cyBib3RoIG1lbW9yeSBmb290cHJpbnQgYW5kIFRMQiBwZXJmb3JtYW5jZS4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGlmIHRoZXJlIGFyZSBhcmVhcyB3ZSBjYW4gcmVmaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz01ODI9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cbm1tL2todWdlcGFnZWQuYzo1ODg6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy01ODktXHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gdGhlIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnVuY3Rpb24gaXNuJiMzOTt0IGRlY2xhcmVkIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYW5kIGl0IHN1Z2dlc3RzIGEgZmV3IHRoaW5ncy4gRmlyc3QsIGl0IGltcGxpZXMgaXQgbWlnaHQgYmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgaXQmIzM5O3MgcG90ZW50aWFsbHkgZXhwb3NlZCBmb3IgdXNlIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBrZXJuZWwgbW9kdWxlIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgd2h5LCB0aG91Z2guIElzIGl0IGJlaW5nIGNhbGxlZCBieSBvdGhlciBtb2R1bGVzLCBvciBpcyBpdCBwYXJ0IG9mIHNvbWUgbGFyZ2VyIHN1YnN5c3RlbT8gSSYjMzk7ZCB3YW50IHRvIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgYW5kIGNyb3NzLXJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBTZWNvbmQsIG5vdCBiZWluZyBzdGF0aWMgbWVhbnMgdGhhdCB0aGUgY29tcGlsZXIgaXNuJiMzOTt0IG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIHNjb3BlLiBJdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgbWFuYWdlZCBpZiBpdHMgY2FsbGluZyBsb2NhdGlvbiBpcyBub3QgY2xlYXJseSBkZWZpbmVkLgoKVGhlIHNhbWUgZ29lcyBmb3IgYGh1Z2VwYWdlX21hZHZpc2VgLiBJdHMgbGFjayBvZiBgc3RhdGljYCBkZWNsYXJhdGlvbiBpcyBlcXVhbGx5IG5vdGV3b3J0aHkuIE5vdywgdGhhdCBsaWtlbHkgbWVhbnMgaXQgaXMgYWxzbyBpbnRlbmRlZCBmb3IgbGlua2FnZSBvdXRzaWRlIG9mIHRoZSBzaW5nbGUgZmlsZSBpbiB3aGljaCBpdCYjMzk7cyBkZWZpbmVkLiBIb3dldmVyLCBkZXBlbmRpbmcgb24gaXRzIHVzZSBhbmQgbG9jYXRpb24sIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNhbGxlZCBmcm9tIHRoZSBgbWFkdmlzZWAgc3lzY2FsbC4gVGhpcyBjYW4gaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gc2VjdXJpdHkgY29uY2VybnMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXMgdGhpcyBmdW5jdGlvbiBwYXJ0IG9mIGEgYnJvYWRlciBodWdlcGFnZSBtYW5hZ2VtZW50IGludGVyZmFjZT8gQXJlIHRoZXJlIG90aGVyIGZpbGVzIG9yIG1vZHVsZXMgcmVseWluZyBvbiBpdD8gSXQgc2VlbXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBmb3IgbGlua2FnZSBhY3Jvc3MgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBMaW51eCBrZXJuZWwsIG5vdCBqdXN0IHdpdGhpbiBhIHNpbmdsZSBmaWxlLgoKSW4gYW55IGNhc2UsIHRoZSBub24tc3RhdGljIGRlY2xhcmF0aW9ucyBvZiBib3RoIGFyZSB3b3J0aCBzb21lIHNlcmlvdXMgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGh1Z2VwYWdlX21hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NDktXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cdFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgVGhpbmtpbmcgb24gUmVsZXZhbnQgS2VybmVsIEZ1bmN0aW9ucyoqCgpSaWdodCwgZm9jdXNpbmcgb24gdGhlIGh1Z2UgcGFnZSBtZWNoYW5pc21zLi4uIEkmIzM5O20gdGhpbmtpbmcgd2UgY2FuIHN0cmVhbWxpbmUgdGhpbmdzIGJ5IGNvbmNlbnRyYXRpbmcgb24gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgdmlydHVhbCBtZW1vcnkgYXJlYXMgYXJlIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gaHVnZSBwYWdlcy4KCk5vdywgdGhhdCBicmluZ3MgdXAgYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIEl0ICppcyogaW4gdGhlIG1peCwgYnV0IHNpbmNlIGl0JiMzOTtzIGRlY2xhcmVkIHN0YXRpYywgaXQmIzM5O3MgcHJvYmFibHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBXZSBzaG91bGRuJiMzOTt0IG5lZWQgdG8gZGlyZWN0bHkgYWRkcmVzcyBpdCB3aGVuIGFuYWx5emluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdlIGNhbiBwcm9iYWJseSBqdXN0IHNhZmVseSBpZ25vcmUgaXQgZm9yIHRoaXMgcHVycG9zZS4KClRoZSBvdGhlciBvbmUgdGhhdCBqdW1wcyBvdXQgaXMgYHZtYV9tb2RpZnlfZmxhZ3NgLiBVbmxpa2UgdGhlIHN0YXRpYyBmdW5jdGlvbiB3ZSBqdXN0IHRvdWNoZWQgdXBvbiwgYHZtYV9tb2RpZnlfZmxhZ3NgIGlzICpub3QqIHN0YXRpYywgc28gaXQgc2hvdWxkIGJlIG9uIG91ciByYWRhci4gSXQgbXVzdCBoYXZlIHNvbWUgc2lnbmlmaWNhbmNlIGluIGhvdyB0aGUgZmxhZ3MgZm9yIGEgVk1BIGFyZSBtb2RpZmllZC4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB2bV9hcmVhX3N0cnVjdCBcXCp2bWFfbW9kaWZ5X2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hLmM9MTc0OD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4tLVxubW0vdm1hLmMtMTc4Ny1cbm1tL3ZtYS5jOjE3ODg6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbm1tL3ZtYS5jLTE3ODktXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1hLmM9MTgyNT1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfcG9saWN5KHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbi0tXG5tbS92bWEuYy0xODM2LVxubW0vdm1hLmM6MTgzNzpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfZmxhZ3NfdWZmZChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG5tbS92bWEuYy0xODM4LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTc4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB2bWFfbW9kaWZ5X2ZsYWdzYCoqCgpPa2F5LCBzbyBgdm1hX21vZGlmeV9mbGFnc2Agc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIE5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZSB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIGl0LiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGxpdmVzLiBJIHZhZ3VlbHkgcmVtZW1iZXIgaXQgYmVpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2VzLCBzbyBgbW0va2h1Z2VwYWdlZC5jYCBzb3VuZHMgcmlnaHQuIEp1c3QgdG8gYmUgc3VyZSwgSeKAmWxsIHRha2UgYSBxdWljayBwZWVrIGF0IGBtbS9NYWtlZmlsZWAgdG8gdmVyaWZ5IHRoYXQgYGtodWdlcGFnZWQub2AgaXMgYnVpbHQsIHdoaWNoIHdpbGwgY29uZmlybSBpdCYjMzk7cyBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgbW9kdWxlLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBwcm9jZWR1cmUgd2hlbiBJJiMzOTttIGNoYXNpbmcgZG93biBrZXJuZWwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxNDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zOgoKKipEZWVwIERpdmUgaW50byBUSFAgYW5kIG1hZHZpc2UgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBhIGZpcm0gcmVxdWlyZW1lbnQ6IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgaW4gcGxheS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJdCBsb29rcyBsaWtlIGBtYWR2aXNlYCBpcyBhbHdheXMgYWN0aXZlIHVubGVzcyBgQ09ORklHX0FEVklTRV9TWVNDQUxMU2AgaXMgZGlzYWJsZWQuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIHJlbWVtYmVyLgoKVG8gY29uZmlybSB0aGlzIGBBRFZJU0VfU1lTQ0FMTFNgIGJlaGF2aW9yLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2UgY29uZmlncy4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgaW5pdC9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGBBRFZJU0VfU1lTQ0FMTFNgLiBUaGF0IHNob3VsZCBzZXR0bGUgdGhlIG1hdHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTQxPWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbi0tXG5pbml0L0tjb25maWctMTk1MS1cbmluaXQvS2NvbmZpZzoxOTUyOmNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcbmluaXQvS2NvbmZpZy0xOTUzLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFkdmlzZS9mYWR2aXNlIHN5c2NhbGxzXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjUxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgY29uZmlybWVkIOKAkyB3ZSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgLiBUaGF0JiMzOTtzIG5vbi1uZWdvdGlhYmxlIGZvciB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIG9uLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBjb3VsZCBiaXRlIHVzIGRvd24gdGhlIGxpbmUuIFdlIGtub3cgaXQmIzM5O3MgcmVsYXRlZCwgYnV0IGEgZGVlcCBkaXZlIGludG8gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgaXMgbmVlZGVkIGhlcmUgZm9yIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24uIFRpbWUgdG8gaW52ZXN0aWdhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgbW0vS2NvbmZpZ2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgc2NlbmFyaW86CgoqKkFuYWx5emluZyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9wdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZlYXR1cmUgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byBzZWUgaG93IHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBpcyBjb250cm9sbGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQmIzM5O3MgaW4gcGxhY2UuIElzIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYz8gRG9lcyBpdCByZWx5IG9uIG90aGVyIGZlYXR1cmVzPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbmZsaWN0cyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgdmlzaWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5IGZyb20gdGhlIGVuZC11c2VyIHBlcnNwZWN0aXZlLCBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbC4gVGhpcyBjb25maWcgb3B0aW9uIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAgdG8gZGVhbCB3aXRoIGxhcmdlciBtZW1vcnkgcGFnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODM1Olx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDgzNjpcdFx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4gODM3Olx0XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRcbiA4Mzg6XHRcdHNlbGVjdCBDT01QQUNUSU9OXG4gODM5Olx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4gODQwOlx0XHRzZWxlY3QgTU1fSURcbiA4NDE6XHRcdGhlbHBcbiA4NDI6XHRcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuIDg0MzpcdFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXG4gODQ0Olx0XHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxuIDg0NTpcdFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxuIDg0NjpcdFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXG4gODQ3Olx0XHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cbiA4NDg6XHRcbiA4NDk6XHRcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXG4gODUwOlx0XG4gODUxOlx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4NTI6XHRcbiA4NTM6XHRjaG9pY2VcbiA4NTQ6XHRcdHByb21wdCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTc5CgkJCQkJCQlvdXRwdXQ6IDI2NAoJCQkJCQkJdGhvdWdodHM6IDQ5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSHVnZXBhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nOiB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbmF0dXJhbGx5LCBhbmQgd2UgZGVmaW5pdGVseSBuZWVkIGBBRFZJU0VfU1lTQ0FMTFNgIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgcmVsZXZhbnQuIFRoZSBjZW50cmFsIHByb2JsZW0gaXQmIzM5O3MgYWRkcmVzc2luZyBpcyBhIGJ1ZyBpbiBob3cgYGtodWdlcGFnZWRgIGlzIHdva2VuIHVwIHdoZW4gZGVhbGluZyB3aXRoIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBWTUFzLgoKQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBzeXN0ZW0gd291bGQgcmVnaXN0ZXIgYSBWTUEgd2l0aCBga2h1Z2VwYWdlZGAgdXNpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3aXRoaW4gYGh1Z2VwYWdlX21hZHZpc2VgLiBUaGUgaXNzdWU/IElmIHlvdSBoYWQgYSAqbGFyZ2UqIFZNQSBhbmQgdGhlbiB1c2VkIGBtYWR2aXNlYCBvbiBhICpzbWFsbCogcG9ydGlvbiBvZiBpdCwgdGhlIHN5c3RlbSB3YXMgcmVnaXN0ZXJpbmcgdGhlICpvcmlnaW5hbCogbGFyZ2UgVk1BJiMzOTtzIHNpemUsICpiZWZvcmUqIHRoZSBWTUEgc3BsaXQuIFRoaXMgY291bGQgbGVhZCB0byB1bm5lY2Vzc2FyeSBga2h1Z2VwYWdlZGAgd2FrZXVwcywgb3IgZXZlbiB0aGUgd3JvbmcgVk1BIGJlaW5nIGNvbnNpZGVyZWQuCgpUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgbW92aW5nIHRoZSBWTUEgcmVnaXN0cmF0aW9uIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGVuc3VyZXMgdGhlIHJlZ2lzdHJhdGlvbiBoYXBwZW5zICphZnRlciogdGhlIFZNQSBpcyBzcGxpdCBvciBtZXJnZWQsIG1lYW5pbmcgYGtodWdlcGFnZWRgIHdpbGwgKm9ubHkqIGJlIHdva2VuIHVwIGlmIHRoZSByZXN1bHRpbmcgVk1BIGlzIGFjdHVhbGx5IGxhcmdlIGVub3VnaCBmb3IgaHVnZXBhZ2UgY29uc2lkZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIHNwZWNpZmljYWxseSBga2h1Z2VwYWdlZGAgd2FrZXVwcyBhbmQgVk1BIGhhbmRsaW5nLCBiZWhhdmVzLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIG9mIHRoaXMgY2hhbmdlIGluIGJlaGF2aW9yLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBzb21lIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uOiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLCBgaHVnZXBhZ2VfbWFkdmlzZWAsIGFuZCBgdm1hX21vZGlmeV9mbGFnc2AuIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxsICpub3QqIHN0YXRpYywgc28gdGhleSYjMzk7cmUgYWNjZXNzaWJsZS4KClRoZSBjb3JlIGNvbmZpZyBuZWVkZWQgaXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgbmF0dXJhbGx5IOKAkyBhbmQgYEFEVklTRV9TWVNDQUxMU2AsIGJ1dCBJIGFsc28gZG91YmxlIGNoZWNrZWQgdGhhdCBgQ09ORklHX01NVWAgaXMgaW1wbGljaXRseSBpbXBsaWVkIGJ5IHRoZSBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBkZWZpbml0aW9uLCB3aGljaCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHJlbGllcyBvbi4gQmV5b25kIHRoYXQsIHRoZXJlIGFyZSBubyBvdGhlciBzcGVjaWZpYyBjb25maWdzIHJlcXVpcmVkIHRoYXQgSSBjYW4gc2VlLiBTbywgd2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBjcmFmdCBteSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2todWdlcGFnZWRfZW50ZXJfdm1hJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX21hZHZpc2UmIzM0OywKICAgICYjMzQ7dm1hX21vZGlmeV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgVk1BIHdpdGgga2h1Z2VwYWdlZCAoYGtodWdlcGFnZWRfZW50ZXJfdm1hYCkgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIG9uIGEgc21hbGwgcmFuZ2Ugd2l0aGluIGEgbGFyZ2UgVk1BIHdvdWxkIGluY29ycmVjdGx5IHJlZ2lzdGVyIHRoZSBgbW1gIHdpdGgga2h1Z2VwYWdlZCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgbGFyZ2UgVk1BJiMzOTtzIHNpemUsIGJlZm9yZSB0aGUgVk1BIHdhcyBzcGxpdC4gQnkgbW92aW5nIHRoZSByZWdpc3RyYXRpb24gdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIHRoZSByZWdpc3RyYXRpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBuZXdseSBzcGxpdC9tZXJnZWQgVk1BLCBlbnN1cmluZyB0aGF0IGtodWdlcGFnZWQgaXMgb25seSB3b2tlbiB1cCBpZiB0aGUgcmVzdWx0aW5nIFZNQSBpcyBhY3R1YWxseSBsYXJnZSBlbm91Z2ggdG8gYmUgY29sbGFwc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBraHVnZXBhZ2VkIHdha2V1cHMgYW5kIFZNQSBoYW5kbGluZywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O3ZtYV9tb2RpZnlfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhIFZNQSB3aXRoIGtodWdlcGFnZWQgKGBraHVnZXBhZ2VkX2VudGVyX3ZtYWApIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNtYWxsIHJhbmdlIHdpdGhpbiBhIGxhcmdlIFZNQSB3b3VsZCBpbmNvcnJlY3RseSByZWdpc3RlciB0aGUgYG1tYCB3aXRoIGtodWdlcGFnZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxhcmdlIFZNQSYjMzk7cyBzaXplLCBiZWZvcmUgdGhlIFZNQSB3YXMgc3BsaXQuIEJ5IG1vdmluZyB0aGUgcmVnaXN0cmF0aW9uIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCB0aGUgcmVnaXN0cmF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgbmV3bHkgc3BsaXQvbWVyZ2VkIFZNQSwgZW5zdXJpbmcgdGhhdCBraHVnZXBhZ2VkIGlzIG9ubHkgd29rZW4gdXAgaWYgdGhlIHJlc3VsdGluZyBWTUEgaXMgYWN0dWFsbHkgbGFyZ2UgZW5vdWdoIHRvIGJlIGNvbGxhcHNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMga2h1Z2VwYWdlZCB3YWtldXBzIGFuZCBWTUEgaGFuZGxpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgY2FsbCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHRvIGVuc3VyZSB0aGUgVk1BIGlzIHJlZ2lzdGVyZWQgZm9yIGtodWdlcGFnZWQgc2Nhbm5pbmcgd2hlbiB0aGUgYFZNX0hVR0VQQUdFYCBmbGFnIGlzIHNldC4gVGhpcyBjaGFuZ2UgaW52b2x2ZXMgVk1BIGZsYWcgbWFuYWdlbWVudCBhbmQgZnVuY3Rpb24gY2FsbCByZWxvY2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Yjk0MmY2ZGEyMGExZGVjNjNiZDBmZDY2ZmQ1MWE0N2RjOTg3Mzk3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDM6Mzc6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmMKaW5kZXggNWEwNmUzOTQyZTg4OS4uNzllZmZkM2YzZGE0ZiAxMDA2NDQKLS0tIGEvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuYwpAQCAtNDU0LDEyICYjNDM7NDU0LDYgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJY2FzZSBNQURWX0hVR0VQQUdFOgogCQkqdm1fZmxhZ3MgJmFtcDs9IH5WTV9OT0hVR0VQQUdFOwogCQkqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7Ci0JCS8qCi0JCSAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbiwKLQkJICogcmVnaXN0ZXIgaXQgaGVyZSB3aXRob3V0IHdhaXRpbmcgYSBwYWdlIGZhdWx0IHRoYXQKLQkJICogbWF5IG5vdCBoYXBwZW4gYW55IHRpbWUgc29vbi4KLQkJICovCi0JCWtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgKnZtX2ZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBNQURWX05PSFVHRVBBR0U6CiAJCSp2bV9mbGFncyAmYW1wOz0gflZNX0hVR0VQQUdFOwpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IGMxNzk5MzgwOTdiZjAuLmNiOTNjZjgyZDhkZjYgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmMKQEAgLTE3OCw2ICYjNDM7MTc4LDE0IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLAogCS8qIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS4gKi8KIAl2bWFfc3RhcnRfd3JpdGUodm1hKTsKIAl2bWEtJmd0O2ZsYWdzID0gbmV3X3ZtYV9mbGFnczsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLAomIzQzOwkgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdAomIzQzOwkgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZtYV9mbGFnc190ZXN0KCZhbXA7bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVCkpCiYjNDM7CQlraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYV9mbGFnc190b19sZWdhY3kobmV3X3ZtYV9mbGFncykpOwomIzQzOwogCWlmIChzZXRfbmV3X2Fub25fbmFtZSkKIAkJcmV0dXJuIHJlcGxhY2VfYW5vbl92bWFfbmFtZSh2bWEsIGFub25fbmFtZSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDMKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBvZiBpdCBpcyBhIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgbW92aW5nIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIEJlZm9yZSwgd2hlbiBgTUFEVl9IVUdFUEFHRWAgd2FzIHNldCBpbiBgaHVnZXBhZ2VfbWFkdmlzZWAsIHdlJiMzOTtkIGltbWVkaWF0ZWx5IHJlZ2lzdGVyIHRoZSBWTUEuIE5vdywgdGhhdCByZWdpc3RyYXRpb24gaXMgaGFwcGVuaW5nIHdpdGhpbiBgbWFkdmlzZV91cGRhdGVfdm1hYCwgZGlyZWN0bHkgYWZ0ZXIgdXBkYXRpbmcgdGhlIFZNQSYjMzk7cyBmbGFncy4KClRoZSBrZXkgaXMgdGhhdCB0aGUgcmVsZXZhbnQgZmxhZyBjaGVjayBub3cgb2NjdXJzIGluc2lkZSBgbWFkdmlzZV91cGRhdGVfdm1hYDogYGlmICh2bWFfZmxhZ3NfdGVzdCgmYW1wO25ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKWAuIEl0JiMzOTtzIGVuc3VyaW5nIHRoZSBWTUEgaXMgbm93IHN1aXRhYmxlIGZvciBraHVnZXBhZ2VkIGJlZm9yZSBwcm9jZWVkaW5nLCB1c2luZyB0aGUgaW50ZXJuYWwgYHZtYV9mbGFnc190ZXN0YCBmdW5jdGlvbiwgYW5kIGNvbnZlcnRpbmcgdGhvc2UgZmxhZ3MgdXNpbmcgYHZtYV9mbGFnc190b19sZWdhY3lgLgoKVGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgaGlnaGxpZ2h0cyB0aGUgcmVhc29uIGZvciB0aGlzIGltbWVkaWF0ZSByZWdpc3RyYXRpb246IHRvIGF2b2lkIHdhaXRpbmcgZm9yIGEgcGFnZSBmYXVsdCB0aGF0IG1pZ2h0IG5ldmVyIG9jY3VyLiBUaGlzIGlzIGEgZ29vZCBtb3ZlIHRvIGdldCBWTUFzIGludG8gdGhlIGtodWdlcGFnZWQgc2Nhbm5pbmcgcHJvY2VzcyBhcyBzb29uIGFzIHBvc3NpYmxlLgoKVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBjaGFuZ2UgYW55IHVzZXItc3BhY2UgZXhwb3NlZCBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBnb29kLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnl0aGluZyBsaWtlIHRoYXQsIHNvIEkmIzM5O20gbm90IHdvcnJpZWQgYWJvdXQgdGhhdC4gVGhlIHVzdWFsIGNoZWNrcyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzLiBTbywgSSB3aWxsIGJlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGVhbiwgZm9jdXNlZCByZWZhY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYCB0byBlbnN1cmUgdGhlIFZNQSBpcyByZWdpc3RlcmVkIGZvciBraHVnZXBhZ2VkIHNjYW5uaW5nIHdoZW4gdGhlIGBWTV9IVUdFUEFHRWAgZmxhZyBpcyBzZXQuIFRoaXMgY2hhbmdlIGludm9sdmVzIFZNQSBmbGFnIG1hbmFnZW1lbnQgYW5kIGZ1bmN0aW9uIGNhbGwgcmVsb2NhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBidWdzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdG8gZW5zdXJlIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyB3aGVuIHRoZSBgVk1fSFVHRVBBR0VgIGZsYWcgaXMgc2V0LiBUaGlzIGNoYW5nZSBpbnZvbHZlcyBWTUEgZmxhZyBtYW5hZ2VtZW50IGFuZCBmdW5jdGlvbiBjYWxsIHJlbG9jYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM3OjU3LjQzNjEwODc1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTQyMzU0NDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIixcbiAgICBcImh1Z2VwYWdlX21hZHZpc2VcIixcbiAgICBcInZtYV9tb2RpZnlfZmxhZ3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdG8gZW5zdXJlIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyB3aGVuIHRoZSBgVk1fSFVHRVBBR0VgIGZsYWcgaXMgc2V0LiBUaGlzIGNoYW5nZSBpbnZvbHZlcyBWTUEgZmxhZyBtYW5hZ2VtZW50IGFuZCBmdW5jdGlvbiBjYWxsIHJlbG9jYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhIFZNQSB3aXRoIGtodWdlcGFnZWQgKGBraHVnZXBhZ2VkX2VudGVyX3ZtYWApIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNtYWxsIHJhbmdlIHdpdGhpbiBhIGxhcmdlIFZNQSB3b3VsZCBpbmNvcnJlY3RseSByZWdpc3RlciB0aGUgYG1tYCB3aXRoIGtodWdlcGFnZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxhcmdlIFZNQSdzIHNpemUsIGJlZm9yZSB0aGUgVk1BIHdhcyBzcGxpdC4gQnkgbW92aW5nIHRoZSByZWdpc3RyYXRpb24gdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIHRoZSByZWdpc3RyYXRpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBuZXdseSBzcGxpdC9tZXJnZWQgVk1BLCBlbnN1cmluZyB0aGF0IGtodWdlcGFnZWQgaXMgb25seSB3b2tlbiB1cCBpZiB0aGUgcmVzdWx0aW5nIFZNQSBpcyBhY3R1YWxseSBsYXJnZSBlbm91Z2ggdG8gYmUgY29sbGFwc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBraHVnZXBhZ2VkIHdha2V1cHMgYW5kIFZNQSBoYW5kbGluZywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozNzo1Ny40MzYxMTM2MzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjIzMDQ1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Yjk0MmY2ZGEyMGExZGVjNjNiZDBmZDY2ZmQ1MWE0N2RjOTg3Mzk3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDAzOjM3OjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDVhMDZlMzk0MmU4ODkuLjc5ZWZmZDNmM2RhNGYgMTAwNjQ0XFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTQ1NCwxMiArNDU0LDYgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4gXFx0XFx0KnZtX2ZsYWdzIFxcdTAwMjY9IH5WTV9OT0hVR0VQQUdFO1xcbiBcXHRcXHQqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcXG4tXFx0XFx0ICogcmVnaXN0ZXIgaXQgaGVyZSB3aXRob3V0IHdhaXRpbmcgYSBwYWdlIGZhdWx0IHRoYXRcXG4tXFx0XFx0ICogbWF5IG5vdCBoYXBwZW4gYW55IHRpbWUgc29vbi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgKnZtX2ZsYWdzKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxcbiBcXHRcXHQqdm1fZmxhZ3MgXFx1MDAyNj0gflZNX0hVR0VQQUdFO1xcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCBjMTc5OTM4MDk3YmYwLi5jYjkzY2Y4MmQ4ZGY2IDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC0xNzgsNiArMTc4LDE0IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbiBcXHQvKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuICovXFxuIFxcdHZtYV9zdGFydF93cml0ZSh2bWEpO1xcbiBcXHR2bWEtXFx1MDAzZWZsYWdzID0gbmV3X3ZtYV9mbGFncztcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLFxcbitcXHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxcbitcXHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHZtYV9mbGFnc190ZXN0KFxcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfSFVHRVBBR0VfQklUKSlcXG4rXFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcXG4rXFxuIFxcdGlmIChzZXRfbmV3X2Fub25fbmFtZSlcXG4gXFx0XFx0cmV0dXJuIHJlcGxhY2VfYW5vbl92bWFfbmFtZSh2bWEsIGFub25fbmFtZSk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozNzo1OC43NTkxNzM0MjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNTI1OTYxODMwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkFEVklTRV9TWVNDQUxMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtodWdlcGFnZWRfZW50ZXJfdm1hXCIsXG4gICAgXCJodWdlcGFnZV9tYWR2aXNlXCIsXG4gICAgXCJ2bWFfbW9kaWZ5X2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhIFZNQSB3aXRoIGtodWdlcGFnZWQgKGBraHVnZXBhZ2VkX2VudGVyX3ZtYWApIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNtYWxsIHJhbmdlIHdpdGhpbiBhIGxhcmdlIFZNQSB3b3VsZCBpbmNvcnJlY3RseSByZWdpc3RlciB0aGUgYG1tYCB3aXRoIGtodWdlcGFnZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxhcmdlIFZNQSdzIHNpemUsIGJlZm9yZSB0aGUgVk1BIHdhcyBzcGxpdC4gQnkgbW92aW5nIHRoZSByZWdpc3RyYXRpb24gdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIHRoZSByZWdpc3RyYXRpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBuZXdseSBzcGxpdC9tZXJnZWQgVk1BLCBlbnN1cmluZyB0aGF0IGtodWdlcGFnZWQgaXMgb25seSB3b2tlbiB1cCBpZiB0aGUgcmVzdWx0aW5nIFZNQSBpcyBhY3R1YWxseSBsYXJnZSBlbm91Z2ggdG8gYmUgY29sbGFwc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBraHVnZXBhZ2VkIHdha2V1cHMgYW5kIFZNQSBoYW5kbGluZywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Yjk0MmY2ZGEyMGExZGVjNjNiZDBmZDY2ZmQ1MWE0N2RjOTg3Mzk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDM6Mzc6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDVhMDZlMzk0MmU4ODkuLjc5ZWZmZDNmM2RhNGYgMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTQ1NCwxMiArNDU0LDYgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRjYXNlIE1BRFZfSFVHRVBBR0U6XG4gXHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9OT0hVR0VQQUdFO1xuIFx0XHQqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7XG4tXHRcdC8qXG4tXHRcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2Nhbixcbi1cdFx0ICogcmVnaXN0ZXIgaXQgaGVyZSB3aXRob3V0IHdhaXRpbmcgYSBwYWdlIGZhdWx0IHRoYXRcbi1cdFx0ICogbWF5IG5vdCBoYXBwZW4gYW55IHRpbWUgc29vbi5cbi1cdFx0ICovXG4tXHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgKnZtX2ZsYWdzKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE1BRFZfTk9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX0hVR0VQQUdFO1xuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggYzE3OTkzODA5N2JmMC4uY2I5M2NmODJkOGRmNiAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtMTc4LDYgKzE3OCwxNCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcbiBcdC8qIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS4gKi9cbiBcdHZtYV9zdGFydF93cml0ZSh2bWEpO1xuIFx0dm1hLVx1MDAzZWZsYWdzID0gbmV3X3ZtYV9mbGFncztcbitcdC8qXG4rXHQgKiBJZiB0aGUgdm1hIGJlY29tZSBnb29kIGZvciBraHVnZXBhZ2VkIHRvIHNjYW4sXG4rXHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxuK1x0ICogbWF5IG5vdCBoYXBwZW4gYW55IHRpbWUgc29vbi5cbitcdCAqL1xuK1x0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxuK1x0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYV9mbGFnc190b19sZWdhY3kobmV3X3ZtYV9mbGFncykpO1xuK1xuIFx0aWYgKHNldF9uZXdfYW5vbl9uYW1lKVxuIFx0XHRyZXR1cm4gcmVwbGFjZV9hbm9uX3ZtYV9uYW1lKHZtYSwgYW5vbl9uYW1lKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM3OjU4Ljc1OTE3NDcwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzMzODU0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIGtodWdlcGFnZWRfZW50ZXJfdm1hIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCdzIHNoaWZ0aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgb3ZlciB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2h5P1wiIFdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vdmU/IExldCdzIHRyYWNlIGl0IHRocm91Z2guIFdlJ3JlIHJlbW92aW5nIGl0IGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgaW5zZXJ0aW5nIGl0IGludG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaW4gYG1tL21hZHZpc2UuY2AuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBoaWVyYXJjaHkuIElzIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSBgaHVnZXBhZ2VfbWFkdmlzZWAsIG9yIGFyZSB0aGVyZSBvdGhlciBjYWxsIHNpdGVzIHdlIG5lZWQgdG8gY29uc2lkZXI/IEl0IGxvb2tzIGxpa2UgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgKmlzKiB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyB0aGUgVk1BIGZsYWdzIGJhc2VkIG9uIGBtYWR2aXNlYCBjYWxscywgd2hpY2ggbWFrZXMgc2Vuc2UuIEhtbSwgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIHRoYXQgYGh1Z2VwYWdlX21hZHZpc2VgIGl0c2VsZiBpcyBhY3R1YWxseSBpbnZva2VkIGJ5IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAsIHdoaWNoICp0aGVuKiBjYWxscyBgbWFkdmlzZV91cGRhdGVfdm1hYC4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgbW92aW5nIHRoZSB3b3JrLCBpbiB0ZXJtcyBvZiBWTUEgbW9kaWZpY2F0aW9ucywgdG8gKmJlZm9yZSogdGhlIGh1Z2VwYWdlLXNwZWNpZmljIGxvZ2ljIGdldHMgaW52b2x2ZWQuXG5cblRvIGJlIHN1cmUsIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgY3Jvc3MtcmVmZXJlbmNlIHRoZSByZWxldmFudCBzZWN0aW9ucyBpbiBgbW0vbWFkdmlzZS5jYCBhbmQgYG1tL2todWdlcGFnZWQuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGNoYW5nZS4gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb3ZlIGFmZmVjdHMgdGhlIG92ZXJhbGwgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODowMy44OTI1NjIyNThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNTk5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV91cGRhdGVfdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTM4PXN0YXRpYyBpbnQgcmVwbGFjZV9hbm9uX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MC0gKi9cXG5tbS9tYWR2aXNlLmM6MTUxOnN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbm1tL21hZHZpc2UuYy0xNTItXFx0XFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTMzNj1zdGF0aWMgYm9vbCBjYW5fbWFkdmlzZV9tb2RpZnkoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM0Mi0vKlxcbm1tL21hZHZpc2UuYzoxMzQzOiAqIEFwcGx5IGFuIG1hZHZpc2UgYmVoYXZpb3IgdG8gYSByZWdpb24gb2YgYSB2bWEuICBtYWR2aXNlX3VwZGF0ZV92bWFcXG5tbS9tYWR2aXNlLmMtMTM0NC0gKiB3aWxsIGhhbmRsZSBzcGxpdHRpbmcgYSB2bSBhcmVhIGludG8gc2VwYXJhdGUgYXJlYXMsIGVhY2ggYXJlYSB3aXRoIGl0cyBvd25cXG4tLVxcbm1tL21hZHZpc2UuYz0xMzQ3PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM3OC1cXG5tbS9tYWR2aXNlLmM6MTM3OTpcXHQvKiBUaGUgYmVsb3cgYmVoYXZpb3VycyB1cGRhdGUgVk1BcyB2aWEgbWFkdmlzZV91cGRhdGVfdm1hKCkuICovXFxubW0vbWFkdmlzZS5jLTEzODAtXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ0MC1cXG5tbS9tYWR2aXNlLmM6MTQ0MTpcXHRlcnJvciA9IG1hZHZpc2VfdXBkYXRlX3ZtYShuZXdfZmxhZ3MsIG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYy0xNDQyLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MDMuOTM5OTI0NTUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzNzQ2MzMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtodWdlcGFnZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNoaWZ0aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb3ZlciB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSXMgaXQgZGVmaW5lZCB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AgaXRzZWxmPyBPciBwZXJoYXBzIGl0J3MgYSBkZWNsYXJhdGlvbiByZXNpZGluZyBpbiBgaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmhgPyBLbm93aW5nIGl0cyBsb2NhdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcCB0byBwcm9wZXJseSBldmFsdWF0aW5nIHdoYXQgdGhlIGNvZGUgY2hhbmdlIG1lYW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MDcuMjc3Mzg5OTA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM4OTUxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE1PWV4dGVybiB2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoxNjpleHRlcm4gdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0xNy1cXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0zOD1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDAtfVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjQxOnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00Mi1cXHRcXHRcXHRcXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNTIwPXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXFx0XFx0cmV0dXJuIHJldDtcXG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4Ni1cXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxcbm1tL21hZHZpc2UuYzoxODc6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcXG5tbS9tYWR2aXNlLmMtMTg4LVxcbi0tXFxubW0vdm1hLmM9ODg5PXN0YXRpYyBfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2UoXFxuLS1cXG5tbS92bWEuYy0xMDczLVxcdHZtYV9zZXRfZmxhZ3NfbWFzayh2bWctXFx1MDAzZXRhcmdldCwgc3RpY2t5X2ZsYWdzKTtcXG5tbS92bWEuYzoxMDc0OlxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtZy1cXHUwMDNldGFyZ2V0LCB2bWctXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0xMDc1LVxcdHZtZy1cXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcXG4tLVxcbm1tL3ZtYS5jPTExNDA9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuLS1cXG5tbS92bWEuYy0xMTk1LVxcdGlmICh2bWctXFx1MDAzZXRhcmdldCBcXHUwMDI2XFx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XFxubW0vdm1hLmM6MTE5NjpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXFx1MDAzZXRhcmdldCwgdm1nLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vdm1hLmMtMTE5Ny1cXHRcXHR2bWctXFx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XFxuLS1cXG5tbS92bWEuYz0yNjM0PXN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTI2OTEtXFx0LypcXG5tbS92bWEuYzoyNjkyOlxcdCAqIHZtYV9tZXJnZV9uZXdfcmFuZ2UoKSBjYWxscyBraHVnZXBhZ2VkX2VudGVyX3ZtYSgpIHRvbywgdGhlIGJlbG93XFxubW0vdm1hLmMtMjY5My1cXHQgKiBjYWxsIGNvdmVycyB0aGUgbm9uLW1lcmdlIGNhc2UuXFxuLS1cXG5tbS92bWEuYy0yNjk1LVxcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxcbm1tL3ZtYS5jOjI2OTY6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCBtYXAtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0yNjk3LVxcdCp2bWFwID0gdm1hO1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTE4MT1zdGF0aWMgaW5saW5lIGJvb2wgbXBvbF9lcXVhbChzdHJ1Y3QgbWVtcG9saWN5ICphLCBzdHJ1Y3QgbWVtcG9saWN5ICpiKVxcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTE4NS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6MTg2OnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMTg3LVxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MDguODUxMjkwNzE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyMjE0MzY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hZHZpc2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBUaGlzIGltcGxpZXMgaXQgd2lsbCBub3cgYmUgdHJpZ2dlcmVkIGJ5ICphbnkqIGBtYWR2aXNlYCBjYWxsIHRoYXQgdXBkYXRlcyBWTUEgZmxhZ3MgYW5kIHNwZWNpZmljYWxseSBzZXRzIHRoZSBgVk1BX0hVR0VQQUdFX0JJVGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGRpcmVjdGx5IHRpZWQgdG8gYFZNX0hVR0VQQUdFYC4gU2VlbXMgcmVhc29uYWJsZSBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJyb2FkZW5pbmcgdGhlIHNjb3BlIGEgYml0LiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcuIGBWTUFfSFVHRVBBR0VfQklUYCwgaXMgdGhhdCB0aGUgcmlnaHQgdGVybWlub2xvZ3k/IExldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgY29ycmVjdCBiaXQgaW4gdGhlIGZsYWcuIEFuZCwganVzdCB0byBiZSBzdXJlLCBJIHNlZSBgdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVClgLCBidXQgd2hhdCAqaXMqIGBuZXdfdm1hX2ZsYWdzYCBoZXJlPyBJcyBpdCBhIHN0cmFpZ2h0IGB2bV9mbGFnc190YCwgb3IgaXMgdGhpcyBiZWluZyB1c2VkIGluIGEgYHN0cnVjdCB2bWFfZmxhZ3NgIHNvbWV3aGVyZT8gSSdtIGdldHRpbmcgYSBsaXR0bGUgZnV6enkgb24gdGhhdC4gR290dGEgYmUgcHJlY2lzZSBoZXJlLiBPa2F5LCBsZXQncyBqdXN0IGdvIHN0cmFpZ2h0IHRvIGBtbS9tYWR2aXNlLmNgIGFuZCBkaWcgaW50byBgbWFkdmlzZV91cGRhdGVfdm1hYCBpdHNlbGYuIEkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGF0IGBuZXdfdm1hX2ZsYWdzYCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gR290dGEgYmUgc3VyZSB0aGUgbG9naWMgaXMgc291bmQgd2l0aCB0aGVzZSBmbGFnIG1hbmlwdWxhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MTQuMzczNDM2ODg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTM0NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfdXBkYXRlX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTEzOD1zdGF0aWMgaW50IHJlcGxhY2VfYW5vbl92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTAtICovXFxubW0vbWFkdmlzZS5jOjE1MTpzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcXG5tbS9tYWR2aXNlLmMtMTUyLVxcdFxcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzY9c3RhdGljIGJvb2wgY2FuX21hZHZpc2VfbW9kaWZ5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEzNDItLypcXG5tbS9tYWR2aXNlLmM6MTM0MzogKiBBcHBseSBhbiBtYWR2aXNlIGJlaGF2aW9yIHRvIGEgcmVnaW9uIG9mIGEgdm1hLiAgbWFkdmlzZV91cGRhdGVfdm1hXFxubW0vbWFkdmlzZS5jLTEzNDQtICogd2lsbCBoYW5kbGUgc3BsaXR0aW5nIGEgdm0gYXJlYSBpbnRvIHNlcGFyYXRlIGFyZWFzLCBlYWNoIGFyZWEgd2l0aCBpdHMgb3duXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTM0Nz1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEzNzgtXFxubW0vbWFkdmlzZS5jOjEzNzk6XFx0LyogVGhlIGJlbG93IGJlaGF2aW91cnMgdXBkYXRlIFZNQXMgdmlhIG1hZHZpc2VfdXBkYXRlX3ZtYSgpLiAqL1xcbm1tL21hZHZpc2UuYy0xMzgwLVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NDAtXFxubW0vbWFkdmlzZS5jOjE0NDE6XFx0ZXJyb3IgPSBtYWR2aXNlX3VwZGF0ZV92bWEobmV3X2ZsYWdzLCBtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTQ0Mi1vdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjE0LjQxNzk3NTU2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjQ2MzgwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFkdmlzZWAgY2FsbHMgYXJlIHByb2Nlc3NlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIHN0cnVjdHVyZXMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGNoYW5nZXMgdG8gcGFnZSBhY2Nlc3MgcGF0dGVybnMgYW5kIGNhY2hpbmcgaGludHMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgYG1hZHZpc2VgIHN5c3RlbSBjYWxsLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSB0YWJsZXMuIEkgc3VzcGVjdCB0aGVyZSBhcmUgYSBmZXcgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMsIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIHRoYXQgSSdsbCB3YW50IHRvIHRyYWNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB2YXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIGhlcmUgaXMga2V5IHRvIG9wdGltaXppbmcgYXBwbGljYXRpb24gbWVtb3J5IGJlaGF2aW9yIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0J3Mgc2VlIGhvdyBgbWFkdmlzZV91cGRhdGVfdm1hYCBhY2NvbXBsaXNoZXMgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjIwLjU0MjYxNjQ1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHQgKi9cXG4gMTUxOlxcdHN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbiAxNTI6XFx0XFx0XFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuIDE1MzpcXHR7XFxuIDE1NDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXZtYTtcXG4gMTU1OlxcdFxcdHZtYV9mbGFnc190IG5ld192bWFfZmxhZ3MgPSBsZWdhY3lfdG9fdm1hX2ZsYWdzKG5ld19mbGFncyk7XFxuIDE1NjpcXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2U7XFxuIDE1NzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfbmFtZSAqYW5vbl9uYW1lID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlYW5vbl9uYW1lO1xcbiAxNTg6XFx0XFx0Ym9vbCBzZXRfbmV3X2Fub25fbmFtZSA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yID09IF9fTUFEVl9TRVRfQU5PTl9WTUFfTkFNRTtcXG4gMTU5OlxcdFxcdFZNQV9JVEVSQVRPUih2bWksIG1hZHZfYmVoYXZpb3ItXFx1MDAzZW1tLCByYW5nZS1cXHUwMDNlc3RhcnQpO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRpZiAodm1hX2ZsYWdzX3NhbWVfbWFzayhcXHUwMDI2dm1hLVxcdTAwM2VmbGFncywgbmV3X3ZtYV9mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gMTYyOlxcdFxcdCAgICAoIXNldF9uZXdfYW5vbl9uYW1lIHx8XFxuIDE2MzpcXHRcXHQgICAgIGFub25fdm1hX25hbWVfZXEoYW5vbl92bWFfbmFtZSh2bWEpLCBhbm9uX25hbWUpKSlcXG4gMTY0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRpZiAoc2V0X25ld19hbm9uX25hbWUpXFxuIDE2NzpcXHRcXHRcXHR2bWEgPSB2bWFfbW9kaWZ5X25hbWUoXFx1MDAyNnZtaSwgbWFkdl9iZWhhdmlvci1cXHUwMDNlcHJldiwgdm1hLFxcbiAxNjg6XFx0XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLCBhbm9uX25hbWUpO1xcbiAxNjk6XFx0XFx0ZWxzZVxcbiAxNzA6XFx0XFx0XFx0dm1hID0gdm1hX21vZGlmeV9mbGFncyhcXHUwMDI2dm1pLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VwcmV2LCB2bWEsXFxuIDE3MTpcXHRcXHRcXHRcXHRyYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsIFxcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0aWYgKElTX0VSUih2bWEpKVxcbiAxNzQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIodm1hKTtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0bWFkdl9iZWhhdmlvci1cXHUwMDNldm1hID0gdm1hO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHQvKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuICovXFxuIDE3OTpcXHRcXHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcXG4gMTgwOlxcdFxcdHZtYS1cXHUwMDNlZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzO1xcbiAxODE6XFx0XFx0LypcXG4gMTgyOlxcdFxcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcXG4gMTgzOlxcdFxcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XFxuIDE4NDpcXHRcXHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxcbiAxODU6XFx0XFx0ICovXFxuIDE4NjpcXHRcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxcbiAxODc6XFx0XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0aWYgKHNldF9uZXdfYW5vbl9uYW1lKVxcbiAxOTA6XFx0XFx0XFx0cmV0dXJuIHJlcGxhY2VfYW5vbl92bWFfbmFtZSh2bWEsIGFub25fbmFtZSk7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdHJldHVybiAwO1xcbiAxOTM6XFx0fVxcbiAxOTQ6XFx0XFxuIDE5NTpcXHQjaWZkZWYgQ09ORklHX1NXQVBcXG4gMTk2OlxcdHN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIDE5NzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDE5ODpcXHR7XFxuIDE5OTpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjIwLjU0MjczNjU5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMyMTg1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIFJlbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGludG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgc2hpZnQ7IGBtYWR2aXNlX3VwZGF0ZV92bWFgIGlzIHVzZWQgZm9yIG1vcmUgdGhhbiBqdXN0IGh1Z2VwYWdlLXJlbGF0ZWQgYG1hZHZpc2VgIGNhbGxzLiBOb3csIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoYXQgaXMgc3RhcnRpbmcgdG8gYmVjb21lIGNsZWFyLiBJZiBgbWFkdmlzZV91cGRhdGVfdm1hYCBoYW5kbGVzICpvdGhlciogYG1hZHZpc2VgIGJlaGF2aW9ycywgYW5kIHRoZSBgbmV3X3ZtYV9mbGFnc2AgaGFzIGBWTUFfSFVHRVBBR0VfQklUYCBzZXQsIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCAqd2lsbCogYmUgaW52b2tlZC4gSG9sZCBvbi4uLiB3aGF0IGhhcHBlbnMgaWYgYFZNQV9IVUdFUEFHRV9CSVRgIGlzIGFscmVhZHkgc2V0LCBhbmQgd2UncmUganVzdCB1cGRhdGluZyAqYW5vdGhlciogZmxhZywgbGlrZSBzYXksIGBNQURWX0RPTlRORUVEYD8gYG5ld192bWFfZmxhZ3NgIHdvdWxkICpzdGlsbCogaGF2ZSBgVk1BX0hVR0VQQUdFX0JJVGAgc2V0LCB3b3VsZG4ndCBpdD8gV2hpY2ggd291bGQgbWVhbiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGdldHMgY2FsbGVkICphZ2FpbiohIFJpZ2h0LCB0aGlzIGlzIGEgcG90ZW50aWFsIGlzc3VlLlxuXG5TbywgaXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBkZXNpZ25lZCB0byBoYW5kbGUgYmVpbmcgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIFZNQT8gSSBiZXR0ZXIgdmVyaWZ5IHRoYXQgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGEgc3VidGxlIGJ1Zy4gTGV0IG1lIGNoZWNrIHRoZSBsb2dpYyB3aXRoaW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpdHNlbGYuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgcmVmYWN0b3JpbmcgZG9lc24ndCB0cmlnZ2VyIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcmVzb3VyY2UgY29udGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjI1LjQ3NDkyNDc4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MDpcXHR9XFxuIDU4MTpcXHRcXG4gNTgyOlxcdHN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA1ODM6XFx0XFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXFxuIDU4NDpcXHR7XFxuIDU4NTpcXHRcXHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XFxuIDU4NjpcXHR9XFxuIDU4NzpcXHRcXG4gNTg4OlxcdHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDU4OTpcXHRcXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuIDU5MDpcXHR7XFxuIDU5MTpcXHRcXHRpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCB2bWEtXFx1MDAzZXZtX21tKSBcXHUwMDI2XFx1MDAyNiBodWdlcGFnZV9lbmFibGVkKClcXG4gNTkyOlxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXFxuIDU5MzpcXHRcXHRcXHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVxcdTAwM2V2bV9tbSk7XFxuIDU5NDpcXHR9XFxuIDU5NTpcXHRcXG4gNTk2OlxcdHZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIDU5NzpcXHR7XFxuIDU5ODpcXHRcXHRzdHJ1Y3QgbW1fc2xvdCAqc2xvdDtcXG4gNTk5OlxcdFxcdGludCBmcmVlID0gMDtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbiA2MDI6XFx0XFx0c2xvdCA9IG1tX3Nsb3RfbG9va3VwKG1tX3Nsb3RzX2hhc2gsIG1tKTtcXG4gNjAzOlxcdFxcdGlmIChzbG90IFxcdTAwMjZcXHUwMDI2IGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IHNsb3QpIHtcXG4gNjA0OlxcdFxcdFxcdG1tX3Nsb3RfcmVtb3ZlKHNsb3QpO1xcbiA2MDU6XFx0XFx0XFx0ZnJlZSA9IDE7XFxuIDYwNjpcXHRcXHR9XFxuIDYwNzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG4gNjA4OlxcdFxcbiA2MDk6XFx0XFx0aWYgKGZyZWUpIHtcXG4gNjEwOlxcdFxcdFxcdG1tX2ZsYWdzX2NsZWFyKE1NRl9WTV9IVUdFUEFHRSwgbW0pO1xcbiA2MTE6XFx0XFx0XFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIHNsb3QpO1xcbiA2MTI6XFx0XFx0XFx0bW1kcm9wKG1tKTtcXG4gNjEzOlxcdFxcdH0gZWxzZSBpZiAoc2xvdCkge1xcbiA2MTQ6XFx0XFx0XFx0LypcXG4gNjE1OlxcdFxcdFxcdCAqIFRoaXMgaXMgcmVxdWlyZWQgdG8gc2VyaWFsaXplIGFnYWluc3RcXG4gNjE2OlxcdFxcdFxcdCAqIGNvbGxhcHNlX3Rlc3RfZXhpdCgpICh3aGljaCBpcyBndWFyYW50ZWVkIHRvIHJ1blxcbiA2MTc6XFx0XFx0XFx0ICogdW5kZXIgbW1hcF9sb2NrIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxcbiA2MTg6XFx0XFx0XFx0ICogcGFnZXRhYmxlcyB3aWxsIGJlIGRlc3Ryb3llZCkgdW50aWwga2h1Z2VwYWdlZCBoYXMgZmluaXNoZWRcXG4gNjE5OlxcdFxcdFxcdCAqIHdvcmtpbmcgb24gdGhlIHBhZ2V0YWJsZXMgdW5kZXIgdGhlIG1tYXBfbG9jay5cXG4gNjIwOlxcdFxcdFxcdCAqL1xcbiA2MjE6XFx0XFx0XFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcXG4gNjIyOlxcdFxcdFxcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcXG4gNjIzOlxcdFxcdH1cXG4gNjI0OlxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0c3RhdGljIHZvaWQgY29sbGFwc2VfY29udHJvbF9pbml0X3NjYW4oc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbiA2Mjc6XFx0e1xcbiA2Mjg6XFx0XFx0bWVtc2V0KGNjLVxcdTAwM2Vub2RlX2xvYWQsIDAsIHNpemVvZihjYy1cXHUwMDNlbm9kZV9sb2FkKSk7XFxuIDYyOTpcXHRcXHRub2Rlc19jbGVhcihjYy1cXHUwMDNlYWxsb2Nfbm1hc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODoyNS40NzUwNzk3MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxMDYxNDAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSB3aGVyZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGlzIGNhbGxlZCB1bmRlciBhIHNsaWdodGx5IGJyb2FkZXIgc2V0IG9mIGNpcmN1bXN0YW5jZXMuIEluaXRpYWxseSwgbXkgdGhvdWdodCB3YXMsIFwiaXQncyBzYWZlLCBzaW5jZSB0aGUgY29kZSBjaGVja3MgYE1NRl9WTV9IVUdFUEFHRWAuXCIgVGhlbiwgSSBoYXZlIHRvIHN0b3AgYW5kIHRoaW5rIGlmIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyBzYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMsIGJ1dCBiZWZvcmUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3YXMgbGltaXRlZCB0byBgTUFEVl9IVUdFUEFHRWAgY2FsbHMuIE5vdywgaXQncyB0cmlnZ2VyZWQgd2hlbmV2ZXIgVk1BIGZsYWdzIGFyZSBtb2RpZmllZCBhbmQgYFZNQV9IVUdFUEFHRV9CSVRgIGlzIHNldC5cblxuU28gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIGZsb3cuIElmIGBNQURWX0hVR0VQQUdFYCBpcyBjYWxsZWQsIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkLCB0aGF0J3MgY2xlYXIuIEEgc3Vic2VxdWVudCBgbWFkdmlzZWAgY2FsbCAqb24gdGhlIHNhbWUgVk1BKiB3aXRoIGBWTUFfSFVHRVBBR0VfQklUYCBzZXQgd291bGQgdHJpZ2dlciBhbm90aGVyIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gQnV0IHRoYXQncyBwcm9iYWJseSBva2F5LCBiZWNhdXNlIHdoZW4gdGhlIFZNQSB3YXMgY3JlYXRlZCBvciB3aGVuIHRoZSBiaXQgd2FzIHNldCwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3YXMgYWxyZWFkeSBjYWxsZWQuIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIGluIGB2bWFfbWVyZ2VfbmV3X3JhbmdlYCBhbmQgYF9fbW1hcF9uZXdfdm1hYCBpZiBgVk1fSFVHRVBBR0VgIGlzIHNldC5cblxuVGhlIHRyaWNreSBwYXJ0OiBpcyB0aGVyZSBhIHNjZW5hcmlvIHdoZXJlIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgYnV0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgKndhc24ndCogY2FsbGVkPyBUaGUgb25seSBzY2VuYXJpbyB0aGF0IEkgY2FuIHNlZSB3b3VsZCBiZSBpZiBgaHVnZXBhZ2VfZW5hYmxlZCgpYCB3YXMgZmFsc2UgZHVyaW5nIFZNQSBjcmVhdGlvbiBhbmQgbGF0ZXIgYmVjb21lIHRydWUuIEJ1dCBldmVuIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBjaGVja3MgYGh1Z2VwYWdlX2VuYWJsZWQoKWAgYW5kIGlmIGl0IHdlcmUgZmFsc2UgYXQgY3JlYXRpb24sIGl0IHdvdWxkIG5vdCBydW4uIFdoZW4gaXQgZG9lcyBiZWNvbWUgdHJ1ZSwgY2FsbGluZyBgbWFkdmlzZWAgd291bGQgbm93IHRyaWdnZXIgdGhlIHByb2Nlc3MuXG5cbk9rYXksIGxldCdzIHRyYWNlIHRoaXMgZnVydGhlci4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkIGJ5IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAuIE5vdywgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgc3BlY2lmaWNhbGx5IGF2b2lkcyBhbnkgd29yayBpZiB0aGUgVk1BIGZsYWdzIGFyZSB0aGUgc2FtZTpcblxuYGBgY1xuXHRpZiAodm1hX2ZsYWdzX3NhbWVfbWFzayhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIG5ld192bWFfZmxhZ3MpIFx1MDAyNlx1MDAyNlxuXHQgICAgKCFzZXRfbmV3X2Fub25fbmFtZSB8fFxuXHQgICAgIGFub25fdm1hX25hbWVfZXEoYW5vbl92bWFfbmFtZSh2bWEpLCBhbm9uX25hbWUpKSlcblx0XHRyZXR1cm4gMDtcbmBgYFxuXG5UaGlzIG1lYW5zIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgKm9ubHkqIGNhbGxlZCBpZiB0aGUgZmxhZ3MgY2hhbmdlICphbmQqIHRoZSBuZXcgZmxhZ3MgaW5jbHVkZSBgVk1BX0hVR0VQQUdFX0JJVGAuIFNvLCB3aXRoIGBNQURWX0hVR0VQQUdFYCBmb3IgaW5zdGFuY2UsIGlmIHRoZSBiaXQgd2Fzbid0IHNldCwgdGhlIGZsYWdzIGNoYW5nZSBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBnZXRzIGNhbGxlZC4gTWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgYE1BRFZfRE9OVE5FRURgPyBUaGF0IGRvZXNuJ3QgYWx0ZXIgVk1BIGZsYWdzLCBzbyBpdCdzIG5vdCBoYW5kbGVkIGJ5IGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0J3MgZ29vZC5cblxuSSBuZWVkIHRvIGNhdGFsb2d1ZSB3aGljaCBtYWR2aXNlIGJlaGF2aW9ycyBpbXBhY3QgVk1BIGZsYWdzIGFuZCB3aWxsIGNhdXNlIHRoaXMgYWRkaXRpb25hbCBjYWxsOiBgTUFEVl9NRVJHRUFCTEVgLCBgTUFEVl9VTk1FUkdFQUJMRWAsIGBNQURWX0hVR0VQQUdFYCwgYE1BRFZfTk9IVUdFUEFHRWAsIGBNQURWX0RPTlRGT1JLYCwgYE1BRFZfRE9GT1JLYCwgYE1BRFZfV0lQRU9ORk9SS2AsIGBNQURWX0tFRVBPTkZPUktgLCBgTUFEVl9DT0xEYCwgYE1BRFZfUEFHRU9VVGAsIGBNQURWX1BPUFVMQVRFX1JFQURgLCBgTUFEVl9QT1BVTEFURV9XUklURWAuIEkgc2hvdWxkIGNoZWNrIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAgdG8gY29uZmlybSB0aGF0IHRoZXNlIGJlaGF2aW9ycyBhY3R1YWxseSBjYWxsIGBtYWR2aXNlX3VwZGF0ZV92bWFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MzUuNTgxMjIzMjE0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0NzpcXHRzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjEzNDg6XFx0e1xcbjEzNDk6XFx0XFx0aW50IGJlaGF2aW9yID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3I7XFxuMTM1MDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXZtYTtcXG4xMzUxOlxcdFxcdHZtX2ZsYWdzX3QgbmV3X2ZsYWdzID0gdm1hLVxcdTAwM2V2bV9mbGFncztcXG4xMzUyOlxcdFxcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSA9IFxcdTAwMjZtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZTtcXG4xMzUzOlxcdFxcdGludCBlcnJvcjtcXG4xMzU0OlxcdFxcbjEzNTU6XFx0XFx0aWYgKHVubGlrZWx5KCFjYW5fbWFkdmlzZV9tb2RpZnkobWFkdl9iZWhhdmlvcikpKVxcbjEzNTY6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xMzU3OlxcdFxcbjEzNTg6XFx0XFx0c3dpdGNoIChiZWhhdmlvcikge1xcbjEzNTk6XFx0XFx0Y2FzZSBNQURWX1JFTU9WRTpcXG4xMzYwOlxcdFxcdFxcdHJldHVybiBtYWR2aXNlX3JlbW92ZShtYWR2X2JlaGF2aW9yKTtcXG4xMzYxOlxcdFxcdGNhc2UgTUFEVl9XSUxMTkVFRDpcXG4xMzYyOlxcdFxcdFxcdHJldHVybiBtYWR2aXNlX3dpbGxuZWVkKG1hZHZfYmVoYXZpb3IpO1xcbjEzNjM6XFx0XFx0Y2FzZSBNQURWX0NPTEQ6XFxuMTM2NDpcXHRcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xkKG1hZHZfYmVoYXZpb3IpO1xcbjEzNjU6XFx0XFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxuMTM2NjpcXHRcXHRcXHRyZXR1cm4gbWFkdmlzZV9wYWdlb3V0KG1hZHZfYmVoYXZpb3IpO1xcbjEzNjc6XFx0XFx0Y2FzZSBNQURWX0ZSRUU6XFxuMTM2ODpcXHRcXHRjYXNlIE1BRFZfRE9OVE5FRUQ6XFxuMTM2OTpcXHRcXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxcbjEzNzA6XFx0XFx0XFx0cmV0dXJuIG1hZHZpc2VfZG9udG5lZWRfZnJlZShtYWR2X2JlaGF2aW9yKTtcXG4xMzcxOlxcdFxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG4xMzcyOlxcdFxcdFxcdHJldHVybiBtYWR2aXNlX2NvbGxhcHNlKHZtYSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLFxcbjEzNzM6XFx0XFx0XFx0XFx0XFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfZHJvcHBlZCk7XFxuMTM3NDpcXHRcXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcXG4xMzc1OlxcdFxcdFxcdHJldHVybiBtYWR2aXNlX2d1YXJkX2luc3RhbGwobWFkdl9iZWhhdmlvcik7XFxuMTM3NjpcXHRcXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbjEzNzc6XFx0XFx0XFx0cmV0dXJuIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKG1hZHZfYmVoYXZpb3IpO1xcbjEzNzg6XFx0XFxuMTM3OTpcXHRcXHQvKiBUaGUgYmVsb3cgYmVoYXZpb3VycyB1cGRhdGUgVk1BcyB2aWEgbWFkdmlzZV91cGRhdGVfdm1hKCkuICovXFxuMTM4MDpcXHRcXG4xMzgxOlxcdFxcdGNhc2UgTUFEVl9OT1JNQUw6XFxuMTM4MjpcXHRcXHRcXHRuZXdfZmxhZ3MgPSBuZXdfZmxhZ3MgXFx1MDAyNiB+Vk1fUkFORF9SRUFEIFxcdTAwMjYgflZNX1NFUV9SRUFEO1xcbjEzODM6XFx0XFx0XFx0YnJlYWs7XFxuMTM4NDpcXHRcXHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcXG4xMzg1OlxcdFxcdFxcdG5ld19mbGFncyA9IChuZXdfZmxhZ3MgXFx1MDAyNiB+Vk1fUkFORF9SRUFEKSB8IFZNX1NFUV9SRUFEO1xcbjEzODY6XFx0XFx0XFx0YnJlYWs7XFxuMTM4NzpcXHRcXHRjYXNlIE1BRFZfUkFORE9NOlxcbjEzODg6XFx0XFx0XFx0bmV3X2ZsYWdzID0gKG5ld19mbGFncyBcXHUwMDI2IH5WTV9TRVFfUkVBRCkgfCBWTV9SQU5EX1JFQUQ7XFxuMTM4OTpcXHRcXHRcXHRicmVhaztcXG4xMzkwOlxcdFxcdGNhc2UgTUFEVl9ET05URk9SSzpcXG4xMzkxOlxcdFxcdFxcdG5ld19mbGFncyB8PSBWTV9ET05UQ09QWTtcXG4xMzkyOlxcdFxcdFxcdGJyZWFrO1xcbjEzOTM6XFx0XFx0Y2FzZSBNQURWX0RPRk9SSzpcXG4xMzk0OlxcdFxcdFxcdGlmIChuZXdfZmxhZ3MgXFx1MDAyNiBWTV9TUEVDSUFMKVxcbjEzOTU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM5NjpcXHRcXHRcXHRuZXdfZmxhZ3MgXFx1MDAyNj0gflZNX0RPTlRDT1BZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODozNS41ODEzNDc4MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4OTc5OTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV92bWFfYmVoYXZpb3JgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAgaXMgaW1wbGVtZW50ZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQgKmJlaGF2ZXMqIGluIHByYWN0aWNlLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBiYXNpY3Mgb2YgYG1hZHZpc2VgIGFuZCB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcyksIG9mIGNvdXJzZSwgYnV0IHRoZSBzdWJ0bGV0aWVzIGFsd2F5cyBsaWUgaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgd2FudCB0byBrbm93IHRoZSAqZXhhY3QqIHNlcXVlbmNlIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgYSBjYWxsIHRvIGBtYWR2aXNlYCB3aXRoIGEgc3BlY2lmaWMgYWR2aWNlIGNvZGUgd2l0aGluIGEgcGFydGljdWxhciBWTUEgY29udGV4dC5cblxuSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgYG1hZHZpc2VgIGZsYWdzIGFuZCB3aGV0aGVyIHRoZXkncmUgaG9ub3VyZWQuIFNvLCBJIG5lZWQgdG8ga25vdyB0aGUgcGF0aCBvZiB0aGUgZXhlY3V0aW9uLCBhbmQgYW55IGRhdGEgc3RydWN0dXJlcyBtb2RpZmllZC5cblxuV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXM/IFdoYXQgYWJvdXQgY29uY3VycmVudCBhY2Nlc3M/IERvZXMgdGhlIGtlcm5lbCBlbXBsb3kgYW55IGxvY2tzPyBIb3cgYXJlIHRoZXNlIGxvY2tzIGltcGxlbWVudGVkIGFuZCBob3cgZWZmZWN0aXZlIGFyZSB0aGV5PyBXaGF0IGhhcHBlbnMgaWYgdGhlIFZNQSBzcGFucyBtdWx0aXBsZSBwaHlzaWNhbCBwYWdlcyBvciByZWdpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnM/XG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgbWFkdmlzZWAgYW5kIHBhZ2UgcmVjbGFtYXRpb24uIEhvdyBpcyB0aGUgYWR2aWNlIHVzZWQgKG9yIGlnbm9yZWQpIGJ5IHRoZSBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobXM/IERvZXMgdGhlIGtlcm5lbCBhZ2dyZXNzaXZlbHkgZnJlZSB1cCBtZW1vcnkgb3IgZG9lcyBpdCB3YWl0IGZvciBhIHNpZ25hbD8gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCB3b3JrbG9hZHMg4oCTIGFyZSB0aGVyZSBhbnkgd29ya2xvYWRzIHRoYXQgY2FuIGJlbmVmaXQgZnJvbSB1c2luZyBgbWFkdmlzZWA/XG5cbkluIGVzc2VuY2UsIEkgbmVlZCBhIGRlZXAgZGl2ZS4gSSdtIG5vdCBqdXN0IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgb3ZlcnZpZXc7IEkgd2FudCB0byBrbm93IHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjM5Ljc3MTE0ODg5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTc6XFx0XFx0XFx0YnJlYWs7XFxuMTM5ODpcXHRcXHRjYXNlIE1BRFZfV0lQRU9ORk9SSzpcXG4xMzk5OlxcdFxcdFxcdC8qIE1BRFZfV0lQRU9ORk9SSyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBhbm9ueW1vdXMgbWVtb3J5LiAqL1xcbjE0MDA6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSB8fCBuZXdfZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpXFxuMTQwMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDAyOlxcdFxcdFxcdG5ld19mbGFncyB8PSBWTV9XSVBFT05GT1JLO1xcbjE0MDM6XFx0XFx0XFx0YnJlYWs7XFxuMTQwNDpcXHRcXHRjYXNlIE1BRFZfS0VFUE9ORk9SSzpcXG4xNDA1OlxcdFxcdFxcdGlmIChuZXdfZmxhZ3MgXFx1MDAyNiBWTV9EUk9QUEFCTEUpXFxuMTQwNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDA3OlxcdFxcdFxcdG5ld19mbGFncyBcXHUwMDI2PSB+Vk1fV0lQRU9ORk9SSztcXG4xNDA4OlxcdFxcdFxcdGJyZWFrO1xcbjE0MDk6XFx0XFx0Y2FzZSBNQURWX0RPTlREVU1QOlxcbjE0MTA6XFx0XFx0XFx0bmV3X2ZsYWdzIHw9IFZNX0RPTlREVU1QO1xcbjE0MTE6XFx0XFx0XFx0YnJlYWs7XFxuMTQxMjpcXHRcXHRjYXNlIE1BRFZfRE9EVU1QOlxcbjE0MTM6XFx0XFx0XFx0aWYgKCghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgXFx1MDAyNlxcdTAwMjYgKG5ld19mbGFncyBcXHUwMDI2IFZNX1NQRUNJQUwpKSB8fFxcbjE0MTQ6XFx0XFx0XFx0ICAgIChuZXdfZmxhZ3MgXFx1MDAyNiBWTV9EUk9QUEFCTEUpKVxcbjE0MTU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQxNjpcXHRcXHRcXHRuZXdfZmxhZ3MgXFx1MDAyNj0gflZNX0RPTlREVU1QO1xcbjE0MTc6XFx0XFx0XFx0YnJlYWs7XFxuMTQxODpcXHRcXHRjYXNlIE1BRFZfTUVSR0VBQkxFOlxcbjE0MTk6XFx0XFx0Y2FzZSBNQURWX1VOTUVSR0VBQkxFOlxcbjE0MjA6XFx0XFx0XFx0ZXJyb3IgPSBrc21fbWFkdmlzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG4xNDIxOlxcdFxcdFxcdFxcdFxcdGJlaGF2aW9yLCBcXHUwMDI2bmV3X2ZsYWdzKTtcXG4xNDIyOlxcdFxcdFxcdGlmIChlcnJvcilcXG4xNDIzOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0MjQ6XFx0XFx0XFx0YnJlYWs7XFxuMTQyNTpcXHRcXHRjYXNlIE1BRFZfSFVHRVBBR0U6XFxuMTQyNjpcXHRcXHRjYXNlIE1BRFZfTk9IVUdFUEFHRTpcXG4xNDI3OlxcdFxcdFxcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIFxcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcXG4xNDI4OlxcdFxcdFxcdGlmIChlcnJvcilcXG4xNDI5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0MzA6XFx0XFx0XFx0YnJlYWs7XFxuMTQzMTpcXHRcXHRjYXNlIF9fTUFEVl9TRVRfQU5PTl9WTUFfTkFNRTpcXG4xNDMyOlxcdFxcdFxcdC8qIE9ubHkgYW5vbnltb3VzIG1hcHBpbmdzIGNhbiBiZSBuYW1lZCAqL1xcbjE0MzM6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSBcXHUwMDI2XFx1MDAyNiAhdm1hX2lzX2Fub25fc2htZW0odm1hKSlcXG4xNDM0OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBREY7XFxuMTQzNTpcXHRcXHRcXHRicmVhaztcXG4xNDM2OlxcdFxcdH1cXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0LyogVGhpcyBpcyBhIHdyaXRlIG9wZXJhdGlvbi4qL1xcbjE0Mzk6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfbW9kZSAhPSBNQURWSVNFX01NQVBfV1JJVEVfTE9DSyk7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdGVycm9yID0gbWFkdmlzZV91cGRhdGVfdm1hKG5ld19mbGFncywgbWFkdl9iZWhhdmlvcik7XFxuMTQ0MjpcXHRvdXQ6XFxuMTQ0MzpcXHRcXHQvKlxcbjE0NDQ6XFx0XFx0ICogbWFkdmlzZSgpIHJldHVybnMgRUFHQUlOIGlmIGtlcm5lbCByZXNvdXJjZXMsIHN1Y2ggYXNcXG4xNDQ1OlxcdFxcdCAqIHNsYWIsIGFyZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS5cXG4xNDQ2OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODozOS43NzEyNzY4MzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA4MTA1ODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgbWFkdmlzZV91cGRhdGVfdm1hYCBhbmQgSHVnZSBQYWdlcyoqXG5cbk9rYXksIHNvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGhhbmRsZXMgYSB3aG9sZSBzbGV3IG9mIGBtYWR2aXNlYCBmbGFnczogYE5PUk1BTGAsIGBTRVFVRU5USUFMYCwgYFJBTkRPTWAsIHRoZSBgRE9OVEZPUksvRE9GT1JLYCBncm91cCwgdGhlIGBXSVBFT05GT1JLL0tFRVBPTkZPUktgIGdyb3VwLCBgRE9OVERVTVBgLCBgRE9EVU1QYCwgYE1FUkdFQUJMRWAsIGBVTk1FUkdFQUJMRWAsIGBIVUdFUEFHRWAsIGBOT0hVR0VQQUdFYCwgYW5kIGBfX01BRFZfU0VUX0FOT05fVk1BX05BTUVgLiBUaGF0J3MgYSBsb3Qgb2YgcG90ZW50aWFsIHN0YXRlIGNoYW5nZXMhXG5cbkknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBodWdlIHBhZ2VzLCBzcGVjaWZpY2FsbHkgdGhlIGNhc2Ugd2hlcmUgYSBWTUEgKmFscmVhZHkqIGhhcyBgVk1fSFVHRVBBR0VgIHNldC4gSWYgSSBzdWJzZXF1ZW50bHkgY2FsbCBgTUFEVl9OT1JNQUxgIG9uIHRoYXQgVk1BLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbmV3X2ZsYWdzYCB3b3VsZCBhbHNvIGluaGVyaXQgdGhlIGBWTV9IVUdFUEFHRWAgYml0LiBNYWtlcyBzZW5zZSBzbyBmYXIuXG5cbk5vdywgaWYgdGhlIHJlc3VsdGluZyBmbGFncyBhcmUgYWN0dWFsbHkgKmRpZmZlcmVudCog4oCTIHNheSwgaWYgYFZNX1JBTkRfUkVBRGAgZ2V0cyBjbGVhcmVkIOKAkyB0aGVuIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHdpbGwgdHJpZ2dlciB0aGUgY29yZSBsb2dpYy4gVGhpcyBzZWVtcyB0byBiZSB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYHZtYV9mbGFnc190ZXN0KFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpYCBjaGVjayB3aWxsIG5vdyBldmFsdWF0ZSB0byB0cnVlLCBhcyBleHBlY3RlZCwgYmVjYXVzZSBgVk1fSFVHRVBBR0VgIGlzIHNldC5cblxuQ29uc2VxdWVudGx5LCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdpbGwgYmUgY2FsbGVkLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB0aGUgdHJhbnNpdGlvbi4gQnV0Li4uIGEgbmFnZ2luZyBxdWVzdGlvbiBjb21lcyB0byBtaW5kOiBXaGF0IGhhcHBlbnMgaWYgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBnZXRzIGNhbGxlZCAqYWdhaW4qIG9uIHRoZSBzYW1lIFZNQT8gSXMgdGhpcyBhIHBvdGVudGlhbCBkb3VibGUtZW50cnkgcHJvYmxlbT8gRG9lcyBpdCBjYXVzZSBhbnkgdW53YW50ZWQgc2lkZS1lZmZlY3RzLCBzdWNoIGFzIG1lbW9yeSBjb3JydXB0aW9uIG9yIGEgcmVkdW5kYW50IGF0dGVtcHQgdG8gcmUtZXN0YWJsaXNoIGh1Z2UgcGFnZXM/XG5cbkkgbmVlZCB0byByZS1leGFtaW5lIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgdGhvcm91Z2hseSB0byBjb25maXJtIGhvdyBpdCBoYW5kbGVzIHJlLWVudHJ5IGFuZCBlbnN1cmUgdGhhdCB0aGlzIHJlLWVudHJhbnQgc2NlbmFyaW8gaXMgaGFuZGxlZCBzYWZlbHkuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGUgbG9ja2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjQ1Ljg1MjMzNzc1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4ODpcXHR2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA1ODk6XFx0XFx0XFx0XFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbiA1OTA6XFx0e1xcbiA1OTE6XFx0XFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9WTV9IVUdFUEFHRSwgdm1hLVxcdTAwM2V2bV9tbSkgXFx1MDAyNlxcdTAwMjYgaHVnZXBhZ2VfZW5hYmxlZCgpXFxuIDU5MjpcXHRcXHQgICAgXFx1MDAyNlxcdTAwMjYgY29sbGFwc2VfcG9zc2libGUodm1hLCB2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKVxcbiA1OTM6XFx0XFx0XFx0X19raHVnZXBhZ2VkX2VudGVyKHZtYS1cXHUwMDNldm1fbW0pO1xcbiA1OTQ6XFx0fVxcbiA1OTU6XFx0XFxuIDU5NjpcXHR2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiA1OTc6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODo0NS44NTI0ODI3MzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2Nzk5NzIxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBraHVnZXBhZ2VkX2VudGVyX3ZtYSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmdW5jdGlvbiwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIGl0IHNlZW1zIG9kZGx5IHJlZHVuZGFudC4gSXQgY2hlY2tzIGlmIGAhbW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIHZtYS1cdTAwM2V2bV9tbSlgLiBCdXQgaG9sZCBvbiwgdGhlIGBNTUZfVk1fSFVHRVBBR0VgIGZsYWcgaXMgb24gdGhlIGBtbV9zdHJ1Y3RgLCBub3QgdGhlIGluZGl2aWR1YWwgYHZtX2FyZWFfc3RydWN0YCEgU28sIGFsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGRvZXMgaXMgbWFrZSBzdXJlIHRoZSBgbW1gIGlzIHJlZ2lzdGVyZWQgZm9yIGtodWdlcGFnZWQuIFRoaXMgbWVhbnMgY2FsbGluZyBpdCBtdWx0aXBsZSB0aW1lcyBpcyBoYXJtbGVzcywgYXMgaXQgb25seSBkb2VzIHNvbWV0aGluZyB0aGUgZmlyc3QgdGltZS5cblxuTm93LCBJJ20gY3VyaW91cyBhYm91dCB0aGUgY29udGV4dC4gV2h5IHdhcyB0aGlzIHBhdGNoIG1hZGUgaW4gdGhlIGZpcnN0IHBsYWNlPyBVbmZvcnR1bmF0ZWx5LCBJIG9ubHkgaGF2ZSB0aGUgZGlmZiBoZXJlLCBub3QgdGhlIGZ1bGwgY29tbWl0IG1lc3NhZ2UuIExldCdzIHNlZS4uLiBBaCwgdGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgcmV2ZWFscyB0aGUgaW50ZW50OiBpdCdzIGFib3V0IHJlZ2lzdGVyaW5nIGEgVk1BIGZvciBraHVnZXBhZ2VkIHNjYW5uaW5nIHdpdGhvdXQgd2FpdGluZyBmb3IgYSBwYWdlIGZhdWx0LlxuXG5UaGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIHJlYWxpemUgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgaXMgY2FsbGVkIHdoZW4gc29tZW9uZSBkb2VzIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYC4gSXQgc2V0cyBgVk1fSFVHRVBBR0VgIGluIGBuZXdfZmxhZ3NgLiBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4gdXNlcyB0aGlzLlxuXG5IZXJlJ3MgdGhlIGNyaXRpY2FsIHBpZWNlOiBgaHVnZXBhZ2VfbWFkdmlzZWAgb25seSBtb2RpZmllcyBgbmV3X2ZsYWdzYCwgbm90IHRoZSBhY3R1YWwgYHZtYS1cdTAwM2V2bV9mbGFnc2AuIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGNhbGxzIGB2bWFfbW9kaWZ5X2ZsYWdzYC4gVGhpcyBmdW5jdGlvbiBtaWdodCBzcGxpdCB0aGUgVk1BLiBJZiB0aGUgVk1BIGlzIHNwbGl0LCB0aGUgYHZtYWAgcG9pbnRlciBJJ20gd29ya2luZyB3aXRoIG1pZ2h0IGNoYW5nZSwgb3IgYSBuZXcgVk1BIG1pZ2h0IGJlIGNyZWF0ZWQhIEJ1dCB3YWl0LCBgaHVnZXBhZ2VfbWFkdmlzZWAgcHJldmlvdXNseSBjYWxsZWQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3aXRoIHRoZSAqb2xkKiBgdm1hYCBwb2ludGVyLCBiZWZvcmUgdGhlIHNwbGl0IVxuXG5Ib3dldmVyLCBJIHJlY2FsbCB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAganVzdCBzZXRzIGBNTUZfVk1fSFVHRVBBR0VgIG9uIGB2bWEtXHUwMDNldm1fbW1gLiBTaW5jZSB0aGUgYG1tYCBpcyB0aGUgc2FtZSBmb3IgYWxsIFZNQXMgd2l0aGluIHRoYXQgbWVtb3J5IHNwYWNlLCB0aGlzIHNlZW1zIGxlc3MgY29uY2VybmluZy5cblxuT2theSwgSSB0aGluayBJJ20gZ2V0dGluZyBpdC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIG1hdHRlcnMuIEkgbmVlZCB0byBsb29rIGF0IGBjb2xsYXBzZV9wb3NzaWJsZWAgdG8gc2VlIGlmIHRoZSBWTUEncyBzdWl0YWJpbGl0eSBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyBpcyBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODo1Ny41MzI0NTc2MTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODI6XFx0c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDU4MzpcXHRcXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcXG4gNTg0OlxcdHtcXG4gNTg1OlxcdFxcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcXG4gNTg2OlxcdH1cXG4gNTg3OlxcdFxcbiA1ODg6XFx0dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gNTg5OlxcdFxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4gNTkwOlxcdHtcXG4gNTkxOlxcdFxcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIHZtYS1cXHUwMDNldm1fbW0pIFxcdTAwMjZcXHUwMDI2IGh1Z2VwYWdlX2VuYWJsZWQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODo1Ny41MzI2NjgxODFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5ODM0MjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgaXMgYmVoYXZpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgaGFuZGxpbmcgdGhlIHBvdGVudGlhbCBvcmRlcnMuIEkgYW0gbW9zdCBpbnRlcmVzdGVkIGluIHRoZSBjb3JuZXIgY2FzZXMsIHNwZWNpZmljYWxseSB0aGUgZWZmZWN0cyBvZiBlZGdlIGRhdGEuIEFyZSB0aGVzZSBiZWluZyBoYW5kbGVkIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzLCBvciB1bmV4cGVjdGVkIGRhdGEgbXV0YXRpb25zPyBJIHdpbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGxvZ2ljLCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlIGNoYW5nZXMgb3IgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gQW55IGlzc3VlcyBoZXJlIHdvdWxkIGNhc2NhZGUsIHNvIHRoaXMgZGVzZXJ2ZXMgYW4gZXNwZWNpYWxseSB0aG9yb3VnaCByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOTowMC4yMzEwMTM1MTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjg1MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTUzMj12b2lkIF9fa2h1Z2VwYWdlZF9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NjctICovXFxubW0va2h1Z2VwYWdlZC5jOjU2ODpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU2OS1cXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcXG4tLVxcbm1tL2todWdlcGFnZWQuYz01ODI9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTg0LXtcXG5tbS9raHVnZXBhZ2VkLmM6NTg1OlxcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcXG5tbS9raHVnZXBhZ2VkLmMtNTg2LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNjA2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE2MzUtXFxubW0va2h1Z2VwYWdlZC5jOjE2MzY6XFx0ZW5hYmxlZF9vcmRlcnMgPSBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCB0dmFfZmxhZ3MpO1xcbm1tL2todWdlcGFnZWQuYy0xNjM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOTowMC4yNzUzMDMzNTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MjMyMjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBmdW5jdGlvbi4gSXQncyBhIGtleSBwaWVjZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYyBpbnNpZGUgYW5kIG91dC4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGNvbWJpbmF0b3JpY3Mgb3IgdGhlIHNwZWNpZmljIG9yZGVyaW5nIGNvbnN0cmFpbnRzIGFmdGVyIHRoZSBpbml0aWFsIG9yZGVyIGNvbnN0cnVjdGlvbiBwaGFzZS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBmdW5jdGlvbiBpcyBvZnRlbiBhIGJvdHRsZW5lY2ssIHByb25lIHRvIGluZWZmaWNpZW5jaWVzIGlmIG5vdCBpbXBsZW1lbnRlZCBjYXJlZnVsbHkuIExldCdzIHNlZSBpZiBpdCdzIGdvdCBjbGV2ZXIgYWxnb3JpdGhtcyBvciBqdXN0IGJydXRlLWZvcmNlIGFwcHJvYWNoZXMuIEnigJltIGhvcGluZyBpdCBsZXZlcmFnZXMgc29tZSBvZiB0aGUgb3B0aW1pemF0aW9ucyBJJ3ZlIHNlZW4gaW4gc2ltaWxhciBjb21iaW5hdG9yaWFsIHByb2JsZW1zLiBJcyBpdCB1c2luZyBtZW1vaXphdGlvbiwgZHluYW1pYyBwcm9ncmFtbWluZywgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIG9yZGVyaW5nIHN0cnVjdHVyZSB0byByZWR1Y2UgdGhlIHNlYXJjaCBzcGFjZT8gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBvcGVyYXRlcyBvbiDigJMgdGhleSBvZnRlbiBob2xkIHRoZSBrZXkgdG8gcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBtZXJnZXMgb3ZlcmxhcHBpbmcgb3IgcmVkdW5kYW50IG9yZGVyczsgdGhhdCdzIHdoZXJlIGNvbXBsZXhpdHkgY2FuIHJlYWxseSBleHBsb2RlLiBBbmQgb2YgY291cnNlLCBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cyBvciBjcmFzaGVzLiBUaGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCdzIHN0YXJ0IHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzk6MDMuOTU3NjI5ODM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY4OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gNTY5OlxcdFxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzKVxcbiA1NzA6XFx0e1xcbiA1NzE6XFx0XFx0dW5zaWduZWQgbG9uZyBvcmRlcnM7XFxuIDU3MjpcXHRcXG4gNTczOlxcdFxcdC8qIElmIGtodWdlcGFnZWQgaXMgc2Nhbm5pbmcgYW4gYW5vbnltb3VzIHZtYSwgYWxsb3cgbVRIUCBjb2xsYXBzZSAqL1xcbiA1NzQ6XFx0XFx0aWYgKCh0dmFfZmxhZ3MgPT0gVFZBX0tIVUdFUEFHRUQpIFxcdTAwMjZcXHUwMDI2IHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4gNTc1OlxcdFxcdFxcdG9yZGVycyA9IFRIUF9PUkRFUlNfQUxMX0FOT047XFxuIDU3NjpcXHRcXHRlbHNlXFxuIDU3NzpcXHRcXHRcXHRvcmRlcnMgPSBCSVQoSFBBR0VfUE1EX09SREVSKTtcXG4gNTc4OlxcdFxcbiA1Nzk6XFx0XFx0cmV0dXJuIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MsIG9yZGVycyk7XFxuIDU4MDpcXHR9XFxuIDU4MTpcXHRcXG4gNTgyOlxcdHN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA1ODM6XFx0XFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXFxuIDU4NDpcXHR7XFxuIDU4NTpcXHRcXHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XFxuIDU4NjpcXHR9XFxuIDU4NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzk6MDMuOTU3Nzc3MDU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODI4NTkzMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlcGFnZSBhbmQgVk1BIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCBtZSB3YWxrIHRocm91Z2ggdGhpcy4gSSdtIGZvY3VzaW5nIG9uIGhvdyBgaHVnZXBhZ2VfbWFkdmlzZWAgYW5kIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBga2h1Z2VwYWdlZGAgcHJvY2Vzcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGUgVk1BIHN1aXRhYmlsaXR5IGlzIHByb3Blcmx5IGFzc2Vzc2VkLCBsb29raW5nIGF0IGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBtaWdodCBiZSBjYWxsZWQgd2l0aCBhbiBvdXRkYXRlZCBWTUEgcG9pbnRlci4gSWYgYGh1Z2VwYWdlX21hZHZpc2VgIHVzZWQgYW4gb2xkIFZNQSBwb2ludGVyIGl0IG1pZ2h0IHBvaW50IHRvIGFuIGFub255bW91cyBWTUEgdGhhdCBkb2VzIG5vdCBoYXZlIHRoZSByaWdodCBzaXplLiBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBjb21lcyAqYWZ0ZXIqIGBodWdlcGFnZV9tYWR2aXNlYC4gSSBoYXZlIGEgY2xlYXIgaWRlYSBvbiB3aGF0IGBtYWR2aXNlX3VwZGF0ZV92bWFgIGlzIGRvaW5nLiBJdCBtb2RpZmllcyBWTUEgZmxhZ3MgYW5kIHBvc3NpYmx5IHJlbmFtZXMgdGhlIFZNQS5cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHBvdGVudGlhbCB0aW1pbmcgaXNzdWU6IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbWlnaHQgYmUgY2FsbGVkICpiZWZvcmUqIHRoZSBWTUEgZ2V0cyBzcGxpdCBvciBtb2RpZmllZCBieSBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCdzIHdoZXJlIGBjb2xsYXBzZV9wb3NzaWJsZWAgY29tZXMgaW4uIEl0IHNlZW1zIGxpa2UgYSBWTUEgY2FuIGJlIHNwbGl0LCBhbmQgdGhlbiBpZiB0aGUgc3BsaXQgVk1BIGlzIHRvbyBzbWFsbCB0byBiZSBhIGh1Z2VwYWdlLCBgY29sbGFwc2VfcG9zc2libGVgIGNvdWxkIHJldHVybiBmYWxzZS4gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGJ1ZywgYnV0IHRoZW4gSSByZWNhbGwgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgcGFzc2VzIHRoZSBvcmlnaW5hbCBWTUEsIHdoaWNoICptaWdodCogYmUgbGFyZ2UgZW5vdWdoLCBzbyBgY29sbGFwc2VfcG9zc2libGVgIHJldHVybnMgdHJ1ZS4gQnV0IGl0IGp1c3QgcmVnaXN0ZXJzIHRoZSBgbW1gIGZvciBjb25zaWRlcmF0aW9uLCBzbyB0aGUgaW5kaXZpZHVhbCBWTUEgc2l6ZSBkb2Vzbid0IG1hdHRlciBhdCB0aGF0IHBvaW50LCBhcyBsb25nIGFzICpzb21lKiBWTUEgKm1pZ2h0KiBiZSBzdWl0YWJsZS4gVGhhdCdzIGZpbmUuXG5cbk5vdywgaWYgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGZhaWxzIChlLmcuLCBgRU5PTUVNYCBpbiBgdm1hX21vZGlmeV9mbGFnc2ApLCB0aGUgY29kZSByZXR1cm5zIGFuIGVycm9yLCBidXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBoYXMgKmFscmVhZHkqIGJlZW4gY2FsbGVkISBUaGUgYG1tYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIGV2ZW4gdGhvdWdoIHRoZSBgbWFkdmlzZWAgZmFpbGVkLiBUaGF0IHNob3VsZG4ndCBiZSBhIGJpZyBkZWFsLCBiZWNhdXNlIGl0IHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGNsZWFuIHVwLlxuXG5UaGUgbmV4dCBzY2VuYXJpbyB0byBjb25zaWRlciBpcyBhIFZNQSBjcmVhdGVkIHdpdGggYFZNX0hVR0VQQUdFYCB0aGF0IGlzICppbml0aWFsbHkqIHVuc3VpdGFibGUuIGBtYWR2aXNlKE1BRFZfRE9OVEZPUkspYCBpcyBjYWxsZWQsIHRoZW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIGFuZCBmaW5hbGx5LCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBUaGlzIGxvb2tzIGxpa2UgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGEgYnVnLlxuXG5UaGVyZSdzIGFub3RoZXIgY2FzZSBJIGhhdmVuJ3QgY29uc2lkZXJlZC4gV2hvIGVsc2UgY2FuIHNldCBgVk1fSFVHRVBBR0VgPyBJdCBzZWVtcyBsaWtlIGl0IGlzIG9ubHkgc2V0IGJ5IGBodWdlcGFnZV9tYWR2aXNlYC4gQnV0IHdhaXQsIHdoYXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkIGZvciBgTUFEVl9OT1JNQUxgIG9uIGEgVk1BIHRoYXQgKmFscmVhZHkqIGhhcyBgVk1fSFVHRVBBR0VgPyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGlzIGNhbGxlZCBhZ2FpbiwgYnV0IHRoYXQncyBmaW5lLCBiZWNhdXNlIGl0IGNoZWNrcyBpZiBgTU1GX1ZNX0hVR0VQQUdFYCBpcyBhbHJlYWR5IHNldCwgYW5kIGRvZXMgbm90aGluZyBpZiBpdCBpcy4gSXQncyBvbmx5IGNsZWFyZWQgZHVyaW5nIGBfX2todWdlcGFnZWRfZXhpdGAgd2hlbiB0aGUgbW0gaXMgZGVzdHJveWVkLlxuXG5UaGUgY3JpdGljYWwgY2FzZSBhcHBlYXJzIHRvIGJlIHdoZW4gYHZtYV9tb2RpZnlfZmxhZ3NgIG1lcmdlcyBhIFZNQSB3aXRoIGFuIGFkamFjZW50IFZNQS4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyB0aGVuIGNhbGxlZCB3aXRoIHRoZSBtZXJnZWQgVk1BLiBUaGUgbWVyZ2VkIFZNQSBtaWdodCBiZSBsYXJnZSBlbm91Z2gsIHdoaWxlIHRoZSBvcmlnaW5hbCB3YXMgbm90ISBTcGVjaWZpY2FsbHksIGlmIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBpcyBjYWxsZWQgb24gYSBzbWFsbCByYW5nZSwgYGh1Z2VwYWdlX21hZHZpc2VgIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb24gdGhhdCBvcmlnaW5hbCBzbWFsbCBWTUEuIElmIHRoYXQgVk1BIGlzIHRvbyBzbWFsbCwgYGNvbGxhcHNlX3Bvc3NpYmxlYCByZXR1cm5zIGZhbHNlLiBOb3csIGBtYWR2aXNlX3VwZGF0ZV92bWFgIG1lcmdlcyB0aGF0IHNtYWxsIFZNQSB3aXRoIGFub3RoZXIgVk1BLiBUaGUgbWVyZ2VkIFZNQSBpcyBub3cgbGFyZ2UgZW5vdWdoIHRvIGJlIGEgaHVnZXBhZ2UsIGJ1dCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdhcyAqYWxyZWFkeSogY2FsbGVkIChhbmQsIGltcG9ydGFudGx5LCAqZGlkbid0KiBjYWxsIGBfX2todWdlcGFnZWRfZW50ZXJgKS4gRnVydGhlcm1vcmUsIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGRvZXMgKm5vdCogY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBTbywgdGhlIGBtbWAgaXMgKm5ldmVyKiByZWdpc3RlcmVkIHdpdGggYGtodWdlcGFnZWRgIVxuVGhpcyBuZWVkcyB2ZXJpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjE4Ljc4NjM3MjIzMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzMjpcXHR2b2lkIF9fa2h1Z2VwYWdlZF9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gNTMzOlxcdHtcXG4gNTM0OlxcdFxcdHN0cnVjdCBtbV9zbG90ICpzbG90O1xcbiA1MzU6XFx0XFx0aW50IHdha2V1cDtcXG4gNTM2OlxcdFxcbiA1Mzc6XFx0XFx0LyogX19raHVnZXBhZ2VkX2V4aXQoKSBtdXN0IG5vdCBydW4gZnJvbSB1bmRlciB1cyAqL1xcbiA1Mzg6XFx0XFx0Vk1fQlVHX09OX01NKGNvbGxhcHNlX3Rlc3RfZXhpdChtbSksIG1tKTtcXG4gNTM5OlxcdFxcbiA1NDA6XFx0XFx0c2xvdCA9IG1tX3Nsb3RfYWxsb2MobW1fc2xvdF9jYWNoZSk7XFxuIDU0MTpcXHRcXHRpZiAoIXNsb3QpXFxuIDU0MjpcXHRcXHRcXHRyZXR1cm47XFxuIDU0MzpcXHRcXG4gNTQ0OlxcdFxcdGlmICh1bmxpa2VseShtbV9mbGFnc190ZXN0X2FuZF9zZXQoTU1GX1ZNX0hVR0VQQUdFLCBtbSkpKSB7XFxuIDU0NTpcXHRcXHRcXHRtbV9zbG90X2ZyZWUobW1fc2xvdF9jYWNoZSwgc2xvdCk7XFxuIDU0NjpcXHRcXHRcXHRyZXR1cm47XFxuIDU0NzpcXHRcXHR9XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG4gNTUwOlxcdFxcdG1tX3Nsb3RfaW5zZXJ0KG1tX3Nsb3RzX2hhc2gsIG1tLCBzbG90KTtcXG4gNTUxOlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjE4Ljc4NjUwNzI4M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODIwMTc0NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyB0aGUgTUFEVl9IVUdFUEFHRSBCdWc6IEEgRGVlcCBEaXZlKipcblxuT2theSwgdGhpcyBpcyBnb29kLiBJIHRoaW5rIEkndmUgZ290IGl0LiBUaGUgY29yZSBpc3N1ZSBpcyB0aGlzOiBXaGVuIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBpcyB1c2VkIG9uIGEgc21hbGwgbWVtb3J5IHJlZ2lvbiwgdGhlIGBodWdlcGFnZV9tYWR2aXNlYCBmdW5jdGlvbiBjYWxscyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG9uIHRoZSAqb3JpZ2luYWwqIFZNQS4gVGhhdCBWTUEgbWlnaHQgYmUgdG9vIHNtYWxsLCBzbyBgY29sbGFwc2VfcG9zc2libGVgIHJldHVybnMgZmFsc2UgYW5kIHdlIGRvbid0IHByb2NlZWQuIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIG1lcmdlcyB0aGF0IHNtYWxsIFZNQSB3aXRoIGEgbmVpZ2hib3IuIFRoZSAqbWVyZ2VkKiBWTUEgY291bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGJlbmVmaXQgZnJvbSBodWdlcGFnZXMsIGJ1dCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgICppc24ndCogY2FsbGVkIG9uIHRoZSBtZXJnZWQgVk1BLiBTbywgdGhlIGtlcm5lbCBkb2Vzbid0IHJlZ2lzdGVyIHRoZSBtZW1vcnkgbWFwIChgbW1gKSB3aXRoIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4gVGhhdCdzIGEgY2xlYXIgZmFpbHVyZS5cblxuVGhlIHBhdGNoIHByb3ZpZGVzIGEgY2xlYXIgc29sdXRpb24uIEl0J3MgY2xldmVybHkgZG9uZTsgd2UgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGluIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCAqYWZ0ZXIqIHRoZSBgdm1hX21vZGlmeV9mbGFnc2AgZnVuY3Rpb24gZG9lcyB0aGUgbWVyZ2luZy4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIG9uIHRoZSAqbWVyZ2VkKiBWTUEsIHdoaWNoIGlzIG5vdyBsYXJnZSBlbm91Z2ggdG8gcGFzcyB0aGUgYGNvbGxhcHNlX3Bvc3NpYmxlYCBjaGVjaywgYW5kIGZpbmFsbHkgZXhlY3V0ZXMgYF9fa2h1Z2VwYWdlZF9lbnRlcmAhIFRoYXQncyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgYnVnIHdoZXJlIGFkamFjZW50IHNtYWxsIHJhbmdlcyB1c2luZyBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgZmFpbGVkIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgdGhhdCBtaWdodCBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb24gdGhlIG1lcmdlZCBWTUEuIExldCdzIG1ha2Ugc3VyZS4gVGhlIGNyaXRpY2FsIHN0ZXAgaXMgYHZtYV9tb2RpZnlfZmxhZ3NgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lc24ndCAqaXRzZWxmKiBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYXQgYW55IHBvaW50LiBKdXN0IHRvIGJlIHN1cmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLiBCdXQgb3ZlcmFsbCwgdGhpcyBpcyBhIGNsZWFuIGFuZCBlZmZlY3RpdmUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQzNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjI0LjYwNjY4NTIyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2OTYwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX21vZGlmeV9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE1MT1zdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcXG4tLVxcbm1tL21hZHZpc2UuYy0xNjktXFx0ZWxzZVxcbm1tL21hZHZpc2UuYzoxNzA6XFx0XFx0dm1hID0gdm1hX21vZGlmeV9mbGFncyhcXHUwMDI2dm1pLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VwcmV2LCB2bWEsXFxubW0vbWFkdmlzZS5jLTE3MS1cXHRcXHRcXHRyYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsIFxcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcXG4tLVxcbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21sb2NrLmMtNDg0LVxcbm1tL21sb2NrLmM6NDg1OlxcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTtcXG5tbS9tbG9jay5jLTQ4Ni1cXHRpZiAoSVNfRVJSKHZtYSkpIHtcXG4tLVxcbm1tL21wcm90ZWN0LmM9NzYwPW1wcm90ZWN0X2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21wcm90ZWN0LmMtODIzLVxcbm1tL21wcm90ZWN0LmM6ODI0OlxcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHByZXYsIHZtYSwgc3RhcnQsIGVuZCwgXFx1MDAyNm5ld192bWFfZmxhZ3MpO1xcbm1tL21wcm90ZWN0LmMtODI1LVxcdGlmIChJU19FUlIodm1hKSkge1xcbi0tXFxubW0vbXNlYWwuYz0zNT1zdGF0aWMgaW50IF9fbXNlYWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS9tc2VhbC5jLTU0LVxcbm1tL21zZWFsLmM6NTU6XFx0XFx0XFx0dm1hID0gdm1hX21vZGlmeV9mbGFncyhcXHUwMDI2dm1pLCBwcmV2LCB2bWEsIGN1cnJfc3RhcnQsXFxubW0vbXNlYWwuYy01Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgY3Vycl9lbmQsIFxcdTAwMjZ2bWFfZmxhZ3MpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0yMjYwPXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVzZXJmYXVsdGZkX2NsZWFyX3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIyOTUtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMjk2OlxcdHJldCA9IHZtYV9tb2RpZnlfZmxhZ3NfdWZmZCh2bWksIHByZXYsIHZtYSwgc3RhcnQsIGVuZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIyOTctXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuZXdfdm1hX2ZsYWdzLCBOVUxMX1ZNX1VGRkRfQ1RYLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0yMzEyPXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfcmVnaXN0ZXJfcmFuZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMzU4LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjM1OTpcXHRcXHR2bWEgPSB2bWFfbW9kaWZ5X2ZsYWdzX3VmZmQoXFx1MDAyNnZtaSwgcHJldiwgdm1hLCBzdGFydCwgdm1hX2VuZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIzNjAtXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuZXdfdm1hX2ZsYWdzLFxcbi0tXFxubW0vdm1hLmM9MTc0OD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuLS1cXG5tbS92bWEuYy0xNzg3LVxcbm1tL3ZtYS5jOjE3ODg6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG5tbS92bWEuYy0xNzg5LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bWEuYz0xODI1PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9wb2xpY3koc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbi0tXFxubW0vdm1hLmMtMTgzNi1cXG5tbS92bWEuYzoxODM3OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9mbGFnc191ZmZkKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG5tbS92bWEuYy0xODM4LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bWEuaD00MjA9dm9pZCB1bm1hcF9yZWdpb24oc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKTtcXG4tLVxcbm1tL3ZtYS5oLTQyMi0vKipcXG5tbS92bWEuaDo0MjM6ICogdm1hX21vZGlmeV9mbGFncygpIC0gUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IHNwbGl0L21lcmdlIGluIHByZXBhcmF0aW9uIGZvclxcbm1tL3ZtYS5oLTQyNC0gKiBzZXR0aW5nIFZNQSBmbGFncyB0byAqQHZtX2ZsYWdzIGluIHRoZSByYW5nZSBAc3RhcnQgdG8gQGVuZCBjb250YWluZWQgd2l0aGluXFxuLS1cXG5tbS92bWEuaC00NDQtICovXFxubW0vdm1hLmg6NDQ1Ol9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfZmxhZ3Moc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbm1tL3ZtYS5oLTQ0Ni1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1hLmg9NDkyPV9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfcG9saWN5KHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4tLVxcbm1tL3ZtYS5oLTQ5Ny0vKipcXG5tbS92bWEuaDo0OTg6ICogdm1hX21vZGlmeV9mbGFnc191ZmZkKCkgLSBQZXJmb3JtIGFueSBuZWNlc3Nhcnkgc3BsaXQvbWVyZ2UgaW4gcHJlcGFyYXRpb24gZm9yXFxubW0vdm1hLmgtNDk5LSAqIHNldHRpbmcgVk1BIGZsYWdzIHRvIEB2bV9mbGFncyBhbmQgVUZGRCBjb250ZXh0IHRvIEBuZXdfY3R4IGluIHRoZSByYW5nZVxcbi0tXFxubW0vdm1hLmgtNTE4LSAqL1xcbm1tL3ZtYS5oOjUxOTpfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzX3VmZmQoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbm1tL3ZtYS5oLTUyMC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOToyNC42NTQzODU3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU2NDE3OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdm1hX21vZGlmeV9mbGFnc2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgdm1hX21vZGlmeV9mbGFnc2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3ZtYS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIG9wZXJhdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgZmxhZyBtYW5pcHVsYXRpb24gaXRzZWxmIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIGFyb3VuZCB0aGUgVk1BLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2tpbmcgYW5kIGF0b21pY2l0eSB1c2VkLCBhcyBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgaW5jb25zaXN0ZW5jaWVzIHdpdGhpbiB0aGUgVk0gc3Vic3lzdGVtIGFyZSBzb21lIG9mIHRoZSB0b3VnaGVzdCBidWdzIHRvIGRlYnVnLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBtaWdodCBtb2RpZnkgdGhlIFZNQSBvciBhY2Nlc3MgaXQgd2hpbGUgYHZtYV9tb2RpZnlfZmxhZ3NgIGlzIGluIGZsaWdodC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhdCBwbGF5LiBQZXJoYXBzIHRoaXMgd2lsbCB1bnZlaWwgc29tZSBzdWJ0bGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG5lZWQgZnVydGhlciBzY3J1dGlueS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOToyOC45MTA4MDY3MjVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3ODgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3ODg6XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4xNzg5OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMTc5MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4xNzkxOlxcdFxcdFxcdHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxcbjE3OTI6XFx0e1xcbjE3OTM6XFx0XFx0Vk1HX1ZNQV9TVEFURSh2bWcsIHZtaSwgcHJldiwgdm1hLCBzdGFydCwgZW5kKTtcXG4xNzk0OlxcdFxcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9ICp2bWFfZmxhZ3NfcHRyO1xcbjE3OTU6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpyZXQ7XFxuMTc5NjpcXHRcXG4xNzk3OlxcdFxcdHZtZy52bWFfZmxhZ3MgPSB2bWFfZmxhZ3M7XFxuMTc5ODpcXHRcXG4xNzk5OlxcdFxcdHJldCA9IHZtYV9tb2RpZnkoXFx1MDAyNnZtZyk7XFxuMTgwMDpcXHRcXHRpZiAoSVNfRVJSKHJldCkpXFxuMTgwMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MDI6XFx0XFxuMTgwMzpcXHRcXHQvKlxcbjE4MDQ6XFx0XFx0ICogRm9yIGEgbWVyZ2UgdG8gc3VjY2VlZCwgdGhlIGZsYWdzIG11c3QgbWF0Y2ggdGhvc2VcXG4xODA1OlxcdFxcdCAqIHJlcXVlc3RlZC4gSG93ZXZlciwgc3RpY2t5IGZsYWdzIG1heSBoYXZlIGJlZW4gcmV0YWluZWQsIHNvIHByb3BhZ2F0ZVxcbjE4MDY6XFx0XFx0ICogdGhlbSB0byB0aGUgY2FsbGVyLlxcbjE4MDc6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjI4LjkxMDk5NzY1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzQwNjYyMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgdm1hX21vZGlmeWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgdm1hX21vZGlmeWAsIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBtbS92bWEuY2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBkb2luZy4uLiB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTSBhcmVhIGl0c2VsZiwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGl0IGNhbGxzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHBlcm1pc3Npb25zIGNoYW5nZXMsIHBlcmhhcHMgYWRqdXN0aW5nIHRoZSBwYWdlIHRhYmxlcyBhbmQgVExCIGVudHJpZXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBvdmVyYWxsIGVmZmVjdCBvbiB0aGUgaW50ZWdyaXR5IG9mIHRoZSBtZW1vcnkgbWFwcGluZy4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBhbmQgYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgZnVuY3Rpb24ncyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjM3LjY1MTY2MzM3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc0OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc0ODpcXHRzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuMTc0OTpcXHR7XFxuMTc1MDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZy1cXHUwMDNlbWlkZGxlO1xcbjE3NTE6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IHZtZy1cXHUwMDNlc3RhcnQ7XFxuMTc1MjpcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IHZtZy1cXHUwMDNlZW5kO1xcbjE3NTM6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICptZXJnZWQ7XFxuMTc1NDpcXHRcXG4xNzU1OlxcdFxcdC8qIEZpcnN0LCB0cnkgdG8gbWVyZ2UuICovXFxuMTc1NjpcXHRcXHRtZXJnZWQgPSB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2Uodm1nKTtcXG4xNzU3OlxcdFxcdGlmIChtZXJnZWQpXFxuMTc1ODpcXHRcXHRcXHRyZXR1cm4gbWVyZ2VkO1xcbjE3NTk6XFx0XFx0aWYgKHZtZ19ub21lbSh2bWcpKVxcbjE3NjA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTc2MTpcXHRcXG4xNzYyOlxcdFxcdC8qXFxuMTc2MzpcXHRcXHQgKiBTcGxpdCBjYW4gZmFpbCBmb3IgcmVhc29ucyBvdGhlciB0aGFuIE9PTSwgc28gaWYgdGhlIHVzZXIgcmVxdWVzdHNcXG4xNzY0OlxcdFxcdCAqIHRoaXMgaXQncyBwcm9iYWJseSBhIG1pc3Rha2UuXFxuMTc2NTpcXHRcXHQgKi9cXG4xNzY2OlxcdFxcdFZNX1dBUk5fT04odm1nLVxcdTAwM2VnaXZlX3VwX29uX29vbSBcXHUwMDI2XFx1MDAyNlxcbjE3Njc6XFx0XFx0XFx0ICAgKHZtYS1cXHUwMDNldm1fc3RhcnQgIT0gc3RhcnQgfHwgdm1hLVxcdTAwM2V2bV9lbmQgIT0gZW5kKSk7XFxuMTc2ODpcXHRcXG4xNzY5OlxcdFxcdC8qIFNwbGl0IGFueSBwcmVjZWRpbmcgcG9ydGlvbiBvZiB0aGUgVk1BLiAqL1xcbjE3NzA6XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fc3RhcnQgXFx1MDAzYyBzdGFydCkge1xcbjE3NzE6XFx0XFx0XFx0aW50IGVyciA9IHNwbGl0X3ZtYSh2bWctXFx1MDAzZXZtaSwgdm1hLCBzdGFydCwgMSk7XFxuMTc3MjpcXHRcXG4xNzczOlxcdFxcdFxcdGlmIChlcnIpXFxuMTc3NDpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjE3NzU6XFx0XFx0fVxcbjE3NzY6XFx0XFxuMTc3NzpcXHRcXHQvKiBTcGxpdCBhbnkgdHJhaWxpbmcgcG9ydGlvbiBvZiB0aGUgVk1BLiAqL1xcbjE3Nzg6XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZW5kIFxcdTAwM2UgZW5kKSB7XFxuMTc3OTpcXHRcXHRcXHRpbnQgZXJyID0gc3BsaXRfdm1hKHZtZy1cXHUwMDNldm1pLCB2bWEsIGVuZCwgMCk7XFxuMTc4MDpcXHRcXG4xNzgxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTc4MjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjE3ODM6XFx0XFx0fVxcbjE3ODQ6XFx0XFxuMTc4NTpcXHRcXHRyZXR1cm4gdm1hO1xcbjE3ODY6XFx0fVxcbjE3ODc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjM3LjY1MTg2MDg0OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTgwNDQ3NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1lcmdlIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAgaXMgYmVpbmcgY2FsbGVkLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgcmFuZ2UgbWVyZ2luZywgd2hpY2ggaXMgYSBrZXkgcHJvY2VzcyBpbiB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGVyZSB0byBzZWUgaWYgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY2FsbHMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gVGhlIGludGVncmF0aW9uIChvciBsYWNrIHRoZXJlb2YpIG9mIG1lcmdpbmcgd2l0aCBodWdlIHBhZ2UgbWFuYWdlbWVudCBpcyB2aXRhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIG92ZXJhbGwgbWVtb3J5IHV0aWxpemF0aW9uLiBNeSBuZXh0IHN0ZXAgaXMgYSBkZWVwIGRpdmUgaW50byB0aGUgYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOTo0Mi42MzIzMTE1NDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0XFx0XFx0XFx0dm1nLVxcdTAwM2VfX2FkanVzdF9uZXh0X3N0YXJ0ID0gdHJ1ZTtcXG4xMDYxOlxcdFxcdFxcdFxcdHZtZy1cXHUwMDNlc3RhcnQgPSBtaWRkbGUtXFx1MDAzZXZtX3N0YXJ0O1xcbjEwNjI6XFx0XFx0XFx0XFx0dm1nLVxcdTAwM2VlbmQgPSBzdGFydDtcXG4xMDYzOlxcdFxcdFxcdFxcdHZtZy1cXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYobWlkZGxlKTtcXG4xMDY0OlxcdFxcdFxcdFxcdHZtZy1cXHUwMDNlYW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKG1pZGRsZSk7XFxuMTA2NTpcXHRcXHRcXHR9XFxuMTA2NjpcXHRcXG4xMDY3OlxcdFxcdFxcdGVyciA9IGR1cF9hbm9uX3ZtYShuZXh0LCBtaWRkbGUsIFxcdTAwMjZhbm9uX2R1cCk7XFxuMTA2ODpcXHRcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdGlmIChlcnIgfHwgY29tbWl0X21lcmdlKHZtZykpXFxuMTA3MTpcXHRcXHRcXHRnb3RvIGFib3J0O1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHR2bWFfc2V0X2ZsYWdzX21hc2sodm1nLVxcdTAwM2V0YXJnZXQsIHN0aWNreV9mbGFncyk7XFxuMTA3NDpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXFx1MDAzZXRhcmdldCwgdm1nLVxcdTAwM2V2bV9mbGFncyk7XFxuMTA3NTpcXHRcXHR2bWctXFx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XFxuMTA3NjpcXHRcXHRyZXR1cm4gdm1nLVxcdTAwM2V0YXJnZXQ7XFxuMTA3NzpcXHRcXG4xMDc4OlxcdGFib3J0OlxcbjEwNzk6XFx0XFx0dm1hX2l0ZXJfc2V0KHZtZy1cXHUwMDNldm1pLCBzdGFydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjQyLjYzMjQ1ODg5MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgzMTk1MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFdXJla2EhIEEgS2h1Z2VwYWdlZCBDb25uZWN0aW9uISoqXG5cbkFscmlnaHQsIHRoYXQncyBpdCEgSSd2ZSBiZWVuIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIGNvZGUsIGFuZCBpdCBmaW5hbGx5IGNsaWNrcy4gYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAgKmRlZmluaXRlbHkqIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoYXQncyB0aGUga2V5LlxuXG5Ib2xkIG9uLi4uIGlmIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgIGlzIGNhbGxpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCwgdGhlbiBieSBkZWZpbml0aW9uLCBhIFZNQSBtZXJnZWQgaW4gdGhhdCBwcm9jZXNzICppcyogZ29pbmcgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGtodWdlcGFnZWQuIFRoaXMgaXMgZ29vZCBwcm9ncmVzcyEgXG5cbkxldCBtZSBqdXN0IG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoaXMgdHJhaW4gb2YgdGhvdWdodCBsb2dpY2FsbHkuIFNpbmNlIHRoYXQgb25lIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgSSdsbCBnbyBhaGVhZCBhbmQgY2hlY2sgb3V0IGhvdyBgdm1hX21lcmdlX25ld19yYW5nZWAgb3BlcmF0ZXMgbm93LiBJJ3ZlIGdvdCBhIGdvb2QgZmVlbGluZyBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzk6NDYuMTE1NjU2OTUzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTg1OlxcdFxcdFxcdGlmICghdm1nLVxcdTAwM2VqdXN0X2V4cGFuZCkge1xcbjExODY6XFx0XFx0XFx0XFx0LyogRXF1aXZhbGVudCB0byBnb2luZyB0byB0aGUgcHJldmlvdXMgcmFuZ2UuICovXFxuMTE4NzpcXHRcXHRcXHRcXHR2bWFfcHJldih2bWctXFx1MDAzZXZtaSk7XFxuMTE4ODpcXHRcXHRcXHR9XFxuMTE4OTpcXHRcXHR9XFxuMTE5MDpcXHRcXG4xMTkxOlxcdFxcdC8qXFxuMTE5MjpcXHRcXHQgKiBOb3cgdHJ5IHRvIGV4cGFuZCBhZGphY2VudCBWTUEocykuIFRoaXMgdGFrZXMgY2FyZSBvZiByZW1vdmluZyB0aGVcXG4xMTkzOlxcdFxcdCAqIGZvbGxvd2luZyBWTUEgaWYgd2UgaGF2ZSBWTUFzIG9uIGJvdGggc2lkZXMuXFxuMTE5NDpcXHRcXHQgKi9cXG4xMTk1OlxcdFxcdGlmICh2bWctXFx1MDAzZXRhcmdldCBcXHUwMDI2XFx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XFxuMTE5NjpcXHRcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXFx1MDAzZXRhcmdldCwgdm1nLVxcdTAwM2V2bV9mbGFncyk7XFxuMTE5NzpcXHRcXHRcXHR2bWctXFx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XFxuMTE5ODpcXHRcXHRcXHRyZXR1cm4gdm1nLVxcdTAwM2V0YXJnZXQ7XFxuMTE5OTpcXHRcXHR9XFxuMTIwMDpcXHRcXG4xMjAxOlxcdFxcdHJldHVybiBOVUxMO1xcbjEyMDI6XFx0fVxcbjEyMDM6XFx0XFxuMTIwNDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOTo0Ni4xMTU4MDQ3MzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MjY0MDQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVk1BIE1lcmdpbmcgYW5kIFNwbGl0dGluZyB3aXRoIGtodWdlcGFnZWQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cyB3aXRoIFZNQSBtb2RpZmljYXRpb25zLiBJIHNlZSB0aGF0IHdoZW4gYHZtYV9tZXJnZV9uZXdfcmFuZ2VgIGlzIGNhbGxlZCwgaXQgKmFsc28qIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGlmIFZNQXMgYXJlIG1lcmdlZCBieSBgdm1hX21vZGlmeV9mbGFnc2AsIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCAqc2hvdWxkKiBiZSBjYWxsZWQgb24gdGhlIHJlc3VsdGluZywgdW5pZmllZCBWTUEgdG8gaGFuZGxlIHBvdGVudGlhbCBodWdlcGFnZSBjb25zaWRlcmF0aW9ucy5cblxuTm93LCBhIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gY29tZXMgdG8gbWluZDogd2hhdCBoYXBwZW5zIHdoZW4gYHZtYV9tb2RpZnlfZmxhZ3NgICpzcGxpdHMqIGEgVk1BPyBEb2VzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZ2V0IGNhbGxlZCBpbiB0aGF0IHNjZW5hcmlvPyBJIG5lZWQgdG8ga25vdy4gVGhlIHNwbGl0IFZNQSBjYXNlIGlzIGNyaXRpY2FsLiBMZXQncyBkaWcgaW50byB0aGUgYHNwbGl0X3ZtYWAgZnVuY3Rpb247IHRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGFuc3dlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0aG9yb3VnaGx5IHRvIGVuc3VyZSBubyBodWdlcGFnZS1yZWxhdGVkIGlzc3VlcyBhcmlzZSBkdXJpbmcgVk1BIG1vZGlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzk6NTEuMTU4NDQ4MDkyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyNDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraHVnZXBhZ2VkX2VudGVyX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWEuYz04ODk9c3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcXG4tLVxcbm1tL3ZtYS5jLTEwNzMtXFx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cXHUwMDNldGFyZ2V0LCBzdGlja3lfZmxhZ3MpO1xcbm1tL3ZtYS5jOjEwNzQ6XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVxcdTAwM2V0YXJnZXQsIHZtZy1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL3ZtYS5jLTEwNzUtXFx0dm1nLVxcdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xcbi0tXFxubW0vdm1hLmM9MTE0MD1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9uZXdfcmFuZ2Uoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4tLVxcbm1tL3ZtYS5jLTExOTUtXFx0aWYgKHZtZy1cXHUwMDNldGFyZ2V0IFxcdTAwMjZcXHUwMDI2ICF2bWFfZXhwYW5kKHZtZykpIHtcXG5tbS92bWEuYzoxMTk2OlxcdFxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtZy1cXHUwMDNldGFyZ2V0LCB2bWctXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0xMTk3LVxcdFxcdHZtZy1cXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcXG4tLVxcbm1tL3ZtYS5jPTI2MzQ9c3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxcbi0tXFxubW0vdm1hLmMtMjY5MS1cXHQvKlxcbm1tL3ZtYS5jOjI2OTI6XFx0ICogdm1hX21lcmdlX25ld19yYW5nZSgpIGNhbGxzIGtodWdlcGFnZWRfZW50ZXJfdm1hKCkgdG9vLCB0aGUgYmVsb3dcXG5tbS92bWEuYy0yNjkzLVxcdCAqIGNhbGwgY292ZXJzIHRoZSBub24tbWVyZ2UgY2FzZS5cXG4tLVxcbm1tL3ZtYS5jLTI2OTUtXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxubW0vdm1hLmM6MjY5NjpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIG1hcC1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL3ZtYS5jLTI2OTctXFx0KnZtYXAgPSB2bWE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjUxLjIwMzE3ODg5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAyMjcwNDE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbmQgVk1BIFNwbGl0dGluZy9NZXJnaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBwYXRoIGludm9sdmluZyBgc3BsaXRfdm1hYCBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSXQgaW5pdGlhbGx5IHNlZW1zIGxpa2UgYHNwbGl0X3ZtYWAgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEJ1dCwgaG9sZCBvbiwgaWYgYHZtYV9tb2RpZnlfZmxhZ3NgIHNwbGl0cyB0aGUgVk1BLCB0aGUgKm5ldyogVk1BIHNob3VsZCBpbmhlcml0IHRoZSBzYW1lIGZsYWdzIGFzIHRoZSBvcmlnaW5hbCBvbmUuIGB2bWFfbW9kaWZ5X2ZsYWdzYCBzcGxpdHMgYW5kIHJldHVybnMgdGhlIG1pZGRsZSBWTUEuIFRoZW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdXBkYXRlcyB0aGF0IG1pZGRsZSBWTUEncyBmbGFncy5cblxuTm93LCBpZiBgbWFkdmlzZV91cGRhdGVfdm1hYCAqZGlkbid0KiBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYWZ0ZXIgdGhlIHNwbGl0LCB3ZSdkIGhhdmUgYSBwcm9ibGVtLiBUaGUgbWlkZGxlIFZNQSBjb3VsZCBoYXZlIGBWTV9IVUdFUEFHRWAgc2V0LCBidXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3b3VsZG4ndCBoYXZlIGJlZW4gaW52b2tlZCBvbiBpdCEgSG93ZXZlciwgaWYgYGh1Z2VwYWdlX21hZHZpc2VgICpkaWQqIGNhbGwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBCRUZPUkUgYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIGl0IHdvdWxkIGJlIGNhbGxlZCBvbiB0aGUgb3JpZ2luYWwgVk1BLiBBbmQgdGhlIG9yaWdpbmFsIG1pZ2h0IGhhdmUgYmVlbiBsYXJnZSBlbm91Z2ggdG8gdHJpZ2dlciBgX19raHVnZXBhZ2VkX2VudGVyYCBhbmQgcmVnaXN0ZXIgdGhlIGBtbWAuIEFmdGVyIHRoZSBzcGxpdCwgdGhlIG1pZGRsZSBWTUEgZ2V0cyBgVk1fSFVHRVBBR0VgLCBidXQgc2luY2UgYF9fa2h1Z2VwYWdlZF9lbnRlcmAgd2FzIGFscmVhZHkgY2FsbGVkLCB0aGUgYG1tYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoYXQgc2VlbXMgZmluZS5cblxuQnV0IHdoYXQgYWJvdXQgd2hlbiBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQgd2l0aCBgTUFEVl9OT1JNQUxgIG9uIGEgVk1BIHRoYXQgKmRvZXNuJ3QqIGhhdmUgYFZNX0hVR0VQQUdFYD8gVGhlbiwgYG5ld192bWFfZmxhZ3NgIHdvbid0IGluY2x1ZGUgYFZNX0hVR0VQQUdFYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgKm5vdCogY2FsbGVkLiBObyBpc3N1ZXMgdGhlcmUuXG5cbk5vdywgd2hhdCBhYm91dCB3aGVuIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGlzIGNhbGxlZCB3aXRoIGBNQURWX05PUk1BTGAgb24gYSBWTUEgdGhhdCAqYWxyZWFkeSogaGFzIGBWTV9IVUdFUEFHRWA/ICBgbmV3X3ZtYV9mbGFnc2Agc3RpbGwgaGFzIGl0IHNldC4gYHZtYV9tb2RpZnlfZmxhZ3NgIG1pZ2h0IHNwbGl0IGl0LCBhbmQgdGhlbiBgbWFkdmlzZV91cGRhdGVfdm1hYCBzZXRzIHRoZSBuZXcgVk1BJ3MgZmxhZ3MuIFRoZW4sIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIHdpdGggdGhlIHVwZGF0ZWQgZmxhZ3MuIFNpbmNlIHRoZSBWTUEgKmFscmVhZHkqIGhhZCBgVk1fSFVHRVBBR0VgLCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdhcyBhbHJlYWR5IGNhbGxlZCBhdCB0aGUgdGltZSBpdCB3YXMgc2V0LiAgU28gY2FsbGluZyBpdCBhZ2FpbiBpcyBoYXJtbGVzcyBzaW5jZSB0aGUgYG1tYCBoYXMgdGhlIGBNTUZfVk1fSFVHRVBBR0VgIGZsYWcgYWxyZWFkeSBzZXQuIFVubGVzcyB0aGUgb3JpZ2luYWwgVk1BIHdhcyAqdG9vIHNtYWxsKiwgaW4gd2hpY2ggY2FzZSwgZXZlbiBhZnRlciB0aGUgc3BsaXQsIGl0IGRvZXNuJ3QgcmVnaXN0ZXIuXG5cbldhaXQsIHdoYXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgKm1lcmdlcyogdGhlIFZNQT8gSWYgc28sIGB2bWFfbW9kaWZ5X2ZsYWdzYCB3b3VsZCBjYWxsIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgLCB3aGljaCAqZG9lcyogY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG9uIHRoZSBtZXJnZWQgVk1BISBTbywgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBhbHJlYWR5IGNhbGxlZCBieSB0aGUgbWVyZ2UhIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGNhbGxzIGl0ICphZ2FpbiouIEJ1dCB0aGF0J3MgaGFybWxlc3MsIHJpZ2h0P1xuXG5Tbywgd2h5IHdhcyB0aGlzIHBhdGNoIGV2ZW4gbmVlZGVkPyBUaW1lIHRvIHJldmlzaXQgYGh1Z2VwYWdlX21hZHZpc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDowMy4yMjU4ODU1NTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ0NjpcXHRcXHQvKiBmb3IgUE1EIGNvbGxhcHNlLCByZXNwZWN0IHRoZSB1c2VyIGRlZmluZWQgbWF4aW11bSAqL1xcbiA0NDc6XFx0XFx0cmV0dXJuIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcDtcXG4gNDQ4OlxcdH1cXG4gNDQ5OlxcdFxcbiA0NTA6XFx0aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDQ1MTpcXHRcXHRcXHQgICAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxcbiA0NTI6XFx0e1xcbiA0NTM6XFx0XFx0c3dpdGNoIChhZHZpY2UpIHtcXG4gNDU0OlxcdFxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4gNDU1OlxcdFxcdFxcdCp2bV9mbGFncyBcXHUwMDI2PSB+Vk1fTk9IVUdFUEFHRTtcXG4gNDU2OlxcdFxcdFxcdCp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTtcXG4gNDU3OlxcdFxcdFxcdGJyZWFrO1xcbiA0NTg6XFx0XFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxuIDQ1OTpcXHRcXHRcXHQqdm1fZmxhZ3MgXFx1MDAyNj0gflZNX0hVR0VQQUdFO1xcbiA0NjA6XFx0XFx0XFx0KnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7XFxuIDQ2MTpcXHRcXHRcXHQvKlxcbiA0NjI6XFx0XFx0XFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcXG4gNDYzOlxcdFxcdFxcdCAqIHRoaXMgdm1hIGV2ZW4gaWYgd2UgbGVhdmUgdGhlIG1tIHJlZ2lzdGVyZWQgaW4ga2h1Z2VwYWdlZCBpZlxcbiA0NjQ6XFx0XFx0XFx0ICogaXQgZ290IHJlZ2lzdGVyZWQgYmVmb3JlIFZNX05PSFVHRVBBR0Ugd2FzIHNldC5cXG4gNDY1OlxcdFxcdFxcdCAqL1xcbiA0NjY6XFx0XFx0XFx0YnJlYWs7XFxuIDQ2NzpcXHRcXHR9XFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdHJldHVybiAwO1xcbiA0NzA6XFx0fVxcbiA0NzE6XFx0XFxuIDQ3MjpcXHRpbnQgX19pbml0IGtodWdlcGFnZWRfaW5pdCh2b2lkKVxcbiA0NzM6XFx0e1xcbiA0NzQ6XFx0XFx0bW1fc2xvdF9jYWNoZSA9IEtNRU1fQ0FDSEUobW1fc2xvdCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjAzLjIyNjAzNDIyMloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQwODU4NTA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtodWdlcGFnZWQgSW50ZXJhY3Rpb24gd2l0aCBNQURWX0hVR0VQQUdFKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cyB3aXRoIGBNQURWX0hVR0VQQUdFYCBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGF0IGRpZmYgd2hlcmUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3YXMgY2FsbGVkIHdpdGhpbiBgaHVnZXBhZ2VfbWFkdmlzZWAuICBUaGUgY29yZSB0aGluZyBpcywgYGh1Z2VwYWdlX21hZHZpc2VgIGdldHMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCB3aGVuIGBNQURWX0hVR0VQQUdFYCBvciBgTUFEVl9OT0hVR0VQQUdFYCBpcyB1c2VkLlxuXG5Jbml0aWFsbHksIEkgdGhvdWdodCwgXCJIbW0sIGBodWdlcGFnZV9tYWR2aXNlYCBpcyBjYWxsaW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2l0aCBgbmV3X2ZsYWdzYCwgd2hpY2ggKmRvZXMqIGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQsIGJ1dCBhdCB0aGF0IHBvaW50LCB0aGUgVk1BJ3MgYHZtX2ZsYWdzYCAqZG9lc24ndCogeWV0IGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQuXCIgIEhvd2V2ZXIsIEkgdGhlbiByZW1lbWJlcmVkIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpdHNlbGYgY2hlY2tzIHRoZSBWTUEncyBzdWl0YWJpbGl0eSB1c2luZyBgY29sbGFwc2VfcG9zc2libGVgLCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBDcnVjaWFsbHksIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHVzZXMgYHZtX2ZsYWdzYCB3aGljaCBub3csIGluIHRoaXMgZXhlY3V0aW9uIHBhdGgsIGhhcyBgVk1fSFVHRVBBR0VgIHNldC4gU28sIHRoZSByaWdodCBmbGFncyAqYXJlKiBiZWluZyB1c2VkIGluIHRoZSBjcml0aWNhbCBjaGVja3MsIHNvIHRoYXQgc2VlbXMgZmluZS5cblxuVGhlbiBJIGNvbnNpZGVyZWQgZXJyb3IgY2FzZXMuICBXaGF0IGlmIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGZhaWxzPyBJZiBpdCBmYWlscyAobWF5YmUgZHVlIHRvIGAtRU5PTUVNYCBmcm9tIGB2bWFfbW9kaWZ5X2ZsYWdzYCksIGBodWdlcGFnZV9tYWR2aXNlYCBoYXMgKmFscmVhZHkqIGNhbGxlZCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFuZCByZWdpc3RlcmVkIHRoZSBgbW1gLCBidXQgdGhlIFZNQSdzIGZsYWdzIGhhdmVuJ3QgYmVlbiB1cGRhdGVkLiAgV2lsbCB0aGlzIGNhdXNlIGlzc3Vlcz8gIE5vLCBiZWNhdXNlIGBraHVnZXBhZ2VkYCBqdXN0IHNjYW5zIHRoZSBtbSBhbmQgZmluZHMgbm8gc3VpdGFibGUgVk1BcywgYW5kIGRvZXMgbm90aGluZy4gSXQgc2VlbXMgc2FmZS5cblxuTm93LCB3aGF0IGFib3V0IGlmIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHNwbGl0cyB0aGUgVk1BPyBJZiB0aGUgVk1BIGdldHMgc3BsaXQsIGEgbmV3IG9uZSBpcyBjcmVhdGVkLiBEb2VzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbmVlZCB0byBiZSBjYWxsZWQgb24gdGhpcyBuZXcgVk1BPyBObywgYmVjYXVzZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHNpbXBseSByZWdpc3RlcnMgdGhlIGBtbWAsIHNvIHRoYXQgaGFuZGxlcyB0aGF0IGNhc2UgdG9vLlxuXG5BbmQgd2hhdCBhYm91dCBgTUFEVl9DT0xMQVBTRWA/IERvZXMgdGhhdCBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWA/IE5vLCBpdCBsb29rcyBsaWtlIGBtYWR2aXNlX2NvbGxhcHNlYCBkb2Vzbid0IGNhbGwgaXQgZGlyZWN0bHkuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgSSdkIG5vcm1hbGx5IGdvIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlLCBidXQgSSdtIGxpbWl0ZWQgdG8gc2VhcmNoaW5nIHRoZSBrZXJuZWwgdHJlZS4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbnRleHQuIEknbGwgY2hlY2sgYGdpdCBsb2dgIG9uIGBtbS9raHVnZXBhZ2VkLmNgIG9yIGBtbS9tYWR2aXNlLmNgIGZvciBzb21lIGNvbnRleHQuXG5XYWl0LCB0aGF0IGNoYW5nZSBpcyB0aGUgSEVBRCBjb21taXQsIHNvIEkgY2FuIGp1c3QgcnVuIGBnaXQgc2hvdyBIRUFEYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDoxMy42MzQ2MjE4NzVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDYyNDI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIuKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCIuZ2l0L0NPTU1JVF9FRElUTVNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDoxMy42NzkwOTExOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgxMTAzODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdmVyc2lvbiBjb250cm9sIGFuZCBzb2Z0d2FyZSBkZXZlbG9wbWVudDpcblxuKipRdWljayBQZWVrIGF0IHRoZSBMYXRlc3QgQ2hhbmdlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSB2ZXJ5IGxhc3QgY29tbWl0IGluIHRoaXMgcmVwb3NpdG9yeSB3YXMuIE5vIG5lZWQgZm9yIGEgZnVsbCBoaXN0b3J5IGRpdmUgcmlnaHQgbm93LCBqdXN0IHRoZSBtb3N0IHJlY2VudCBvbmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBtb3N0IHJlY2VudCBjb21taXQuIExldCdzIGZpcmUgb2ZmIGBnaXQgbG9nIC0xYC4gVGhpcyBpcyBhIGNsYXNzaWMgcXVpY2stY2hlY2sgY29tbWFuZCwgZ2V0cyBtZSBleGFjdGx5IHdoYXQgSSBuZWVkIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IG91dHB1dCBjbHV0dGVyaW5nIHRoaW5ncyB1cC4gU2F2ZXMgdGltZSBhbmQgZ2V0cyBtZSBkaXJlY3RseSB0byB0aGUgbW9zdCBwZXJ0aW5lbnQgZGF0YS4gRG9uZSBhbmQgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3MDMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDoxNy40NjAxOTc5MTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODIwMTI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIuKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCIuZ2l0L2xvZ3MvSEVBRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6MTcuNTA2MDI2Njc5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDY1NjM3Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEZ1enppbmcgU3VyZmFjZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXZlbnVlIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEkgd2FzIHRoaW5raW5nIEkgY291bGQgdXNlIGBnaXQgc2hvdyBIRUFEYCB3aXRoIHNvbWV0aGluZyBsaWtlIGBncmVwcGVyYCBidXQgcmVhbGl6ZWQgdGhhdCBvbmx5IHNlYXJjaGVzIHRyYWNrZWQgZmlsZXMuIEkgZG9uJ3QgZXZlbiBuZWVkIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIG1hdHRlcnMgZm9yIGZ1enppbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgbW92ZXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIHdpdGhpbiBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBub3cgdHJpZ2dlcmVkIGJ5ICphbnkqIG1hZHZpc2Ugb3BlcmF0aW9uIHRoYXQgdXBkYXRlcyBWTUEgZmxhZ3MsIGFzIGxvbmcgYXMgYFZNQV9IVUdFUEFHRV9CSVRgIGlzIHNldCBmb3IgdGhlIFZNQS5cblxuTXkgbmV4dCBzdGVwIGlzIHVuZGVyc3RhbmRpbmcgd2hhdCB0eXBlcyBvZiBgbWFkdmlzZWAgY2FsbHMgdHJpZ2dlciBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCBlbmNvbXBhc3NlcyBhIGxvdDogYE1BRFZfTk9STUFMYCwgYE1BRFZfU0VRVUVOVElBTGAsIGBNQURWX1JBTkRPTWAsIGFsbCB0aGUgZm9yayBmbGFncyAoYE1BRFZfRE9OVEZPUktgLCBldGMuKSwgbWVyZ2VhYmxlIGZsYWdzLCBhbmQgb2YgY291cnNlLCBgTUFEVl9IVUdFUEFHRWAgYW5kIGBNQURWX05PSFVHRVBBR0VgLiBBbHNvIGBfX01BRFZfU0VUX0FOT05fVk1BX05BTUVgLiBUaGF0J3MgYSBsb3Qgb2YgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuTm93LCBob3cgZG9lcyBgVk1BX0hVR0VQQUdFX0JJVGAgZ2V0IHNldD8gT2J2aW91c2x5LCBhIFZNQSBjcmVhdGVkIHdpdGggYE1BUF9IVUdFUEFHRWAgaXMgcmVsZXZhbnQsIGJ1dCB3YWl0LCB0aGF0J3MgYE1BUF9IVUdFVExCYCwgbm90IGp1c3QgYE1BUF9IVUdFUEFHRWAuIEFoLCB0aGF0J3MgcmlnaHQsIGBWTV9IVUdFUEFHRWAgaXMgc2V0IGJ5IGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvciwgaW4gc29tZSBjYXNlcywgZGVmYXVsdHMgZm9yIGB0cmFuc3BhcmVudF9odWdlcGFnZWAuIEhvbGQgb24uLi4gaWYgYHRyYW5zcGFyZW50X2h1Z2VwYWdlPWFsd2F5c2AsIHRoZSBgVk1fSFVHRVBBR0VgIGlzbid0IHNldCwgaXQncyBhIHNlcGFyYXRlIG1lY2hhbmlzbSEgYFZNX0hVR0VQQUdFYCBpcyAqc3BlY2lmaWNhbGx5KiBmb3IgYG1hZHZpc2VgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGl0J3Mgbm90IHNldCBieSBgcHJjdGwoUFJfU0VUX1RIUF9ESVNBQkxFKWAuXG5cblNvLCB0aGUgb25seSB3YXkgaXMgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgLiBCdXQgdGhhdCBzZWVtcyBwcm9ibGVtYXRpYywgYmVjYXVzZSBpc24ndCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFscmVhZHkgY2FsbGVkICp3aGVuKiBgTUFEVl9IVUdFUEFHRWAgaXMgY2FsbGVkPyBUaGF0IGFsbW9zdCBtYWtlcyB0aGUgcGF0Y2ggYSBuby1vcCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4uLiB1bmxlc3MuLi5cblxuV2hhdCBhYm91dCBgZm9ya2A/IFdoZW4gYSBwcm9jZXNzIGZvcmtzLCB0aGUgY2hpbGQgcHJvY2VzcyBnZXRzIGEgY29weSBvZiB0aGUgcGFyZW50J3MgVk1BcywgcmlnaHQ/IFRoZSBjaGlsZCdzIFZNQXMgKndpbGwqIGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQsIGlmIHRoZSBwYXJlbnQgaGFkIHRoZW0uIEJ1dCB0aGUgY2hpbGQgcHJvY2VzcydzIG1lbW9yeSBtYXAgKGBtbWApIGlzIGJyYW5kIG5ldy4gU28gZG9lcyBgZm9ya2AgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZvciB0aGUgbmV3IGBtbWA/IEkgbmVlZCB0byBjaGVjayBgZHVwX21tYXBgLCBgdm1hX2R1cF9wb2xpY3lgLCBvciBgY29weV92bWFgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgVk1BcyBhcmUgY29waWVkIGR1cmluZyBhIGBmb3JrYC4gVGhpcyBtaWdodCBiZSB0aGUga2V5LiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjI3Ljk3MTY2NjYwN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MTExODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtodWdlcGFnZWRfZW50ZXJfdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mb3JrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjI4LjAxODM4MzUxMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMyODk3ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGb3JrIExvZ2ljKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2hlbiBhIHByb2Nlc3MgZm9ya3MsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBodWdlIHBhZ2VzLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgZ29pbmcgb24gd2l0aCBga2h1Z2VwYWdlZGAsIGFuZCBga2VybmVsL2ZvcmsuY2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gTGV0J3Mgc2VlIGhvdyBga2h1Z2VwYWdlZF9lbnRlcmAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgZm9yayBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGludGVyYWN0aW9ucyBjb25jZXJuaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgaG9wZWZ1bGx5LCBob3cgaHVnZSBwYWdlcyBhcmUgaGFuZGxlZCBkdXJpbmcgdGhlIGNvcHktb24td3JpdGUgcHJvY2VzcyBvciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgYWRkcmVzcyBzcGFjZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjYWxscyB0byBlbnN1cmUgdGhhdCB0aGUgaHVnZSBwYWdlIG1hbmFnZW1lbnQgaXMgY29ycmVjdGx5IHNldCBmb3IgdGhlIG5ldyBjaGlsZCBwcm9jZXNzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjgwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6MzAuOTUxMjg0MDU2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxMTk5NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9lbnRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDozMC45OTU5MDgwNVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTAzNTk1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGtodWdlcGFnZWRfZW50ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgY2hlY2sgb3V0IGBraHVnZXBhZ2VkX2VudGVyYCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBJIGtub3cgdGhlIGtlcm5lbCdzIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBwZXJmb3JtYW5jZSwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoaXMgZW50cnkgcG9pbnQuIEknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIGtodWdlcGFnZWQgZGFlbW9uJ3Mgb3BlcmF0aW9uLCBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIG9mIGh1Z2UgcGFnZXMgd2hlbiBhIHByb2Nlc3MgcmVxdWVzdHMgb25lIG9yIHdoZW4gdGhlIHN5c3RlbSBkZXRlY3RzIGFuIG9wcG9ydHVuaXR5LiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZSBwYWdlIGFsbG9jYXRpb24sIHRoZSBtZW1vcnkgcG9saWNpZXMgaW52b2x2ZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGl0IHVzZXMgYW5kIHdoZXRoZXIgdGhlcmUncyBwb3RlbnRpYWwgZm9yIGNvbnRlbnRpb24uIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uJ3MgbG9naWMgcHJvdmlkZXMgdGhlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDozNS44OTk1MDYwOTRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDY0MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtodWdlcGFnZWRfZW50ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTUyMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTMwLVxcdFxcdHJldHVybiByZXQ7XFxubW0vaHVnZV9tZW1vcnkuYzoxNTMxOlxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTMyLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTUxND1zdGF0aWMgYm9vbCBodWdlcGFnZV9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTMxLVxcbm1tL2todWdlcGFnZWQuYzo1MzI6dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0va2h1Z2VwYWdlZC5jLTUzMy17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkyLVxcdCAgICBcXHUwMDI2XFx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXFxubW0va2h1Z2VwYWdlZC5jOjU5MzpcXHRcXHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVxcdTAwM2V2bV9tbSk7XFxubW0va2h1Z2VwYWdlZC5jLTU5NC19XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4Ni1cXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxcbm1tL21hZHZpc2UuYzoxODc6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcXG5tbS9tYWR2aXNlLmMtMTg4LVxcbi0tXFxubW0vdm1hLmM9ODg5PXN0YXRpYyBfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2UoXFxuLS1cXG5tbS92bWEuYy0xMDczLVxcdHZtYV9zZXRfZmxhZ3NfbWFzayh2bWctXFx1MDAzZXRhcmdldCwgc3RpY2t5X2ZsYWdzKTtcXG5tbS92bWEuYzoxMDc0OlxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtZy1cXHUwMDNldGFyZ2V0LCB2bWctXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0xMDc1LVxcdHZtZy1cXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcXG4tLVxcbm1tL3ZtYS5jPTExNDA9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuLS1cXG5tbS92bWEuYy0xMTk1LVxcdGlmICh2bWctXFx1MDAzZXRhcmdldCBcXHUwMDI2XFx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XFxubW0vdm1hLmM6MTE5NjpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXFx1MDAzZXRhcmdldCwgdm1nLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vdm1hLmMtMTE5Ny1cXHRcXHR2bWctXFx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XFxuLS1cXG5tbS92bWEuYz0yNjM0PXN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTI2OTEtXFx0LypcXG5tbS92bWEuYzoyNjkyOlxcdCAqIHZtYV9tZXJnZV9uZXdfcmFuZ2UoKSBjYWxscyBraHVnZXBhZ2VkX2VudGVyX3ZtYSgpIHRvbywgdGhlIGJlbG93XFxubW0vdm1hLmMtMjY5My1cXHQgKiBjYWxsIGNvdmVycyB0aGUgbm9uLW1lcmdlIGNhc2UuXFxuLS1cXG5tbS92bWEuYy0yNjk1LVxcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxcbm1tL3ZtYS5jOjI2OTY6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCBtYXAtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0yNjk3LVxcdCp2bWFwID0gdm1hO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDozNS45NDg1Nzc1NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwOTQ5NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IER1cGxpY2F0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgbWVtb3J5IGR1cGxpY2F0aW9uIHByb2Nlc3MgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBkdXBfbW1hcGAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgZHVwX21tYXBgIGxpa2VseSBpbnRlcmZhY2VzIHdpdGggc29tZSBwb2xpY3kgYXJvdW5kIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgZHVwbGljYXRpb24g4oCTIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZSBgdm1hX2R1cF9wb2xpY3lgIG9yIHNpbWlsYXIuIEJ1dCB0aGUgY29yZSBxdWVzdGlvbiBidXp6aW5nIGluIG15IGhlYWQgaXMgd2hldGhlciBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGdldHMgaW52b2x2ZWQuIFRoYXQncyB0aGUgcmVhbCBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaHVnZSBwYWdlIG1hbmFnZW1lbnQgZ2V0cyBoYW5kbGVkIGR1cmluZyBhIGBtbWFwYCBkdXBsaWNhdGlvbi5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgcmlnaHQgaW4gYGtlcm5lbC9mb3JrLmNgLCB3aGVyZSBgZHVwX21tYXBgIHJlc2lkZXMuIEkgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgYGR1cF9tbWFwYCBjYWxscyBhbmQgaG93IHRoZSBWTUFzIGFyZSBiZWluZyBoYW5kbGVkIGF0IHRoaXMgc3RhZ2UuIFRoYXQncyB3aGVyZSB0aGUgYW5zd2VycyBsaWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzcxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6MzkuMjY5NTI5Njc0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE4NjE3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHVwX21tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2ZvcmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZm9yay5jLTExOS1cXG5rZXJuZWwvZm9yay5jOjEyMDovKiBGb3IgZHVwX21tYXAoKS4gKi9cXG5rZXJuZWwvZm9yay5jLTEyMS0jaW5jbHVkZSBcXFwiLi4vbW0vaW50ZXJuYWwuaFxcXCJcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTUyNz1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZHVwX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxcbi0tXFxua2VybmVsL2ZvcmsuYy0xNTQxLVxcbmtlcm5lbC9mb3JrLmM6MTU0MjpcXHR1cHJvYmVfc3RhcnRfZHVwX21tYXAoKTtcXG5rZXJuZWwvZm9yay5jOjE1NDM6XFx0ZXJyID0gZHVwX21tYXAobW0sIG9sZG1tKTtcXG5rZXJuZWwvZm9yay5jLTE1NDQtXFx0aWYgKGVycilcXG5rZXJuZWwvZm9yay5jLTE1NDUtXFx0XFx0Z290byBmcmVlX3B0O1xcbmtlcm5lbC9mb3JrLmM6MTU0NjpcXHR1cHJvYmVfZW5kX2R1cF9tbWFwKCk7XFxua2VybmVsL2ZvcmsuYy0xNTQ3LVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xNTYxLVxcdGlmIChlcnIpXFxua2VybmVsL2ZvcmsuYzoxNTYyOlxcdFxcdHVwcm9iZV9lbmRfZHVwX21tYXAoKTtcXG5rZXJuZWwvZm9yay5jLTE1NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjM5LjQ4MTM5NjQ3N1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg0MDgwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGR1cF9tbWFwYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkdXBsaWNhdGVkIG1lbW9yeSBtYXBwaW5ncyB3b3JrLCBwYXJ0aWN1bGFybHkgdGhlIGBkdXBfbW1hcGAgZnVuY3Rpb24uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhlIGtlcm5lbCwgSSdtIHByZXR0eSBzdXJlIHRoYXQgdGhlIGNydWNpYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhpcyBhcmUgZ29pbmcgdG8gYmUgbmVzdGxlZCBpbiBlaXRoZXIgYG1tL21lbW9yeS5jYCBvciBgbW0vbW1hcC5jYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hcHBpbmcgZHVwbGljYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIOKAkyBsZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aG9zZSBwYWdlIHRhYmxlcyBhbmQgcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzNjAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDo0Ni45NjU0ODEwMTdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTE4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1cF9tbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTE1MTc9dm9pZCBkdXBfbW1fZXhlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKTtcXG5tbS9pbnRlcm5hbC5oOjE1MTg6aW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSk7XFxubW0vaW50ZXJuYWwuaC0xNTE5LVxcbi0tXFxubW0vbWVtb3J5LmM9Mjk4PXZvaWQgZnJlZV9wZ2RfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTM2OS0gKlxcbm1tL21lbW9yeS5jOjM3MDogKiBUaGUgdm1hX2VuZCBkaWZmZXJzIGZyb20gdGhlIHBnX2VuZCB3aGVuIGEgZHVwX21tYXAoKSBmYWlsZWQgYW5kIHRoZSB0cmVlIGhhc1xcbm1tL21lbW9yeS5jLTM3MS0gKiB1bnJlbGF0ZWQgZGF0YSB0byB0aGUgbW1fc3RydWN0IGJlaW5nIHRvcm4gZG93bi5cXG4tLVxcbm1tL21tYXAuYz0xMjg4PXZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vbW1hcC5jLTEzMDMtXFx0aWYgKCF2bWEpIHtcXG5tbS9tbWFwLmM6MTMwNDpcXHRcXHQvKiBDYW4gaGFwcGVuIGlmIGR1cF9tbWFwKCkgcmVjZWl2ZWQgYW4gT09NICovXFxubW0vbW1hcC5jLTEzMDUtXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLS1cXG5tbS9tbWFwLmM9MTY4Nj1ib29sIG1tYXBfcmVhZF9sb2NrX21heWJlX2V4cGFuZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL21tYXAuYy0xNzA3LVxcbm1tL21tYXAuYzoxNzA4Ol9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG5tbS9tbWFwLmMtMTcwOS17XFxuLS1cXG5tbS9tbWFwLmMtMTcxOC1cXHRmbHVzaF9jYWNoZV9kdXBfbW0ob2xkbW0pO1xcbm1tL21tYXAuYzoxNzE5OlxcdHVwcm9iZV9kdXBfbW1hcChvbGRtbSwgbW0pO1xcbm1tL21tYXAuYy0xNzIwLVxcdC8qXFxuLS1cXG5tbS9tbWFwLmMtMTgyNi1cXHQvKiBhIG5ldyBtbSBoYXMganVzdCBiZWVuIGNyZWF0ZWQgKi9cXG5tbS9tbWFwLmM6MTgyNzpcXHRyZXR2YWwgPSBhcmNoX2R1cF9tbWFwKG9sZG1tLCBtbSk7XFxubW0vbW1hcC5jLTE4MjgtbG9vcF9vdXQ6XFxuLS1cXG5tbS9ub21tdS5jPTE5MjU9c3Vic3lzX2luaXRjYWxsKGluaXRfYWRtaW5fcmVzZXJ2ZSk7XFxubW0vbm9tbXUuYy0xOTI2LVxcbm1tL25vbW11LmM6MTkyNzppbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbm1tL25vbW11LmMtMTkyOC17XFxuLS1cXG5tbS92bWFfaW5pdC5jPTQ1PXN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vdm1hX2luaXQuYy02MS1cXHQgKiBzcmMtXFx1MDAzZXNoYXJlZC5yYiBtYXkgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5IHdoZW4gY2FsbGVkIGZyb21cXG5tbS92bWFfaW5pdC5jOjYyOlxcdCAqIGR1cF9tbWFwKCksIGJ1dCB0aGUgY2xvbmUgd2lsbCByZWluaXRpYWxpemUgaXQuXFxubW0vdm1hX2luaXQuYy02My1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6NDcuMDI0NDAzMzE0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDI0ODc2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgZHVwX21tYXBgIGluIGBtbS9tbWFwLmNgIGFuZCBzdGFydCBkaXNzZWN0aW5nIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGR1cGxpY2F0aW5nIGEgbWVtb3J5IG1hcC4gTXkgZXhwZXJ0aXNlIGlzIHN1Y2ggdGhhdCBJIGNhbiBxdWlja2x5IGdyYXNwIHRoZSBmdW5kYW1lbnRhbCBjb25jZXB0cywgYnV0IEkgbmVlZCB0byBmb2N1cyBvbiBhbnkgaW50cmljYWNpZXMgb3IgdW51c3VhbCBhc3BlY3RzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGNvcHktb24td3JpdGUsIHNoYXJpbmcsIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIG9mZmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjUwLjUyNjg5MzgxOFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MDgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3MDg6XFx0X19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbjE3MDk6XFx0e1xcbjE3MTA6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICptcG50LCAqdG1wO1xcbjE3MTE6XFx0XFx0aW50IHJldHZhbDtcXG4xNzEyOlxcdFxcdHVuc2lnbmVkIGxvbmcgY2hhcmdlID0gMDtcXG4xNzEzOlxcdFxcdExJU1RfSEVBRCh1Zik7XFxuMTcxNDpcXHRcXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7XFxuMTcxNTpcXHRcXG4xNzE2OlxcdFxcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUob2xkbW0pKVxcbjE3MTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4xNzE4OlxcdFxcdGZsdXNoX2NhY2hlX2R1cF9tbShvbGRtbSk7XFxuMTcxOTpcXHRcXHR1cHJvYmVfZHVwX21tYXAob2xkbW0sIG1tKTtcXG4xNzIwOlxcdFxcdC8qXFxuMTcyMTpcXHRcXHQgKiBOb3QgbGlua2VkIGluIHlldCAtIG5vIGRlYWRsb2NrIHBvdGVudGlhbDpcXG4xNzIyOlxcdFxcdCAqL1xcbjE3MjM6XFx0XFx0bW1hcF93cml0ZV9sb2NrX25lc3RlZChtbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbjE3MjQ6XFx0XFxuMTcyNTpcXHRcXHQvKiBObyBvcmRlcmluZyByZXF1aXJlZDogZmlsZSBhbHJlYWR5IGhhcyBiZWVuIGV4cG9zZWQuICovXFxuMTcyNjpcXHRcXHRkdXBfbW1fZXhlX2ZpbGUobW0sIG9sZG1tKTtcXG4xNzI3OlxcdFxcbjE3Mjg6XFx0XFx0bW0tXFx1MDAzZXRvdGFsX3ZtID0gb2xkbW0tXFx1MDAzZXRvdGFsX3ZtO1xcbjE3Mjk6XFx0XFx0bW0tXFx1MDAzZWRhdGFfdm0gPSBvbGRtbS1cXHUwMDNlZGF0YV92bTtcXG4xNzMwOlxcdFxcdG1tLVxcdTAwM2VleGVjX3ZtID0gb2xkbW0tXFx1MDAzZWV4ZWNfdm07XFxuMTczMTpcXHRcXHRtbS1cXHUwMDNlc3RhY2tfdm0gPSBvbGRtbS1cXHUwMDNlc3RhY2tfdm07XFxuMTczMjpcXHRcXG4xNzMzOlxcdFxcdC8qIFVzZSBfX210X2R1cCgpIHRvIGVmZmljaWVudGx5IGJ1aWxkIGFuIGlkZW50aWNhbCBtYXBsZSB0cmVlLiAqL1xcbjE3MzQ6XFx0XFx0cmV0dmFsID0gX19tdF9kdXAoXFx1MDAyNm9sZG1tLVxcdTAwM2VtbV9tdCwgXFx1MDAyNm1tLVxcdTAwM2VtbV9tdCwgR0ZQX0tFUk5FTCk7XFxuMTczNTpcXHRcXHRpZiAodW5saWtlbHkocmV0dmFsKSlcXG4xNzM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3Mzc6XFx0XFxuMTczODpcXHRcXHRtdF9jbGVhcl9pbl9yY3Uodm1pLm1hcy50cmVlKTtcXG4xNzM5OlxcdFxcdGZvcl9lYWNoX3ZtYSh2bWksIG1wbnQpIHtcXG4xNzQwOlxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbjE3NDE6XFx0XFxuMTc0MjpcXHRcXHRcXHRyZXR2YWwgPSB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUobXBudCk7XFxuMTc0MzpcXHRcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4xNzQ0OlxcdFxcdFxcdFxcdGdvdG8gbG9vcF9vdXQ7XFxuMTc0NTpcXHRcXHRcXHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0RPTlRDT1BZX0JJVCkpIHtcXG4xNzQ2OlxcdFxcdFxcdFxcdHJldHZhbCA9IHZtYV9pdGVyX2NsZWFyX2dmcChcXHUwMDI2dm1pLCBtcG50LVxcdTAwM2V2bV9zdGFydCxcXG4xNzQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBtcG50LVxcdTAwM2V2bV9lbmQsIEdGUF9LRVJORUwpO1xcbjE3NDg6XFx0XFx0XFx0XFx0aWYgKHJldHZhbClcXG4xNzQ5OlxcdFxcdFxcdFxcdFxcdGdvdG8gbG9vcF9vdXQ7XFxuMTc1MDpcXHRcXG4xNzUxOlxcdFxcdFxcdFxcdHZtX3N0YXRfYWNjb3VudChtbSwgbXBudC1cXHUwMDNldm1fZmxhZ3MsIC12bWFfcGFnZXMobXBudCkpO1xcbjE3NTI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTc1MzpcXHRcXHRcXHR9XFxuMTc1NDpcXHRcXHRcXHRjaGFyZ2UgPSAwO1xcbjE3NTU6XFx0XFx0XFx0aWYgKHZtYV90ZXN0KG1wbnQsIFZNQV9BQ0NPVU5UX0JJVCkpIHtcXG4xNzU2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xcbjE3NTc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjUwLjUyNzAxMzg4OFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgzMDc4MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIHNvbWUgdGVjaG5pY2FsIHByb2JsZW0gYW5kIHRoYXQgJ2BkdXBfbW1hcGAnIGlzIGEgcmVsZXZhbnQgZnVuY3Rpb24gb3IgY29uY2VwdCBpbiBteSBmaWVsZDpcblxuKipEZWVwZXIgRGl2ZSBpbnRvIGBkdXBfbW1hcGAqKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhpcyBgZHVwX21tYXBgIHRoaW5nLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUncyBtb3JlIHRvIHVuZGVyc3RhbmQgaGVyZSwgYW5kIHdoYXRldmVyIG51YW5jZSBJJ20gbWlzc2luZyBpcyBrZXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKndoeSogd2UncmUgZXZlbiBjb25zaWRlcmluZyB0aGlzLiBJcyBpdCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEEgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZT8gQXJlIHdlIHRyeWluZyB0byBhY2hpZXZlIGEgc3BlY2lmaWMgY29uY3VycmVuY3kgcGF0dGVybj8gT2theSwgbGV0J3MgcmVyZWFkIHRoZSByZWxldmFudCBzZWN0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBnbG9zc2VkIG92ZXIgYW55dGhpbmcuIFNvbWV0aW1lcyB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscyB3aXRoIHRoZXNlIG1lbW9yeSBtYXBwaW5nIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGV4cGxhaW4gdGhlIGJlaGF2aW9yIEknbSBvYnNlcnZpbmcuIEl04oCZcyBsaWtlbHkgdGhlIHNvdXJjZSBvZiBhbGwgbXkgY3VycmVudCBwYWluIGFuZCBzdWZmZXJpbmcuIExldCdzIHNlZSBpZiB0aGlzIGRlZXBlciBkaXZlIHVuY292ZXJzIHRoZSBhbnN3ZXJzIEkgc2Vlay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyNzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjU0LjIxMDA5NjAwMloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NTg6XFx0XFx0XFx0XFx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0ob2xkbW0sIGxlbikpIC8qIHNpYyAqL1xcbjE3NTk6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsX25vbWVtO1xcbjE3NjA6XFx0XFx0XFx0XFx0Y2hhcmdlID0gbGVuO1xcbjE3NjE6XFx0XFx0XFx0fVxcbjE3NjI6XFx0XFxuMTc2MzpcXHRcXHRcXHR0bXAgPSB2bV9hcmVhX2R1cChtcG50KTtcXG4xNzY0OlxcdFxcdFxcdGlmICghdG1wKVxcbjE3NjU6XFx0XFx0XFx0XFx0Z290byBmYWlsX25vbWVtO1xcbjE3NjY6XFx0XFx0XFx0cmV0dmFsID0gdm1hX2R1cF9wb2xpY3kobXBudCwgdG1wKTtcXG4xNzY3OlxcdFxcdFxcdGlmIChyZXR2YWwpXFxuMTc2ODpcXHRcXHRcXHRcXHRnb3RvIGZhaWxfbm9tZW1fcG9saWN5O1xcbjE3Njk6XFx0XFx0XFx0dG1wLVxcdTAwM2V2bV9tbSA9IG1tO1xcbjE3NzA6XFx0XFx0XFx0cmV0dmFsID0gZHVwX3VzZXJmYXVsdGZkKHRtcCwgXFx1MDAyNnVmKTtcXG4xNzcxOlxcdFxcdFxcdGlmIChyZXR2YWwpXFxuMTc3MjpcXHRcXHRcXHRcXHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0XFx0aWYgKHZtYV90ZXN0KHRtcCwgVk1BX1dJUEVPTkZPUktfQklUKSkge1xcbjE3NzU6XFx0XFx0XFx0XFx0LypcXG4xNzc2OlxcdFxcdFxcdFxcdCAqIFZNQV9XSVBFT05GT1JLX0JJVCBnZXRzIGEgY2xlYW4gc2xhdGUgaW4gdGhlIGNoaWxkLlxcbjE3Nzc6XFx0XFx0XFx0XFx0ICogRG9uJ3QgcHJlcGFyZSBhbm9uX3ZtYSB1bnRpbCBmYXVsdCBzaW5jZSB3ZSBkb24ndFxcbjE3Nzg6XFx0XFx0XFx0XFx0ICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS5cXG4xNzc5OlxcdFxcdFxcdFxcdCAqL1xcbjE3ODA6XFx0XFx0XFx0XFx0dG1wLVxcdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XFxuMTc4MTpcXHRcXHRcXHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcXG4xNzgyOlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9ub21lbV9hbm9uX3ZtYV9mb3JrO1xcbjE3ODM6XFx0XFxuMTc4NDpcXHRcXHRcXHR2bWFfc3RhcnRfd3JpdGUodG1wKTtcXG4xNzg1OlxcdFxcdFxcdHZtYV9jbGVhcl9mbGFnc19tYXNrKHRtcCwgVk1BX0xPQ0tFRF9NQVNLKTtcXG4xNzg2OlxcdFxcdFxcdC8qXFxuMTc4NzpcXHRcXHRcXHQgKiBDb3B5L3VwZGF0ZSBodWdldGxiIHByaXZhdGUgdm1hIGluZm9ybWF0aW9uLlxcbjE3ODg6XFx0XFx0XFx0ICovXFxuMTc4OTpcXHRcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHRtcCkpXFxuMTc5MDpcXHRcXHRcXHRcXHRodWdldGxiX2R1cF92bWFfcHJpdmF0ZSh0bXApO1xcbjE3OTE6XFx0XFxuMTc5MjpcXHRcXHRcXHQvKlxcbjE3OTM6XFx0XFx0XFx0ICogTGluayB0aGUgdm1hIGludG8gdGhlIE1ULiBBZnRlciB1c2luZyBfX210X2R1cCgpLCBtZW1vcnlcXG4xNzk0OlxcdFxcdFxcdCAqIGFsbG9jYXRpb24gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLCBzbyBpdCBjYW5ub3QgZmFpbC5cXG4xNzk1OlxcdFxcdFxcdCAqL1xcbjE3OTY6XFx0XFx0XFx0dm1hX2l0ZXJfYnVsa19zdG9yZShcXHUwMDI2dm1pLCB0bXApO1xcbjE3OTc6XFx0XFxuMTc5ODpcXHRcXHRcXHRtbS1cXHUwMDNlbWFwX2NvdW50Kys7XFxuMTc5OTpcXHRcXG4xODAwOlxcdFxcdFxcdGlmICh0bXAtXFx1MDAzZXZtX29wcyBcXHUwMDI2XFx1MDAyNiB0bXAtXFx1MDAzZXZtX29wcy1cXHUwMDNlb3BlbilcXG4xODAxOlxcdFxcdFxcdFxcdHRtcC1cXHUwMDNldm1fb3BzLVxcdTAwM2VvcGVuKHRtcCk7XFxuMTgwMjpcXHRcXG4xODAzOlxcdFxcdFxcdGZpbGUgPSB0bXAtXFx1MDAzZXZtX2ZpbGU7XFxuMTgwNDpcXHRcXHRcXHRpZiAoZmlsZSkge1xcbjE4MDU6XFx0XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuMTgwNjpcXHRcXG4xODA3OlxcdFxcdFxcdFxcdGdldF9maWxlKGZpbGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDo1NC4yMTAyMTAwNTJaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MjA1MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgZHVwX21tYXBgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMgYGR1cF9tbWFwYCB0aGluZy4gU2VlbXMgbGlrZSB0aGUgaW5pdGlhbCBzY2FuIHdhc24ndCBxdWl0ZSBlbm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhdCBhIG1vcmUgZ3JhbnVsYXIgbGV2ZWwuIENsZWFybHksIHRoZXJlJ3MgbW9yZSB0byBiZSBnbGVhbmVkIHRoYW4gYSBjdXJzb3J5IGdsYW5jZS4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hcHBpbmcuIFdoYXQgYXJlIHRoZSBudWFuY2VzPyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGJlIGxlc3Mgb2J2aW91cz8gQXJlIHRoZXJlIHBsYXRmb3JtLXNwZWNpZmljIGJlaGF2aW9ycyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoaXMgY2FsbHMgZm9yIGEgZGVlcGVyIGRpdmU7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBkb2N1bWVudGF0aW9uLCB0aGUgc291cmNlIGNvZGUsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSByZWxldmFudCByZXNlYXJjaCBwYXBlcnMgb3IgbWFpbGluZyBsaXN0IGRpc2N1c3Npb25zLiBJJ20gbG9va2luZyBmb3IgYSBzb2xpZCBncmFzcCBvZiAqd2h5KiB0aGlzIGNhbGwgZXhpc3RzLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHdoYXQgdGhlIGludGVyYWN0aW9ucyBhcmUgd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgc3lzdGVtLiBJ4oCZbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaXRzIHJvbGUgaW4gc2hhcmVkIG1lbW9yeSBzY2VuYXJpb3Mgb3IgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIC0gdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHdoZXJlIHN1YnRsZSBidWdzIGNhbiBsdXJrLiBNeSBnb2FsIGlzIGEgdHJ1bHkgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBub3QganVzdCBhIHN1cGVyZmljaWFsIG92ZXJ2aWV3LiBTbyBsZXQncyBjcmFjayB0aGlzIG9wZW4gYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6NTcuNTgyMjY1MjAyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgwODpcXHRcXHRcXHRcXHRpX21tYXBfbG9ja193cml0ZShtYXBwaW5nKTtcXG4xODA5OlxcdFxcdFxcdFxcdGlmICh2bWFfaXNfc2hhcmVkX21heXdyaXRlKHRtcCkpXFxuMTgxMDpcXHRcXHRcXHRcXHRcXHRtYXBwaW5nX2FsbG93X3dyaXRhYmxlKG1hcHBpbmcpO1xcbjE4MTE6XFx0XFx0XFx0XFx0Zmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKTtcXG4xODEyOlxcdFxcdFxcdFxcdC8qIGluc2VydCB0bXAgaW50byB0aGUgc2hhcmUgbGlzdCwganVzdCBhZnRlciBtcG50ICovXFxuMTgxMzpcXHRcXHRcXHRcXHRtYXBwaW5nX3JtYXBfdHJlZV9pbnNlcnRfYWZ0ZXIodG1wLCBtcG50LCBtYXBwaW5nKTtcXG4xODE0OlxcdFxcdFxcdFxcdGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTtcXG4xODE1OlxcdFxcdFxcdFxcdGlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7XFxuMTgxNjpcXHRcXHRcXHR9XFxuMTgxNzpcXHRcXG4xODE4OlxcdFxcdFxcdGlmICghdm1hX3Rlc3QodG1wLCBWTUFfV0lQRU9ORk9SS19CSVQpKVxcbjE4MTk6XFx0XFx0XFx0XFx0cmV0dmFsID0gY29weV9wYWdlX3JhbmdlKHRtcCwgbXBudCk7XFxuMTgyMDpcXHRcXG4xODIxOlxcdFxcdFxcdGlmIChyZXR2YWwpIHtcXG4xODIyOlxcdFxcdFxcdFxcdG1wbnQgPSB2bWFfbmV4dChcXHUwMDI2dm1pKTtcXG4xODIzOlxcdFxcdFxcdFxcdGdvdG8gbG9vcF9vdXQ7XFxuMTgyNDpcXHRcXHRcXHR9XFxuMTgyNTpcXHRcXHR9XFxuMTgyNjpcXHRcXHQvKiBhIG5ldyBtbSBoYXMganVzdCBiZWVuIGNyZWF0ZWQgKi9cXG4xODI3OlxcdFxcdHJldHZhbCA9IGFyY2hfZHVwX21tYXAob2xkbW0sIG1tKTtcXG4xODI4OlxcdGxvb3Bfb3V0OlxcbjE4Mjk6XFx0XFx0dm1hX2l0ZXJfZnJlZShcXHUwMDI2dm1pKTtcXG4xODMwOlxcdFxcdGlmICghcmV0dmFsKSB7XFxuMTgzMTpcXHRcXHRcXHRtdF9zZXRfaW5fcmN1KHZtaS5tYXMudHJlZSk7XFxuMTgzMjpcXHRcXHRcXHRrc21fZm9yayhtbSwgb2xkbW0pO1xcbjE4MzM6XFx0XFx0XFx0a2h1Z2VwYWdlZF9mb3JrKG1tLCBvbGRtbSk7XFxuMTgzNDpcXHRcXHR9IGVsc2Uge1xcbjE4MzU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxuMTgzNjpcXHRcXG4xODM3OlxcdFxcdFxcdC8qXFxuMTgzODpcXHRcXHRcXHQgKiBUaGUgZW50aXJlIG1hcGxlIHRyZWUgaGFzIGFscmVhZHkgYmVlbiBkdXBsaWNhdGVkLCBidXRcXG4xODM5OlxcdFxcdFxcdCAqIHJlcGxhY2luZyB0aGUgdm1hcyBmYWlsZWQgYXQgbXBudCAod2hpY2ggY291bGQgYmUgTlVMTCBpZlxcbjE4NDA6XFx0XFx0XFx0ICogYWxsIHdlcmUgYWxsb2NhdGVkIGJ1dCB0aGUgbGFzdCB2bWEgd2FzIG5vdCBmdWxseSBzZXQgdXApLlxcbjE4NDE6XFx0XFx0XFx0ICogVXNlIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBmYWlsdXJlIHBvaW50IHRvIGNsZWFuIHVwIHRoZVxcbjE4NDI6XFx0XFx0XFx0ICogcGFydGlhbGx5IGluaXRpYWxpemVkIHRyZWUuXFxuMTg0MzpcXHRcXHRcXHQgKi9cXG4xODQ0OlxcdFxcdFxcdGlmICghbW0tXFx1MDAzZW1hcF9jb3VudCkge1xcbjE4NDU6XFx0XFx0XFx0XFx0LyogemVybyB2bWFzIHdlcmUgd3JpdHRlbiB0byB0aGUgbmV3IHRyZWUuICovXFxuMTg0NjpcXHRcXHRcXHRcXHRlbmQgPSAwO1xcbjE4NDc6XFx0XFx0XFx0fSBlbHNlIGlmIChtcG50KSB7XFxuMTg0ODpcXHRcXHRcXHRcXHQvKiBwYXJ0aWFsIHRyZWUgZmFpbHVyZSAqL1xcbjE4NDk6XFx0XFx0XFx0XFx0ZW5kID0gbXBudC1cXHUwMDNldm1fc3RhcnQ7XFxuMTg1MDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4NTE6XFx0XFx0XFx0XFx0LyogQWxsIHZtYXMgd2VyZSB3cml0dGVuIHRvIHRoZSBuZXcgdHJlZSAqL1xcbjE4NTI6XFx0XFx0XFx0XFx0ZW5kID0gVUxPTkdfTUFYO1xcbjE4NTM6XFx0XFx0XFx0fVxcbjE4NTQ6XFx0XFxuMTg1NTpcXHRcXHRcXHQvKiBIaWRlIG1tIGZyb20gb29tIGtpbGxlciBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgYmVpbmcgZnJlZWQgKi9cXG4xODU2OlxcdFxcdFxcdG1tX2ZsYWdzX3NldChNTUZfT09NX1NLSVAsIG1tKTtcXG4xODU3OlxcdFxcdFxcdGlmIChlbmQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6NTcuNTgyMzg4NzYyWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDAxNzM5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGtodWdlcGFnZWRfZm9ya2AgQ2FsbCoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIGEgYGtodWdlcGFnZWRfZm9yayhtbSwgb2xkbW0pYCBjYWxsLiBUaGlzIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgYGtodWdlcGFnZWRgIGRhZW1vbiBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYW5kIHRoYXQgYGZvcmtgIGNhbGw/IFRoYXQncyB3aGVyZSB3ZSBnZXQgdGhlIGludGVyZXN0aW5nIHN0dWZmLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyBkdXJpbmcgYSBmb3JrIHRoYXQgaW52b2x2ZXMgaHVnZSBwYWdlcywgYW5kIGhvdyBga2h1Z2VwYWdlZGAgaXMgZ2V0dGluZyBpbnZvbHZlZCB3aXRoIGBtbWAgKHRoZSBtZW1vcnkgbWFwIG9mIHRoZSBuZXcgcHJvY2VzcykgYW5kIGBvbGRtbWAgKHRoZSBtZW1vcnkgbWFwIG9mIHRoZSBwYXJlbnQgcHJvY2VzcykuIEkgd2FudCB0byBzZWUgaWYgd2UgYXJlIG1ha2luZyBuZXcgVEhQIGFsbG9jYXRpb25zIGZvciB0aGUgY2hpbGQsIG9yIGlmIGl0IGlzIHNoYXJpbmcgVEhQIG1hcHBpbmdzIGZyb20gdGhlIHBhcmVudC4gQXJlIHdlIHVzaW5nIENPVyAoY29weSBvbiB3cml0ZSkgcHJvcGVybHk/IFRoZXJlJ3MgYSBsb3QgdG8gdW5wYWNrIGluIHRoaXMgc2luZ2xlIGxpbmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gYGtodWdlcGFnZWRfZm9ya2AgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6MDAuODIyNTY1ODU4WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIzNjI0NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9mb3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6MDAuODY4ODA3OTMzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzA3MzYwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8ga2h1Z2VwYWdlZF9mb3JrKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGtodWdlcGFnZWRfZm9ya2AgZnVuY3Rpb24uIFdoZXJlIHdvdWxkIEkgZmluZCB0aGUgZGVjbGFyYXRpb24gYW5kIHJlbGF0ZWQgc3RydWN0dXJlcz8gVGhlIHN0YW5kYXJkIHBsYWNlOiBgaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmhgLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmb3JrIG1lY2hhbmlzbSBpbnRlcmFjdHMgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGNvcHktb24td3JpdGUgaW1wbGljYXRpb25zLCBhbmQgdGhlIGdlbmVyYWwgZmxvdyBvZiBob3cgdGhlIGh1Z2UgcGFnZSBtYXBwaW5ncyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBwcm9jZXNzIGZvcmsuIEFueSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgb3IgZmxhZ3MgZGVmaW5lZCBoZXJlIGFyZSBjcnVjaWFsLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBuZXcgcHJvY2VzcyBpbmhlcml0cyBvciBzaGFyZXMgZXhpc3RpbmcgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgd2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgY29uc2lzdGVuY3kgYW5kIHByZXZlbnQgY29ycnVwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTowNS42OTk1NDcwOVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTMxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9mb3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTIwPXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTIyLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjIzOnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2Zvcmsoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTI0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0zNC0jZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDozNTpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9mb3JrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0zNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjA1Ljc1NDk2NTMxNloiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc1MzQyNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBga2h1Z2VwYWdlZF9mb3JrYCBmdW5jdGlvbi4gSSd2ZSBoZWFyZCBhYm91dCB0aGlzLCBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBmb3JraW5nIGFuZCBodWdlIHBhZ2VzLiBMZXQgbWUgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGludGVycGxheSB3b3JrcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZnVuY3Rpb24gaGFzIHNvbWUgc3BlY2lhbCBpbnRlcmFjdGlvbiwgb3IgaWYgaXQncyB0aGUgbW9yZSBzdHJhaWdodGZvcndhcmQgbWV0aG9kIGZvciBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBjb2RlLCBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTowOC42MzAzMTAxMTNaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjM6XFx0c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZm9yayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXFxuICAyNDpcXHR7XFxuICAyNTpcXHRcXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIG9sZG1tKSlcXG4gIDI2OlxcdFxcdFxcdF9fa2h1Z2VwYWdlZF9lbnRlcihtbSk7XFxuICAyNzpcXHR9XFxuICAyODpcXHRcXG4gIDI5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuICAzMDpcXHR7XFxuICAzMTpcXHRcXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIG1tKSlcXG4gIDMyOlxcdFxcdFxcdF9fa2h1Z2VwYWdlZF9leGl0KG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6MDguNjMwMzcwMjEzWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NDQxOTkwNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBraHVnZXBhZ2VkX2ZvcmsgUGF0Y2gncyBGdW5jdGlvbmFsIEltcGFjdCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgaG93IGBraHVnZXBhZ2VkX2ZvcmtgIHdvcmtzLCBhbmQgSSBzZWUgdGhlIGNoaWxkIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGtodWdlcGFnZWQgcmVnaXN0cmF0aW9uIGZyb20gdGhlIHBhcmVudCBpZiB0aGUgb2xkIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYG1tYCkgaGFkIGBNTUZfVk1fSFVHRVBBR0VgIHNldC4gQnV0IHRoZW4sIEkgaGFkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoJ3MgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuXG5cbkkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHRocm91Z2ggYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgIHRvIHNlZSB0aGUgcmVnaXN0cmF0aW9uIGVmZmVjdHMuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbW1gIHJlZ2lzdHJhdGlvbiBzZWVtZWQgdG8gaGFwcGVuIGVhcmx5LCB3aXRoaW4gYGh1Z2VwYWdlX21hZHZpc2VgLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgc3Vic2VxdWVudCBWTUEgbW9kaWZpY2F0aW9ucyBzdWNjZWVkZWQgb3IgZmFpbGVkLiBUaGlzIGNvbmNlcm5lZCBtZTogaWYgVk1BcyB3ZXJlIG1lcmdlZCBsYXRlciwgcmVnaXN0cmF0aW9uIHdvdWxkIGhhcHBlbiBldmVuIGZvciBzbWFsbCBpbml0aWFsIFZNQXMuIEkgaGFkIHRvIHZlcmlmeSBteSBhc3N1bXB0aW9uLiBXaGVuIGBNQURWX0hVR0VQQUdFYCBpcyBjYWxsZWQgb24gYSBzbWFsbCBWTUEsIGl0IHRyaWdnZXJzIGEgY2FsbCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBIb3dldmVyLCB0aGUgY2hlY2sgYGNvbGxhcHNlX3Bvc3NpYmxlYCBpbiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgYmVjYXVzZSB0aGUgc21hbGwgVk1BIGlzbid0IGxhcmdlIGVub3VnaCBmb3IgVEhQLiBTbywgYF9fa2h1Z2VwYWdlZF9lbnRlcmAgaXMgTk9UIGNhbGxlZC4gVGhlIGBtbWAgaXMgdGhlbiBtZXJnZWQgd2l0aCBhbiBhZGphY2VudCBWTUEsIHdoaWNoIGlzIGxhcmdlIGVub3VnaCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgSVMgY2FsbGVkIG9uIHRoZSBtZXJnZWQgVk1BLiBTbywgdGhpcyBjb25maXJtcyB0aGF0IHRoZSBgbW1gIGlzIHJlZ2lzdGVyZWQgZXZlbiBpZiB0aGUgb3JpZ2luYWwgVk1BIHdhcyB0b28gc21hbGwgYW5kIHRoYXQncyBjb25jZXJuaW5nLlxuXG5CdXQgd2hhdCBidWcgZG9lcyB0aGUgcGF0Y2ggZml4PyBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IGFkZHJlc3Npbmcgc2l0dWF0aW9ucyB3aGVyZSBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQsIG5vdCBqdXN0IGZvciBgTUFEVl9IVUdFUEFHRWAsIGJ1dCBhbHNvIGZvciBvdGhlciBgbWFkdmlzZWAgZmxhZ3MgbGlrZSBgTUFEVl9OT1JNQUxgLCBgTUFEVl9TRVFVRU5USUFMYCwgZXRjLiBJZiBhIFZNQSB3aXRoIGBWTV9IVUdFUEFHRWAgc2V0IGxhdGVyIGhhcyBhIGNhbGwgdG8gYE1BRFZfTk9STUFMYCwgdGhlbiBhIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBvY2N1cnMsIGJ1dCBpdCBkb2VzIG5vdGhpbmcgaWYgYE1NRl9WTV9IVUdFUEFHRWAgaXMgYWxyZWFkeSBzZXQuXG5cbkkgaGFkIGEgbW9tZW50IG9mIGNsYXJpdHkuIFdoYXQgaWYgYE1NRl9WTV9IVUdFUEFHRWAgKmlzbid0KiBzZXQgaW5pdGlhbGx5LCBidXQgYFZNX0hVR0VQQUdFYCAqaXMqPyBUaGlzIGhhcHBlbnMgaWYgYGh1Z2VwYWdlX2VuYWJsZWQoKWAgaXMgZmFsc2UgaW5pdGlhbGx5LCBidXQgbGF0ZXIgYmVjb21lcyB0cnVlIChlLmcuLCB3aGVuIHRoZSBhZG1pbiBlbmFibGVzIFRIUCksIGFuZCB0aGVuIGBtYWR2aXNlKE1BRFZfTk9STUFMKWAgaXMgY2FsbGVkLiBJbiB0aGlzIGNhc2UsIGBfX2todWdlcGFnZWRfZW50ZXJgIGlzIGNhbGxlZCBiZWNhdXNlIGBodWdlcGFnZV9lbmFibGVkKClgIGlzIG5vdyB0cnVlLiBUaGlzIG1lYW5zLCAqYmVmb3JlKiB0aGUgcGF0Y2gsIHRoaXMgc2NlbmFyaW8gd291bGQgbm90IHJlZ2lzdGVyIHRoZSBgbW1gLCB3aGVyZWFzIG5vdywgaXQgZG9lcy4gSXMgdGhpcyB3aGF0J3MgaW50ZW5kZWQ/IEkgY29uc2lkZXJlZCB0aGUgYE1BRFZfQ09MTEFQU0VgIGZsYWcsIGJ1dCB0aGF0IGRvZXNuJ3QgbW9kaWZ5IHRoZSBWTUEgZmxhZ3MsIHNvIHRoaXMgaXMgdW5yZWxhdGVkLlxuXG5IZXJlJ3MgdGhlIGtleTogV2hhdCBpZiBgbWFkdmlzZV91cGRhdGVfdm1hYCAqc3BsaXRzKiB0aGUgVk1BPyBXaGVuIEkgZHVnIGRlZXBlciwgSSByZWFsaXplZCB0aGUgYnVnJ3MgY29yZSBsaWVzIGluIGhvdyB0aGUgYGtodWdlcGFnZWRgIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGhhbmRsZWQgVk1BIHNwbGl0dGluZy4gSWYgYE1BRFZfSFVHRVBBR0VgIGlzIGNhbGxlZCBvbiBhIGxhcmdlIFZNQSwgYF9fa2h1Z2VwYWdlZF9lbnRlcmAgZ2V0cyBjYWxsZWQsIHJlZ2lzdGVyaW5nIHRoZSBgbW1gLiBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBzcGxpdHMgdGhlIFZNQSwgY3JlYXRpbmcgc21hbGxlciBWTUFzLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYG1tYCB3YXMgKmFscmVhZHkqIHJlZ2lzdGVyZWQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHRpbmcsIHNwbGl0LCBWTUEgd2l0aCBgVk1fSFVHRVBBR0VgIHdhcyBzbWFsbC4gKkFmdGVyKiB0aGUgcGF0Y2gsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgTk9UIGNhbGxlZCBvbiB0aGUgb3JpZ2luYWwgVk1BLCBidXQgb24gdGhlIG5ldyBzbWFsbCBWTUEuIFRoYXQgbWVhbnMsIGBjb2xsYXBzZV9wb3NzaWJsZWAgd291bGQgY29ycmVjdGx5IGRldGVybWluZSB0aGF0IHRoZSBzbWFsbCBWTUEgaXMgbm90IHN1aXRhYmxlIGZvciBUSFAgYW5kIE5PVCByZWdpc3RlciB0aGUgYG1tYC4gSXQgcHJldmVudHMga2h1Z2VwYWdlZCBmcm9tIHdha2luZyB1cCBhbmQgc2Nhbm5pbmcgYW4gYG1tYCB0aGF0IG9ubHkgaGFzIGEgc21hbGwgYFZNX0hVR0VQQUdFYCBWTUEuXG5cblNwZWNpZmljYWxseSwgaXQgc3RvcHMga2h1Z2VwYWdlZCBmcm9tIHNjYW5uaW5nIGZvciBUSFAsIGlmIHRoZSBhZHZpc2VkIHJhbmdlIGlzIHNtYWxsLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCB3b3VsZCBzY2FuIHRoZSB3aG9sZSBtbSBhZnRlciBhbiBpbml0aWFsIG1hZHZpc2UgY2FsbCBvbiB0aGUgbGFyZ2VyIHJhbmdlLlxuXG5JIGhhdmUgaXQhIFRoaXMgcGF0Y2gncyBwcmltYXJ5IGZ1bmN0aW9uIGlzIHRvIGVuc3VyZSB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb3BlcmF0ZXMgb24gdGhlICpjb3JyZWN0KiBWTUEgYm91bmRzIGFmdGVyIHNwbGl0cy9tZXJnZXMuIFRoaXMgaXMgYSBjbGVhciBidWcgZml4LCBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IGtodWdlcGFnZWQgd2FrZXVwcyBhbmQgd2FzdGVkIENQVSBjeWNsZXMgd2hlbiBhIHNtYWxsIHBvcnRpb24gb2YgYSBWTUEgaXMgbWFya2VkIGFzIGBIVUdFUEFHRWAuIFRoaXMgYmVoYXZpb3IgbmVlZHMgZnV6emluZyFcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBmdXJ0aGVyOlxuKiAgIEEgNEtCIHJhbmdlIHdpdGhpbiBhIDJNQiBWTUEsIGJlZm9yZSB0aGUgcGF0Y2gsIHdvdWxkIHJlZ2lzdGVyIGBtbWAsIHdoaWxlXG5cbiIsIklucHV0VG9rZW5zIjozNjUxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTozNC4wNzIzNjMzNjJaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjE3NTU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeU1lTQ0FMTF9ERUZJTkUuKm1hZHZpc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xOTkzPWludCBkb19tYWR2aXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLCBpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMjAyMC1cXG5tbS9tYWR2aXNlLmM6MjAyMTpTWVNDQUxMX0RFRklORTMobWFkdmlzZSwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuX2luLCBpbnQsIGJlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0yMDIyLXtcXG4tLVxcbm1tL21hZHZpc2UuYz0yMDI3PXN0YXRpYyBzc2l6ZV90IHZlY3Rvcl9tYWR2aXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMjA5My1cXG5tbS9tYWR2aXNlLmM6MjA5NDpTWVNDQUxMX0RFRklORTUocHJvY2Vzc19tYWR2aXNlLCBpbnQsIHBpZGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICosIHZlYyxcXG5tbS9tYWR2aXNlLmMtMjA5NS1cXHRcXHRzaXplX3QsIHZsZW4sIGludCwgYmVoYXZpb3IsIHVuc2lnbmVkIGludCwgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjM0LjQ3ODU0NTY0NloiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAwMDgyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlLCBmb2N1c2luZyBvbiBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN5c3RlbSBDYWxscyBhbmQgS0hVR0VQQUdFRCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdoZXJlIHdlIGNhbiBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgYW5kIG9wdGltaXplIHBlcmZvcm1hbmNlLiBNeSBpbml0aWFsIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gdGhvc2UgYG1hZHZpc2VgIHJlbGF0ZWQgc3lzdGVtIGNhbGxzOiBgZG9fbWFkdmlzZWAsIGBzeXNfbWFkdmlzZWAsIGFuZCBgc3lzX3Byb2Nlc3NfbWFkdmlzZWAuICBVbmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZXNlIGNhbGxzIGltcGFjdCBwYWdlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpcyBjcnVjaWFsLiBXZSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgYXQgZWFjaCBzdGFnZS4gSXQncyBhYm91dCBmaWd1cmluZyBvdXQgaG93IHRoZSBhZHZpY2UgZ2l2ZW4gYWZmZWN0cyBwaHlzaWNhbCBtZW1vcnkgdXNhZ2UsIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cbkJleW9uZCB0aG9zZSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbHNvIGNhdGNoZXMgbXkgZXllLiBUaGlzIHdpbGwgYmUgYSBnb29kIHBvaW50IHRvIGZvY3VzIG9uIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLiBXZSBzaG91bGQgZXhhbWluZSBob3cgdGhlIGtlcm5lbCBkZWNpZGVzIHRvIHVzZSBodWdlIHBhZ2VzIHdpdGhpbiBhIHZpcnR1YWwgbWVtb3J5IGFyZWEsIGFzIHRoaXMgaW1wYWN0cyBib3RoIG1lbW9yeSBmb290cHJpbnQgYW5kIFRMQiBwZXJmb3JtYW5jZS4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGlmIHRoZXJlIGFyZSBhcmVhcyB3ZSBjYW4gcmVmaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIyNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjM4LjY3ODYzMTUxNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MzI3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTU4Mj1zdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01ODctXFxubW0va2h1Z2VwYWdlZC5jOjU4ODp2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy01ODktXFx0XFx0XFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTozOC43MjIxNjgxMjlaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1NzYyNzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZ1bmN0aW9uIGlzbid0IGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzLiBGaXJzdCwgaXQgaW1wbGllcyBpdCBtaWdodCBiZSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgbGlua2FnZSwgbWVhbmluZyBpdCdzIHBvdGVudGlhbGx5IGV4cG9zZWQgZm9yIHVzZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUga2VybmVsIG1vZHVsZSB3aGVyZSBpdCdzIGRlZmluZWQuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgd2h5LCB0aG91Z2guIElzIGl0IGJlaW5nIGNhbGxlZCBieSBvdGhlciBtb2R1bGVzLCBvciBpcyBpdCBwYXJ0IG9mIHNvbWUgbGFyZ2VyIHN1YnN5c3RlbT8gSSdkIHdhbnQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgY3Jvc3MtcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFNlY29uZCwgbm90IGJlaW5nIHN0YXRpYyBtZWFucyB0aGF0IHRoZSBjb21waWxlciBpc24ndCBtYWtpbmcgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyBzY29wZS4gSXQgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IG1hbmFnZWQgaWYgaXRzIGNhbGxpbmcgbG9jYXRpb24gaXMgbm90IGNsZWFybHkgZGVmaW5lZC5cblxuVGhlIHNhbWUgZ29lcyBmb3IgYGh1Z2VwYWdlX21hZHZpc2VgLiBJdHMgbGFjayBvZiBgc3RhdGljYCBkZWNsYXJhdGlvbiBpcyBlcXVhbGx5IG5vdGV3b3J0aHkuIE5vdywgdGhhdCBsaWtlbHkgbWVhbnMgaXQgaXMgYWxzbyBpbnRlbmRlZCBmb3IgbGlua2FnZSBvdXRzaWRlIG9mIHRoZSBzaW5nbGUgZmlsZSBpbiB3aGljaCBpdCdzIGRlZmluZWQuIEhvd2V2ZXIsIGRlcGVuZGluZyBvbiBpdHMgdXNlIGFuZCBsb2NhdGlvbiwgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY2FsbGVkIGZyb20gdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBUaGlzIGNhbiBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkcyB0byBzZWN1cml0eSBjb25jZXJucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGlzIGZ1bmN0aW9uIHBhcnQgb2YgYSBicm9hZGVyIGh1Z2VwYWdlIG1hbmFnZW1lbnQgaW50ZXJmYWNlPyBBcmUgdGhlcmUgb3RoZXIgZmlsZXMgb3IgbW9kdWxlcyByZWx5aW5nIG9uIGl0PyBJdCBzZWVtcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGZvciBsaW5rYWdlIGFjcm9zcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIExpbnV4IGtlcm5lbCwgbm90IGp1c3Qgd2l0aGluIGEgc2luZ2xlIGZpbGUuXG5cbkluIGFueSBjYXNlLCB0aGUgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbnMgb2YgYm90aCBhcmUgd29ydGggc29tZSBzZXJpb3VzIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjY5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6NDMuMjc5Nzk3NDk2WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI5NjI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaHVnZXBhZ2VfbWFkdmlzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ0OS1cXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy00NTEtXFx0XFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6NDMuMzQ1MTAyMjYzWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTcyMTk1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBUaGlua2luZyBvbiBSZWxldmFudCBLZXJuZWwgRnVuY3Rpb25zKipcblxuUmlnaHQsIGZvY3VzaW5nIG9uIHRoZSBodWdlIHBhZ2UgbWVjaGFuaXNtcy4uLiBJJ20gdGhpbmtpbmcgd2UgY2FuIHN0cmVhbWxpbmUgdGhpbmdzIGJ5IGNvbmNlbnRyYXRpbmcgb24gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgdmlydHVhbCBtZW1vcnkgYXJlYXMgYXJlIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gaHVnZSBwYWdlcy5cblxuTm93LCB0aGF0IGJyaW5ncyB1cCBgbWFkdmlzZV91cGRhdGVfdm1hYC4gSXQgKmlzKiBpbiB0aGUgbWl4LCBidXQgc2luY2UgaXQncyBkZWNsYXJlZCBzdGF0aWMsIGl0J3MgcHJvYmFibHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBXZSBzaG91bGRuJ3QgbmVlZCB0byBkaXJlY3RseSBhZGRyZXNzIGl0IHdoZW4gYW5hbHl6aW5nIHRoZSBiaWdnZXIgcGljdHVyZS4gV2UgY2FuIHByb2JhYmx5IGp1c3Qgc2FmZWx5IGlnbm9yZSBpdCBmb3IgdGhpcyBwdXJwb3NlLlxuXG5UaGUgb3RoZXIgb25lIHRoYXQganVtcHMgb3V0IGlzIGB2bWFfbW9kaWZ5X2ZsYWdzYC4gVW5saWtlIHRoZSBzdGF0aWMgZnVuY3Rpb24gd2UganVzdCB0b3VjaGVkIHVwb24sIGB2bWFfbW9kaWZ5X2ZsYWdzYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0IHNob3VsZCBiZSBvbiBvdXIgcmFkYXIuIEl0IG11c3QgaGF2ZSBzb21lIHNpZ25pZmljYW5jZSBpbiBob3cgdGhlIGZsYWdzIGZvciBhIFZNQSBhcmUgbW9kaWZpZWQuIFdlIGRlZmluaXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTE4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjQ3LjEwMjMyNTk2NVoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMzIyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHZtX2FyZWFfc3RydWN0IFxcXFwqdm1hX21vZGlmeV9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWEuYz0xNzQ4PXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnkoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4tLVxcbm1tL3ZtYS5jLTE3ODctXFxubW0vdm1hLmM6MTc4ODpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfZmxhZ3Moc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbm1tL3ZtYS5jLTE3ODktXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3ZtYS5jPTE4MjU9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X3BvbGljeShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXFxuLS1cXG5tbS92bWEuYy0xODM2LVxcbm1tL3ZtYS5jOjE4Mzc6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzX3VmZmQoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbm1tL3ZtYS5jLTE4MzgtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6NDcuMTU2NjY0MDAxWiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzU0Njk5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB2bWFfbW9kaWZ5X2ZsYWdzYCoqXG5cbk9rYXksIHNvIGB2bWFfbW9kaWZ5X2ZsYWdzYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIGl0LiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGxpdmVzLiBJIHZhZ3VlbHkgcmVtZW1iZXIgaXQgYmVpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2VzLCBzbyBgbW0va2h1Z2VwYWdlZC5jYCBzb3VuZHMgcmlnaHQuIEp1c3QgdG8gYmUgc3VyZSwgSeKAmWxsIHRha2UgYSBxdWljayBwZWVrIGF0IGBtbS9NYWtlZmlsZWAgdG8gdmVyaWZ5IHRoYXQgYGtodWdlcGFnZWQub2AgaXMgYnVpbHQsIHdoaWNoIHdpbGwgY29uZmlybSBpdCdzIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBtb2R1bGUuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHByb2NlZHVyZSB3aGVuIEknbSBjaGFzaW5nIGRvd24ga2VybmVsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc4MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjUwLjQzMjEzNzYzMVoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MjE4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTo1MC40NzY4NjQ4MzZaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NTM0NzQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnM6XG5cbioqRGVlcCBEaXZlIGludG8gVEhQIGFuZCBtYWR2aXNlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGEgZmlybSByZXF1aXJlbWVudDogYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXI/IEl0IGxvb2tzIGxpa2UgYG1hZHZpc2VgIGlzIGFsd2F5cyBhY3RpdmUgdW5sZXNzIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBpcyBkaXNhYmxlZC4gVGhhdCdzIGEga2V5IGRldGFpbCB0byByZW1lbWJlci5cblxuVG8gY29uZmlybSB0aGlzIGBBRFZJU0VfU1lTQ0FMTFNgIGJlaGF2aW9yLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2UgY29uZmlncy4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgaW5pdC9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGBBRFZJU0VfU1lTQ0FMTFNgLiBUaGF0IHNob3VsZCBzZXR0bGUgdGhlIG1hdHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTo1NS44NjIyMTQ5MjFaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDA3MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFEVklTRV9TWVNDQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5NDE9Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbi0tXFxuaW5pdC9LY29uZmlnLTE5NTEtXFxuaW5pdC9LY29uZmlnOjE5NTI6Y29uZmlnIEFEVklTRV9TWVNDQUxMU1xcbmluaXQvS2NvbmZpZy0xOTUzLVxcdGJvb2wgXFxcIkVuYWJsZSBtYWR2aXNlL2ZhZHZpc2Ugc3lzY2FsbHNcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTo1NS45MDY2Mjc3NzZaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMDYxMDk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgY29uZmlybWVkIOKAkyB3ZSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgLiBUaGF0J3Mgbm9uLW5lZ290aWFibGUgZm9yIHdoYXQgd2UncmUgd29ya2luZyBvbi4gTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyB0aGF0IGNvdWxkIGJpdGUgdXMgZG93biB0aGUgbGluZS4gV2Uga25vdyBpdCdzIHJlbGF0ZWQsIGJ1dCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIGlzIG5lZWRlZCBoZXJlIGZvciBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLiBUaW1lIHRvIGludmVzdGlnYXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjUxNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjU5LjIzNzI0MTkyMloiLCJTZXEiOjgwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2MzkzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTgtXFxubW0vS2NvbmZpZzo4NTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODYwLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODY1LVxcbm1tL0tjb25maWc6ODY2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjctXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODc0LVxcbm1tL0tjb25maWc6ODc1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODc2LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5MS1cXG5tbS9LY29uZmlnOjg5MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkzLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDEtXFxubW0vS2NvbmZpZzo5MDI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDMtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDktXFxubW0vS2NvbmZpZzo5MTA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE3LVxcbm1tL0tjb25maWc6OTE4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE5LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI3PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzYtXFxubW0vS2NvbmZpZzo5Mzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzOC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ1LVxcbm1tL0tjb25maWc6OTQ2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUzLVxcbm1tL0tjb25maWc6OTU0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTUtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2MS1cXG5tbS9LY29uZmlnOjk2MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2My1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjU5LjMxMTg4NTgzWiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjU2NjI4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbW0vS2NvbmZpZ2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgc2NlbmFyaW86XG5cbioqQW5hbHl6aW5nIHRoZSBUcmFuc3BhcmVudCBIdWdlcGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9wdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZlYXR1cmUgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byBzZWUgaG93IHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBpcyBjb250cm9sbGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCdzIGluIHBsYWNlLiBJcyBpdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWM/IERvZXMgaXQgcmVseSBvbiBvdGhlciBmZWF0dXJlcz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25mbGljdHMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHZpc2liaWxpdHkgYW5kIGNvbmZpZ3VyYWJpbGl0eSBmcm9tIHRoZSBlbmQtdXNlciBwZXJzcGVjdGl2ZSwgYXMgd2VsbCBhcyB0aGUgdW5kZXJseWluZyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwuIFRoaXMgY29uZmlnIG9wdGlvbiBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaXMgc2V0IHVwIHRvIGRlYWwgd2l0aCBsYXJnZXIgbWVtb3J5IHBhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQzMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQyOjAyLjIzNzU1MTk3M1oiLCJTZXEiOjgyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzU6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4MzY6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODM3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDgzODpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4Mzk6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4NDA6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDg0MTpcXHRcXHRoZWxwXFxuIDg0MjpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODQzOlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4NDQ6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODQ1OlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODQ2OlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NDc6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg0ODpcXHRcXG4gODQ5OlxcdFxcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXFxuIDg1MDpcXHRcXG4gODUxOlxcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNob2ljZVxcbiA4NTQ6XFx0XFx0cHJvbXB0IFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MjowMi4yMzc2NTQ1OTNaIiwiU2VxIjo4MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA0NjYxMDA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSHVnZXBhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nOiB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbmF0dXJhbGx5LCBhbmQgd2UgZGVmaW5pdGVseSBuZWVkIGBBRFZJU0VfU1lTQ0FMTFNgIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgcmVsZXZhbnQuIFRoZSBjZW50cmFsIHByb2JsZW0gaXQncyBhZGRyZXNzaW5nIGlzIGEgYnVnIGluIGhvdyBga2h1Z2VwYWdlZGAgaXMgd29rZW4gdXAgd2hlbiBkZWFsaW5nIHdpdGggYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIG9uIFZNQXMuXG5cbkJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgc3lzdGVtIHdvdWxkIHJlZ2lzdGVyIGEgVk1BIHdpdGggYGtodWdlcGFnZWRgIHVzaW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2l0aGluIGBodWdlcGFnZV9tYWR2aXNlYC4gVGhlIGlzc3VlPyBJZiB5b3UgaGFkIGEgKmxhcmdlKiBWTUEgYW5kIHRoZW4gdXNlZCBgbWFkdmlzZWAgb24gYSAqc21hbGwqIHBvcnRpb24gb2YgaXQsIHRoZSBzeXN0ZW0gd2FzIHJlZ2lzdGVyaW5nIHRoZSAqb3JpZ2luYWwqIGxhcmdlIFZNQSdzIHNpemUsICpiZWZvcmUqIHRoZSBWTUEgc3BsaXQuIFRoaXMgY291bGQgbGVhZCB0byB1bm5lY2Vzc2FyeSBga2h1Z2VwYWdlZGAgd2FrZXVwcywgb3IgZXZlbiB0aGUgd3JvbmcgVk1BIGJlaW5nIGNvbnNpZGVyZWQuXG5cblRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSBtb3ZpbmcgdGhlIFZNQSByZWdpc3RyYXRpb24gdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoaXMgZW5zdXJlcyB0aGUgcmVnaXN0cmF0aW9uIGhhcHBlbnMgKmFmdGVyKiB0aGUgVk1BIGlzIHNwbGl0IG9yIG1lcmdlZCwgbWVhbmluZyBga2h1Z2VwYWdlZGAgd2lsbCAqb25seSogYmUgd29rZW4gdXAgaWYgdGhlIHJlc3VsdGluZyBWTUEgaXMgYWN0dWFsbHkgbGFyZ2UgZW5vdWdoIGZvciBodWdlcGFnZSBjb25zaWRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBraHVnZXBhZ2VkYCB3YWtldXBzIGFuZCBWTUEgaGFuZGxpbmcsIGJlaGF2ZXMuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGlzIGNoYW5nZSBpbiBiZWhhdmlvci5cblxuSSd2ZSBpZGVudGlmaWVkIHNvbWUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb246IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGB2bWFfbW9kaWZ5X2ZsYWdzYC4gSSd2ZSBjaGVja2VkIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCAqbm90KiBzdGF0aWMsIHNvIHRoZXkncmUgYWNjZXNzaWJsZS5cblxuVGhlIGNvcmUgY29uZmlnIG5lZWRlZCBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyBuYXR1cmFsbHkg4oCTIGFuZCBgQURWSVNFX1NZU0NBTExTYCwgYnV0IEkgYWxzbyBkb3VibGUgY2hlY2tlZCB0aGF0IGBDT05GSUdfTU1VYCBpcyBpbXBsaWNpdGx5IGltcGxpZWQgYnkgdGhlIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlZmluaXRpb24sIHdoaWNoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgcmVsaWVzIG9uLiBCZXlvbmQgdGhhdCwgdGhlcmUgYXJlIG5vIG90aGVyIHNwZWNpZmljIGNvbmZpZ3MgcmVxdWlyZWQgdGhhdCBJIGNhbiBzZWUuIFNvLCB3aXRoIHRoaXMgdW5kZXJzdGFuZGluZywgSSBjYW4gbm93IGNyYWZ0IG15IHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk3OSwiT3V0cHV0VG9rZW5zIjoyNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MjoxMS4yODQyNjk3WiIsIlNlcSI6ODQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwODQyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJraHVnZXBhZ2VkX2VudGVyX3ZtYVwiLFxuICAgIFwiaHVnZXBhZ2VfbWFkdmlzZVwiLFxuICAgIFwidm1hX21vZGlmeV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBWTUEgd2l0aCBraHVnZXBhZ2VkIChga2h1Z2VwYWdlZF9lbnRlcl92bWFgKSBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgb24gYSBzbWFsbCByYW5nZSB3aXRoaW4gYSBsYXJnZSBWTUEgd291bGQgaW5jb3JyZWN0bHkgcmVnaXN0ZXIgdGhlIGBtbWAgd2l0aCBraHVnZXBhZ2VkIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBsYXJnZSBWTUEncyBzaXplLCBiZWZvcmUgdGhlIFZNQSB3YXMgc3BsaXQuIEJ5IG1vdmluZyB0aGUgcmVnaXN0cmF0aW9uIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCB0aGUgcmVnaXN0cmF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgbmV3bHkgc3BsaXQvbWVyZ2VkIFZNQSwgZW5zdXJpbmcgdGhhdCBraHVnZXBhZ2VkIGlzIG9ubHkgd29rZW4gdXAgaWYgdGhlIHJlc3VsdGluZyBWTUEgaXMgYWN0dWFsbHkgbGFyZ2UgZW5vdWdoIHRvIGJlIGNvbGxhcHNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMga2h1Z2VwYWdlZCB3YWtldXBzIGFuZCBWTUEgaGFuZGxpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIixcbiAgICBcImh1Z2VwYWdlX21hZHZpc2VcIixcbiAgICBcInZtYV9tb2RpZnlfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgVk1BIHdpdGgga2h1Z2VwYWdlZCAoYGtodWdlcGFnZWRfZW50ZXJfdm1hYCkgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIG9uIGEgc21hbGwgcmFuZ2Ugd2l0aGluIGEgbGFyZ2UgVk1BIHdvdWxkIGluY29ycmVjdGx5IHJlZ2lzdGVyIHRoZSBgbW1gIHdpdGgga2h1Z2VwYWdlZCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgbGFyZ2UgVk1BJ3Mgc2l6ZSwgYmVmb3JlIHRoZSBWTUEgd2FzIHNwbGl0LiBCeSBtb3ZpbmcgdGhlIHJlZ2lzdHJhdGlvbiB0byBgbWFkdmlzZV91cGRhdGVfdm1hYCwgdGhlIHJlZ2lzdHJhdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIG5ld2x5IHNwbGl0L21lcmdlZCBWTUEsIGVuc3VyaW5nIHRoYXQga2h1Z2VwYWdlZCBpcyBvbmx5IHdva2VuIHVwIGlmIHRoZSByZXN1bHRpbmcgVk1BIGlzIGFjdHVhbGx5IGxhcmdlIGVub3VnaCB0byBiZSBjb2xsYXBzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGtodWdlcGFnZWQgd2FrZXVwcyBhbmQgVk1BIGhhbmRsaW5nLCB3aGljaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQyOjExLjM1NTM1OTgwN1oiLCJTZXEiOjg1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUwNDI4NDMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQyOjExLjM1NTkwOTY5N1oiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NTAzNzMwMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgY2FsbCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHRvIGVuc3VyZSB0aGUgVk1BIGlzIHJlZ2lzdGVyZWQgZm9yIGtodWdlcGFnZWQgc2Nhbm5pbmcgd2hlbiB0aGUgYFZNX0hVR0VQQUdFYCBmbGFnIGlzIHNldC4gVGhpcyBjaGFuZ2UgaW52b2x2ZXMgVk1BIGZsYWcgbWFuYWdlbWVudCBhbmQgZnVuY3Rpb24gY2FsbCByZWxvY2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliOTQyZjZkYTIwYTFkZWM2M2JkMGZkNjZmZDUxYTQ3ZGM5ODczOTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMzozNzo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xuaW5kZXggNWEwNmUzOTQyZTg4OS4uNzllZmZkM2YzZGE0ZiAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtNDU0LDEyICs0NTQsNiBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX05PSFVHRVBBR0U7XG4gXHRcdCp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTtcbi1cdFx0Lypcbi1cdFx0ICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLFxuLVx0XHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxuLVx0XHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxuLVx0XHQgKi9cbi1cdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuIFx0XHQqdm1fZmxhZ3MgXHUwMDI2PSB+Vk1fSFVHRVBBR0U7XG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCBjMTc5OTM4MDk3YmYwLi5jYjkzY2Y4MmQ4ZGY2IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4rKysgYi9tbS9tYWR2aXNlLmNcbkBAIC0xNzgsNiArMTc4LDE0IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxuIFx0Lyogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLiAqL1xuIFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XG4gXHR2bWEtXHUwMDNlZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzO1xuK1x0LypcbitcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcbitcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XG4rXHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxuK1x0ICovXG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVCkpXG4rXHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hX2ZsYWdzX3RvX2xlZ2FjeShuZXdfdm1hX2ZsYWdzKSk7XG4rXG4gXHRpZiAoc2V0X25ld19hbm9uX25hbWUpXG4gXHRcdHJldHVybiByZXBsYWNlX2Fub25fdm1hX25hbWUodm1hLCBhbm9uX25hbWUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDI6MTEuMzU1OTEwNzg3WiIsIlNlcSI6ODcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MDM3MDg0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIGl0IGlzIGEgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSBtb3ZpbmcgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gQmVmb3JlLCB3aGVuIGBNQURWX0hVR0VQQUdFYCB3YXMgc2V0IGluIGBodWdlcGFnZV9tYWR2aXNlYCwgd2UnZCBpbW1lZGlhdGVseSByZWdpc3RlciB0aGUgVk1BLiBOb3csIHRoYXQgcmVnaXN0cmF0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIGRpcmVjdGx5IGFmdGVyIHVwZGF0aW5nIHRoZSBWTUEncyBmbGFncy5cblxuVGhlIGtleSBpcyB0aGF0IHRoZSByZWxldmFudCBmbGFnIGNoZWNrIG5vdyBvY2N1cnMgaW5zaWRlIGBtYWR2aXNlX3VwZGF0ZV92bWFgOiBgaWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKWAuIEl0J3MgZW5zdXJpbmcgdGhlIFZNQSBpcyBub3cgc3VpdGFibGUgZm9yIGtodWdlcGFnZWQgYmVmb3JlIHByb2NlZWRpbmcsIHVzaW5nIHRoZSBpbnRlcm5hbCBgdm1hX2ZsYWdzX3Rlc3RgIGZ1bmN0aW9uLCBhbmQgY29udmVydGluZyB0aG9zZSBmbGFncyB1c2luZyBgdm1hX2ZsYWdzX3RvX2xlZ2FjeWAuXG5cblRoZSBjb21tZW50IGluIHRoZSBjb2RlIGhpZ2hsaWdodHMgdGhlIHJlYXNvbiBmb3IgdGhpcyBpbW1lZGlhdGUgcmVnaXN0cmF0aW9uOiB0byBhdm9pZCB3YWl0aW5nIGZvciBhIHBhZ2UgZmF1bHQgdGhhdCBtaWdodCBuZXZlciBvY2N1ci4gVGhpcyBpcyBhIGdvb2QgbW92ZSB0byBnZXQgVk1BcyBpbnRvIHRoZSBraHVnZXBhZ2VkIHNjYW5uaW5nIHByb2Nlc3MgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgdXNlci1zcGFjZSBleHBvc2VkIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGdvb2QuIEl0IGRvZXNuJ3Qgc2VlbSB0byB0b3VjaCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55dGhpbmcgbGlrZSB0aGF0LCBzbyBJJ20gbm90IHdvcnJpZWQgYWJvdXQgdGhhdC4gVGhlIHVzdWFsIGNoZWNrcyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzLiBTbywgSSB3aWxsIGJlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGVhbiwgZm9jdXNlZCByZWZhY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MywiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MjoxOC44NTk2MjI5ODlaIiwiU2VxIjo4OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdG8gZW5zdXJlIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyB3aGVuIHRoZSBgVk1fSFVHRVBBR0VgIGZsYWcgaXMgc2V0LiBUaGlzIGNoYW5nZSBpbnZvbHZlcyBWTUEgZmxhZyBtYW5hZ2VtZW50IGFuZCBmdW5jdGlvbiBjYWxsIHJlbG9jYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYCB0byBlbnN1cmUgdGhlIFZNQSBpcyByZWdpc3RlcmVkIGZvciBraHVnZXBhZ2VkIHNjYW5uaW5nIHdoZW4gdGhlIGBWTV9IVUdFUEFHRWAgZmxhZyBpcyBzZXQuIFRoaXMgY2hhbmdlIGludm9sdmVzIFZNQSBmbGFnIG1hbmFnZW1lbnQgYW5kIGZ1bmN0aW9uIGNhbGwgcmVsb2NhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBidWdzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpmwwl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 02:59:45 +0000 UTC FinishedAt: 2026-08-18 03:42:19 +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": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS" ], "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": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS" ], "series_id": "db2ddf30-018c-412d-9f2d-c3016ce0ddb7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "khugepaged_enter_vma", "hugepage_madvise", "vma_modify_flags" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2todWdlcGFnZWRfZW50ZXJfdm1hJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX21hZHZpc2UmIzM0OywKICAgICYjMzQ7dm1hX21vZGlmeV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdG8gZW5zdXJlIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyB3aGVuIHRoZSBgVk1fSFVHRVBBR0VgIGZsYWcgaXMgc2V0LiBUaGlzIGNoYW5nZSBpbnZvbHZlcyBWTUEgZmxhZyBtYW5hZ2VtZW50IGFuZCBmdW5jdGlvbiBjYWxsIHJlbG9jYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBWTUEgd2l0aCBraHVnZXBhZ2VkIChga2h1Z2VwYWdlZF9lbnRlcl92bWFgKSBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgb24gYSBzbWFsbCByYW5nZSB3aXRoaW4gYSBsYXJnZSBWTUEgd291bGQgaW5jb3JyZWN0bHkgcmVnaXN0ZXIgdGhlIGBtbWAgd2l0aCBraHVnZXBhZ2VkIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBsYXJnZSBWTUEmIzM5O3Mgc2l6ZSwgYmVmb3JlIHRoZSBWTUEgd2FzIHNwbGl0LiBCeSBtb3ZpbmcgdGhlIHJlZ2lzdHJhdGlvbiB0byBgbWFkdmlzZV91cGRhdGVfdm1hYCwgdGhlIHJlZ2lzdHJhdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIG5ld2x5IHNwbGl0L21lcmdlZCBWTUEsIGVuc3VyaW5nIHRoYXQga2h1Z2VwYWdlZCBpcyBvbmx5IHdva2VuIHVwIGlmIHRoZSByZXN1bHRpbmcgVk1BIGlzIGFjdHVhbGx5IGxhcmdlIGVub3VnaCB0byBiZSBjb2xsYXBzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGtodWdlcGFnZWQgd2FrZXVwcyBhbmQgVk1BIGhhbmRsaW5nLCB3aGljaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Yjk0MmY2ZGEyMGExZGVjNjNiZDBmZDY2ZmQ1MWE0N2RjOTg3Mzk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDM6Mzc6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCA1YTA2ZTM5NDJlODg5Li43OWVmZmQzZjNkYTRmIDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC00NTQsMTIgJiM0Mzs0NTQsNiBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX05PSFVHRVBBR0U7XG4gXHRcdCp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTtcbi1cdFx0Lypcbi1cdFx0ICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLFxuLVx0XHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxuLVx0XHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxuLVx0XHQgKi9cbi1cdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuIFx0XHQqdm1fZmxhZ3MgXHUwMDI2PSB+Vk1fSFVHRVBBR0U7XG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCBjMTc5OTM4MDk3YmYwLi5jYjkzY2Y4MmQ4ZGY2IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0xNzgsNiAmIzQzOzE3OCwxNCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcbiBcdC8qIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS4gKi9cbiBcdHZtYV9zdGFydF93cml0ZSh2bWEpO1xuIFx0dm1hLVx1MDAzZWZsYWdzID0gbmV3X3ZtYV9mbGFncztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcbiYjNDM7XHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxuJiM0MztcdCAqIG1heSBub3QgaGFwcGVuIGFueSB0aW1lIHNvb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxuJiM0MztcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcbiYjNDM7XG4gXHRpZiAoc2V0X25ld19hbm9uX25hbWUpXG4gXHRcdHJldHVybiByZXBsYWNlX2Fub25fdm1hX25hbWUodm1hLCBhbm9uX25hbWUpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O3ZtYV9tb2RpZnlfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhIFZNQSB3aXRoIGtodWdlcGFnZWQgKGBraHVnZXBhZ2VkX2VudGVyX3ZtYWApIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNtYWxsIHJhbmdlIHdpdGhpbiBhIGxhcmdlIFZNQSB3b3VsZCBpbmNvcnJlY3RseSByZWdpc3RlciB0aGUgYG1tYCB3aXRoIGtodWdlcGFnZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxhcmdlIFZNQSYjMzk7cyBzaXplLCBiZWZvcmUgdGhlIFZNQSB3YXMgc3BsaXQuIEJ5IG1vdmluZyB0aGUgcmVnaXN0cmF0aW9uIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCB0aGUgcmVnaXN0cmF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgbmV3bHkgc3BsaXQvbWVyZ2VkIFZNQSwgZW5zdXJpbmcgdGhhdCBraHVnZXBhZ2VkIGlzIG9ubHkgd29rZW4gdXAgaWYgdGhlIHJlc3VsdGluZyBWTUEgaXMgYWN0dWFsbHkgbGFyZ2UgZW5vdWdoIHRvIGJlIGNvbGxhcHNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMga2h1Z2VwYWdlZCB3YWtldXBzIGFuZCBWTUEgaGFuZGxpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliOTQyZjZkYTIwYTFkZWM2M2JkMGZkNjZmZDUxYTQ3ZGM5ODczOTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwMzozNzo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuYwppbmRleCA1YTA2ZTM5NDJlODg5Li43OWVmZmQzZjNkYTRmIDEwMDY0NAotLS0gYS9tbS9raHVnZXBhZ2VkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jCkBAIC00NTQsMTIgJiM0Mzs0NTQsNiBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAljYXNlIE1BRFZfSFVHRVBBR0U6CiAJCSp2bV9mbGFncyAmYW1wOz0gflZNX05PSFVHRVBBR0U7CiAJCSp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTsKLQkJLyoKLQkJICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLAotCQkgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdAotCQkgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLgotCQkgKi8KLQkJa2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIE1BRFZfTk9IVUdFUEFHRToKIAkJKnZtX2ZsYWdzICZhbXA7PSB+Vk1fSFVHRVBBR0U7CmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggYzE3OTkzODA5N2JmMC4uY2I5M2NmODJkOGRmNiAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtMTc4LDYgJiM0MzsxNzgsMTQgQEAgc3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsCiAJLyogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLiAqLwogCXZtYV9zdGFydF93cml0ZSh2bWEpOwogCXZtYS0mZ3Q7ZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgdm1hIGJlY29tZSBnb29kIGZvciBraHVnZXBhZ2VkIHRvIHNjYW4sCiYjNDM7CSAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0CiYjNDM7CSAqIG1heSBub3QgaGFwcGVuIGFueSB0aW1lIHNvb24uCiYjNDM7CSAqLwomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3QoJmFtcDtuZXdfdm1hX2ZsYWdzLCBWTUFfSFVHRVBBR0VfQklUKSkKJiM0MzsJCWtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hX2ZsYWdzX3RvX2xlZ2FjeShuZXdfdm1hX2ZsYWdzKSk7CiYjNDM7CiAJaWYgKHNldF9uZXdfYW5vbl9uYW1lKQogCQlyZXR1cm4gcmVwbGFjZV9hbm9uX3ZtYV9uYW1lKHZtYSwgYW5vbl9uYW1lKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBraHVnZXBhZ2VkX2VudGVyX3ZtYSBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBzaGlmdGluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIG92ZXIgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doeT8mIzM0OyBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgbW92ZT8gTGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2guIFdlJiMzOTtyZSByZW1vdmluZyBpdCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AgYW5kIGluc2VydGluZyBpdCBpbnRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGluIGBtbS9tYWR2aXNlLmNgLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGhpZXJhcmNoeS4gSXMgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgZXhjbHVzaXZlbHkgY2FsbGVkIGJ5IGBodWdlcGFnZV9tYWR2aXNlYCwgb3IgYXJlIHRoZXJlIG90aGVyIGNhbGwgc2l0ZXMgd2UgbmVlZCB0byBjb25zaWRlcj8gSXQgbG9va3MgbGlrZSBgbWFkdmlzZV91cGRhdGVfdm1hYCAqaXMqIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbW9kaWZ5aW5nIHRoZSBWTUEgZmxhZ3MgYmFzZWQgb24gYG1hZHZpc2VgIGNhbGxzLCB3aGljaCBtYWtlcyBzZW5zZS4gSG1tLCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgaXRzZWxmIGlzIGFjdHVhbGx5IGludm9rZWQgYnkgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCwgd2hpY2ggKnRoZW4qIGNhbGxzIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBtb3ZpbmcgdGhlIHdvcmssIGluIHRlcm1zIG9mIFZNQSBtb2RpZmljYXRpb25zLCB0byAqYmVmb3JlKiB0aGUgaHVnZXBhZ2Utc3BlY2lmaWMgbG9naWMgZ2V0cyBpbnZvbHZlZC4KClRvIGJlIHN1cmUsIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgY3Jvc3MtcmVmZXJlbmNlIHRoZSByZWxldmFudCBzZWN0aW9ucyBpbiBgbW0vbWFkdmlzZS5jYCBhbmQgYG1tL2todWdlcGFnZWQuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGNoYW5nZS4gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb3ZlIGFmZmVjdHMgdGhlIG92ZXJhbGwgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV91cGRhdGVfdm1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzg9c3RhdGljIGludCByZXBsYWNlX2Fub25fdm1hX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jLTE1MC0gKi9cbm1tL21hZHZpc2UuYzoxNTE6c3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsXG5tbS9tYWR2aXNlLmMtMTUyLVx0XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmM9MTMzNj1zdGF0aWMgYm9vbCBjYW5fbWFkdmlzZV9tb2RpZnkoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEzNDItLypcbm1tL21hZHZpc2UuYzoxMzQzOiAqIEFwcGx5IGFuIG1hZHZpc2UgYmVoYXZpb3IgdG8gYSByZWdpb24gb2YgYSB2bWEuICBtYWR2aXNlX3VwZGF0ZV92bWFcbm1tL21hZHZpc2UuYy0xMzQ0LSAqIHdpbGwgaGFuZGxlIHNwbGl0dGluZyBhIHZtIGFyZWEgaW50byBzZXBhcmF0ZSBhcmVhcywgZWFjaCBhcmVhIHdpdGggaXRzIG93blxuLS1cbm1tL21hZHZpc2UuYz0xMzQ3PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEzNzgtXG5tbS9tYWR2aXNlLmM6MTM3OTpcdC8qIFRoZSBiZWxvdyBiZWhhdmlvdXJzIHVwZGF0ZSBWTUFzIHZpYSBtYWR2aXNlX3VwZGF0ZV92bWEoKS4gKi9cbm1tL21hZHZpc2UuYy0xMzgwLVxuLS1cbm1tL21hZHZpc2UuYy0xNDQwLVxubW0vbWFkdmlzZS5jOjE0NDE6XHRlcnJvciA9IG1hZHZpc2VfdXBkYXRlX3ZtYShuZXdfZmxhZ3MsIG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jLTE0NDItb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtodWdlcGFnZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzaGlmdGluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG92ZXIgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIElzIGl0IGRlZmluZWQgd2l0aGluIGBtbS9raHVnZXBhZ2VkLmNgIGl0c2VsZj8gT3IgcGVyaGFwcyBpdCYjMzk7cyBhIGRlY2xhcmF0aW9uIHJlc2lkaW5nIGluIGBpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaGA/IEtub3dpbmcgaXRzIGxvY2F0aW9uIGlzIHRoZSBmaXJzdCBzdGVwIHRvIHByb3Blcmx5IGV2YWx1YXRpbmcgd2hhdCB0aGUgY29kZSBjaGFuZ2UgbWVhbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZF9lbnRlcl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTU9ZXh0ZXJuIHZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MTY6ZXh0ZXJuIHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0xNy1cdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0zOD1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQwLX1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjQxOnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQyLVx0XHRcdFx0XHR2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMC1cdFx0cmV0dXJuIHJldDtcbm1tL2h1Z2VfbWVtb3J5LmM6MTUzMTpcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMi1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01ODctXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9raHVnZXBhZ2VkLmMtNTg5LVx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbi0tXG5tbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxuLS1cbm1tL21hZHZpc2UuYy0xODYtXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVCkpXG5tbS9tYWR2aXNlLmM6MTg3Olx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYV9mbGFnc190b19sZWdhY3kobmV3X3ZtYV9mbGFncykpO1xubW0vbWFkdmlzZS5jLTE4OC1cbi0tXG5tbS92bWEuYz04ODk9c3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcbi0tXG5tbS92bWEuYy0xMDczLVx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cdTAwM2V0YXJnZXQsIHN0aWNreV9mbGFncyk7XG5tbS92bWEuYzoxMDc0Olx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVx1MDAzZXRhcmdldCwgdm1nLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTEwNzUtXHR2bWctXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcbi0tXG5tbS92bWEuYz0xMTQwPXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX25ld19yYW5nZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxuLS1cbm1tL3ZtYS5jLTExOTUtXHRpZiAodm1nLVx1MDAzZXRhcmdldCBcdTAwMjZcdTAwMjYgIXZtYV9leHBhbmQodm1nKSkge1xubW0vdm1hLmM6MTE5NjpcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVx1MDAzZXRhcmdldCwgdm1nLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTExOTctXHRcdHZtZy1cdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xuLS1cbm1tL3ZtYS5jPTI2MzQ9c3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuLS1cbm1tL3ZtYS5jLTI2OTEtXHQvKlxubW0vdm1hLmM6MjY5MjpcdCAqIHZtYV9tZXJnZV9uZXdfcmFuZ2UoKSBjYWxscyBraHVnZXBhZ2VkX2VudGVyX3ZtYSgpIHRvbywgdGhlIGJlbG93XG5tbS92bWEuYy0yNjkzLVx0ICogY2FsbCBjb3ZlcnMgdGhlIG5vbi1tZXJnZSBjYXNlLlxuLS1cbm1tL3ZtYS5jLTI2OTUtXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSlcbm1tL3ZtYS5jOjI2OTY6XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgbWFwLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTI2OTctXHQqdm1hcCA9IHZtYTtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg9MTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBtcG9sX2VxdWFsKHN0cnVjdCBtZW1wb2xpY3kgKmEsIHN0cnVjdCBtZW1wb2xpY3kgKmIpXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTE4NS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaDoxODY6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTE4Ny1cdFx0XHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hZHZpc2UgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb3ZpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IHNoaWZ0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBUaGlzIGltcGxpZXMgaXQgd2lsbCBub3cgYmUgdHJpZ2dlcmVkIGJ5ICphbnkqIGBtYWR2aXNlYCBjYWxsIHRoYXQgdXBkYXRlcyBWTUEgZmxhZ3MgYW5kIHNwZWNpZmljYWxseSBzZXRzIHRoZSBgVk1BX0hVR0VQQUdFX0JJVGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGRpcmVjdGx5IHRpZWQgdG8gYFZNX0hVR0VQQUdFYC4gU2VlbXMgcmVhc29uYWJsZSBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJyb2FkZW5pbmcgdGhlIHNjb3BlIGEgYml0LiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcuIGBWTUFfSFVHRVBBR0VfQklUYCwgaXMgdGhhdCB0aGUgcmlnaHQgdGVybWlub2xvZ3k/IExldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGNvcnJlY3QgYml0IGluIHRoZSBmbGFnLiBBbmQsIGp1c3QgdG8gYmUgc3VyZSwgSSBzZWUgYHZtYV9mbGFnc190ZXN0KCZhbXA7bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVClgLCBidXQgd2hhdCAqaXMqIGBuZXdfdm1hX2ZsYWdzYCBoZXJlPyBJcyBpdCBhIHN0cmFpZ2h0IGB2bV9mbGFnc190YCwgb3IgaXMgdGhpcyBiZWluZyB1c2VkIGluIGEgYHN0cnVjdCB2bWFfZmxhZ3NgIHNvbWV3aGVyZT8gSSYjMzk7bSBnZXR0aW5nIGEgbGl0dGxlIGZ1enp5IG9uIHRoYXQuIEdvdHRhIGJlIHByZWNpc2UgaGVyZS4gT2theSwgbGV0JiMzOTtzIGp1c3QgZ28gc3RyYWlnaHQgdG8gYG1tL21hZHZpc2UuY2AgYW5kIGRpZyBpbnRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGl0c2VsZi4gSSBuZWVkIHRvIG5haWwgZG93biBleGFjdGx5IHdoYXQgYG5ld192bWFfZmxhZ3NgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBHb3R0YSBiZSBzdXJlIHRoZSBsb2dpYyBpcyBzb3VuZCB3aXRoIHRoZXNlIGZsYWcgbWFuaXB1bGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX3VwZGF0ZV92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTEzOD1zdGF0aWMgaW50IHJlcGxhY2VfYW5vbl92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tYWR2aXNlLmMtMTUwLSAqL1xubW0vbWFkdmlzZS5jOjE1MTpzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcbm1tL21hZHZpc2UuYy0xNTItXHRcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYz0xMzM2PXN0YXRpYyBib29sIGNhbl9tYWR2aXNlX21vZGlmeShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM0Mi0vKlxubW0vbWFkdmlzZS5jOjEzNDM6ICogQXBwbHkgYW4gbWFkdmlzZSBiZWhhdmlvciB0byBhIHJlZ2lvbiBvZiBhIHZtYS4gIG1hZHZpc2VfdXBkYXRlX3ZtYVxubW0vbWFkdmlzZS5jLTEzNDQtICogd2lsbCBoYW5kbGUgc3BsaXR0aW5nIGEgdm0gYXJlYSBpbnRvIHNlcGFyYXRlIGFyZWFzLCBlYWNoIGFyZWEgd2l0aCBpdHMgb3duXG4tLVxubW0vbWFkdmlzZS5jPTEzNDc9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM3OC1cbm1tL21hZHZpc2UuYzoxMzc5Olx0LyogVGhlIGJlbG93IGJlaGF2aW91cnMgdXBkYXRlIFZNQXMgdmlhIG1hZHZpc2VfdXBkYXRlX3ZtYSgpLiAqL1xubW0vbWFkdmlzZS5jLTEzODAtXG4tLVxubW0vbWFkdmlzZS5jLTE0NDAtXG5tbS9tYWR2aXNlLmM6MTQ0MTpcdGVycm9yID0gbWFkdmlzZV91cGRhdGVfdm1hKG5ld19mbGFncywgbWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTQ0Mi1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byBgbWFkdmlzZV91cGRhdGVfdm1hYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFkdmlzZWAgY2FsbHMgYXJlIHByb2Nlc3NlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIHN0cnVjdHVyZXMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBjaGFuZ2VzIHRvIHBhZ2UgYWNjZXNzIHBhdHRlcm5zIGFuZCBjYWNoaW5nIGhpbnRzIHByb3ZpZGVkIHRocm91Z2ggdGhlIGBtYWR2aXNlYCBzeXN0ZW0gY2FsbCwgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgdGFibGVzLiBJIHN1c3BlY3QgdGhlcmUgYXJlIGEgZmV3IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzdWJzeXN0ZW1zLCBsaWtlIHRoZSBwYWdlIGNhY2hlLCB0aGF0IEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB2YXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIGhlcmUgaXMga2V5IHRvIG9wdGltaXppbmcgYXBwbGljYXRpb24gbWVtb3J5IGJlaGF2aW9yIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0JiMzOTtzIHNlZSBob3cgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgYWNjb21wbGlzaGVzIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHQgKi9cbiAxNTE6XHRzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcbiAxNTI6XHRcdFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4gMTUzOlx0e1xuIDE1NDpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZXZtYTtcbiAxNTU6XHRcdHZtYV9mbGFnc190IG5ld192bWFfZmxhZ3MgPSBsZWdhY3lfdG9fdm1hX2ZsYWdzKG5ld19mbGFncyk7XG4gMTU2Olx0XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZXJhbmdlO1xuIDE1NzpcdFx0c3RydWN0IGFub25fdm1hX25hbWUgKmFub25fbmFtZSA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlYW5vbl9uYW1lO1xuIDE1ODpcdFx0Ym9vbCBzZXRfbmV3X2Fub25fbmFtZSA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IgPT0gX19NQURWX1NFVF9BTk9OX1ZNQV9OQU1FO1xuIDE1OTpcdFx0Vk1BX0lURVJBVE9SKHZtaSwgbWFkdl9iZWhhdmlvci1cdTAwM2VtbSwgcmFuZ2UtXHUwMDNlc3RhcnQpO1xuIDE2MDpcdFxuIDE2MTpcdFx0aWYgKHZtYV9mbGFnc19zYW1lX21hc2soXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCBuZXdfdm1hX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbiAxNjI6XHRcdCAgICAoIXNldF9uZXdfYW5vbl9uYW1lIHx8XG4gMTYzOlx0XHQgICAgIGFub25fdm1hX25hbWVfZXEoYW5vbl92bWFfbmFtZSh2bWEpLCBhbm9uX25hbWUpKSlcbiAxNjQ6XHRcdFx0cmV0dXJuIDA7XG4gMTY1Olx0XG4gMTY2Olx0XHRpZiAoc2V0X25ld19hbm9uX25hbWUpXG4gMTY3Olx0XHRcdHZtYSA9IHZtYV9tb2RpZnlfbmFtZShcdTAwMjZ2bWksIG1hZHZfYmVoYXZpb3ItXHUwMDNlcHJldiwgdm1hLFxuIDE2ODpcdFx0XHRcdHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIGFub25fbmFtZSk7XG4gMTY5Olx0XHRlbHNlXG4gMTcwOlx0XHRcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3MoXHUwMDI2dm1pLCBtYWR2X2JlaGF2aW9yLVx1MDAzZXByZXYsIHZtYSxcbiAxNzE6XHRcdFx0XHRyYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLCBcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcbiAxNzI6XHRcbiAxNzM6XHRcdGlmIChJU19FUlIodm1hKSlcbiAxNzQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIodm1hKTtcbiAxNzU6XHRcbiAxNzY6XHRcdG1hZHZfYmVoYXZpb3ItXHUwMDNldm1hID0gdm1hO1xuIDE3NzpcdFxuIDE3ODpcdFx0Lyogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLiAqL1xuIDE3OTpcdFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XG4gMTgwOlx0XHR2bWEtXHUwMDNlZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzO1xuIDE4MTpcdFx0LypcbiAxODI6XHRcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcbiAxODM6XHRcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XG4gMTg0Olx0XHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxuIDE4NTpcdFx0ICovXG4gMTg2Olx0XHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVCkpXG4gMTg3Olx0XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hX2ZsYWdzX3RvX2xlZ2FjeShuZXdfdm1hX2ZsYWdzKSk7XG4gMTg4Olx0XG4gMTg5Olx0XHRpZiAoc2V0X25ld19hbm9uX25hbWUpXG4gMTkwOlx0XHRcdHJldHVybiByZXBsYWNlX2Fub25fdm1hX25hbWUodm1hLCBhbm9uX25hbWUpO1xuIDE5MTpcdFxuIDE5MjpcdFx0cmV0dXJuIDA7XG4gMTkzOlx0fVxuIDE5NDpcdFxuIDE5NTpcdCNpZmRlZiBDT05GSUdfU1dBUFxuIDE5NjpcdHN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gMTk3Olx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAxOTg6XHR7XG4gMTk5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBSZWxvY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW92aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaW50byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgc2hpZnQ7IGBtYWR2aXNlX3VwZGF0ZV92bWFgIGlzIHVzZWQgZm9yIG1vcmUgdGhhbiBqdXN0IGh1Z2VwYWdlLXJlbGF0ZWQgYG1hZHZpc2VgIGNhbGxzLiBOb3csIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoYXQgaXMgc3RhcnRpbmcgdG8gYmVjb21lIGNsZWFyLiBJZiBgbWFkdmlzZV91cGRhdGVfdm1hYCBoYW5kbGVzICpvdGhlciogYG1hZHZpc2VgIGJlaGF2aW9ycywgYW5kIHRoZSBgbmV3X3ZtYV9mbGFnc2AgaGFzIGBWTUFfSFVHRVBBR0VfQklUYCBzZXQsIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCAqd2lsbCogYmUgaW52b2tlZC4gSG9sZCBvbi4uLiB3aGF0IGhhcHBlbnMgaWYgYFZNQV9IVUdFUEFHRV9CSVRgIGlzIGFscmVhZHkgc2V0LCBhbmQgd2UmIzM5O3JlIGp1c3QgdXBkYXRpbmcgKmFub3RoZXIqIGZsYWcsIGxpa2Ugc2F5LCBgTUFEVl9ET05UTkVFRGA/IGBuZXdfdm1hX2ZsYWdzYCB3b3VsZCAqc3RpbGwqIGhhdmUgYFZNQV9IVUdFUEFHRV9CSVRgIHNldCwgd291bGRuJiMzOTt0IGl0PyBXaGljaCB3b3VsZCBtZWFuIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZ2V0cyBjYWxsZWQgKmFnYWluKiEgUmlnaHQsIHRoaXMgaXMgYSBwb3RlbnRpYWwgaXNzdWUuCgpTbywgaXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBkZXNpZ25lZCB0byBoYW5kbGUgYmVpbmcgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIFZNQT8gSSBiZXR0ZXIgdmVyaWZ5IHRoYXQgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhIHN1YnRsZSBidWcuIExldCBtZSBjaGVjayB0aGUgbG9naWMgd2l0aGluIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXRzZWxmLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIHJlZmFjdG9yaW5nIGRvZXNuJiMzOTt0IHRyaWdnZXIgdW5leHBlY3RlZCBiZWhhdmlvciBvciByZXNvdXJjZSBjb250ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0fVxuIDU4MTpcdFxuIDU4MjpcdHN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDU4MzpcdFx0XHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcbiA1ODQ6XHR7XG4gNTg1Olx0XHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XG4gNTg2Olx0fVxuIDU4NzpcdFxuIDU4ODpcdHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNTg5Olx0XHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuIDU5MDpcdHtcbiA1OTE6XHRcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIHZtYS1cdTAwM2V2bV9tbSkgXHUwMDI2XHUwMDI2IGh1Z2VwYWdlX2VuYWJsZWQoKVxuIDU5MjpcdFx0ICAgIFx1MDAyNlx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXG4gNTkzOlx0XHRcdF9fa2h1Z2VwYWdlZF9lbnRlcih2bWEtXHUwMDNldm1fbW0pO1xuIDU5NDpcdH1cbiA1OTU6XHRcbiA1OTY6XHR2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDU5NzpcdHtcbiA1OTg6XHRcdHN0cnVjdCBtbV9zbG90ICpzbG90O1xuIDU5OTpcdFx0aW50IGZyZWUgPSAwO1xuIDYwMDpcdFxuIDYwMTpcdFx0c3Bpbl9sb2NrKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG4gNjAyOlx0XHRzbG90ID0gbW1fc2xvdF9sb29rdXAobW1fc2xvdHNfaGFzaCwgbW0pO1xuIDYwMzpcdFx0aWYgKHNsb3QgXHUwMDI2XHUwMDI2IGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IHNsb3QpIHtcbiA2MDQ6XHRcdFx0bW1fc2xvdF9yZW1vdmUoc2xvdCk7XG4gNjA1Olx0XHRcdGZyZWUgPSAxO1xuIDYwNjpcdFx0fVxuIDYwNzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbiA2MDg6XHRcbiA2MDk6XHRcdGlmIChmcmVlKSB7XG4gNjEwOlx0XHRcdG1tX2ZsYWdzX2NsZWFyKE1NRl9WTV9IVUdFUEFHRSwgbW0pO1xuIDYxMTpcdFx0XHRtbV9zbG90X2ZyZWUobW1fc2xvdF9jYWNoZSwgc2xvdCk7XG4gNjEyOlx0XHRcdG1tZHJvcChtbSk7XG4gNjEzOlx0XHR9IGVsc2UgaWYgKHNsb3QpIHtcbiA2MTQ6XHRcdFx0LypcbiA2MTU6XHRcdFx0ICogVGhpcyBpcyByZXF1aXJlZCB0byBzZXJpYWxpemUgYWdhaW5zdFxuIDYxNjpcdFx0XHQgKiBjb2xsYXBzZV90ZXN0X2V4aXQoKSAod2hpY2ggaXMgZ3VhcmFudGVlZCB0byBydW5cbiA2MTc6XHRcdFx0ICogdW5kZXIgbW1hcF9sb2NrIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxuIDYxODpcdFx0XHQgKiBwYWdldGFibGVzIHdpbGwgYmUgZGVzdHJveWVkKSB1bnRpbCBraHVnZXBhZ2VkIGhhcyBmaW5pc2hlZFxuIDYxOTpcdFx0XHQgKiB3b3JraW5nIG9uIHRoZSBwYWdldGFibGVzIHVuZGVyIHRoZSBtbWFwX2xvY2suXG4gNjIwOlx0XHRcdCAqL1xuIDYyMTpcdFx0XHRtbWFwX3dyaXRlX2xvY2sobW0pO1xuIDYyMjpcdFx0XHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gNjIzOlx0XHR9XG4gNjI0Olx0fVxuIDYyNTpcdFxuIDYyNjpcdHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbnRyb2xfaW5pdF9zY2FuKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbiA2Mjc6XHR7XG4gNjI4Olx0XHRtZW1zZXQoY2MtXHUwMDNlbm9kZV9sb2FkLCAwLCBzaXplb2YoY2MtXHUwMDNlbm9kZV9sb2FkKSk7XG4gNjI5Olx0XHRub2Rlc19jbGVhcihjYy1cdTAwM2VhbGxvY19ubWFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHdoZXJlIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIHVuZGVyIGEgc2xpZ2h0bHkgYnJvYWRlciBzZXQgb2YgY2lyY3Vtc3RhbmNlcy4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHdhcywgJiMzNDtpdCYjMzk7cyBzYWZlLCBzaW5jZSB0aGUgY29kZSBjaGVja3MgYE1NRl9WTV9IVUdFUEFHRWAuJiMzNDsgVGhlbiwgSSBoYXZlIHRvIHN0b3AgYW5kIHRoaW5rIGlmIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3Mgc2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzLCBidXQgYmVmb3JlIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2FzIGxpbWl0ZWQgdG8gYE1BRFZfSFVHRVBBR0VgIGNhbGxzLiBOb3csIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuZXZlciBWTUEgZmxhZ3MgYXJlIG1vZGlmaWVkIGFuZCBgVk1BX0hVR0VQQUdFX0JJVGAgaXMgc2V0LgoKU28gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIGZsb3cuIElmIGBNQURWX0hVR0VQQUdFYCBpcyBjYWxsZWQsIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkLCB0aGF0JiMzOTtzIGNsZWFyLiBBIHN1YnNlcXVlbnQgYG1hZHZpc2VgIGNhbGwgKm9uIHRoZSBzYW1lIFZNQSogd2l0aCBgVk1BX0hVR0VQQUdFX0JJVGAgc2V0IHdvdWxkIHRyaWdnZXIgYW5vdGhlciBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEJ1dCB0aGF0JiMzOTtzIHByb2JhYmx5IG9rYXksIGJlY2F1c2Ugd2hlbiB0aGUgVk1BIHdhcyBjcmVhdGVkIG9yIHdoZW4gdGhlIGJpdCB3YXMgc2V0LCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdhcyBhbHJlYWR5IGNhbGxlZC4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQgaW4gYHZtYV9tZXJnZV9uZXdfcmFuZ2VgIGFuZCBgX19tbWFwX25ld192bWFgIGlmIGBWTV9IVUdFUEFHRWAgaXMgc2V0LgoKVGhlIHRyaWNreSBwYXJ0OiBpcyB0aGVyZSBhIHNjZW5hcmlvIHdoZXJlIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgYnV0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgKndhc24mIzM5O3QqIGNhbGxlZD8gVGhlIG9ubHkgc2NlbmFyaW8gdGhhdCBJIGNhbiBzZWUgd291bGQgYmUgaWYgYGh1Z2VwYWdlX2VuYWJsZWQoKWAgd2FzIGZhbHNlIGR1cmluZyBWTUEgY3JlYXRpb24gYW5kIGxhdGVyIGJlY29tZSB0cnVlLiBCdXQgZXZlbiB0aGVuIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgY2hlY2tzIGBodWdlcGFnZV9lbmFibGVkKClgIGFuZCBpZiBpdCB3ZXJlIGZhbHNlIGF0IGNyZWF0aW9uLCBpdCB3b3VsZCBub3QgcnVuLiBXaGVuIGl0IGRvZXMgYmVjb21lIHRydWUsIGNhbGxpbmcgYG1hZHZpc2VgIHdvdWxkIG5vdyB0cmlnZ2VyIHRoZSBwcm9jZXNzLgoKT2theSwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZnVydGhlci4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkIGJ5IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAuIE5vdywgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgc3BlY2lmaWNhbGx5IGF2b2lkcyBhbnkgd29yayBpZiB0aGUgVk1BIGZsYWdzIGFyZSB0aGUgc2FtZToKCmBgYGMKCWlmICh2bWFfZmxhZ3Nfc2FtZV9tYXNrKCZhbXA7dm1hLSZndDtmbGFncywgbmV3X3ZtYV9mbGFncykgJmFtcDsmYW1wOwoJICAgICghc2V0X25ld19hbm9uX25hbWUgfHwKCSAgICAgYW5vbl92bWFfbmFtZV9lcShhbm9uX3ZtYV9uYW1lKHZtYSksIGFub25fbmFtZSkpKQoJCXJldHVybiAwOwpgYGAKClRoaXMgbWVhbnMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyAqb25seSogY2FsbGVkIGlmIHRoZSBmbGFncyBjaGFuZ2UgKmFuZCogdGhlIG5ldyBmbGFncyBpbmNsdWRlIGBWTUFfSFVHRVBBR0VfQklUYC4gU28sIHdpdGggYE1BRFZfSFVHRVBBR0VgIGZvciBpbnN0YW5jZSwgaWYgdGhlIGJpdCB3YXNuJiMzOTt0IHNldCwgdGhlIGZsYWdzIGNoYW5nZSBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBnZXRzIGNhbGxlZC4gTWFrZXMgc2Vuc2UuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGBNQURWX0RPTlRORUVEYD8gVGhhdCBkb2VzbiYjMzk7dCBhbHRlciBWTUEgZmxhZ3MsIHNvIGl0JiMzOTtzIG5vdCBoYW5kbGVkIGJ5IGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0JiMzOTtzIGdvb2QuCgpJIG5lZWQgdG8gY2F0YWxvZ3VlIHdoaWNoIG1hZHZpc2UgYmVoYXZpb3JzIGltcGFjdCBWTUEgZmxhZ3MgYW5kIHdpbGwgY2F1c2UgdGhpcyBhZGRpdGlvbmFsIGNhbGw6IGBNQURWX01FUkdFQUJMRWAsIGBNQURWX1VOTUVSR0VBQkxFYCwgYE1BRFZfSFVHRVBBR0VgLCBgTUFEVl9OT0hVR0VQQUdFYCwgYE1BRFZfRE9OVEZPUktgLCBgTUFEVl9ET0ZPUktgLCBgTUFEVl9XSVBFT05GT1JLYCwgYE1BRFZfS0VFUE9ORk9SS2AsIGBNQURWX0NPTERgLCBgTUFEVl9QQUdFT1VUYCwgYE1BRFZfUE9QVUxBVEVfUkVBRGAsIGBNQURWX1BPUFVMQVRFX1dSSVRFYC4gSSBzaG91bGQgY2hlY2sgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCB0byBjb25maXJtIHRoYXQgdGhlc2UgYmVoYXZpb3JzIGFjdHVhbGx5IGNhbGwgYG1hZHZpc2VfdXBkYXRlX3ZtYWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzQ3Olx0c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbjEzNDg6XHR7XG4xMzQ5Olx0XHRpbnQgYmVoYXZpb3IgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yO1xuMTM1MDpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVx1MDAzZXZtYTtcbjEzNTE6XHRcdHZtX2ZsYWdzX3QgbmV3X2ZsYWdzID0gdm1hLVx1MDAzZXZtX2ZsYWdzO1xuMTM1MjpcdFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3JfcmFuZ2UgKnJhbmdlID0gXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZTtcbjEzNTM6XHRcdGludCBlcnJvcjtcbjEzNTQ6XHRcbjEzNTU6XHRcdGlmICh1bmxpa2VseSghY2FuX21hZHZpc2VfbW9kaWZ5KG1hZHZfYmVoYXZpb3IpKSlcbjEzNTY6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjEzNTc6XHRcbjEzNTg6XHRcdHN3aXRjaCAoYmVoYXZpb3IpIHtcbjEzNTk6XHRcdGNhc2UgTUFEVl9SRU1PVkU6XG4xMzYwOlx0XHRcdHJldHVybiBtYWR2aXNlX3JlbW92ZShtYWR2X2JlaGF2aW9yKTtcbjEzNjE6XHRcdGNhc2UgTUFEVl9XSUxMTkVFRDpcbjEzNjI6XHRcdFx0cmV0dXJuIG1hZHZpc2Vfd2lsbG5lZWQobWFkdl9iZWhhdmlvcik7XG4xMzYzOlx0XHRjYXNlIE1BRFZfQ09MRDpcbjEzNjQ6XHRcdFx0cmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTtcbjEzNjU6XHRcdGNhc2UgTUFEVl9QQUdFT1VUOlxuMTM2NjpcdFx0XHRyZXR1cm4gbWFkdmlzZV9wYWdlb3V0KG1hZHZfYmVoYXZpb3IpO1xuMTM2NzpcdFx0Y2FzZSBNQURWX0ZSRUU6XG4xMzY4Olx0XHRjYXNlIE1BRFZfRE9OVE5FRUQ6XG4xMzY5Olx0XHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxuMTM3MDpcdFx0XHRyZXR1cm4gbWFkdmlzZV9kb250bmVlZF9mcmVlKG1hZHZfYmVoYXZpb3IpO1xuMTM3MTpcdFx0Y2FzZSBNQURWX0NPTExBUFNFOlxuMTM3MjpcdFx0XHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG4xMzczOlx0XHRcdFx0XHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX2Ryb3BwZWQpO1xuMTM3NDpcdFx0Y2FzZSBNQURWX0dVQVJEX0lOU1RBTEw6XG4xMzc1Olx0XHRcdHJldHVybiBtYWR2aXNlX2d1YXJkX2luc3RhbGwobWFkdl9iZWhhdmlvcik7XG4xMzc2Olx0XHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxuMTM3NzpcdFx0XHRyZXR1cm4gbWFkdmlzZV9ndWFyZF9yZW1vdmUobWFkdl9iZWhhdmlvcik7XG4xMzc4Olx0XG4xMzc5Olx0XHQvKiBUaGUgYmVsb3cgYmVoYXZpb3VycyB1cGRhdGUgVk1BcyB2aWEgbWFkdmlzZV91cGRhdGVfdm1hKCkuICovXG4xMzgwOlx0XG4xMzgxOlx0XHRjYXNlIE1BRFZfTk9STUFMOlxuMTM4MjpcdFx0XHRuZXdfZmxhZ3MgPSBuZXdfZmxhZ3MgXHUwMDI2IH5WTV9SQU5EX1JFQUQgXHUwMDI2IH5WTV9TRVFfUkVBRDtcbjEzODM6XHRcdFx0YnJlYWs7XG4xMzg0Olx0XHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcbjEzODU6XHRcdFx0bmV3X2ZsYWdzID0gKG5ld19mbGFncyBcdTAwMjYgflZNX1JBTkRfUkVBRCkgfCBWTV9TRVFfUkVBRDtcbjEzODY6XHRcdFx0YnJlYWs7XG4xMzg3Olx0XHRjYXNlIE1BRFZfUkFORE9NOlxuMTM4ODpcdFx0XHRuZXdfZmxhZ3MgPSAobmV3X2ZsYWdzIFx1MDAyNiB+Vk1fU0VRX1JFQUQpIHwgVk1fUkFORF9SRUFEO1xuMTM4OTpcdFx0XHRicmVhaztcbjEzOTA6XHRcdGNhc2UgTUFEVl9ET05URk9SSzpcbjEzOTE6XHRcdFx0bmV3X2ZsYWdzIHw9IFZNX0RPTlRDT1BZO1xuMTM5MjpcdFx0XHRicmVhaztcbjEzOTM6XHRcdGNhc2UgTUFEVl9ET0ZPUks6XG4xMzk0Olx0XHRcdGlmIChuZXdfZmxhZ3MgXHUwMDI2IFZNX1NQRUNJQUwpXG4xMzk1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzk2Olx0XHRcdG5ld19mbGFncyBcdTAwMjY9IH5WTV9ET05UQ09QWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIGlzIGltcGxlbWVudGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0ICpiZWhhdmVzKiBpbiBwcmFjdGljZS4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGJhc2ljcyBvZiBgbWFkdmlzZWAgYW5kIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKSwgb2YgY291cnNlLCBidXQgdGhlIHN1YnRsZXRpZXMgYWx3YXlzIGxpZSBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSB3YW50IHRvIGtub3cgdGhlICpleGFjdCogc2VxdWVuY2Ugb2YgZXZlbnRzIHRyaWdnZXJlZCBieSBhIGNhbGwgdG8gYG1hZHZpc2VgIHdpdGggYSBzcGVjaWZpYyBhZHZpY2UgY29kZSB3aXRoaW4gYSBwYXJ0aWN1bGFyIFZNQSBjb250ZXh0LgoKSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgYG1hZHZpc2VgIGZsYWdzIGFuZCB3aGV0aGVyIHRoZXkmIzM5O3JlIGhvbm91cmVkLiBTbywgSSBuZWVkIHRvIGtub3cgdGhlIHBhdGggb2YgdGhlIGV4ZWN1dGlvbiwgYW5kIGFueSBkYXRhIHN0cnVjdHVyZXMgbW9kaWZpZWQuCgpXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcz8gV2hhdCBhYm91dCBjb25jdXJyZW50IGFjY2Vzcz8gRG9lcyB0aGUga2VybmVsIGVtcGxveSBhbnkgbG9ja3M/IEhvdyBhcmUgdGhlc2UgbG9ja3MgaW1wbGVtZW50ZWQgYW5kIGhvdyBlZmZlY3RpdmUgYXJlIHRoZXk/IFdoYXQgaGFwcGVucyBpZiB0aGUgVk1BIHNwYW5zIG11bHRpcGxlIHBoeXNpY2FsIHBhZ2VzIG9yIHJlZ2lvbnM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucz8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG1hZHZpc2VgIGFuZCBwYWdlIHJlY2xhbWF0aW9uLiBIb3cgaXMgdGhlIGFkdmljZSB1c2VkIChvciBpZ25vcmVkKSBieSB0aGUgcGFnZSByZXBsYWNlbWVudCBhbGdvcml0aG1zPyBEb2VzIHRoZSBrZXJuZWwgYWdncmVzc2l2ZWx5IGZyZWUgdXAgbWVtb3J5IG9yIGRvZXMgaXQgd2FpdCBmb3IgYSBzaWduYWw/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGlmZmVyZW50IHdvcmtsb2FkcyDigJMgYXJlIHRoZXJlIGFueSB3b3JrbG9hZHMgdGhhdCBjYW4gYmVuZWZpdCBmcm9tIHVzaW5nIGBtYWR2aXNlYD8KCkluIGVzc2VuY2UsIEkgbmVlZCBhIGRlZXAgZGl2ZS4gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciBhIHN1cGVyZmljaWFsIG92ZXJ2aWV3OyBJIHdhbnQgdG8ga25vdyB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM5NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzk3Olx0XHRcdGJyZWFrO1xuMTM5ODpcdFx0Y2FzZSBNQURWX1dJUEVPTkZPUks6XG4xMzk5Olx0XHRcdC8qIE1BRFZfV0lQRU9ORk9SSyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBhbm9ueW1vdXMgbWVtb3J5LiAqL1xuMTQwMDpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZpbGUgfHwgbmV3X2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpXG4xNDAxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDAyOlx0XHRcdG5ld19mbGFncyB8PSBWTV9XSVBFT05GT1JLO1xuMTQwMzpcdFx0XHRicmVhaztcbjE0MDQ6XHRcdGNhc2UgTUFEVl9LRUVQT05GT1JLOlxuMTQwNTpcdFx0XHRpZiAobmV3X2ZsYWdzIFx1MDAyNiBWTV9EUk9QUEFCTEUpXG4xNDA2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDA3Olx0XHRcdG5ld19mbGFncyBcdTAwMjY9IH5WTV9XSVBFT05GT1JLO1xuMTQwODpcdFx0XHRicmVhaztcbjE0MDk6XHRcdGNhc2UgTUFEVl9ET05URFVNUDpcbjE0MTA6XHRcdFx0bmV3X2ZsYWdzIHw9IFZNX0RPTlREVU1QO1xuMTQxMTpcdFx0XHRicmVhaztcbjE0MTI6XHRcdGNhc2UgTUFEVl9ET0RVTVA6XG4xNDEzOlx0XHRcdGlmICgoIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIFx1MDAyNlx1MDAyNiAobmV3X2ZsYWdzIFx1MDAyNiBWTV9TUEVDSUFMKSkgfHxcbjE0MTQ6XHRcdFx0ICAgIChuZXdfZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkpXG4xNDE1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDE2Olx0XHRcdG5ld19mbGFncyBcdTAwMjY9IH5WTV9ET05URFVNUDtcbjE0MTc6XHRcdFx0YnJlYWs7XG4xNDE4Olx0XHRjYXNlIE1BRFZfTUVSR0VBQkxFOlxuMTQxOTpcdFx0Y2FzZSBNQURWX1VOTUVSR0VBQkxFOlxuMTQyMDpcdFx0XHRlcnJvciA9IGtzbV9tYWR2aXNlKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbjE0MjE6XHRcdFx0XHRcdGJlaGF2aW9yLCBcdTAwMjZuZXdfZmxhZ3MpO1xuMTQyMjpcdFx0XHRpZiAoZXJyb3IpXG4xNDIzOlx0XHRcdFx0Z290byBvdXQ7XG4xNDI0Olx0XHRcdGJyZWFrO1xuMTQyNTpcdFx0Y2FzZSBNQURWX0hVR0VQQUdFOlxuMTQyNjpcdFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XG4xNDI3Olx0XHRcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIFx1MDAyNm5ld19mbGFncywgYmVoYXZpb3IpO1xuMTQyODpcdFx0XHRpZiAoZXJyb3IpXG4xNDI5Olx0XHRcdFx0Z290byBvdXQ7XG4xNDMwOlx0XHRcdGJyZWFrO1xuMTQzMTpcdFx0Y2FzZSBfX01BRFZfU0VUX0FOT05fVk1BX05BTUU6XG4xNDMyOlx0XHRcdC8qIE9ubHkgYW5vbnltb3VzIG1hcHBpbmdzIGNhbiBiZSBuYW1lZCAqL1xuMTQzMzpcdFx0XHRpZiAodm1hLVx1MDAzZXZtX2ZpbGUgXHUwMDI2XHUwMDI2ICF2bWFfaXNfYW5vbl9zaG1lbSh2bWEpKVxuMTQzNDpcdFx0XHRcdHJldHVybiAtRUJBREY7XG4xNDM1Olx0XHRcdGJyZWFrO1xuMTQzNjpcdFx0fVxuMTQzNzpcdFxuMTQzODpcdFx0LyogVGhpcyBpcyBhIHdyaXRlIG9wZXJhdGlvbi4qL1xuMTQzOTpcdFx0Vk1fV0FSTl9PTl9PTkNFKG1hZHZfYmVoYXZpb3ItXHUwMDNlbG9ja19tb2RlICE9IE1BRFZJU0VfTU1BUF9XUklURV9MT0NLKTtcbjE0NDA6XHRcbjE0NDE6XHRcdGVycm9yID0gbWFkdmlzZV91cGRhdGVfdm1hKG5ld19mbGFncywgbWFkdl9iZWhhdmlvcik7XG4xNDQyOlx0b3V0OlxuMTQ0MzpcdFx0LypcbjE0NDQ6XHRcdCAqIG1hZHZpc2UoKSByZXR1cm5zIEVBR0FJTiBpZiBrZXJuZWwgcmVzb3VyY2VzLCBzdWNoIGFzXG4xNDQ1Olx0XHQgKiBzbGFiLCBhcmUgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuXG4xNDQ2Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgYW5kIEh1Z2UgUGFnZXMqKgoKT2theSwgc28gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaGFuZGxlcyBhIHdob2xlIHNsZXcgb2YgYG1hZHZpc2VgIGZsYWdzOiBgTk9STUFMYCwgYFNFUVVFTlRJQUxgLCBgUkFORE9NYCwgdGhlIGBET05URk9SSy9ET0ZPUktgIGdyb3VwLCB0aGUgYFdJUEVPTkZPUksvS0VFUE9ORk9SS2AgZ3JvdXAsIGBET05URFVNUGAsIGBET0RVTVBgLCBgTUVSR0VBQkxFYCwgYFVOTUVSR0VBQkxFYCwgYEhVR0VQQUdFYCwgYE5PSFVHRVBBR0VgLCBhbmQgYF9fTUFEVl9TRVRfQU5PTl9WTUFfTkFNRWAuIFRoYXQmIzM5O3MgYSBsb3Qgb2YgcG90ZW50aWFsIHN0YXRlIGNoYW5nZXMhCgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIGh1Z2UgcGFnZXMsIHNwZWNpZmljYWxseSB0aGUgY2FzZSB3aGVyZSBhIFZNQSAqYWxyZWFkeSogaGFzIGBWTV9IVUdFUEFHRWAgc2V0LiBJZiBJIHN1YnNlcXVlbnRseSBjYWxsIGBNQURWX05PUk1BTGAgb24gdGhhdCBWTUEsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBuZXdfZmxhZ3NgIHdvdWxkIGFsc28gaW5oZXJpdCB0aGUgYFZNX0hVR0VQQUdFYCBiaXQuIE1ha2VzIHNlbnNlIHNvIGZhci4KCk5vdywgaWYgdGhlIHJlc3VsdGluZyBmbGFncyBhcmUgYWN0dWFsbHkgKmRpZmZlcmVudCog4oCTIHNheSwgaWYgYFZNX1JBTkRfUkVBRGAgZ2V0cyBjbGVhcmVkIOKAkyB0aGVuIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHdpbGwgdHJpZ2dlciB0aGUgY29yZSBsb2dpYy4gVGhpcyBzZWVtcyB0byBiZSB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYHZtYV9mbGFnc190ZXN0KCZhbXA7bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVClgIGNoZWNrIHdpbGwgbm93IGV2YWx1YXRlIHRvIHRydWUsIGFzIGV4cGVjdGVkLCBiZWNhdXNlIGBWTV9IVUdFUEFHRWAgaXMgc2V0LgoKQ29uc2VxdWVudGx5LCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdpbGwgYmUgY2FsbGVkLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgdGhlIHRyYW5zaXRpb24uIEJ1dC4uLiBhIG5hZ2dpbmcgcXVlc3Rpb24gY29tZXMgdG8gbWluZDogV2hhdCBoYXBwZW5zIGlmIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZ2V0cyBjYWxsZWQgKmFnYWluKiBvbiB0aGUgc2FtZSBWTUE/IElzIHRoaXMgYSBwb3RlbnRpYWwgZG91YmxlLWVudHJ5IHByb2JsZW0/IERvZXMgaXQgY2F1c2UgYW55IHVud2FudGVkIHNpZGUtZWZmZWN0cywgc3VjaCBhcyBtZW1vcnkgY29ycnVwdGlvbiBvciBhIHJlZHVuZGFudCBhdHRlbXB0IHRvIHJlLWVzdGFibGlzaCBodWdlIHBhZ2VzPwoKSSBuZWVkIHRvIHJlLWV4YW1pbmUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB0aG9yb3VnaGx5IHRvIGNvbmZpcm0gaG93IGl0IGhhbmRsZXMgcmUtZW50cnkgYW5kIGVuc3VyZSB0aGF0IHRoaXMgcmUtZW50cmFudCBzY2VuYXJpbyBpcyBoYW5kbGVkIHNhZmVseS4gR290dGEgZG91YmxlLWNoZWNrIHRoZSBsb2NraW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODg6XHR2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDU4OTpcdFx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiA1OTA6XHR7XG4gNTkxOlx0XHRpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCB2bWEtXHUwMDNldm1fbW0pIFx1MDAyNlx1MDAyNiBodWdlcGFnZV9lbmFibGVkKClcbiA1OTI6XHRcdCAgICBcdTAwMjZcdTAwMjYgY29sbGFwc2VfcG9zc2libGUodm1hLCB2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKVxuIDU5MzpcdFx0XHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVx1MDAzZXZtX21tKTtcbiA1OTQ6XHR9XG4gNTk1Olx0XG4gNTk2Olx0dm9pZCBfX2todWdlcGFnZWRfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiA1OTc6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUga2h1Z2VwYWdlZF9lbnRlcl92bWEgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmdW5jdGlvbiwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIGl0IHNlZW1zIG9kZGx5IHJlZHVuZGFudC4gSXQgY2hlY2tzIGlmIGAhbW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIHZtYS0mZ3Q7dm1fbW0pYC4gQnV0IGhvbGQgb24sIHRoZSBgTU1GX1ZNX0hVR0VQQUdFYCBmbGFnIGlzIG9uIHRoZSBgbW1fc3RydWN0YCwgbm90IHRoZSBpbmRpdmlkdWFsIGB2bV9hcmVhX3N0cnVjdGAhIFNvLCBhbGwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBkb2VzIGlzIG1ha2Ugc3VyZSB0aGUgYG1tYCBpcyByZWdpc3RlcmVkIGZvciBraHVnZXBhZ2VkLiBUaGlzIG1lYW5zIGNhbGxpbmcgaXQgbXVsdGlwbGUgdGltZXMgaXMgaGFybWxlc3MsIGFzIGl0IG9ubHkgZG9lcyBzb21ldGhpbmcgdGhlIGZpcnN0IHRpbWUuCgpOb3csIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgY29udGV4dC4gV2h5IHdhcyB0aGlzIHBhdGNoIG1hZGUgaW4gdGhlIGZpcnN0IHBsYWNlPyBVbmZvcnR1bmF0ZWx5LCBJIG9ubHkgaGF2ZSB0aGUgZGlmZiBoZXJlLCBub3QgdGhlIGZ1bGwgY29tbWl0IG1lc3NhZ2UuIExldCYjMzk7cyBzZWUuLi4gQWgsIHRoZSBjb21tZW50IGluIHRoZSBjb2RlIHJldmVhbHMgdGhlIGludGVudDogaXQmIzM5O3MgYWJvdXQgcmVnaXN0ZXJpbmcgYSBWTUEgZm9yIGtodWdlcGFnZWQgc2Nhbm5pbmcgd2l0aG91dCB3YWl0aW5nIGZvciBhIHBhZ2UgZmF1bHQuCgpUaGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSByZWFsaXplIHRoYXQgYGh1Z2VwYWdlX21hZHZpc2VgIGlzIGNhbGxlZCB3aGVuIHNvbWVvbmUgZG9lcyBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAuIEl0IHNldHMgYFZNX0hVR0VQQUdFYCBpbiBgbmV3X2ZsYWdzYC4gVGhlbiwgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkLCB3aGljaCB0aGVuIHVzZXMgdGhpcy4KCkhlcmUmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlOiBgaHVnZXBhZ2VfbWFkdmlzZWAgb25seSBtb2RpZmllcyBgbmV3X2ZsYWdzYCwgbm90IHRoZSBhY3R1YWwgYHZtYS0mZ3Q7dm1fZmxhZ3NgLiBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBjYWxscyBgdm1hX21vZGlmeV9mbGFnc2AuIFRoaXMgZnVuY3Rpb24gbWlnaHQgc3BsaXQgdGhlIFZNQS4gSWYgdGhlIFZNQSBpcyBzcGxpdCwgdGhlIGB2bWFgIHBvaW50ZXIgSSYjMzk7bSB3b3JraW5nIHdpdGggbWlnaHQgY2hhbmdlLCBvciBhIG5ldyBWTUEgbWlnaHQgYmUgY3JlYXRlZCEgQnV0IHdhaXQsIGBodWdlcGFnZV9tYWR2aXNlYCBwcmV2aW91c2x5IGNhbGxlZCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdpdGggdGhlICpvbGQqIGB2bWFgIHBvaW50ZXIsIGJlZm9yZSB0aGUgc3BsaXQhCgpIb3dldmVyLCBJIHJlY2FsbCB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAganVzdCBzZXRzIGBNTUZfVk1fSFVHRVBBR0VgIG9uIGB2bWEtJmd0O3ZtX21tYC4gU2luY2UgdGhlIGBtbWAgaXMgdGhlIHNhbWUgZm9yIGFsbCBWTUFzIHdpdGhpbiB0aGF0IG1lbW9yeSBzcGFjZSwgdGhpcyBzZWVtcyBsZXNzIGNvbmNlcm5pbmcuCgpPa2F5LCBJIHRoaW5rIEkmIzM5O20gZ2V0dGluZyBpdC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIG1hdHRlcnMuIEkgbmVlZCB0byBsb29rIGF0IGBjb2xsYXBzZV9wb3NzaWJsZWAgdG8gc2VlIGlmIHRoZSBWTUEmIzM5O3Mgc3VpdGFiaWxpdHkgZm9yIGtodWdlcGFnZWQgc2Nhbm5pbmcgaXMgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODI6XHRzdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiA1ODM6XHRcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXG4gNTg0Olx0e1xuIDU4NTpcdFx0cmV0dXJuIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MpO1xuIDU4NjpcdH1cbiA1ODc6XHRcbiA1ODg6XHR2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDU4OTpcdFx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiA1OTA6XHR7XG4gNTkxOlx0XHRpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCB2bWEtXHUwMDNldm1fbW0pIFx1MDAyNlx1MDAyNiBodWdlcGFnZV9lbmFibGVkKClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgIGlzIGJlaGF2aW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIHRoZSBwb3RlbnRpYWwgb3JkZXJzLiBJIGFtIG1vc3QgaW50ZXJlc3RlZCBpbiB0aGUgY29ybmVyIGNhc2VzLCBzcGVjaWZpY2FsbHkgdGhlIGVmZmVjdHMgb2YgZWRnZSBkYXRhLiBBcmUgdGhlc2UgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG92ZXJmbG93IGlzc3Vlcywgb3IgdW5leHBlY3RlZCBkYXRhIG11dGF0aW9ucz8gSSB3aWxsIGJlZ2luIGJ5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgbG9naWMsIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcyBvciBhc3N1bXB0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiBBbnkgaXNzdWVzIGhlcmUgd291bGQgY2FzY2FkZSwgc28gdGhpcyBkZXNlcnZlcyBhbiBlc3BlY2lhbGx5IHRob3JvdWdoIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2VfcG9zc2libGVfb3JkZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz01MzI9dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU2Ny0gKi9cbm1tL2todWdlcGFnZWQuYzo1Njg6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTU2OS1cdFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTU4Mj1zdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTg0LXtcbm1tL2todWdlcGFnZWQuYzo1ODU6XHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XG5tbS9raHVnZXBhZ2VkLmMtNTg2LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYwNj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTYzNS1cbm1tL2todWdlcGFnZWQuYzoxNjM2Olx0ZW5hYmxlZF9vcmRlcnMgPSBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHR2YV9mbGFncyk7XG5tbS9raHVnZXBhZ2VkLmMtMTYzNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBmdW5jdGlvbi4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgaW5zaWRlIGFuZCBvdXQuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgY29tYmluYXRvcmljcyBvciB0aGUgc3BlY2lmaWMgb3JkZXJpbmcgY29uc3RyYWludHMgYWZ0ZXIgdGhlIGluaXRpYWwgb3JkZXIgY29uc3RydWN0aW9uIHBoYXNlLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgc3VjaCBhIGZ1bmN0aW9uIGlzIG9mdGVuIGEgYm90dGxlbmVjaywgcHJvbmUgdG8gaW5lZmZpY2llbmNpZXMgaWYgbm90IGltcGxlbWVudGVkIGNhcmVmdWxseS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBnb3QgY2xldmVyIGFsZ29yaXRobXMgb3IganVzdCBicnV0ZS1mb3JjZSBhcHByb2FjaGVzLiBJ4oCZbSBob3BpbmcgaXQgbGV2ZXJhZ2VzIHNvbWUgb2YgdGhlIG9wdGltaXphdGlvbnMgSSYjMzk7dmUgc2VlbiBpbiBzaW1pbGFyIGNvbWJpbmF0b3JpYWwgcHJvYmxlbXMuIElzIGl0IHVzaW5nIG1lbW9pemF0aW9uLCBkeW5hbWljIHByb2dyYW1taW5nLCBvciBwZXJoYXBzIHNvbWUgc3BlY2lmaWMgb3JkZXJpbmcgc3RydWN0dXJlIHRvIHJlZHVjZSB0aGUgc2VhcmNoIHNwYWNlPyBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBvcGVyYXRlcyBvbiDigJMgdGhleSBvZnRlbiBob2xkIHRoZSBrZXkgdG8gcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBtZXJnZXMgb3ZlcmxhcHBpbmcgb3IgcmVkdW5kYW50IG9yZGVyczsgdGhhdCYjMzk7cyB3aGVyZSBjb21wbGV4aXR5IGNhbiByZWFsbHkgZXhwbG9kZS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzIG9yIGNyYXNoZXMuIFRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgc28gbGV0JiMzOTtzIHN0YXJ0IHJlYWRpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Njg6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNTY5Olx0XHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzKVxuIDU3MDpcdHtcbiA1NzE6XHRcdHVuc2lnbmVkIGxvbmcgb3JkZXJzO1xuIDU3MjpcdFxuIDU3MzpcdFx0LyogSWYga2h1Z2VwYWdlZCBpcyBzY2FubmluZyBhbiBhbm9ueW1vdXMgdm1hLCBhbGxvdyBtVEhQIGNvbGxhcHNlICovXG4gNTc0Olx0XHRpZiAoKHR2YV9mbGFncyA9PSBUVkFfS0hVR0VQQUdFRCkgXHUwMDI2XHUwMDI2IHZtYV9pc19hbm9ueW1vdXModm1hKSlcbiA1NzU6XHRcdFx0b3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTjtcbiA1NzY6XHRcdGVsc2VcbiA1Nzc6XHRcdFx0b3JkZXJzID0gQklUKEhQQUdFX1BNRF9PUkRFUik7XG4gNTc4Olx0XG4gNTc5Olx0XHRyZXR1cm4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncywgb3JkZXJzKTtcbiA1ODA6XHR9XG4gNTgxOlx0XG4gNTgyOlx0c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gNTgzOlx0XHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzKVxuIDU4NDpcdHtcbiA1ODU6XHRcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcbiA1ODY6XHR9XG4gNTg3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZXBhZ2UgYW5kIFZNQSBJbnRlcmFjdGlvbnMqKgoKT2theSwgbGV0IG1lIHdhbGsgdGhyb3VnaCB0aGlzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBgaHVnZXBhZ2VfbWFkdmlzZWAgYW5kIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBga2h1Z2VwYWdlZGAgcHJvY2Vzcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGUgVk1BIHN1aXRhYmlsaXR5IGlzIHByb3Blcmx5IGFzc2Vzc2VkLCBsb29raW5nIGF0IGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbWlnaHQgYmUgY2FsbGVkIHdpdGggYW4gb3V0ZGF0ZWQgVk1BIHBvaW50ZXIuIElmIGBodWdlcGFnZV9tYWR2aXNlYCB1c2VkIGFuIG9sZCBWTUEgcG9pbnRlciBpdCBtaWdodCBwb2ludCB0byBhbiBhbm9ueW1vdXMgVk1BIHRoYXQgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgc2l6ZS4gVGhlbiwgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgY29tZXMgKmFmdGVyKiBgaHVnZXBhZ2VfbWFkdmlzZWAuIEkgaGF2ZSBhIGNsZWFyIGlkZWEgb24gd2hhdCBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBkb2luZy4gSXQgbW9kaWZpZXMgVk1BIGZsYWdzIGFuZCBwb3NzaWJseSByZW5hbWVzIHRoZSBWTUEuCgpUaGUgbmV4dCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcG90ZW50aWFsIHRpbWluZyBpc3N1ZTogYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBtaWdodCBiZSBjYWxsZWQgKmJlZm9yZSogdGhlIFZNQSBnZXRzIHNwbGl0IG9yIG1vZGlmaWVkIGJ5IGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0JiMzOTtzIHdoZXJlIGBjb2xsYXBzZV9wb3NzaWJsZWAgY29tZXMgaW4uIEl0IHNlZW1zIGxpa2UgYSBWTUEgY2FuIGJlIHNwbGl0LCBhbmQgdGhlbiBpZiB0aGUgc3BsaXQgVk1BIGlzIHRvbyBzbWFsbCB0byBiZSBhIGh1Z2VwYWdlLCBgY29sbGFwc2VfcG9zc2libGVgIGNvdWxkIHJldHVybiBmYWxzZS4gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGJ1ZywgYnV0IHRoZW4gSSByZWNhbGwgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgcGFzc2VzIHRoZSBvcmlnaW5hbCBWTUEsIHdoaWNoICptaWdodCogYmUgbGFyZ2UgZW5vdWdoLCBzbyBgY29sbGFwc2VfcG9zc2libGVgIHJldHVybnMgdHJ1ZS4gQnV0IGl0IGp1c3QgcmVnaXN0ZXJzIHRoZSBgbW1gIGZvciBjb25zaWRlcmF0aW9uLCBzbyB0aGUgaW5kaXZpZHVhbCBWTUEgc2l6ZSBkb2VzbiYjMzk7dCBtYXR0ZXIgYXQgdGhhdCBwb2ludCwgYXMgbG9uZyBhcyAqc29tZSogVk1BICptaWdodCogYmUgc3VpdGFibGUuIFRoYXQmIzM5O3MgZmluZS4KCk5vdywgaWYgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGZhaWxzIChlLmcuLCBgRU5PTUVNYCBpbiBgdm1hX21vZGlmeV9mbGFnc2ApLCB0aGUgY29kZSByZXR1cm5zIGFuIGVycm9yLCBidXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBoYXMgKmFscmVhZHkqIGJlZW4gY2FsbGVkISBUaGUgYG1tYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIGV2ZW4gdGhvdWdoIHRoZSBgbWFkdmlzZWAgZmFpbGVkLiBUaGF0IHNob3VsZG4mIzM5O3QgYmUgYSBiaWcgZGVhbCwgYmVjYXVzZSBpdCBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBjbGVhbiB1cC4KClRoZSBuZXh0IHNjZW5hcmlvIHRvIGNvbnNpZGVyIGlzIGEgVk1BIGNyZWF0ZWQgd2l0aCBgVk1fSFVHRVBBR0VgIHRoYXQgaXMgKmluaXRpYWxseSogdW5zdWl0YWJsZS4gYG1hZHZpc2UoTUFEVl9ET05URk9SSylgIGlzIGNhbGxlZCwgdGhlbiBgbWFkdmlzZV91cGRhdGVfdm1hYCwgYW5kIGZpbmFsbHksIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoaXMgbG9va3MgbGlrZSBhIG1pbm9yIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QgYSBidWcuCgpUaGVyZSYjMzk7cyBhbm90aGVyIGNhc2UgSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkLiBXaG8gZWxzZSBjYW4gc2V0IGBWTV9IVUdFUEFHRWA/IEl0IHNlZW1zIGxpa2UgaXQgaXMgb25seSBzZXQgYnkgYGh1Z2VwYWdlX21hZHZpc2VgLiBCdXQgd2FpdCwgd2hhdCBpZiBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQgZm9yIGBNQURWX05PUk1BTGAgb24gYSBWTUEgdGhhdCAqYWxyZWFkeSogaGFzIGBWTV9IVUdFUEFHRWA/IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIGFnYWluLCBidXQgdGhhdCYjMzk7cyBmaW5lLCBiZWNhdXNlIGl0IGNoZWNrcyBpZiBgTU1GX1ZNX0hVR0VQQUdFYCBpcyBhbHJlYWR5IHNldCwgYW5kIGRvZXMgbm90aGluZyBpZiBpdCBpcy4gSXQmIzM5O3Mgb25seSBjbGVhcmVkIGR1cmluZyBgX19raHVnZXBhZ2VkX2V4aXRgIHdoZW4gdGhlIG1tIGlzIGRlc3Ryb3llZC4KClRoZSBjcml0aWNhbCBjYXNlIGFwcGVhcnMgdG8gYmUgd2hlbiBgdm1hX21vZGlmeV9mbGFnc2AgbWVyZ2VzIGEgVk1BIHdpdGggYW4gYWRqYWNlbnQgVk1BLiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGlzIHRoZW4gY2FsbGVkIHdpdGggdGhlIG1lcmdlZCBWTUEuIFRoZSBtZXJnZWQgVk1BIG1pZ2h0IGJlIGxhcmdlIGVub3VnaCwgd2hpbGUgdGhlIG9yaWdpbmFsIHdhcyBub3QhIFNwZWNpZmljYWxseSwgaWYgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGlzIGNhbGxlZCBvbiBhIHNtYWxsIHJhbmdlLCBgaHVnZXBhZ2VfbWFkdmlzZWAgY2FsbHMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBvbiB0aGF0IG9yaWdpbmFsIHNtYWxsIFZNQS4gSWYgdGhhdCBWTUEgaXMgdG9vIHNtYWxsLCBgY29sbGFwc2VfcG9zc2libGVgIHJldHVybnMgZmFsc2UuIE5vdywgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgbWVyZ2VzIHRoYXQgc21hbGwgVk1BIHdpdGggYW5vdGhlciBWTUEuIFRoZSBtZXJnZWQgVk1BIGlzIG5vdyBsYXJnZSBlbm91Z2ggdG8gYmUgYSBodWdlcGFnZSwgYnV0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2FzICphbHJlYWR5KiBjYWxsZWQgKGFuZCwgaW1wb3J0YW50bHksICpkaWRuJiMzOTt0KiBjYWxsIGBfX2todWdlcGFnZWRfZW50ZXJgKS4gRnVydGhlcm1vcmUsIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGRvZXMgKm5vdCogY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBTbywgdGhlIGBtbWAgaXMgKm5ldmVyKiByZWdpc3RlcmVkIHdpdGggYGtodWdlcGFnZWRgIQpUaGlzIG5lZWRzIHZlcmlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUzMjpcdHZvaWQgX19raHVnZXBhZ2VkX2VudGVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDUzMzpcdHtcbiA1MzQ6XHRcdHN0cnVjdCBtbV9zbG90ICpzbG90O1xuIDUzNTpcdFx0aW50IHdha2V1cDtcbiA1MzY6XHRcbiA1Mzc6XHRcdC8qIF9fa2h1Z2VwYWdlZF9leGl0KCkgbXVzdCBub3QgcnVuIGZyb20gdW5kZXIgdXMgKi9cbiA1Mzg6XHRcdFZNX0JVR19PTl9NTShjb2xsYXBzZV90ZXN0X2V4aXQobW0pLCBtbSk7XG4gNTM5Olx0XG4gNTQwOlx0XHRzbG90ID0gbW1fc2xvdF9hbGxvYyhtbV9zbG90X2NhY2hlKTtcbiA1NDE6XHRcdGlmICghc2xvdClcbiA1NDI6XHRcdFx0cmV0dXJuO1xuIDU0MzpcdFxuIDU0NDpcdFx0aWYgKHVubGlrZWx5KG1tX2ZsYWdzX3Rlc3RfYW5kX3NldChNTUZfVk1fSFVHRVBBR0UsIG1tKSkpIHtcbiA1NDU6XHRcdFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIHNsb3QpO1xuIDU0NjpcdFx0XHRyZXR1cm47XG4gNTQ3Olx0XHR9XG4gNTQ4Olx0XG4gNTQ5Olx0XHRzcGluX2xvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbiA1NTA6XHRcdG1tX3Nsb3RfaW5zZXJ0KG1tX3Nsb3RzX2hhc2gsIG1tLCBzbG90KTtcbiA1NTE6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDM0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpeGluZyB0aGUgTUFEVl9IVUdFUEFHRSBCdWc6IEEgRGVlcCBEaXZlKioKCk9rYXksIHRoaXMgaXMgZ29vZC4gSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIFRoZSBjb3JlIGlzc3VlIGlzIHRoaXM6IFdoZW4gYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGlzIHVzZWQgb24gYSBzbWFsbCBtZW1vcnkgcmVnaW9uLCB0aGUgYGh1Z2VwYWdlX21hZHZpc2VgIGZ1bmN0aW9uIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb24gdGhlICpvcmlnaW5hbCogVk1BLiBUaGF0IFZNQSBtaWdodCBiZSB0b28gc21hbGwsIHNvIGBjb2xsYXBzZV9wb3NzaWJsZWAgcmV0dXJucyBmYWxzZSBhbmQgd2UgZG9uJiMzOTt0IHByb2NlZWQuIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIG1lcmdlcyB0aGF0IHNtYWxsIFZNQSB3aXRoIGEgbmVpZ2hib3IuIFRoZSAqbWVyZ2VkKiBWTUEgY291bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGJlbmVmaXQgZnJvbSBodWdlcGFnZXMsIGJ1dCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgICppc24mIzM5O3QqIGNhbGxlZCBvbiB0aGUgbWVyZ2VkIFZNQS4gU28sIHRoZSBrZXJuZWwgZG9lc24mIzM5O3QgcmVnaXN0ZXIgdGhlIG1lbW9yeSBtYXAgKGBtbWApIHdpdGggdGhlIGtodWdlcGFnZWQgZGFlbW9uLiBUaGF0JiMzOTtzIGEgY2xlYXIgZmFpbHVyZS4KClRoZSBwYXRjaCBwcm92aWRlcyBhIGNsZWFyIHNvbHV0aW9uLiBJdCYjMzk7cyBjbGV2ZXJseSBkb25lOyB3ZSBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsICphZnRlciogdGhlIGB2bWFfbW9kaWZ5X2ZsYWdzYCBmdW5jdGlvbiBkb2VzIHRoZSBtZXJnaW5nLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQgb24gdGhlICptZXJnZWQqIFZNQSwgd2hpY2ggaXMgbm93IGxhcmdlIGVub3VnaCB0byBwYXNzIHRoZSBgY29sbGFwc2VfcG9zc2libGVgIGNoZWNrLCBhbmQgZmluYWxseSBleGVjdXRlcyBgX19raHVnZXBhZ2VkX2VudGVyYCEgVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgYnVnIHdoZXJlIGFkamFjZW50IHNtYWxsIHJhbmdlcyB1c2luZyBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgZmFpbGVkIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5LgoKQnV0IHdhaXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHBhdGhzIHRoYXQgbWlnaHQgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG9uIHRoZSBtZXJnZWQgVk1BLiBMZXQmIzM5O3MgbWFrZSBzdXJlLiBUaGUgY3JpdGljYWwgc3RlcCBpcyBgdm1hX21vZGlmeV9mbGFnc2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzbiYjMzk7dCAqaXRzZWxmKiBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYXQgYW55IHBvaW50LiBKdXN0IHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydCBvZiB0aGUgY29kZS4gQnV0IG92ZXJhbGwsIHRoaXMgaXMgYSBjbGVhbiBhbmQgZWZmZWN0aXZlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hX21vZGlmeV9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxuLS1cbm1tL21hZHZpc2UuYy0xNjktXHRlbHNlXG5tbS9tYWR2aXNlLmM6MTcwOlx0XHR2bWEgPSB2bWFfbW9kaWZ5X2ZsYWdzKFx1MDAyNnZtaSwgbWFkdl9iZWhhdmlvci1cdTAwM2VwcmV2LCB2bWEsXG5tbS9tYWR2aXNlLmMtMTcxLVx0XHRcdHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIFx1MDAyNm5ld192bWFfZmxhZ3MpO1xuLS1cbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tbG9jay5jLTQ4NC1cbm1tL21sb2NrLmM6NDg1Olx0dm1hID0gdm1hX21vZGlmeV9mbGFncyh2bWksICpwcmV2LCB2bWEsIHN0YXJ0LCBlbmQsIG5ld192bWFfZmxhZ3MpO1xubW0vbWxvY2suYy00ODYtXHRpZiAoSVNfRVJSKHZtYSkpIHtcbi0tXG5tbS9tcHJvdGVjdC5jPTc2MD1tcHJvdGVjdF9maXh1cChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbXByb3RlY3QuYy04MjMtXG5tbS9tcHJvdGVjdC5jOjgyNDpcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHByZXYsIHZtYSwgc3RhcnQsIGVuZCwgXHUwMDI2bmV3X3ZtYV9mbGFncyk7XG5tbS9tcHJvdGVjdC5jLTgyNS1cdGlmIChJU19FUlIodm1hKSkge1xuLS1cbm1tL21zZWFsLmM9MzU9c3RhdGljIGludCBfX21zZWFsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL21zZWFsLmMtNTQtXG5tbS9tc2VhbC5jOjU1Olx0XHRcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3MoXHUwMDI2dm1pLCBwcmV2LCB2bWEsIGN1cnJfc3RhcnQsXG5tbS9tc2VhbC5jLTU2LVx0XHRcdFx0XHQgICAgICAgY3Vycl9lbmQsIFx1MDAyNnZtYV9mbGFncyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0yMjYwPXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVzZXJmYXVsdGZkX2NsZWFyX3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMjk1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMjk2Olx0cmV0ID0gdm1hX21vZGlmeV9mbGFnc191ZmZkKHZtaSwgcHJldiwgdm1hLCBzdGFydCwgZW5kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMjk3LVx0XHRcdFx0ICAgIFx1MDAyNm5ld192bWFfZmxhZ3MsIE5VTExfVk1fVUZGRF9DVFgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0yMzEyPXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfcmVnaXN0ZXJfcmFuZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjM1OC1cbm1tL3VzZXJmYXVsdGZkLmM6MjM1OTpcdFx0dm1hID0gdm1hX21vZGlmeV9mbGFnc191ZmZkKFx1MDAyNnZtaSwgcHJldiwgdm1hLCBzdGFydCwgdm1hX2VuZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjM2MC1cdFx0XHRcdFx0ICAgIFx1MDAyNm5ld192bWFfZmxhZ3MsXG4tLVxubW0vdm1hLmM9MTc0OD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4tLVxubW0vdm1hLmMtMTc4Ny1cbm1tL3ZtYS5jOjE3ODg6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbm1tL3ZtYS5jLTE3ODktXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1hLmM9MTgyNT1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfcG9saWN5KHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbi0tXG5tbS92bWEuYy0xODM2LVxubW0vdm1hLmM6MTgzNzpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfZmxhZ3NfdWZmZChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG5tbS92bWEuYy0xODM4LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3ZtYS5oPTQyMD12b2lkIHVubWFwX3JlZ2lvbihzdHJ1Y3QgdW5tYXBfZGVzYyAqdW5tYXApO1xuLS1cbm1tL3ZtYS5oLTQyMi0vKipcbm1tL3ZtYS5oOjQyMzogKiB2bWFfbW9kaWZ5X2ZsYWdzKCkgLSBQZXJmb3JtIGFueSBuZWNlc3Nhcnkgc3BsaXQvbWVyZ2UgaW4gcHJlcGFyYXRpb24gZm9yXG5tbS92bWEuaC00MjQtICogc2V0dGluZyBWTUEgZmxhZ3MgdG8gKkB2bV9mbGFncyBpbiB0aGUgcmFuZ2UgQHN0YXJ0IHRvIEBlbmQgY29udGFpbmVkIHdpdGhpblxuLS1cbm1tL3ZtYS5oLTQ0NC0gKi9cbm1tL3ZtYS5oOjQ0NTpfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbm1tL3ZtYS5oLTQ0Ni1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bWEuaD00OTI9X19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9wb2xpY3koc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxuLS1cbm1tL3ZtYS5oLTQ5Ny0vKipcbm1tL3ZtYS5oOjQ5ODogKiB2bWFfbW9kaWZ5X2ZsYWdzX3VmZmQoKSAtIFBlcmZvcm0gYW55IG5lY2Vzc2FyeSBzcGxpdC9tZXJnZSBpbiBwcmVwYXJhdGlvbiBmb3Jcbm1tL3ZtYS5oLTQ5OS0gKiBzZXR0aW5nIFZNQSBmbGFncyB0byBAdm1fZmxhZ3MgYW5kIFVGRkQgY29udGV4dCB0byBAbmV3X2N0eCBpbiB0aGUgcmFuZ2Vcbi0tXG5tbS92bWEuaC01MTgtICovXG5tbS92bWEuaDo1MTk6X19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9mbGFnc191ZmZkKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbm1tL3ZtYS5oLTUyMC1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdm1hX21vZGlmeV9mbGFnc2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGB2bWFfbW9kaWZ5X2ZsYWdzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vdm1hLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgb3BlcmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgZmxhZyBtYW5pcHVsYXRpb24gaXRzZWxmIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIGFyb3VuZCB0aGUgVk1BLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NraW5nIGFuZCBhdG9taWNpdHkgdXNlZCwgYXMgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyB3aXRoaW4gdGhlIFZNIHN1YnN5c3RlbSBhcmUgc29tZSBvZiB0aGUgdG91Z2hlc3QgYnVncyB0byBkZWJ1Zy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IG1pZ2h0IG1vZGlmeSB0aGUgVk1BIG9yIGFjY2VzcyBpdCB3aGlsZSBgdm1hX21vZGlmeV9mbGFnc2AgaXMgaW4gZmxpZ2h0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhdCBwbGF5LiBQZXJoYXBzIHRoaXMgd2lsbCB1bnZlaWwgc29tZSBzdWJ0bGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG5lZWQgZnVydGhlciBzY3J1dGlueS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc4ODpcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9mbGFncyhzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4xNzg5Olx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4xNzkwOlx0XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuMTc5MTpcdFx0XHR2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cilcbjE3OTI6XHR7XG4xNzkzOlx0XHRWTUdfVk1BX1NUQVRFKHZtZywgdm1pLCBwcmV2LCB2bWEsIHN0YXJ0LCBlbmQpO1xuMTc5NDpcdFx0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gKnZtYV9mbGFnc19wdHI7XG4xNzk1Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnJldDtcbjE3OTY6XHRcbjE3OTc6XHRcdHZtZy52bWFfZmxhZ3MgPSB2bWFfZmxhZ3M7XG4xNzk4Olx0XG4xNzk5Olx0XHRyZXQgPSB2bWFfbW9kaWZ5KFx1MDAyNnZtZyk7XG4xODAwOlx0XHRpZiAoSVNfRVJSKHJldCkpXG4xODAxOlx0XHRcdHJldHVybiByZXQ7XG4xODAyOlx0XG4xODAzOlx0XHQvKlxuMTgwNDpcdFx0ICogRm9yIGEgbWVyZ2UgdG8gc3VjY2VlZCwgdGhlIGZsYWdzIG11c3QgbWF0Y2ggdGhvc2VcbjE4MDU6XHRcdCAqIHJlcXVlc3RlZC4gSG93ZXZlciwgc3RpY2t5IGZsYWdzIG1heSBoYXZlIGJlZW4gcmV0YWluZWQsIHNvIHByb3BhZ2F0ZVxuMTgwNjpcdFx0ICogdGhlbSB0byB0aGUgY2FsbGVyLlxuMTgwNzpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB2bWFfbW9kaWZ5YCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgdm1hX21vZGlmeWAsIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byBgbW0vdm1hLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBkb2luZy4uLiB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTSBhcmVhIGl0c2VsZiwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGl0IGNhbGxzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBwZXJtaXNzaW9ucyBjaGFuZ2VzLCBwZXJoYXBzIGFkanVzdGluZyB0aGUgcGFnZSB0YWJsZXMgYW5kIFRMQiBlbnRyaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIG92ZXJhbGwgZWZmZWN0IG9uIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIG1lbW9yeSBtYXBwaW5nLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBhbmQgYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzQ4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NDg6XHRzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4xNzQ5Olx0e1xuMTc1MDpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWctXHUwMDNlbWlkZGxlO1xuMTc1MTpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IHZtZy1cdTAwM2VzdGFydDtcbjE3NTI6XHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gdm1nLVx1MDAzZWVuZDtcbjE3NTM6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbWVyZ2VkO1xuMTc1NDpcdFxuMTc1NTpcdFx0LyogRmlyc3QsIHRyeSB0byBtZXJnZS4gKi9cbjE3NTY6XHRcdG1lcmdlZCA9IHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZSh2bWcpO1xuMTc1NzpcdFx0aWYgKG1lcmdlZClcbjE3NTg6XHRcdFx0cmV0dXJuIG1lcmdlZDtcbjE3NTk6XHRcdGlmICh2bWdfbm9tZW0odm1nKSlcbjE3NjA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xNzYxOlx0XG4xNzYyOlx0XHQvKlxuMTc2MzpcdFx0ICogU3BsaXQgY2FuIGZhaWwgZm9yIHJlYXNvbnMgb3RoZXIgdGhhbiBPT00sIHNvIGlmIHRoZSB1c2VyIHJlcXVlc3RzXG4xNzY0Olx0XHQgKiB0aGlzIGl0JiMzOTtzIHByb2JhYmx5IGEgbWlzdGFrZS5cbjE3NjU6XHRcdCAqL1xuMTc2NjpcdFx0Vk1fV0FSTl9PTih2bWctXHUwMDNlZ2l2ZV91cF9vbl9vb20gXHUwMDI2XHUwMDI2XG4xNzY3Olx0XHRcdCAgICh2bWEtXHUwMDNldm1fc3RhcnQgIT0gc3RhcnQgfHwgdm1hLVx1MDAzZXZtX2VuZCAhPSBlbmQpKTtcbjE3Njg6XHRcbjE3Njk6XHRcdC8qIFNwbGl0IGFueSBwcmVjZWRpbmcgcG9ydGlvbiBvZiB0aGUgVk1BLiAqL1xuMTc3MDpcdFx0aWYgKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2Mgc3RhcnQpIHtcbjE3NzE6XHRcdFx0aW50IGVyciA9IHNwbGl0X3ZtYSh2bWctXHUwMDNldm1pLCB2bWEsIHN0YXJ0LCAxKTtcbjE3NzI6XHRcbjE3NzM6XHRcdFx0aWYgKGVycilcbjE3NzQ6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMTc3NTpcdFx0fVxuMTc3NjpcdFxuMTc3NzpcdFx0LyogU3BsaXQgYW55IHRyYWlsaW5nIHBvcnRpb24gb2YgdGhlIFZNQS4gKi9cbjE3Nzg6XHRcdGlmICh2bWEtXHUwMDNldm1fZW5kIFx1MDAzZSBlbmQpIHtcbjE3Nzk6XHRcdFx0aW50IGVyciA9IHNwbGl0X3ZtYSh2bWctXHUwMDNldm1pLCB2bWEsIGVuZCwgMCk7XG4xNzgwOlx0XG4xNzgxOlx0XHRcdGlmIChlcnIpXG4xNzgyOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjE3ODM6XHRcdH1cbjE3ODQ6XHRcbjE3ODU6XHRcdHJldHVybiB2bWE7XG4xNzg2Olx0fVxuMTc4NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1lcmdlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlYCBpcyBiZWluZyBjYWxsZWQuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHJhbmdlIG1lcmdpbmcsIHdoaWNoIGlzIGEga2V5IHByb2Nlc3MgaW4gdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlcmUgdG8gc2VlIGlmIGl0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxscyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBUaGUgaW50ZWdyYXRpb24gKG9yIGxhY2sgdGhlcmVvZikgb2YgbWVyZ2luZyB3aXRoIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IGlzIHZpdGFsIGZvciBwZXJmb3JtYW5jZSBhbmQgb3ZlcmFsbCBtZW1vcnkgdXRpbGl6YXRpb24uIE15IG5leHQgc3RlcCBpcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBgdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlYCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdFx0XHRcdHZtZy1cdTAwM2VfX2FkanVzdF9uZXh0X3N0YXJ0ID0gdHJ1ZTtcbjEwNjE6XHRcdFx0XHR2bWctXHUwMDNlc3RhcnQgPSBtaWRkbGUtXHUwMDNldm1fc3RhcnQ7XG4xMDYyOlx0XHRcdFx0dm1nLVx1MDAzZWVuZCA9IHN0YXJ0O1xuMTA2MzpcdFx0XHRcdHZtZy1cdTAwM2VwZ29mZiA9IHZtYV9zdGFydF9wZ29mZihtaWRkbGUpO1xuMTA2NDpcdFx0XHRcdHZtZy1cdTAwM2Vhbm9uX3Bnb2ZmID0gdm1hX3N0YXJ0X2Fub25fcGdvZmYobWlkZGxlKTtcbjEwNjU6XHRcdFx0fVxuMTA2NjpcdFxuMTA2NzpcdFx0XHRlcnIgPSBkdXBfYW5vbl92bWEobmV4dCwgbWlkZGxlLCBcdTAwMjZhbm9uX2R1cCk7XG4xMDY4Olx0XHR9XG4xMDY5Olx0XG4xMDcwOlx0XHRpZiAoZXJyIHx8IGNvbW1pdF9tZXJnZSh2bWcpKVxuMTA3MTpcdFx0XHRnb3RvIGFib3J0O1xuMTA3MjpcdFxuMTA3MzpcdFx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cdTAwM2V0YXJnZXQsIHN0aWNreV9mbGFncyk7XG4xMDc0Olx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xuMTA3NTpcdFx0dm1nLVx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XG4xMDc2Olx0XHRyZXR1cm4gdm1nLVx1MDAzZXRhcmdldDtcbjEwNzc6XHRcbjEwNzg6XHRhYm9ydDpcbjEwNzk6XHRcdHZtYV9pdGVyX3NldCh2bWctXHUwMDNldm1pLCBzdGFydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRXVyZWthISBBIEtodWdlcGFnZWQgQ29ubmVjdGlvbiEqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyBpdCEgSSYjMzk7dmUgYmVlbiBkaWdnaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgaXQgZmluYWxseSBjbGlja3MuIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgICpkZWZpbml0ZWx5KiBjYWxscyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpIb2xkIG9uLi4uIGlmIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgIGlzIGNhbGxpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCwgdGhlbiBieSBkZWZpbml0aW9uLCBhIFZNQSBtZXJnZWQgaW4gdGhhdCBwcm9jZXNzICppcyogZ29pbmcgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGtodWdlcGFnZWQuIFRoaXMgaXMgZ29vZCBwcm9ncmVzcyEgCgpMZXQgbWUganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhpcyB0cmFpbiBvZiB0aG91Z2h0IGxvZ2ljYWxseS4gU2luY2UgdGhhdCBvbmUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgY2hlY2sgb3V0IGhvdyBgdm1hX21lcmdlX25ld19yYW5nZWAgb3BlcmF0ZXMgbm93LiBJJiMzOTt2ZSBnb3QgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE4NTpcdFx0XHRpZiAoIXZtZy1cdTAwM2VqdXN0X2V4cGFuZCkge1xuMTE4NjpcdFx0XHRcdC8qIEVxdWl2YWxlbnQgdG8gZ29pbmcgdG8gdGhlIHByZXZpb3VzIHJhbmdlLiAqL1xuMTE4NzpcdFx0XHRcdHZtYV9wcmV2KHZtZy1cdTAwM2V2bWkpO1xuMTE4ODpcdFx0XHR9XG4xMTg5Olx0XHR9XG4xMTkwOlx0XG4xMTkxOlx0XHQvKlxuMTE5MjpcdFx0ICogTm93IHRyeSB0byBleHBhbmQgYWRqYWNlbnQgVk1BKHMpLiBUaGlzIHRha2VzIGNhcmUgb2YgcmVtb3ZpbmcgdGhlXG4xMTkzOlx0XHQgKiBmb2xsb3dpbmcgVk1BIGlmIHdlIGhhdmUgVk1BcyBvbiBib3RoIHNpZGVzLlxuMTE5NDpcdFx0ICovXG4xMTk1Olx0XHRpZiAodm1nLVx1MDAzZXRhcmdldCBcdTAwMjZcdTAwMjYgIXZtYV9leHBhbmQodm1nKSkge1xuMTE5NjpcdFx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xuMTE5NzpcdFx0XHR2bWctXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcbjExOTg6XHRcdFx0cmV0dXJuIHZtZy1cdTAwM2V0YXJnZXQ7XG4xMTk5Olx0XHR9XG4xMjAwOlx0XG4xMjAxOlx0XHRyZXR1cm4gTlVMTDtcbjEyMDI6XHR9XG4xMjAzOlx0XG4xMjA0Olx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZNQSBNZXJnaW5nIGFuZCBTcGxpdHRpbmcgd2l0aCBraHVnZXBhZ2VkKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cyB3aXRoIFZNQSBtb2RpZmljYXRpb25zLiBJIHNlZSB0aGF0IHdoZW4gYHZtYV9tZXJnZV9uZXdfcmFuZ2VgIGlzIGNhbGxlZCwgaXQgKmFsc28qIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGlmIFZNQXMgYXJlIG1lcmdlZCBieSBgdm1hX21vZGlmeV9mbGFnc2AsIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCAqc2hvdWxkKiBiZSBjYWxsZWQgb24gdGhlIHJlc3VsdGluZywgdW5pZmllZCBWTUEgdG8gaGFuZGxlIHBvdGVudGlhbCBodWdlcGFnZSBjb25zaWRlcmF0aW9ucy4KCk5vdywgYSBtb3JlIGludGVyZXN0aW5nIHF1ZXN0aW9uIGNvbWVzIHRvIG1pbmQ6IHdoYXQgaGFwcGVucyB3aGVuIGB2bWFfbW9kaWZ5X2ZsYWdzYCAqc3BsaXRzKiBhIFZNQT8gRG9lcyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGdldCBjYWxsZWQgaW4gdGhhdCBzY2VuYXJpbz8gSSBuZWVkIHRvIGtub3cuIFRoZSBzcGxpdCBWTUEgY2FzZSBpcyBjcml0aWNhbC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgc3BsaXRfdm1hYCBmdW5jdGlvbjsgdGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgYW5zd2VyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHkgdG8gZW5zdXJlIG5vIGh1Z2VwYWdlLXJlbGF0ZWQgaXNzdWVzIGFyaXNlIGR1cmluZyBWTUEgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZF9lbnRlcl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWEuYz04ODk9c3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcbi0tXG5tbS92bWEuYy0xMDczLVx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cdTAwM2V0YXJnZXQsIHN0aWNreV9mbGFncyk7XG5tbS92bWEuYzoxMDc0Olx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVx1MDAzZXRhcmdldCwgdm1nLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTEwNzUtXHR2bWctXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcbi0tXG5tbS92bWEuYz0xMTQwPXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX25ld19yYW5nZShzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nKVxuLS1cbm1tL3ZtYS5jLTExOTUtXHRpZiAodm1nLVx1MDAzZXRhcmdldCBcdTAwMjZcdTAwMjYgIXZtYV9leHBhbmQodm1nKSkge1xubW0vdm1hLmM6MTE5NjpcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVx1MDAzZXRhcmdldCwgdm1nLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTExOTctXHRcdHZtZy1cdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xuLS1cbm1tL3ZtYS5jPTI2MzQ9c3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuLS1cbm1tL3ZtYS5jLTI2OTEtXHQvKlxubW0vdm1hLmM6MjY5MjpcdCAqIHZtYV9tZXJnZV9uZXdfcmFuZ2UoKSBjYWxscyBraHVnZXBhZ2VkX2VudGVyX3ZtYSgpIHRvbywgdGhlIGJlbG93XG5tbS92bWEuYy0yNjkzLVx0ICogY2FsbCBjb3ZlcnMgdGhlIG5vbi1tZXJnZSBjYXNlLlxuLS1cbm1tL3ZtYS5jLTI2OTUtXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSlcbm1tL3ZtYS5jOjI2OTY6XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgbWFwLVx1MDAzZXZtX2ZsYWdzKTtcbm1tL3ZtYS5jLTI2OTctXHQqdm1hcCA9IHZtYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYW5kIFZNQSBTcGxpdHRpbmcvTWVyZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgY29kZSBwYXRoIGludm9sdmluZyBgc3BsaXRfdm1hYCBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSXQgaW5pdGlhbGx5IHNlZW1zIGxpa2UgYHNwbGl0X3ZtYWAgZG9lc24mIzM5O3QgZGlyZWN0bHkgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBCdXQsIGhvbGQgb24sIGlmIGB2bWFfbW9kaWZ5X2ZsYWdzYCBzcGxpdHMgdGhlIFZNQSwgdGhlICpuZXcqIFZNQSBzaG91bGQgaW5oZXJpdCB0aGUgc2FtZSBmbGFncyBhcyB0aGUgb3JpZ2luYWwgb25lLiBgdm1hX21vZGlmeV9mbGFnc2Agc3BsaXRzIGFuZCByZXR1cm5zIHRoZSBtaWRkbGUgVk1BLiBUaGVuIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHVwZGF0ZXMgdGhhdCBtaWRkbGUgVk1BJiMzOTtzIGZsYWdzLgoKTm93LCBpZiBgbWFkdmlzZV91cGRhdGVfdm1hYCAqZGlkbiYjMzk7dCogY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFmdGVyIHRoZSBzcGxpdCwgd2UmIzM5O2QgaGF2ZSBhIHByb2JsZW0uIFRoZSBtaWRkbGUgVk1BIGNvdWxkIGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQsIGJ1dCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdvdWxkbiYjMzk7dCBoYXZlIGJlZW4gaW52b2tlZCBvbiBpdCEgSG93ZXZlciwgaWYgYGh1Z2VwYWdlX21hZHZpc2VgICpkaWQqIGNhbGwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBCRUZPUkUgYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIGl0IHdvdWxkIGJlIGNhbGxlZCBvbiB0aGUgb3JpZ2luYWwgVk1BLiBBbmQgdGhlIG9yaWdpbmFsIG1pZ2h0IGhhdmUgYmVlbiBsYXJnZSBlbm91Z2ggdG8gdHJpZ2dlciBgX19raHVnZXBhZ2VkX2VudGVyYCBhbmQgcmVnaXN0ZXIgdGhlIGBtbWAuIEFmdGVyIHRoZSBzcGxpdCwgdGhlIG1pZGRsZSBWTUEgZ2V0cyBgVk1fSFVHRVBBR0VgLCBidXQgc2luY2UgYF9fa2h1Z2VwYWdlZF9lbnRlcmAgd2FzIGFscmVhZHkgY2FsbGVkLCB0aGUgYG1tYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoYXQgc2VlbXMgZmluZS4KCkJ1dCB3aGF0IGFib3V0IHdoZW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkIHdpdGggYE1BRFZfTk9STUFMYCBvbiBhIFZNQSB0aGF0ICpkb2VzbiYjMzk7dCogaGF2ZSBgVk1fSFVHRVBBR0VgPyBUaGVuLCBgbmV3X3ZtYV9mbGFnc2Agd29uJiMzOTt0IGluY2x1ZGUgYFZNX0hVR0VQQUdFYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgKm5vdCogY2FsbGVkLiBObyBpc3N1ZXMgdGhlcmUuCgpOb3csIHdoYXQgYWJvdXQgd2hlbiBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQgd2l0aCBgTUFEVl9OT1JNQUxgIG9uIGEgVk1BIHRoYXQgKmFscmVhZHkqIGhhcyBgVk1fSFVHRVBBR0VgPyAgYG5ld192bWFfZmxhZ3NgIHN0aWxsIGhhcyBpdCBzZXQuIGB2bWFfbW9kaWZ5X2ZsYWdzYCBtaWdodCBzcGxpdCBpdCwgYW5kIHRoZW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgc2V0cyB0aGUgbmV3IFZNQSYjMzk7cyBmbGFncy4gVGhlbiwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBjYWxsZWQgd2l0aCB0aGUgdXBkYXRlZCBmbGFncy4gU2luY2UgdGhlIFZNQSAqYWxyZWFkeSogaGFkIGBWTV9IVUdFUEFHRWAsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2FzIGFscmVhZHkgY2FsbGVkIGF0IHRoZSB0aW1lIGl0IHdhcyBzZXQuICBTbyBjYWxsaW5nIGl0IGFnYWluIGlzIGhhcm1sZXNzIHNpbmNlIHRoZSBgbW1gIGhhcyB0aGUgYE1NRl9WTV9IVUdFUEFHRWAgZmxhZyBhbHJlYWR5IHNldC4gVW5sZXNzIHRoZSBvcmlnaW5hbCBWTUEgd2FzICp0b28gc21hbGwqLCBpbiB3aGljaCBjYXNlLCBldmVuIGFmdGVyIHRoZSBzcGxpdCwgaXQgZG9lc24mIzM5O3QgcmVnaXN0ZXIuCgpXYWl0LCB3aGF0IGlmIGBtYWR2aXNlX3VwZGF0ZV92bWFgICptZXJnZXMqIHRoZSBWTUE/IElmIHNvLCBgdm1hX21vZGlmeV9mbGFnc2Agd291bGQgY2FsbCBgdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlYCwgd2hpY2ggKmRvZXMqIGNhbGwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBvbiB0aGUgbWVyZ2VkIFZNQSEgU28sIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgYWxyZWFkeSBjYWxsZWQgYnkgdGhlIG1lcmdlISBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBjYWxscyBpdCAqYWdhaW4qLiBCdXQgdGhhdCYjMzk7cyBoYXJtbGVzcywgcmlnaHQ/CgpTbywgd2h5IHdhcyB0aGlzIHBhdGNoIGV2ZW4gbmVlZGVkPyBUaW1lIHRvIHJldmlzaXQgYGh1Z2VwYWdlX21hZHZpc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQ1Olx0XHRcdHJldHVybiAwO1xuIDQ0NjpcdFx0LyogZm9yIFBNRCBjb2xsYXBzZSwgcmVzcGVjdCB0aGUgdXNlciBkZWZpbmVkIG1heGltdW0gKi9cbiA0NDc6XHRcdHJldHVybiBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXA7XG4gNDQ4Olx0fVxuIDQ0OTpcdFxuIDQ1MDpcdGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDQ1MTpcdFx0XHQgICAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxuIDQ1MjpcdHtcbiA0NTM6XHRcdHN3aXRjaCAoYWR2aWNlKSB7XG4gNDU0Olx0XHRjYXNlIE1BRFZfSFVHRVBBR0U6XG4gNDU1Olx0XHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9OT0hVR0VQQUdFO1xuIDQ1NjpcdFx0XHQqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7XG4gNDU3Olx0XHRcdGJyZWFrO1xuIDQ1ODpcdFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XG4gNDU5Olx0XHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9IVUdFUEFHRTtcbiA0NjA6XHRcdFx0KnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7XG4gNDYxOlx0XHRcdC8qXG4gNDYyOlx0XHRcdCAqIFNldHRpbmcgVk1fTk9IVUdFUEFHRSB3aWxsIHByZXZlbnQga2h1Z2VwYWdlZCBmcm9tIHNjYW5uaW5nXG4gNDYzOlx0XHRcdCAqIHRoaXMgdm1hIGV2ZW4gaWYgd2UgbGVhdmUgdGhlIG1tIHJlZ2lzdGVyZWQgaW4ga2h1Z2VwYWdlZCBpZlxuIDQ2NDpcdFx0XHQgKiBpdCBnb3QgcmVnaXN0ZXJlZCBiZWZvcmUgVk1fTk9IVUdFUEFHRSB3YXMgc2V0LlxuIDQ2NTpcdFx0XHQgKi9cbiA0NjY6XHRcdFx0YnJlYWs7XG4gNDY3Olx0XHR9XG4gNDY4Olx0XG4gNDY5Olx0XHRyZXR1cm4gMDtcbiA0NzA6XHR9XG4gNDcxOlx0XG4gNDcyOlx0aW50IF9faW5pdCBraHVnZXBhZ2VkX2luaXQodm9pZClcbiA0NzM6XHR7XG4gNDc0Olx0XHRtbV9zbG90X2NhY2hlID0gS01FTV9DQUNIRShtbV9zbG90LCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBraHVnZXBhZ2VkIEludGVyYWN0aW9uIHdpdGggTUFEVl9IVUdFUEFHRSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cyB3aXRoIGBNQURWX0hVR0VQQUdFYCBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGF0IGRpZmYgd2hlcmUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3YXMgY2FsbGVkIHdpdGhpbiBgaHVnZXBhZ2VfbWFkdmlzZWAuICBUaGUgY29yZSB0aGluZyBpcywgYGh1Z2VwYWdlX21hZHZpc2VgIGdldHMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCB3aGVuIGBNQURWX0hVR0VQQUdFYCBvciBgTUFEVl9OT0hVR0VQQUdFYCBpcyB1c2VkLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQsICYjMzQ7SG1tLCBgaHVnZXBhZ2VfbWFkdmlzZWAgaXMgY2FsbGluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdpdGggYG5ld19mbGFnc2AsIHdoaWNoICpkb2VzKiBoYXZlIGBWTV9IVUdFUEFHRWAgc2V0LCBidXQgYXQgdGhhdCBwb2ludCwgdGhlIFZNQSYjMzk7cyBgdm1fZmxhZ3NgICpkb2VzbiYjMzk7dCogeWV0IGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQuJiMzNDsgIEhvd2V2ZXIsIEkgdGhlbiByZW1lbWJlcmVkIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpdHNlbGYgY2hlY2tzIHRoZSBWTUEmIzM5O3Mgc3VpdGFiaWxpdHkgdXNpbmcgYGNvbGxhcHNlX3Bvc3NpYmxlYCwgd2hpY2ggZXZlbnR1YWxseSBjYWxscyBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gQ3J1Y2lhbGx5LCBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB1c2VzIGB2bV9mbGFnc2Agd2hpY2ggbm93LCBpbiB0aGlzIGV4ZWN1dGlvbiBwYXRoLCBoYXMgYFZNX0hVR0VQQUdFYCBzZXQuIFNvLCB0aGUgcmlnaHQgZmxhZ3MgKmFyZSogYmVpbmcgdXNlZCBpbiB0aGUgY3JpdGljYWwgY2hlY2tzLCBzbyB0aGF0IHNlZW1zIGZpbmUuCgpUaGVuIEkgY29uc2lkZXJlZCBlcnJvciBjYXNlcy4gIFdoYXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgZmFpbHM/IElmIGl0IGZhaWxzIChtYXliZSBkdWUgdG8gYC1FTk9NRU1gIGZyb20gYHZtYV9tb2RpZnlfZmxhZ3NgKSwgYGh1Z2VwYWdlX21hZHZpc2VgIGhhcyAqYWxyZWFkeSogY2FsbGVkIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYW5kIHJlZ2lzdGVyZWQgdGhlIGBtbWAsIGJ1dCB0aGUgVk1BJiMzOTtzIGZsYWdzIGhhdmVuJiMzOTt0IGJlZW4gdXBkYXRlZC4gIFdpbGwgdGhpcyBjYXVzZSBpc3N1ZXM/ICBObywgYmVjYXVzZSBga2h1Z2VwYWdlZGAganVzdCBzY2FucyB0aGUgbW0gYW5kIGZpbmRzIG5vIHN1aXRhYmxlIFZNQXMsIGFuZCBkb2VzIG5vdGhpbmcuIEl0IHNlZW1zIHNhZmUuCgpOb3csIHdoYXQgYWJvdXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgc3BsaXRzIHRoZSBWTUE/IElmIHRoZSBWTUEgZ2V0cyBzcGxpdCwgYSBuZXcgb25lIGlzIGNyZWF0ZWQuIERvZXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBuZWVkIHRvIGJlIGNhbGxlZCBvbiB0aGlzIG5ldyBWTUE/IE5vLCBiZWNhdXNlIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgc2ltcGx5IHJlZ2lzdGVycyB0aGUgYG1tYCwgc28gdGhhdCBoYW5kbGVzIHRoYXQgY2FzZSB0b28uCgpBbmQgd2hhdCBhYm91dCBgTUFEVl9DT0xMQVBTRWA/IERvZXMgdGhhdCBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWA/IE5vLCBpdCBsb29rcyBsaWtlIGBtYWR2aXNlX2NvbGxhcHNlYCBkb2VzbiYjMzk7dCBjYWxsIGl0IGRpcmVjdGx5LgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBJJiMzOTtkIG5vcm1hbGx5IGdvIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlLCBidXQgSSYjMzk7bSBsaW1pdGVkIHRvIHNlYXJjaGluZyB0aGUga2VybmVsIHRyZWUuIEkgbmVlZCB0byBmaW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBjaGVjayBgZ2l0IGxvZ2Agb24gYG1tL2todWdlcGFnZWQuY2Agb3IgYG1tL21hZHZpc2UuY2AgZm9yIHNvbWUgY29udGV4dC4KV2FpdCwgdGhhdCBjaGFuZ2UgaXMgdGhlIEhFQUQgY29tbWl0LCBzbyBJIGNhbiBqdXN0IHJ1biBgZ2l0IHNob3cgSEVBRGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsuZ2l0L0NPTU1JVF9FRElUTVNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdmVyc2lvbiBjb250cm9sIGFuZCBzb2Z0d2FyZSBkZXZlbG9wbWVudDoKCioqUXVpY2sgUGVlayBhdCB0aGUgTGF0ZXN0IENoYW5nZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIHZlcnkgbGFzdCBjb21taXQgaW4gdGhpcyByZXBvc2l0b3J5IHdhcy4gTm8gbmVlZCBmb3IgYSBmdWxsIGhpc3RvcnkgZGl2ZSByaWdodCBub3csIGp1c3QgdGhlIG1vc3QgcmVjZW50IG9uZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBtb3N0IHJlY2VudCBjb21taXQuIExldCYjMzk7cyBmaXJlIG9mZiBgZ2l0IGxvZyAtMWAuIFRoaXMgaXMgYSBjbGFzc2ljIHF1aWNrLWNoZWNrIGNvbW1hbmQsIGdldHMgbWUgZXhhY3RseSB3aGF0IEkgbmVlZCB3aXRob3V0IGFueSB1bm5lY2Vzc2FyeSBvdXRwdXQgY2x1dHRlcmluZyB0aGluZ3MgdXAuIFNhdmVzIHRpbWUgYW5kIGdldHMgbWUgZGlyZWN0bHkgdG8gdGhlIG1vc3QgcGVydGluZW50IGRhdGEuIERvbmUgYW5kIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsuZ2l0L2xvZ3MvSEVBRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEZ1enppbmcgU3VyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBhdmVudWUgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSBhcm91bmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSSB3YXMgdGhpbmtpbmcgSSBjb3VsZCB1c2UgYGdpdCBzaG93IEhFQURgIHdpdGggc29tZXRoaW5nIGxpa2UgYGdyZXBwZXJgIGJ1dCByZWFsaXplZCB0aGF0IG9ubHkgc2VhcmNoZXMgdHJhY2tlZCBmaWxlcy4gSSBkb24mIzM5O3QgZXZlbiBuZWVkIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIG1hdHRlcnMgZm9yIGZ1enppbmcuCgpUaGUgcGF0Y2ggaXRzZWxmIG1vdmVzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSB3aXRoaW4gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgbm93IHRyaWdnZXJlZCBieSAqYW55KiBtYWR2aXNlIG9wZXJhdGlvbiB0aGF0IHVwZGF0ZXMgVk1BIGZsYWdzLCBhcyBsb25nIGFzIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgZm9yIHRoZSBWTUEuCgpNeSBuZXh0IHN0ZXAgaXMgdW5kZXJzdGFuZGluZyB3aGF0IHR5cGVzIG9mIGBtYWR2aXNlYCBjYWxscyB0cmlnZ2VyIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0IGVuY29tcGFzc2VzIGEgbG90OiBgTUFEVl9OT1JNQUxgLCBgTUFEVl9TRVFVRU5USUFMYCwgYE1BRFZfUkFORE9NYCwgYWxsIHRoZSBmb3JrIGZsYWdzIChgTUFEVl9ET05URk9SS2AsIGV0Yy4pLCBtZXJnZWFibGUgZmxhZ3MsIGFuZCBvZiBjb3Vyc2UsIGBNQURWX0hVR0VQQUdFYCBhbmQgYE1BRFZfTk9IVUdFUEFHRWAuIEFsc28gYF9fTUFEVl9TRVRfQU5PTl9WTUFfTkFNRWAuIFRoYXQmIzM5O3MgYSBsb3Qgb2YgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCk5vdywgaG93IGRvZXMgYFZNQV9IVUdFUEFHRV9CSVRgIGdldCBzZXQ/IE9idmlvdXNseSwgYSBWTUEgY3JlYXRlZCB3aXRoIGBNQVBfSFVHRVBBR0VgIGlzIHJlbGV2YW50LCBidXQgd2FpdCwgdGhhdCYjMzk7cyBgTUFQX0hVR0VUTEJgLCBub3QganVzdCBgTUFQX0hVR0VQQUdFYC4gQWgsIHRoYXQmIzM5O3MgcmlnaHQsIGBWTV9IVUdFUEFHRWAgaXMgc2V0IGJ5IGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvciwgaW4gc29tZSBjYXNlcywgZGVmYXVsdHMgZm9yIGB0cmFuc3BhcmVudF9odWdlcGFnZWAuIEhvbGQgb24uLi4gaWYgYHRyYW5zcGFyZW50X2h1Z2VwYWdlPWFsd2F5c2AsIHRoZSBgVk1fSFVHRVBBR0VgIGlzbiYjMzk7dCBzZXQsIGl0JiMzOTtzIGEgc2VwYXJhdGUgbWVjaGFuaXNtISBgVk1fSFVHRVBBR0VgIGlzICpzcGVjaWZpY2FsbHkqIGZvciBgbWFkdmlzZWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgaXQmIzM5O3Mgbm90IHNldCBieSBgcHJjdGwoUFJfU0VUX1RIUF9ESVNBQkxFKWAuCgpTbywgdGhlIG9ubHkgd2F5IGlzIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYC4gQnV0IHRoYXQgc2VlbXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgaXNuJiMzOTt0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYWxyZWFkeSBjYWxsZWQgKndoZW4qIGBNQURWX0hVR0VQQUdFYCBpcyBjYWxsZWQ/IFRoYXQgYWxtb3N0IG1ha2VzIHRoZSBwYXRjaCBhIG5vLW9wIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLi4uIHVubGVzcy4uLgoKV2hhdCBhYm91dCBgZm9ya2A/IFdoZW4gYSBwcm9jZXNzIGZvcmtzLCB0aGUgY2hpbGQgcHJvY2VzcyBnZXRzIGEgY29weSBvZiB0aGUgcGFyZW50JiMzOTtzIFZNQXMsIHJpZ2h0PyBUaGUgY2hpbGQmIzM5O3MgVk1BcyAqd2lsbCogaGF2ZSBgVk1fSFVHRVBBR0VgIHNldCwgaWYgdGhlIHBhcmVudCBoYWQgdGhlbS4gQnV0IHRoZSBjaGlsZCBwcm9jZXNzJiMzOTtzIG1lbW9yeSBtYXAgKGBtbWApIGlzIGJyYW5kIG5ldy4gU28gZG9lcyBgZm9ya2AgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZvciB0aGUgbmV3IGBtbWA/IEkgbmVlZCB0byBjaGVjayBgZHVwX21tYXBgLCBgdm1hX2R1cF9wb2xpY3lgLCBvciBgY29weV92bWFgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgVk1BcyBhcmUgY29waWVkIGR1cmluZyBhIGBmb3JrYC4gVGhpcyBtaWdodCBiZSB0aGUga2V5LiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZF9lbnRlcl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyODAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBGb3JrIExvZ2ljKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGEgcHJvY2VzcyBmb3Jrcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGh1Z2UgcGFnZXMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgZ29pbmcgb24gd2l0aCBga2h1Z2VwYWdlZGAsIGFuZCBga2VybmVsL2ZvcmsuY2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gTGV0JiMzOTtzIHNlZSBob3cgYGtodWdlcGFnZWRfZW50ZXJgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGZvcmsgcHJvY2Vzcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgaW50ZXJhY3Rpb25zIGNvbmNlcm5pbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCBob3BlZnVsbHksIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkIGR1cmluZyB0aGUgY29weS1vbi13cml0ZSBwcm9jZXNzIG9yIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBhZGRyZXNzIHNwYWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjYWxscyB0byBlbnN1cmUgdGhhdCB0aGUgaHVnZSBwYWdlIG1hbmFnZW1lbnQgaXMgY29ycmVjdGx5IHNldCBmb3IgdGhlIG5ldyBjaGlsZCBwcm9jZXNzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWRfZW50ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1MjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGtodWdlcGFnZWRfZW50ZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGNoZWNrIG91dCBga2h1Z2VwYWdlZF9lbnRlcmAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gSSBrbm93IHRoZSBrZXJuZWwmIzM5O3MgaHVnZSBwYWdlIG1hbmFnZW1lbnQgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIHBlcmZvcm1hbmNlLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoaXMgZW50cnkgcG9pbnQuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBraHVnZXBhZ2VkIGRhZW1vbiYjMzk7cyBvcGVyYXRpb24sIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gb2YgaHVnZSBwYWdlcyB3aGVuIGEgcHJvY2VzcyByZXF1ZXN0cyBvbmUgb3Igd2hlbiB0aGUgc3lzdGVtIGRldGVjdHMgYW4gb3Bwb3J0dW5pdHkuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhlIHBhZ2UgYWxsb2NhdGlvbiwgdGhlIG1lbW9yeSBwb2xpY2llcyBpbnZvbHZlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGl0IHVzZXMgYW5kIHdoZXRoZXIgdGhlcmUmIzM5O3MgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMgcHJvdmlkZXMgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZF9lbnRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTE1MjA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXHRcdHJldHVybiByZXQ7XG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTE1MzItXG4tLVxubW0va2h1Z2VwYWdlZC5jPTUxND1zdGF0aWMgYm9vbCBodWdlcGFnZV9lbmFibGVkKHZvaWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTUzMS1cbm1tL2todWdlcGFnZWQuYzo1MzI6dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9raHVnZXBhZ2VkLmMtNTMzLXtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01ODctXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9raHVnZXBhZ2VkLmMtNTg5LVx0XHRcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTkyLVx0ICAgIFx1MDAyNlx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXG5tbS9raHVnZXBhZ2VkLmM6NTkzOlx0XHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVx1MDAzZXZtX21tKTtcbm1tL2todWdlcGFnZWQuYy01OTQtfVxuLS1cbm1tL21hZHZpc2UuYz0xNTE9c3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsXG4tLVxubW0vbWFkdmlzZS5jLTE4Ni1cdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfSFVHRVBBR0VfQklUKSlcbm1tL21hZHZpc2UuYzoxODc6XHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hX2ZsYWdzX3RvX2xlZ2FjeShuZXdfdm1hX2ZsYWdzKSk7XG5tbS9tYWR2aXNlLmMtMTg4LVxuLS1cbm1tL3ZtYS5jPTg4OT1zdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21lcmdlX2V4aXN0aW5nX3JhbmdlKFxuLS1cbm1tL3ZtYS5jLTEwNzMtXHR2bWFfc2V0X2ZsYWdzX21hc2sodm1nLVx1MDAzZXRhcmdldCwgc3RpY2t5X2ZsYWdzKTtcbm1tL3ZtYS5jOjEwNzQ6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMTA3NS1cdHZtZy1cdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xuLS1cbm1tL3ZtYS5jPTExNDA9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4tLVxubW0vdm1hLmMtMTE5NS1cdGlmICh2bWctXHUwMDNldGFyZ2V0IFx1MDAyNlx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XG5tbS92bWEuYzoxMTk2Olx0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXHUwMDNldGFyZ2V0LCB2bWctXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMTE5Ny1cdFx0dm1nLVx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XG4tLVxubW0vdm1hLmM9MjYzND1zdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXG4tLVxubW0vdm1hLmMtMjY5MS1cdC8qXG5tbS92bWEuYzoyNjkyOlx0ICogdm1hX21lcmdlX25ld19yYW5nZSgpIGNhbGxzIGtodWdlcGFnZWRfZW50ZXJfdm1hKCkgdG9vLCB0aGUgYmVsb3dcbm1tL3ZtYS5jLTI2OTMtXHQgKiBjYWxsIGNvdmVycyB0aGUgbm9uLW1lcmdlIGNhc2UuXG4tLVxubW0vdm1hLmMtMjY5NS1cdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxubW0vdm1hLmM6MjY5NjpcdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCBtYXAtXHUwMDNldm1fZmxhZ3MpO1xubW0vdm1hLmMtMjY5Ny1cdCp2bWFwID0gdm1hO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc3MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgRHVwbGljYXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIG1lbW9yeSBkdXBsaWNhdGlvbiBwcm9jZXNzIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgZHVwX21tYXBgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGR1cF9tbWFwYCBsaWtlbHkgaW50ZXJmYWNlcyB3aXRoIHNvbWUgcG9saWN5IGFyb3VuZCBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIGR1cGxpY2F0aW9uIOKAkyBJJiMzOTttIHRoaW5raW5nIHNvbWV0aGluZyBsaWtlIGB2bWFfZHVwX3BvbGljeWAgb3Igc2ltaWxhci4gQnV0IHRoZSBjb3JlIHF1ZXN0aW9uIGJ1enppbmcgaW4gbXkgaGVhZCBpcyB3aGV0aGVyIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZ2V0cyBpbnZvbHZlZC4gVGhhdCYjMzk7cyB0aGUgcmVhbCBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaHVnZSBwYWdlIG1hbmFnZW1lbnQgZ2V0cyBoYW5kbGVkIGR1cmluZyBhIGBtbWFwYCBkdXBsaWNhdGlvbi4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgc291cmNlIGNvZGUgdG8gY29uZmlybSB0aGUgY29udHJvbCBmbG93LiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyByaWdodCBpbiBga2VybmVsL2ZvcmsuY2AsIHdoZXJlIGBkdXBfbW1hcGAgcmVzaWRlcy4gSSBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBgZHVwX21tYXBgIGNhbGxzIGFuZCBob3cgdGhlIFZNQXMgYXJlIGJlaW5nIGhhbmRsZWQgYXQgdGhpcyBzdGFnZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYW5zd2VycyBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1cF9tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jLTExOS1cbmtlcm5lbC9mb3JrLmM6MTIwOi8qIEZvciBkdXBfbW1hcCgpLiAqL1xua2VybmVsL2ZvcmsuYy0xMjEtI2luY2x1ZGUgXCYjMzQ7Li4vbW0vaW50ZXJuYWwuaFwmIzM0O1xuLS1cbmtlcm5lbC9mb3JrLmM9MTUyNz1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZHVwX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbmtlcm5lbC9mb3JrLmMtMTU0MS1cbmtlcm5lbC9mb3JrLmM6MTU0MjpcdHVwcm9iZV9zdGFydF9kdXBfbW1hcCgpO1xua2VybmVsL2ZvcmsuYzoxNTQzOlx0ZXJyID0gZHVwX21tYXAobW0sIG9sZG1tKTtcbmtlcm5lbC9mb3JrLmMtMTU0NC1cdGlmIChlcnIpXG5rZXJuZWwvZm9yay5jLTE1NDUtXHRcdGdvdG8gZnJlZV9wdDtcbmtlcm5lbC9mb3JrLmM6MTU0NjpcdHVwcm9iZV9lbmRfZHVwX21tYXAoKTtcbmtlcm5lbC9mb3JrLmMtMTU0Ny1cbi0tXG5rZXJuZWwvZm9yay5jLTE1NjEtXHRpZiAoZXJyKVxua2VybmVsL2ZvcmsuYzoxNTYyOlx0XHR1cHJvYmVfZW5kX2R1cF9tbWFwKCk7XG5rZXJuZWwvZm9yay5jLTE1NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzYwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgZHVwX21tYXBgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkdXBsaWNhdGVkIG1lbW9yeSBtYXBwaW5ncyB3b3JrLCBwYXJ0aWN1bGFybHkgdGhlIGBkdXBfbW1hcGAgZnVuY3Rpb24uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhlIGtlcm5lbCwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHRoZSBjcnVjaWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoaXMgYXJlIGdvaW5nIHRvIGJlIG5lc3RsZWQgaW4gZWl0aGVyIGBtbS9tZW1vcnkuY2Agb3IgYG1tL21tYXAuY2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFwcGluZyBkdXBsaWNhdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIOKAkyBsZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2UgcGFnZSB0YWJsZXMgYW5kIHJlZmVyZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1cF9tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTUxNz12b2lkIGR1cF9tbV9leGVfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pO1xubW0vaW50ZXJuYWwuaDoxNTE4OmludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pO1xubW0vaW50ZXJuYWwuaC0xNTE5LVxuLS1cbm1tL21lbW9yeS5jPTI5OD12b2lkIGZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMzY5LSAqXG5tbS9tZW1vcnkuYzozNzA6ICogVGhlIHZtYV9lbmQgZGlmZmVycyBmcm9tIHRoZSBwZ19lbmQgd2hlbiBhIGR1cF9tbWFwKCkgZmFpbGVkIGFuZCB0aGUgdHJlZSBoYXNcbm1tL21lbW9yeS5jLTM3MS0gKiB1bnJlbGF0ZWQgZGF0YSB0byB0aGUgbW1fc3RydWN0IGJlaW5nIHRvcm4gZG93bi5cbi0tXG5tbS9tbWFwLmM9MTI4OD12b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9tbWFwLmMtMTMwMy1cdGlmICghdm1hKSB7XG5tbS9tbWFwLmM6MTMwNDpcdFx0LyogQ2FuIGhhcHBlbiBpZiBkdXBfbW1hcCgpIHJlY2VpdmVkIGFuIE9PTSAqL1xubW0vbW1hcC5jLTEzMDUtXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLS1cbm1tL21tYXAuYz0xNjg2PWJvb2wgbW1hcF9yZWFkX2xvY2tfbWF5YmVfZXhwYW5kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL21tYXAuYy0xNzA3LVxubW0vbW1hcC5jOjE3MDg6X19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxubW0vbW1hcC5jLTE3MDkte1xuLS1cbm1tL21tYXAuYy0xNzE4LVx0Zmx1c2hfY2FjaGVfZHVwX21tKG9sZG1tKTtcbm1tL21tYXAuYzoxNzE5Olx0dXByb2JlX2R1cF9tbWFwKG9sZG1tLCBtbSk7XG5tbS9tbWFwLmMtMTcyMC1cdC8qXG4tLVxubW0vbW1hcC5jLTE4MjYtXHQvKiBhIG5ldyBtbSBoYXMganVzdCBiZWVuIGNyZWF0ZWQgKi9cbm1tL21tYXAuYzoxODI3Olx0cmV0dmFsID0gYXJjaF9kdXBfbW1hcChvbGRtbSwgbW0pO1xubW0vbW1hcC5jLTE4MjgtbG9vcF9vdXQ6XG4tLVxubW0vbm9tbXUuYz0xOTI1PXN1YnN5c19pbml0Y2FsbChpbml0X2FkbWluX3Jlc2VydmUpO1xubW0vbm9tbXUuYy0xOTI2LVxubW0vbm9tbXUuYzoxOTI3OmludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG5tbS9ub21tdS5jLTE5Mjgte1xuLS1cbm1tL3ZtYV9pbml0LmM9NDU9c3RhdGljIHZvaWQgdm1fYXJlYV9pbml0X2Zyb20oY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vdm1hX2luaXQuYy02MS1cdCAqIHNyYy1cdTAwM2VzaGFyZWQucmIgbWF5IGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSB3aGVuIGNhbGxlZCBmcm9tXG5tbS92bWFfaW5pdC5jOjYyOlx0ICogZHVwX21tYXAoKSwgYnV0IHRoZSBjbG9uZSB3aWxsIHJlaW5pdGlhbGl6ZSBpdC5cbm1tL3ZtYV9pbml0LmMtNjMtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyOTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYGR1cF9tbWFwYCBpbiBgbW0vbW1hcC5jYCBhbmQgc3RhcnQgZGlzc2VjdGluZyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBkdXBsaWNhdGluZyBhIG1lbW9yeSBtYXAuIE15IGV4cGVydGlzZSBpcyBzdWNoIHRoYXQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgZnVuZGFtZW50YWwgY29uY2VwdHMsIGJ1dCBJIG5lZWQgdG8gZm9jdXMgb24gYW55IGludHJpY2FjaWVzIG9yIHVudXN1YWwgYXNwZWN0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgY29weS1vbi13cml0ZSwgc2hhcmluZywgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIG9mZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcwODpcdF9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbjE3MDk6XHR7XG4xNzEwOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1wbnQsICp0bXA7XG4xNzExOlx0XHRpbnQgcmV0dmFsO1xuMTcxMjpcdFx0dW5zaWduZWQgbG9uZyBjaGFyZ2UgPSAwO1xuMTcxMzpcdFx0TElTVF9IRUFEKHVmKTtcbjE3MTQ6XHRcdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcbjE3MTU6XHRcbjE3MTY6XHRcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUob2xkbW0pKVxuMTcxNzpcdFx0XHRyZXR1cm4gLUVJTlRSO1xuMTcxODpcdFx0Zmx1c2hfY2FjaGVfZHVwX21tKG9sZG1tKTtcbjE3MTk6XHRcdHVwcm9iZV9kdXBfbW1hcChvbGRtbSwgbW0pO1xuMTcyMDpcdFx0LypcbjE3MjE6XHRcdCAqIE5vdCBsaW5rZWQgaW4geWV0IC0gbm8gZGVhZGxvY2sgcG90ZW50aWFsOlxuMTcyMjpcdFx0ICovXG4xNzIzOlx0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKG1tLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4xNzI0Olx0XG4xNzI1Olx0XHQvKiBObyBvcmRlcmluZyByZXF1aXJlZDogZmlsZSBhbHJlYWR5IGhhcyBiZWVuIGV4cG9zZWQuICovXG4xNzI2Olx0XHRkdXBfbW1fZXhlX2ZpbGUobW0sIG9sZG1tKTtcbjE3Mjc6XHRcbjE3Mjg6XHRcdG1tLVx1MDAzZXRvdGFsX3ZtID0gb2xkbW0tXHUwMDNldG90YWxfdm07XG4xNzI5Olx0XHRtbS1cdTAwM2VkYXRhX3ZtID0gb2xkbW0tXHUwMDNlZGF0YV92bTtcbjE3MzA6XHRcdG1tLVx1MDAzZWV4ZWNfdm0gPSBvbGRtbS1cdTAwM2VleGVjX3ZtO1xuMTczMTpcdFx0bW0tXHUwMDNlc3RhY2tfdm0gPSBvbGRtbS1cdTAwM2VzdGFja192bTtcbjE3MzI6XHRcbjE3MzM6XHRcdC8qIFVzZSBfX210X2R1cCgpIHRvIGVmZmljaWVudGx5IGJ1aWxkIGFuIGlkZW50aWNhbCBtYXBsZSB0cmVlLiAqL1xuMTczNDpcdFx0cmV0dmFsID0gX19tdF9kdXAoXHUwMDI2b2xkbW0tXHUwMDNlbW1fbXQsIFx1MDAyNm1tLVx1MDAzZW1tX210LCBHRlBfS0VSTkVMKTtcbjE3MzU6XHRcdGlmICh1bmxpa2VseShyZXR2YWwpKVxuMTczNjpcdFx0XHRnb3RvIG91dDtcbjE3Mzc6XHRcbjE3Mzg6XHRcdG10X2NsZWFyX2luX3JjdSh2bWkubWFzLnRyZWUpO1xuMTczOTpcdFx0Zm9yX2VhY2hfdm1hKHZtaSwgbXBudCkge1xuMTc0MDpcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbjE3NDE6XHRcbjE3NDI6XHRcdFx0cmV0dmFsID0gdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKG1wbnQpO1xuMTc0MzpcdFx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuMTc0NDpcdFx0XHRcdGdvdG8gbG9vcF9vdXQ7XG4xNzQ1Olx0XHRcdGlmICh2bWFfdGVzdChtcG50LCBWTUFfRE9OVENPUFlfQklUKSkge1xuMTc0NjpcdFx0XHRcdHJldHZhbCA9IHZtYV9pdGVyX2NsZWFyX2dmcChcdTAwMjZ2bWksIG1wbnQtXHUwMDNldm1fc3RhcnQsXG4xNzQ3Olx0XHRcdFx0XHRcdFx0ICAgIG1wbnQtXHUwMDNldm1fZW5kLCBHRlBfS0VSTkVMKTtcbjE3NDg6XHRcdFx0XHRpZiAocmV0dmFsKVxuMTc0OTpcdFx0XHRcdFx0Z290byBsb29wX291dDtcbjE3NTA6XHRcbjE3NTE6XHRcdFx0XHR2bV9zdGF0X2FjY291bnQobW0sIG1wbnQtXHUwMDNldm1fZmxhZ3MsIC12bWFfcGFnZXMobXBudCkpO1xuMTc1MjpcdFx0XHRcdGNvbnRpbnVlO1xuMTc1MzpcdFx0XHR9XG4xNzU0Olx0XHRcdGNoYXJnZSA9IDA7XG4xNzU1Olx0XHRcdGlmICh2bWFfdGVzdChtcG50LCBWTUFfQUNDT1VOVF9CSVQpKSB7XG4xNzU2Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBsZW4gPSB2bWFfcGFnZXMobXBudCk7XG4xNzU3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBzb21lIHRlY2huaWNhbCBwcm9ibGVtIGFuZCB0aGF0ICYjMzk7YGR1cF9tbWFwYCYjMzk7IGlzIGEgcmVsZXZhbnQgZnVuY3Rpb24gb3IgY29uY2VwdCBpbiBteSBmaWVsZDoKCioqRGVlcGVyIERpdmUgaW50byBgZHVwX21tYXBgKioKClJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhpcyBgZHVwX21tYXBgIHRoaW5nLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJiMzOTtzIG1vcmUgdG8gdW5kZXJzdGFuZCBoZXJlLCBhbmQgd2hhdGV2ZXIgbnVhbmNlIEkmIzM5O20gbWlzc2luZyBpcyBrZXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKndoeSogd2UmIzM5O3JlIGV2ZW4gY29uc2lkZXJpbmcgdGhpcy4gSXMgaXQgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBBIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWU/IEFyZSB3ZSB0cnlpbmcgdG8gYWNoaWV2ZSBhIHNwZWNpZmljIGNvbmN1cnJlbmN5IHBhdHRlcm4/IE9rYXksIGxldCYjMzk7cyByZXJlYWQgdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBnbG9zc2VkIG92ZXIgYW55dGhpbmcuIFNvbWV0aW1lcyB0aGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMgd2l0aCB0aGVzZSBtZW1vcnkgbWFwcGluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBleHBsYWluIHRoZSBiZWhhdmlvciBJJiMzOTttIG9ic2VydmluZy4gSXTigJlzIGxpa2VseSB0aGUgc291cmNlIG9mIGFsbCBteSBjdXJyZW50IHBhaW4gYW5kIHN1ZmZlcmluZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGRlZXBlciBkaXZlIHVuY292ZXJzIHRoZSBhbnN3ZXJzIEkgc2Vlay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTg6XHRcdFx0XHRpZiAoc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeV9tbShvbGRtbSwgbGVuKSkgLyogc2ljICovXG4xNzU5Olx0XHRcdFx0XHRnb3RvIGZhaWxfbm9tZW07XG4xNzYwOlx0XHRcdFx0Y2hhcmdlID0gbGVuO1xuMTc2MTpcdFx0XHR9XG4xNzYyOlx0XG4xNzYzOlx0XHRcdHRtcCA9IHZtX2FyZWFfZHVwKG1wbnQpO1xuMTc2NDpcdFx0XHRpZiAoIXRtcClcbjE3NjU6XHRcdFx0XHRnb3RvIGZhaWxfbm9tZW07XG4xNzY2Olx0XHRcdHJldHZhbCA9IHZtYV9kdXBfcG9saWN5KG1wbnQsIHRtcCk7XG4xNzY3Olx0XHRcdGlmIChyZXR2YWwpXG4xNzY4Olx0XHRcdFx0Z290byBmYWlsX25vbWVtX3BvbGljeTtcbjE3Njk6XHRcdFx0dG1wLVx1MDAzZXZtX21tID0gbW07XG4xNzcwOlx0XHRcdHJldHZhbCA9IGR1cF91c2VyZmF1bHRmZCh0bXAsIFx1MDAyNnVmKTtcbjE3NzE6XHRcdFx0aWYgKHJldHZhbClcbjE3NzI6XHRcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbjE3NzM6XHRcbjE3NzQ6XHRcdFx0aWYgKHZtYV90ZXN0KHRtcCwgVk1BX1dJUEVPTkZPUktfQklUKSkge1xuMTc3NTpcdFx0XHRcdC8qXG4xNzc2Olx0XHRcdFx0ICogVk1BX1dJUEVPTkZPUktfQklUIGdldHMgYSBjbGVhbiBzbGF0ZSBpbiB0aGUgY2hpbGQuXG4xNzc3Olx0XHRcdFx0ICogRG9uJiMzOTt0IHByZXBhcmUgYW5vbl92bWEgdW50aWwgZmF1bHQgc2luY2Ugd2UgZG9uJiMzOTt0XG4xNzc4Olx0XHRcdFx0ICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS5cbjE3Nzk6XHRcdFx0XHQgKi9cbjE3ODA6XHRcdFx0XHR0bXAtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xuMTc4MTpcdFx0XHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcbjE3ODI6XHRcdFx0XHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcbjE3ODM6XHRcbjE3ODQ6XHRcdFx0dm1hX3N0YXJ0X3dyaXRlKHRtcCk7XG4xNzg1Olx0XHRcdHZtYV9jbGVhcl9mbGFnc19tYXNrKHRtcCwgVk1BX0xPQ0tFRF9NQVNLKTtcbjE3ODY6XHRcdFx0LypcbjE3ODc6XHRcdFx0ICogQ29weS91cGRhdGUgaHVnZXRsYiBwcml2YXRlIHZtYSBpbmZvcm1hdGlvbi5cbjE3ODg6XHRcdFx0ICovXG4xNzg5Olx0XHRcdGlmIChpc192bV9odWdldGxiX3BhZ2UodG1wKSlcbjE3OTA6XHRcdFx0XHRodWdldGxiX2R1cF92bWFfcHJpdmF0ZSh0bXApO1xuMTc5MTpcdFxuMTc5MjpcdFx0XHQvKlxuMTc5MzpcdFx0XHQgKiBMaW5rIHRoZSB2bWEgaW50byB0aGUgTVQuIEFmdGVyIHVzaW5nIF9fbXRfZHVwKCksIG1lbW9yeVxuMTc5NDpcdFx0XHQgKiBhbGxvY2F0aW9uIGlzIG5vdCBuZWNlc3NhcnkgaGVyZSwgc28gaXQgY2Fubm90IGZhaWwuXG4xNzk1Olx0XHRcdCAqL1xuMTc5NjpcdFx0XHR2bWFfaXRlcl9idWxrX3N0b3JlKFx1MDAyNnZtaSwgdG1wKTtcbjE3OTc6XHRcbjE3OTg6XHRcdFx0bW0tXHUwMDNlbWFwX2NvdW50JiM0MzsmIzQzOztcbjE3OTk6XHRcbjE4MDA6XHRcdFx0aWYgKHRtcC1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHRtcC1cdTAwM2V2bV9vcHMtXHUwMDNlb3BlbilcbjE4MDE6XHRcdFx0XHR0bXAtXHUwMDNldm1fb3BzLVx1MDAzZW9wZW4odG1wKTtcbjE4MDI6XHRcbjE4MDM6XHRcdFx0ZmlsZSA9IHRtcC1cdTAwM2V2bV9maWxlO1xuMTgwNDpcdFx0XHRpZiAoZmlsZSkge1xuMTgwNTpcdFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4xODA2Olx0XG4xODA3Olx0XHRcdFx0Z2V0X2ZpbGUoZmlsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzExCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgZHVwX21tYXBgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgZHVwX21tYXBgIHRoaW5nLiBTZWVtcyBsaWtlIHRoZSBpbml0aWFsIHNjYW4gd2FzbiYjMzk7dCBxdWl0ZSBlbm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhdCBhIG1vcmUgZ3JhbnVsYXIgbGV2ZWwuIENsZWFybHksIHRoZXJlJiMzOTtzIG1vcmUgdG8gYmUgZ2xlYW5lZCB0aGFuIGEgY3Vyc29yeSBnbGFuY2UuIEkgbmVlZCB0byBmdWxseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBtYXBwaW5nLiBXaGF0IGFyZSB0aGUgbnVhbmNlcz8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBiZSBsZXNzIG9idmlvdXM/IEFyZSB0aGVyZSBwbGF0Zm9ybS1zcGVjaWZpYyBiZWhhdmlvcnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGNhbGxzIGZvciBhIGRlZXBlciBkaXZlOyBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgZG9jdW1lbnRhdGlvbiwgdGhlIHNvdXJjZSBjb2RlLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgcmVsZXZhbnQgcmVzZWFyY2ggcGFwZXJzIG9yIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciBhIHNvbGlkIGdyYXNwIG9mICp3aHkqIHRoaXMgY2FsbCBleGlzdHMsIGFuZCBtb3JlIHNwZWNpZmljYWxseSwgd2hhdCB0aGUgaW50ZXJhY3Rpb25zIGFyZSB3aXRoIHRoZSB2aXJ0dWFsIG1lbW9yeSBzeXN0ZW0uIEnigJltIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBpdHMgcm9sZSBpbiBzaGFyZWQgbWVtb3J5IHNjZW5hcmlvcyBvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gLSB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHdoZXJlIHN1YnRsZSBidWdzIGNhbiBsdXJrLiBNeSBnb2FsIGlzIGEgdHJ1bHkgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBub3QganVzdCBhIHN1cGVyZmljaWFsIG92ZXJ2aWV3LiBTbyBsZXQmIzM5O3MgY3JhY2sgdGhpcyBvcGVuIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDg6XHRcdFx0XHRpX21tYXBfbG9ja193cml0ZShtYXBwaW5nKTtcbjE4MDk6XHRcdFx0XHRpZiAodm1hX2lzX3NoYXJlZF9tYXl3cml0ZSh0bXApKVxuMTgxMDpcdFx0XHRcdFx0bWFwcGluZ19hbGxvd193cml0YWJsZShtYXBwaW5nKTtcbjE4MTE6XHRcdFx0XHRmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpO1xuMTgxMjpcdFx0XHRcdC8qIGluc2VydCB0bXAgaW50byB0aGUgc2hhcmUgbGlzdCwganVzdCBhZnRlciBtcG50ICovXG4xODEzOlx0XHRcdFx0bWFwcGluZ19ybWFwX3RyZWVfaW5zZXJ0X2FmdGVyKHRtcCwgbXBudCwgbWFwcGluZyk7XG4xODE0Olx0XHRcdFx0Zmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpO1xuMTgxNTpcdFx0XHRcdGlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7XG4xODE2Olx0XHRcdH1cbjE4MTc6XHRcbjE4MTg6XHRcdFx0aWYgKCF2bWFfdGVzdCh0bXAsIFZNQV9XSVBFT05GT1JLX0JJVCkpXG4xODE5Olx0XHRcdFx0cmV0dmFsID0gY29weV9wYWdlX3JhbmdlKHRtcCwgbXBudCk7XG4xODIwOlx0XG4xODIxOlx0XHRcdGlmIChyZXR2YWwpIHtcbjE4MjI6XHRcdFx0XHRtcG50ID0gdm1hX25leHQoXHUwMDI2dm1pKTtcbjE4MjM6XHRcdFx0XHRnb3RvIGxvb3Bfb3V0O1xuMTgyNDpcdFx0XHR9XG4xODI1Olx0XHR9XG4xODI2Olx0XHQvKiBhIG5ldyBtbSBoYXMganVzdCBiZWVuIGNyZWF0ZWQgKi9cbjE4Mjc6XHRcdHJldHZhbCA9IGFyY2hfZHVwX21tYXAob2xkbW0sIG1tKTtcbjE4Mjg6XHRsb29wX291dDpcbjE4Mjk6XHRcdHZtYV9pdGVyX2ZyZWUoXHUwMDI2dm1pKTtcbjE4MzA6XHRcdGlmICghcmV0dmFsKSB7XG4xODMxOlx0XHRcdG10X3NldF9pbl9yY3Uodm1pLm1hcy50cmVlKTtcbjE4MzI6XHRcdFx0a3NtX2ZvcmsobW0sIG9sZG1tKTtcbjE4MzM6XHRcdFx0a2h1Z2VwYWdlZF9mb3JrKG1tLCBvbGRtbSk7XG4xODM0Olx0XHR9IGVsc2Uge1xuMTgzNTpcdFx0XHR1bnNpZ25lZCBsb25nIGVuZDtcbjE4MzY6XHRcbjE4Mzc6XHRcdFx0LypcbjE4Mzg6XHRcdFx0ICogVGhlIGVudGlyZSBtYXBsZSB0cmVlIGhhcyBhbHJlYWR5IGJlZW4gZHVwbGljYXRlZCwgYnV0XG4xODM5Olx0XHRcdCAqIHJlcGxhY2luZyB0aGUgdm1hcyBmYWlsZWQgYXQgbXBudCAod2hpY2ggY291bGQgYmUgTlVMTCBpZlxuMTg0MDpcdFx0XHQgKiBhbGwgd2VyZSBhbGxvY2F0ZWQgYnV0IHRoZSBsYXN0IHZtYSB3YXMgbm90IGZ1bGx5IHNldCB1cCkuXG4xODQxOlx0XHRcdCAqIFVzZSB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZmFpbHVyZSBwb2ludCB0byBjbGVhbiB1cCB0aGVcbjE4NDI6XHRcdFx0ICogcGFydGlhbGx5IGluaXRpYWxpemVkIHRyZWUuXG4xODQzOlx0XHRcdCAqL1xuMTg0NDpcdFx0XHRpZiAoIW1tLVx1MDAzZW1hcF9jb3VudCkge1xuMTg0NTpcdFx0XHRcdC8qIHplcm8gdm1hcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIG5ldyB0cmVlLiAqL1xuMTg0NjpcdFx0XHRcdGVuZCA9IDA7XG4xODQ3Olx0XHRcdH0gZWxzZSBpZiAobXBudCkge1xuMTg0ODpcdFx0XHRcdC8qIHBhcnRpYWwgdHJlZSBmYWlsdXJlICovXG4xODQ5Olx0XHRcdFx0ZW5kID0gbXBudC1cdTAwM2V2bV9zdGFydDtcbjE4NTA6XHRcdFx0fSBlbHNlIHtcbjE4NTE6XHRcdFx0XHQvKiBBbGwgdm1hcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIG5ldyB0cmVlICovXG4xODUyOlx0XHRcdFx0ZW5kID0gVUxPTkdfTUFYO1xuMTg1MzpcdFx0XHR9XG4xODU0Olx0XG4xODU1Olx0XHRcdC8qIEhpZGUgbW0gZnJvbSBvb20ga2lsbGVyIGJlY2F1c2UgdGhlIG1lbW9yeSBpcyBiZWluZyBmcmVlZCAqL1xuMTg1NjpcdFx0XHRtbV9mbGFnc19zZXQoTU1GX09PTV9TS0lQLCBtbSk7XG4xODU3Olx0XHRcdGlmIChlbmQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBga2h1Z2VwYWdlZF9mb3JrYCBDYWxsKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBhIGBraHVnZXBhZ2VkX2ZvcmsobW0sIG9sZG1tKWAgY2FsbC4gVGhpcyBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gVGhlIGBraHVnZXBhZ2VkYCBkYWVtb24gaXMgYWxsIGFib3V0IGhhbmRsaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIGFuZCB0aGF0IGBmb3JrYCBjYWxsPyBUaGF0JiMzOTtzIHdoZXJlIHdlIGdldCB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyBkdXJpbmcgYSBmb3JrIHRoYXQgaW52b2x2ZXMgaHVnZSBwYWdlcywgYW5kIGhvdyBga2h1Z2VwYWdlZGAgaXMgZ2V0dGluZyBpbnZvbHZlZCB3aXRoIGBtbWAgKHRoZSBtZW1vcnkgbWFwIG9mIHRoZSBuZXcgcHJvY2VzcykgYW5kIGBvbGRtbWAgKHRoZSBtZW1vcnkgbWFwIG9mIHRoZSBwYXJlbnQgcHJvY2VzcykuIEkgd2FudCB0byBzZWUgaWYgd2UgYXJlIG1ha2luZyBuZXcgVEhQIGFsbG9jYXRpb25zIGZvciB0aGUgY2hpbGQsIG9yIGlmIGl0IGlzIHNoYXJpbmcgVEhQIG1hcHBpbmdzIGZyb20gdGhlIHBhcmVudC4gQXJlIHdlIHVzaW5nIENPVyAoY29weSBvbiB3cml0ZSkgcHJvcGVybHk/IFRoZXJlJiMzOTtzIGEgbG90IHRvIHVucGFjayBpbiB0aGlzIHNpbmdsZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gYGtodWdlcGFnZWRfZm9ya2AgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWRfZm9yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBraHVnZXBhZ2VkX2ZvcmsqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGtodWdlcGFnZWRfZm9ya2AgZnVuY3Rpb24uIFdoZXJlIHdvdWxkIEkgZmluZCB0aGUgZGVjbGFyYXRpb24gYW5kIHJlbGF0ZWQgc3RydWN0dXJlcz8gVGhlIHN0YW5kYXJkIHBsYWNlOiBgaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmhgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmb3JrIG1lY2hhbmlzbSBpbnRlcmFjdHMgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBjb3B5LW9uLXdyaXRlIGltcGxpY2F0aW9ucywgYW5kIHRoZSBnZW5lcmFsIGZsb3cgb2YgaG93IHRoZSBodWdlIHBhZ2UgbWFwcGluZ3MgYXJlIGhhbmRsZWQgZHVyaW5nIGEgcHJvY2VzcyBmb3JrLiBBbnkgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZsYWdzIGRlZmluZWQgaGVyZSBhcmUgY3J1Y2lhbC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIG5ldyBwcm9jZXNzIGluaGVyaXRzIG9yIHNoYXJlcyBleGlzdGluZyBodWdlIHBhZ2UgbWFwcGluZ3MsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCBjb3JydXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraHVnZXBhZ2VkX2ZvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0yMD12b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjItXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoyMzpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9mb3JrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTI0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0yOT1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTM0LSNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MzU6c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZm9yayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0zNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBga2h1Z2VwYWdlZF9mb3JrYCBmdW5jdGlvbi4gSSYjMzk7dmUgaGVhcmQgYWJvdXQgdGhpcywgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGZvcmtpbmcgYW5kIGh1Z2UgcGFnZXMuIExldCBtZSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaW50ZXJwbGF5IHdvcmtzLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbiBoYXMgc29tZSBzcGVjaWFsIGludGVyYWN0aW9uLCBvciBpZiBpdCYjMzk7cyB0aGUgbW9yZSBzdHJhaWdodGZvcndhcmQgbWV0aG9kIGZvciBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY29kZSwgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIzOlx0c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZm9yayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXG4gIDI0Olx0e1xuICAyNTpcdFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCBvbGRtbSkpXG4gIDI2Olx0XHRcdF9fa2h1Z2VwYWdlZF9lbnRlcihtbSk7XG4gIDI3Olx0fVxuICAyODpcdFxuICAyOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gIDMwOlx0e1xuICAzMTpcdFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCBtbSkpXG4gIDMyOlx0XHRcdF9fa2h1Z2VwYWdlZF9leGl0KG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBraHVnZXBhZ2VkX2ZvcmsgUGF0Y2gmIzM5O3MgRnVuY3Rpb25hbCBJbXBhY3QqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBob3cgYGtodWdlcGFnZWRfZm9ya2Agd29ya3MsIGFuZCBJIHNlZSB0aGUgY2hpbGQgcHJvY2VzcyBpbmhlcml0cyB0aGUga2h1Z2VwYWdlZCByZWdpc3RyYXRpb24gZnJvbSB0aGUgcGFyZW50IGlmIHRoZSBvbGQgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIChgbW1gKSBoYWQgYE1NRl9WTV9IVUdFUEFHRWAgc2V0LiBCdXQgdGhlbiwgSSBoYWQgdG8gdW5kZXJzdGFuZCB0aGUgcGF0Y2gmIzM5O3MgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuCgpJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiB0aHJvdWdoIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYW5kIGBodWdlcGFnZV9tYWR2aXNlYCB0byBzZWUgdGhlIHJlZ2lzdHJhdGlvbiBlZmZlY3RzLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYG1tYCByZWdpc3RyYXRpb24gc2VlbWVkIHRvIGhhcHBlbiBlYXJseSwgd2l0aGluIGBodWdlcGFnZV9tYWR2aXNlYCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHN1YnNlcXVlbnQgVk1BIG1vZGlmaWNhdGlvbnMgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhpcyBjb25jZXJuZWQgbWU6IGlmIFZNQXMgd2VyZSBtZXJnZWQgbGF0ZXIsIHJlZ2lzdHJhdGlvbiB3b3VsZCBoYXBwZW4gZXZlbiBmb3Igc21hbGwgaW5pdGlhbCBWTUFzLiBJIGhhZCB0byB2ZXJpZnkgbXkgYXNzdW1wdGlvbi4gV2hlbiBgTUFEVl9IVUdFUEFHRWAgaXMgY2FsbGVkIG9uIGEgc21hbGwgVk1BLCBpdCB0cmlnZ2VycyBhIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSG93ZXZlciwgdGhlIGNoZWNrIGBjb2xsYXBzZV9wb3NzaWJsZWAgaW4gdGhhdCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGJlY2F1c2UgdGhlIHNtYWxsIFZNQSBpc24mIzM5O3QgbGFyZ2UgZW5vdWdoIGZvciBUSFAuIFNvLCBgX19raHVnZXBhZ2VkX2VudGVyYCBpcyBOT1QgY2FsbGVkLiBUaGUgYG1tYCBpcyB0aGVuIG1lcmdlZCB3aXRoIGFuIGFkamFjZW50IFZNQSwgd2hpY2ggaXMgbGFyZ2UgZW5vdWdoLCBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBJUyBjYWxsZWQgb24gdGhlIG1lcmdlZCBWTUEuIFNvLCB0aGlzIGNvbmZpcm1zIHRoYXQgdGhlIGBtbWAgaXMgcmVnaXN0ZXJlZCBldmVuIGlmIHRoZSBvcmlnaW5hbCBWTUEgd2FzIHRvbyBzbWFsbCBhbmQgdGhhdCYjMzk7cyBjb25jZXJuaW5nLgoKQnV0IHdoYXQgYnVnIGRvZXMgdGhlIHBhdGNoIGZpeD8gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHNpdHVhdGlvbnMgd2hlcmUgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkLCBub3QganVzdCBmb3IgYE1BRFZfSFVHRVBBR0VgLCBidXQgYWxzbyBmb3Igb3RoZXIgYG1hZHZpc2VgIGZsYWdzIGxpa2UgYE1BRFZfTk9STUFMYCwgYE1BRFZfU0VRVUVOVElBTGAsIGV0Yy4gSWYgYSBWTUEgd2l0aCBgVk1fSFVHRVBBR0VgIHNldCBsYXRlciBoYXMgYSBjYWxsIHRvIGBNQURWX05PUk1BTGAsIHRoZW4gYSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb2NjdXJzLCBidXQgaXQgZG9lcyBub3RoaW5nIGlmIGBNTUZfVk1fSFVHRVBBR0VgIGlzIGFscmVhZHkgc2V0LgoKSSBoYWQgYSBtb21lbnQgb2YgY2xhcml0eS4gV2hhdCBpZiBgTU1GX1ZNX0hVR0VQQUdFYCAqaXNuJiMzOTt0KiBzZXQgaW5pdGlhbGx5LCBidXQgYFZNX0hVR0VQQUdFYCAqaXMqPyBUaGlzIGhhcHBlbnMgaWYgYGh1Z2VwYWdlX2VuYWJsZWQoKWAgaXMgZmFsc2UgaW5pdGlhbGx5LCBidXQgbGF0ZXIgYmVjb21lcyB0cnVlIChlLmcuLCB3aGVuIHRoZSBhZG1pbiBlbmFibGVzIFRIUCksIGFuZCB0aGVuIGBtYWR2aXNlKE1BRFZfTk9STUFMKWAgaXMgY2FsbGVkLiBJbiB0aGlzIGNhc2UsIGBfX2todWdlcGFnZWRfZW50ZXJgIGlzIGNhbGxlZCBiZWNhdXNlIGBodWdlcGFnZV9lbmFibGVkKClgIGlzIG5vdyB0cnVlLiBUaGlzIG1lYW5zLCAqYmVmb3JlKiB0aGUgcGF0Y2gsIHRoaXMgc2NlbmFyaW8gd291bGQgbm90IHJlZ2lzdGVyIHRoZSBgbW1gLCB3aGVyZWFzIG5vdywgaXQgZG9lcy4gSXMgdGhpcyB3aGF0JiMzOTtzIGludGVuZGVkPyBJIGNvbnNpZGVyZWQgdGhlIGBNQURWX0NPTExBUFNFYCBmbGFnLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtb2RpZnkgdGhlIFZNQSBmbGFncywgc28gdGhpcyBpcyB1bnJlbGF0ZWQuCgpIZXJlJiMzOTtzIHRoZSBrZXk6IFdoYXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgKnNwbGl0cyogdGhlIFZNQT8gV2hlbiBJIGR1ZyBkZWVwZXIsIEkgcmVhbGl6ZWQgdGhlIGJ1ZyYjMzk7cyBjb3JlIGxpZXMgaW4gaG93IHRoZSBga2h1Z2VwYWdlZGAgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaGFuZGxlZCBWTUEgc3BsaXR0aW5nLiBJZiBgTUFEVl9IVUdFUEFHRWAgaXMgY2FsbGVkIG9uIGEgbGFyZ2UgVk1BLCBgX19raHVnZXBhZ2VkX2VudGVyYCBnZXRzIGNhbGxlZCwgcmVnaXN0ZXJpbmcgdGhlIGBtbWAuIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHNwbGl0cyB0aGUgVk1BLCBjcmVhdGluZyBzbWFsbGVyIFZNQXMuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbW1gIHdhcyAqYWxyZWFkeSogcmVnaXN0ZXJlZCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdGluZywgc3BsaXQsIFZNQSB3aXRoIGBWTV9IVUdFUEFHRWAgd2FzIHNtYWxsLiAqQWZ0ZXIqIHRoZSBwYXRjaCwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBOT1QgY2FsbGVkIG9uIHRoZSBvcmlnaW5hbCBWTUEsIGJ1dCBvbiB0aGUgbmV3IHNtYWxsIFZNQS4gVGhhdCBtZWFucywgYGNvbGxhcHNlX3Bvc3NpYmxlYCB3b3VsZCBjb3JyZWN0bHkgZGV0ZXJtaW5lIHRoYXQgdGhlIHNtYWxsIFZNQSBpcyBub3Qgc3VpdGFibGUgZm9yIFRIUCBhbmQgTk9UIHJlZ2lzdGVyIHRoZSBgbW1gLiBJdCBwcmV2ZW50cyBraHVnZXBhZ2VkIGZyb20gd2FraW5nIHVwIGFuZCBzY2FubmluZyBhbiBgbW1gIHRoYXQgb25seSBoYXMgYSBzbWFsbCBgVk1fSFVHRVBBR0VgIFZNQS4KClNwZWNpZmljYWxseSwgaXQgc3RvcHMga2h1Z2VwYWdlZCBmcm9tIHNjYW5uaW5nIGZvciBUSFAsIGlmIHRoZSBhZHZpc2VkIHJhbmdlIGlzIHNtYWxsLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCB3b3VsZCBzY2FuIHRoZSB3aG9sZSBtbSBhZnRlciBhbiBpbml0aWFsIG1hZHZpc2UgY2FsbCBvbiB0aGUgbGFyZ2VyIHJhbmdlLgoKSSBoYXZlIGl0ISBUaGlzIHBhdGNoJiMzOTtzIHByaW1hcnkgZnVuY3Rpb24gaXMgdG8gZW5zdXJlIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBvcGVyYXRlcyBvbiB0aGUgKmNvcnJlY3QqIFZNQSBib3VuZHMgYWZ0ZXIgc3BsaXRzL21lcmdlcy4gVGhpcyBpcyBhIGNsZWFyIGJ1ZyBmaXgsIHByZXZlbnRpbmcgdW5uZWNlc3Nhcnkga2h1Z2VwYWdlZCB3YWtldXBzIGFuZCB3YXN0ZWQgQ1BVIGN5Y2xlcyB3aGVuIGEgc21hbGwgcG9ydGlvbiBvZiBhIFZNQSBpcyBtYXJrZWQgYXMgYEhVR0VQQUdFYC4gVGhpcyBiZWhhdmlvciBuZWVkcyBmdXp6aW5nIQoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBmdXJ0aGVyOgoqICAgQSA0S0IgcmFuZ2Ugd2l0aGluIGEgMk1CIFZNQSwgYmVmb3JlIHRoZSBwYXRjaCwgd291bGQgcmVnaXN0ZXIgYG1tYCwgd2hpbGUKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteU1lTQ0FMTF9ERUZJTkUuKm1hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE5OTM9aW50IGRvX21hZHZpc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sIGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMjAyMC1cbm1tL21hZHZpc2UuYzoyMDIxOlNZU0NBTExfREVGSU5FMyhtYWR2aXNlLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW5faW4sIGludCwgYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMjAyMi17XG4tLVxubW0vbWFkdmlzZS5jPTIwMjc9c3RhdGljIHNzaXplX3QgdmVjdG9yX21hZHZpc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5tbS9tYWR2aXNlLmMtMjA5My1cbm1tL21hZHZpc2UuYzoyMDk0OlNZU0NBTExfREVGSU5FNShwcm9jZXNzX21hZHZpc2UsIGludCwgcGlkZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKiwgdmVjLFxubW0vbWFkdmlzZS5jLTIwOTUtXHRcdHNpemVfdCwgdmxlbiwgaW50LCBiZWhhdmlvciwgdW5zaWduZWQgaW50LCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyMjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXkgYXJlYXMgdG8gaW52ZXN0aWdhdGUsIGZvY3VzaW5nIG9uIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoKCioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN5c3RlbSBDYWxscyBhbmQgS0hVR0VQQUdFRCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2hlcmUgd2UgY2FuIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCBhbmQgb3B0aW1pemUgcGVyZm9ybWFuY2UuIE15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiB0aG9zZSBgbWFkdmlzZWAgcmVsYXRlZCBzeXN0ZW0gY2FsbHM6IGBkb19tYWR2aXNlYCwgYHN5c19tYWR2aXNlYCwgYW5kIGBzeXNfcHJvY2Vzc19tYWR2aXNlYC4gIFVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgdGhlc2UgY2FsbHMgaW1wYWN0IHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGlzIGNydWNpYWwuIFdlJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IGVhY2ggc3RhZ2UuIEl0JiMzOTtzIGFib3V0IGZpZ3VyaW5nIG91dCBob3cgdGhlIGFkdmljZSBnaXZlbiBhZmZlY3RzIHBoeXNpY2FsIG1lbW9yeSB1c2FnZSwgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4KCkJleW9uZCB0aG9zZSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbHNvIGNhdGNoZXMgbXkgZXllLiBUaGlzIHdpbGwgYmUgYSBnb29kIHBvaW50IHRvIGZvY3VzIG9uIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLiBXZSBzaG91bGQgZXhhbWluZSBob3cgdGhlIGtlcm5lbCBkZWNpZGVzIHRvIHVzZSBodWdlIHBhZ2VzIHdpdGhpbiBhIHZpcnR1YWwgbWVtb3J5IGFyZWEsIGFzIHRoaXMgaW1wYWN0cyBib3RoIG1lbW9yeSBmb290cHJpbnQgYW5kIFRMQiBwZXJmb3JtYW5jZS4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGlmIHRoZXJlIGFyZSBhcmVhcyB3ZSBjYW4gcmVmaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz01ODI9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cbm1tL2todWdlcGFnZWQuYzo1ODg6dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2todWdlcGFnZWQuYy01ODktXHRcdFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gdGhlIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnVuY3Rpb24gaXNuJiMzOTt0IGRlY2xhcmVkIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYW5kIGl0IHN1Z2dlc3RzIGEgZmV3IHRoaW5ncy4gRmlyc3QsIGl0IGltcGxpZXMgaXQgbWlnaHQgYmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgaXQmIzM5O3MgcG90ZW50aWFsbHkgZXhwb3NlZCBmb3IgdXNlIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBrZXJuZWwgbW9kdWxlIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgd2h5LCB0aG91Z2guIElzIGl0IGJlaW5nIGNhbGxlZCBieSBvdGhlciBtb2R1bGVzLCBvciBpcyBpdCBwYXJ0IG9mIHNvbWUgbGFyZ2VyIHN1YnN5c3RlbT8gSSYjMzk7ZCB3YW50IHRvIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgYW5kIGNyb3NzLXJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBTZWNvbmQsIG5vdCBiZWluZyBzdGF0aWMgbWVhbnMgdGhhdCB0aGUgY29tcGlsZXIgaXNuJiMzOTt0IG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIHNjb3BlLiBJdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgbWFuYWdlZCBpZiBpdHMgY2FsbGluZyBsb2NhdGlvbiBpcyBub3QgY2xlYXJseSBkZWZpbmVkLgoKVGhlIHNhbWUgZ29lcyBmb3IgYGh1Z2VwYWdlX21hZHZpc2VgLiBJdHMgbGFjayBvZiBgc3RhdGljYCBkZWNsYXJhdGlvbiBpcyBlcXVhbGx5IG5vdGV3b3J0aHkuIE5vdywgdGhhdCBsaWtlbHkgbWVhbnMgaXQgaXMgYWxzbyBpbnRlbmRlZCBmb3IgbGlua2FnZSBvdXRzaWRlIG9mIHRoZSBzaW5nbGUgZmlsZSBpbiB3aGljaCBpdCYjMzk7cyBkZWZpbmVkLiBIb3dldmVyLCBkZXBlbmRpbmcgb24gaXRzIHVzZSBhbmQgbG9jYXRpb24sIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNhbGxlZCBmcm9tIHRoZSBgbWFkdmlzZWAgc3lzY2FsbC4gVGhpcyBjYW4gaGF2ZSBzZXJpb3VzIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZHMgdG8gc2VjdXJpdHkgY29uY2VybnMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXMgdGhpcyBmdW5jdGlvbiBwYXJ0IG9mIGEgYnJvYWRlciBodWdlcGFnZSBtYW5hZ2VtZW50IGludGVyZmFjZT8gQXJlIHRoZXJlIG90aGVyIGZpbGVzIG9yIG1vZHVsZXMgcmVseWluZyBvbiBpdD8gSXQgc2VlbXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBmb3IgbGlua2FnZSBhY3Jvc3MgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBMaW51eCBrZXJuZWwsIG5vdCBqdXN0IHdpdGhpbiBhIHNpbmdsZSBmaWxlLgoKSW4gYW55IGNhc2UsIHRoZSBub24tc3RhdGljIGRlY2xhcmF0aW9ucyBvZiBib3RoIGFyZSB3b3J0aCBzb21lIHNlcmlvdXMgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGh1Z2VwYWdlX21hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NDktXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTQ1MS1cdFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgVGhpbmtpbmcgb24gUmVsZXZhbnQgS2VybmVsIEZ1bmN0aW9ucyoqCgpSaWdodCwgZm9jdXNpbmcgb24gdGhlIGh1Z2UgcGFnZSBtZWNoYW5pc21zLi4uIEkmIzM5O20gdGhpbmtpbmcgd2UgY2FuIHN0cmVhbWxpbmUgdGhpbmdzIGJ5IGNvbmNlbnRyYXRpbmcgb24gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgdmlydHVhbCBtZW1vcnkgYXJlYXMgYXJlIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gaHVnZSBwYWdlcy4KCk5vdywgdGhhdCBicmluZ3MgdXAgYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIEl0ICppcyogaW4gdGhlIG1peCwgYnV0IHNpbmNlIGl0JiMzOTtzIGRlY2xhcmVkIHN0YXRpYywgaXQmIzM5O3MgcHJvYmFibHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBXZSBzaG91bGRuJiMzOTt0IG5lZWQgdG8gZGlyZWN0bHkgYWRkcmVzcyBpdCB3aGVuIGFuYWx5emluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdlIGNhbiBwcm9iYWJseSBqdXN0IHNhZmVseSBpZ25vcmUgaXQgZm9yIHRoaXMgcHVycG9zZS4KClRoZSBvdGhlciBvbmUgdGhhdCBqdW1wcyBvdXQgaXMgYHZtYV9tb2RpZnlfZmxhZ3NgLiBVbmxpa2UgdGhlIHN0YXRpYyBmdW5jdGlvbiB3ZSBqdXN0IHRvdWNoZWQgdXBvbiwgYHZtYV9tb2RpZnlfZmxhZ3NgIGlzICpub3QqIHN0YXRpYywgc28gaXQgc2hvdWxkIGJlIG9uIG91ciByYWRhci4gSXQgbXVzdCBoYXZlIHNvbWUgc2lnbmlmaWNhbmNlIGluIGhvdyB0aGUgZmxhZ3MgZm9yIGEgVk1BIGFyZSBtb2RpZmllZC4gV2UgZGVmaW5pdGVseSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB2bV9hcmVhX3N0cnVjdCBcXCp2bWFfbW9kaWZ5X2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hLmM9MTc0OD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXG4tLVxubW0vdm1hLmMtMTc4Ny1cbm1tL3ZtYS5jOjE3ODg6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbm1tL3ZtYS5jLTE3ODktXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1hLmM9MTgyNT1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfcG9saWN5KHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbi0tXG5tbS92bWEuYy0xODM2LVxubW0vdm1hLmM6MTgzNzpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfZmxhZ3NfdWZmZChzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG5tbS92bWEuYy0xODM4LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTc4MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB2bWFfbW9kaWZ5X2ZsYWdzYCoqCgpPa2F5LCBzbyBgdm1hX21vZGlmeV9mbGFnc2Agc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGludmVzdGlnYXRpb24uIE5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZSB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIGl0LiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGxpdmVzLiBJIHZhZ3VlbHkgcmVtZW1iZXIgaXQgYmVpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2VzLCBzbyBgbW0va2h1Z2VwYWdlZC5jYCBzb3VuZHMgcmlnaHQuIEp1c3QgdG8gYmUgc3VyZSwgSeKAmWxsIHRha2UgYSBxdWljayBwZWVrIGF0IGBtbS9NYWtlZmlsZWAgdG8gdmVyaWZ5IHRoYXQgYGtodWdlcGFnZWQub2AgaXMgYnVpbHQsIHdoaWNoIHdpbGwgY29uZmlybSBpdCYjMzk7cyBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgbW9kdWxlLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBwcm9jZWR1cmUgd2hlbiBJJiMzOTttIGNoYXNpbmcgZG93biBrZXJuZWwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2todWdlcGFnZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxNDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zOgoKKipEZWVwIERpdmUgaW50byBUSFAgYW5kIG1hZHZpc2UgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBhIGZpcm0gcmVxdWlyZW1lbnQ6IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgaW4gcGxheS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJdCBsb29rcyBsaWtlIGBtYWR2aXNlYCBpcyBhbHdheXMgYWN0aXZlIHVubGVzcyBgQ09ORklHX0FEVklTRV9TWVNDQUxMU2AgaXMgZGlzYWJsZWQuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIHJlbWVtYmVyLgoKVG8gY29uZmlybSB0aGlzIGBBRFZJU0VfU1lTQ0FMTFNgIGJlaGF2aW9yLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2UgY29uZmlncy4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgaW5pdC9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGBBRFZJU0VfU1lTQ0FMTFNgLiBUaGF0IHNob3VsZCBzZXR0bGUgdGhlIG1hdHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTQxPWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbi0tXG5pbml0L0tjb25maWctMTk1MS1cbmluaXQvS2NvbmZpZzoxOTUyOmNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcbmluaXQvS2NvbmZpZy0xOTUzLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFkdmlzZS9mYWR2aXNlIHN5c2NhbGxzXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjUxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgY29uZmlybWVkIOKAkyB3ZSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgLiBUaGF0JiMzOTtzIG5vbi1uZWdvdGlhYmxlIGZvciB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIG9uLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBjb3VsZCBiaXRlIHVzIGRvd24gdGhlIGxpbmUuIFdlIGtub3cgaXQmIzM5O3MgcmVsYXRlZCwgYnV0IGEgZGVlcCBkaXZlIGludG8gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgaXMgbmVlZGVkIGhlcmUgZm9yIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24uIFRpbWUgdG8gaW52ZXN0aWdhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MzEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgbW0vS2NvbmZpZ2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgc2NlbmFyaW86CgoqKkFuYWx5emluZyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9wdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZlYXR1cmUgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byBzZWUgaG93IHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBpcyBjb250cm9sbGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQmIzM5O3MgaW4gcGxhY2UuIElzIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYz8gRG9lcyBpdCByZWx5IG9uIG90aGVyIGZlYXR1cmVzPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbmZsaWN0cyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgdmlzaWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5IGZyb20gdGhlIGVuZC11c2VyIHBlcnNwZWN0aXZlLCBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbC4gVGhpcyBjb25maWcgb3B0aW9uIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAgdG8gZGVhbCB3aXRoIGxhcmdlciBtZW1vcnkgcGFnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODM1Olx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDgzNjpcdFx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4gODM3Olx0XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcdTAwMjZcdTAwMjYgIVBSRUVNUFRfUlRcbiA4Mzg6XHRcdHNlbGVjdCBDT01QQUNUSU9OXG4gODM5Olx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4gODQwOlx0XHRzZWxlY3QgTU1fSURcbiA4NDE6XHRcdGhlbHBcbiA4NDI6XHRcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuIDg0MzpcdFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXG4gODQ0Olx0XHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxuIDg0NTpcdFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxuIDg0NjpcdFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXG4gODQ3Olx0XHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cbiA4NDg6XHRcbiA4NDk6XHRcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXG4gODUwOlx0XG4gODUxOlx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4NTI6XHRcbiA4NTM6XHRjaG9pY2VcbiA4NTQ6XHRcdHByb21wdCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTc5CgkJCQkJCQlvdXRwdXQ6IDI2NAoJCQkJCQkJdGhvdWdodHM6IDQ5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSHVnZXBhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nOiB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbmF0dXJhbGx5LCBhbmQgd2UgZGVmaW5pdGVseSBuZWVkIGBBRFZJU0VfU1lTQ0FMTFNgIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgcmVsZXZhbnQuIFRoZSBjZW50cmFsIHByb2JsZW0gaXQmIzM5O3MgYWRkcmVzc2luZyBpcyBhIGJ1ZyBpbiBob3cgYGtodWdlcGFnZWRgIGlzIHdva2VuIHVwIHdoZW4gZGVhbGluZyB3aXRoIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBWTUFzLgoKQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBzeXN0ZW0gd291bGQgcmVnaXN0ZXIgYSBWTUEgd2l0aCBga2h1Z2VwYWdlZGAgdXNpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3aXRoaW4gYGh1Z2VwYWdlX21hZHZpc2VgLiBUaGUgaXNzdWU/IElmIHlvdSBoYWQgYSAqbGFyZ2UqIFZNQSBhbmQgdGhlbiB1c2VkIGBtYWR2aXNlYCBvbiBhICpzbWFsbCogcG9ydGlvbiBvZiBpdCwgdGhlIHN5c3RlbSB3YXMgcmVnaXN0ZXJpbmcgdGhlICpvcmlnaW5hbCogbGFyZ2UgVk1BJiMzOTtzIHNpemUsICpiZWZvcmUqIHRoZSBWTUEgc3BsaXQuIFRoaXMgY291bGQgbGVhZCB0byB1bm5lY2Vzc2FyeSBga2h1Z2VwYWdlZGAgd2FrZXVwcywgb3IgZXZlbiB0aGUgd3JvbmcgVk1BIGJlaW5nIGNvbnNpZGVyZWQuCgpUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgbW92aW5nIHRoZSBWTUEgcmVnaXN0cmF0aW9uIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGVuc3VyZXMgdGhlIHJlZ2lzdHJhdGlvbiBoYXBwZW5zICphZnRlciogdGhlIFZNQSBpcyBzcGxpdCBvciBtZXJnZWQsIG1lYW5pbmcgYGtodWdlcGFnZWRgIHdpbGwgKm9ubHkqIGJlIHdva2VuIHVwIGlmIHRoZSByZXN1bHRpbmcgVk1BIGlzIGFjdHVhbGx5IGxhcmdlIGVub3VnaCBmb3IgaHVnZXBhZ2UgY29uc2lkZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIHNwZWNpZmljYWxseSBga2h1Z2VwYWdlZGAgd2FrZXVwcyBhbmQgVk1BIGhhbmRsaW5nLCBiZWhhdmVzLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIG9mIHRoaXMgY2hhbmdlIGluIGJlaGF2aW9yLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBzb21lIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uOiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLCBgaHVnZXBhZ2VfbWFkdmlzZWAsIGFuZCBgdm1hX21vZGlmeV9mbGFnc2AuIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxsICpub3QqIHN0YXRpYywgc28gdGhleSYjMzk7cmUgYWNjZXNzaWJsZS4KClRoZSBjb3JlIGNvbmZpZyBuZWVkZWQgaXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgbmF0dXJhbGx5IOKAkyBhbmQgYEFEVklTRV9TWVNDQUxMU2AsIGJ1dCBJIGFsc28gZG91YmxlIGNoZWNrZWQgdGhhdCBgQ09ORklHX01NVWAgaXMgaW1wbGljaXRseSBpbXBsaWVkIGJ5IHRoZSBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBkZWZpbml0aW9uLCB3aGljaCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHJlbGllcyBvbi4gQmV5b25kIHRoYXQsIHRoZXJlIGFyZSBubyBvdGhlciBzcGVjaWZpYyBjb25maWdzIHJlcXVpcmVkIHRoYXQgSSBjYW4gc2VlLiBTbywgd2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBjcmFmdCBteSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2todWdlcGFnZWRfZW50ZXJfdm1hJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX21hZHZpc2UmIzM0OywKICAgICYjMzQ7dm1hX21vZGlmeV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgVk1BIHdpdGgga2h1Z2VwYWdlZCAoYGtodWdlcGFnZWRfZW50ZXJfdm1hYCkgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIG9uIGEgc21hbGwgcmFuZ2Ugd2l0aGluIGEgbGFyZ2UgVk1BIHdvdWxkIGluY29ycmVjdGx5IHJlZ2lzdGVyIHRoZSBgbW1gIHdpdGgga2h1Z2VwYWdlZCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgbGFyZ2UgVk1BJiMzOTtzIHNpemUsIGJlZm9yZSB0aGUgVk1BIHdhcyBzcGxpdC4gQnkgbW92aW5nIHRoZSByZWdpc3RyYXRpb24gdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIHRoZSByZWdpc3RyYXRpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBuZXdseSBzcGxpdC9tZXJnZWQgVk1BLCBlbnN1cmluZyB0aGF0IGtodWdlcGFnZWQgaXMgb25seSB3b2tlbiB1cCBpZiB0aGUgcmVzdWx0aW5nIFZNQSBpcyBhY3R1YWxseSBsYXJnZSBlbm91Z2ggdG8gYmUgY29sbGFwc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBraHVnZXBhZ2VkIHdha2V1cHMgYW5kIFZNQSBoYW5kbGluZywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtraHVnZXBhZ2VkX2VudGVyX3ZtYSYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O3ZtYV9tb2RpZnlfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhIFZNQSB3aXRoIGtodWdlcGFnZWQgKGBraHVnZXBhZ2VkX2VudGVyX3ZtYWApIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNtYWxsIHJhbmdlIHdpdGhpbiBhIGxhcmdlIFZNQSB3b3VsZCBpbmNvcnJlY3RseSByZWdpc3RlciB0aGUgYG1tYCB3aXRoIGtodWdlcGFnZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxhcmdlIFZNQSYjMzk7cyBzaXplLCBiZWZvcmUgdGhlIFZNQSB3YXMgc3BsaXQuIEJ5IG1vdmluZyB0aGUgcmVnaXN0cmF0aW9uIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCB0aGUgcmVnaXN0cmF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgbmV3bHkgc3BsaXQvbWVyZ2VkIFZNQSwgZW5zdXJpbmcgdGhhdCBraHVnZXBhZ2VkIGlzIG9ubHkgd29rZW4gdXAgaWYgdGhlIHJlc3VsdGluZyBWTUEgaXMgYWN0dWFsbHkgbGFyZ2UgZW5vdWdoIHRvIGJlIGNvbGxhcHNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMga2h1Z2VwYWdlZCB3YWtldXBzIGFuZCBWTUEgaGFuZGxpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwMzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgY2FsbCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHRvIGVuc3VyZSB0aGUgVk1BIGlzIHJlZ2lzdGVyZWQgZm9yIGtodWdlcGFnZWQgc2Nhbm5pbmcgd2hlbiB0aGUgYFZNX0hVR0VQQUdFYCBmbGFnIGlzIHNldC4gVGhpcyBjaGFuZ2UgaW52b2x2ZXMgVk1BIGZsYWcgbWFuYWdlbWVudCBhbmQgZnVuY3Rpb24gY2FsbCByZWxvY2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Yjk0MmY2ZGEyMGExZGVjNjNiZDBmZDY2ZmQ1MWE0N2RjOTg3Mzk3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDM6Mzc6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmMKaW5kZXggNWEwNmUzOTQyZTg4OS4uNzllZmZkM2YzZGE0ZiAxMDA2NDQKLS0tIGEvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2todWdlcGFnZWQuYwpAQCAtNDU0LDEyICYjNDM7NDU0LDYgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJY2FzZSBNQURWX0hVR0VQQUdFOgogCQkqdm1fZmxhZ3MgJmFtcDs9IH5WTV9OT0hVR0VQQUdFOwogCQkqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7Ci0JCS8qCi0JCSAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbiwKLQkJICogcmVnaXN0ZXIgaXQgaGVyZSB3aXRob3V0IHdhaXRpbmcgYSBwYWdlIGZhdWx0IHRoYXQKLQkJICogbWF5IG5vdCBoYXBwZW4gYW55IHRpbWUgc29vbi4KLQkJICovCi0JCWtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgKnZtX2ZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBNQURWX05PSFVHRVBBR0U6CiAJCSp2bV9mbGFncyAmYW1wOz0gflZNX0hVR0VQQUdFOwpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IGMxNzk5MzgwOTdiZjAuLmNiOTNjZjgyZDhkZjYgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmMKQEAgLTE3OCw2ICYjNDM7MTc4LDE0IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLAogCS8qIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS4gKi8KIAl2bWFfc3RhcnRfd3JpdGUodm1hKTsKIAl2bWEtJmd0O2ZsYWdzID0gbmV3X3ZtYV9mbGFnczsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLAomIzQzOwkgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdAomIzQzOwkgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZtYV9mbGFnc190ZXN0KCZhbXA7bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVCkpCiYjNDM7CQlraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYV9mbGFnc190b19sZWdhY3kobmV3X3ZtYV9mbGFncykpOwomIzQzOwogCWlmIChzZXRfbmV3X2Fub25fbmFtZSkKIAkJcmV0dXJuIHJlcGxhY2VfYW5vbl92bWFfbmFtZSh2bWEsIGFub25fbmFtZSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDAzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDMKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBvZiBpdCBpcyBhIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgbW92aW5nIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIEJlZm9yZSwgd2hlbiBgTUFEVl9IVUdFUEFHRWAgd2FzIHNldCBpbiBgaHVnZXBhZ2VfbWFkdmlzZWAsIHdlJiMzOTtkIGltbWVkaWF0ZWx5IHJlZ2lzdGVyIHRoZSBWTUEuIE5vdywgdGhhdCByZWdpc3RyYXRpb24gaXMgaGFwcGVuaW5nIHdpdGhpbiBgbWFkdmlzZV91cGRhdGVfdm1hYCwgZGlyZWN0bHkgYWZ0ZXIgdXBkYXRpbmcgdGhlIFZNQSYjMzk7cyBmbGFncy4KClRoZSBrZXkgaXMgdGhhdCB0aGUgcmVsZXZhbnQgZmxhZyBjaGVjayBub3cgb2NjdXJzIGluc2lkZSBgbWFkdmlzZV91cGRhdGVfdm1hYDogYGlmICh2bWFfZmxhZ3NfdGVzdCgmYW1wO25ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKWAuIEl0JiMzOTtzIGVuc3VyaW5nIHRoZSBWTUEgaXMgbm93IHN1aXRhYmxlIGZvciBraHVnZXBhZ2VkIGJlZm9yZSBwcm9jZWVkaW5nLCB1c2luZyB0aGUgaW50ZXJuYWwgYHZtYV9mbGFnc190ZXN0YCBmdW5jdGlvbiwgYW5kIGNvbnZlcnRpbmcgdGhvc2UgZmxhZ3MgdXNpbmcgYHZtYV9mbGFnc190b19sZWdhY3lgLgoKVGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgaGlnaGxpZ2h0cyB0aGUgcmVhc29uIGZvciB0aGlzIGltbWVkaWF0ZSByZWdpc3RyYXRpb246IHRvIGF2b2lkIHdhaXRpbmcgZm9yIGEgcGFnZSBmYXVsdCB0aGF0IG1pZ2h0IG5ldmVyIG9jY3VyLiBUaGlzIGlzIGEgZ29vZCBtb3ZlIHRvIGdldCBWTUFzIGludG8gdGhlIGtodWdlcGFnZWQgc2Nhbm5pbmcgcHJvY2VzcyBhcyBzb29uIGFzIHBvc3NpYmxlLgoKVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBjaGFuZ2UgYW55IHVzZXItc3BhY2UgZXhwb3NlZCBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBnb29kLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnl0aGluZyBsaWtlIHRoYXQsIHNvIEkmIzM5O20gbm90IHdvcnJpZWQgYWJvdXQgdGhhdC4gVGhlIHVzdWFsIGNoZWNrcyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzLiBTbywgSSB3aWxsIGJlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGVhbiwgZm9jdXNlZCByZWZhY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYCB0byBlbnN1cmUgdGhlIFZNQSBpcyByZWdpc3RlcmVkIGZvciBraHVnZXBhZ2VkIHNjYW5uaW5nIHdoZW4gdGhlIGBWTV9IVUdFUEFHRWAgZmxhZyBpcyBzZXQuIFRoaXMgY2hhbmdlIGludm9sdmVzIFZNQSBmbGFnIG1hbmFnZW1lbnQgYW5kIGZ1bmN0aW9uIGNhbGwgcmVsb2NhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBidWdzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdG8gZW5zdXJlIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyB3aGVuIHRoZSBgVk1fSFVHRVBBR0VgIGZsYWcgaXMgc2V0LiBUaGlzIGNoYW5nZSBpbnZvbHZlcyBWTUEgZmxhZyBtYW5hZ2VtZW50IGFuZCBmdW5jdGlvbiBjYWxsIHJlbG9jYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM3OjU3LjQzNjEwODc1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTQyMzU0NDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIixcbiAgICBcImh1Z2VwYWdlX21hZHZpc2VcIixcbiAgICBcInZtYV9tb2RpZnlfZmxhZ3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdG8gZW5zdXJlIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyB3aGVuIHRoZSBgVk1fSFVHRVBBR0VgIGZsYWcgaXMgc2V0LiBUaGlzIGNoYW5nZSBpbnZvbHZlcyBWTUEgZmxhZyBtYW5hZ2VtZW50IGFuZCBmdW5jdGlvbiBjYWxsIHJlbG9jYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhIFZNQSB3aXRoIGtodWdlcGFnZWQgKGBraHVnZXBhZ2VkX2VudGVyX3ZtYWApIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNtYWxsIHJhbmdlIHdpdGhpbiBhIGxhcmdlIFZNQSB3b3VsZCBpbmNvcnJlY3RseSByZWdpc3RlciB0aGUgYG1tYCB3aXRoIGtodWdlcGFnZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxhcmdlIFZNQSdzIHNpemUsIGJlZm9yZSB0aGUgVk1BIHdhcyBzcGxpdC4gQnkgbW92aW5nIHRoZSByZWdpc3RyYXRpb24gdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIHRoZSByZWdpc3RyYXRpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBuZXdseSBzcGxpdC9tZXJnZWQgVk1BLCBlbnN1cmluZyB0aGF0IGtodWdlcGFnZWQgaXMgb25seSB3b2tlbiB1cCBpZiB0aGUgcmVzdWx0aW5nIFZNQSBpcyBhY3R1YWxseSBsYXJnZSBlbm91Z2ggdG8gYmUgY29sbGFwc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBraHVnZXBhZ2VkIHdha2V1cHMgYW5kIFZNQSBoYW5kbGluZywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozNzo1Ny40MzYxMTM2MzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjIzMDQ1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Yjk0MmY2ZGEyMGExZGVjNjNiZDBmZDY2ZmQ1MWE0N2RjOTg3Mzk3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDAzOjM3OjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDVhMDZlMzk0MmU4ODkuLjc5ZWZmZDNmM2RhNGYgMTAwNjQ0XFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTQ1NCwxMiArNDU0LDYgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4gXFx0XFx0KnZtX2ZsYWdzIFxcdTAwMjY9IH5WTV9OT0hVR0VQQUdFO1xcbiBcXHRcXHQqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcXG4tXFx0XFx0ICogcmVnaXN0ZXIgaXQgaGVyZSB3aXRob3V0IHdhaXRpbmcgYSBwYWdlIGZhdWx0IHRoYXRcXG4tXFx0XFx0ICogbWF5IG5vdCBoYXBwZW4gYW55IHRpbWUgc29vbi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgKnZtX2ZsYWdzKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxcbiBcXHRcXHQqdm1fZmxhZ3MgXFx1MDAyNj0gflZNX0hVR0VQQUdFO1xcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCBjMTc5OTM4MDk3YmYwLi5jYjkzY2Y4MmQ4ZGY2IDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC0xNzgsNiArMTc4LDE0IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbiBcXHQvKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuICovXFxuIFxcdHZtYV9zdGFydF93cml0ZSh2bWEpO1xcbiBcXHR2bWEtXFx1MDAzZWZsYWdzID0gbmV3X3ZtYV9mbGFncztcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLFxcbitcXHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxcbitcXHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHZtYV9mbGFnc190ZXN0KFxcdTAwMjZuZXdfdm1hX2ZsYWdzLCBWTUFfSFVHRVBBR0VfQklUKSlcXG4rXFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcXG4rXFxuIFxcdGlmIChzZXRfbmV3X2Fub25fbmFtZSlcXG4gXFx0XFx0cmV0dXJuIHJlcGxhY2VfYW5vbl92bWFfbmFtZSh2bWEsIGFub25fbmFtZSk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozNzo1OC43NTkxNzM0MjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNTI1OTYxODMwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkFEVklTRV9TWVNDQUxMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtodWdlcGFnZWRfZW50ZXJfdm1hXCIsXG4gICAgXCJodWdlcGFnZV9tYWR2aXNlXCIsXG4gICAgXCJ2bWFfbW9kaWZ5X2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhIFZNQSB3aXRoIGtodWdlcGFnZWQgKGBraHVnZXBhZ2VkX2VudGVyX3ZtYWApIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvbiBhIHNtYWxsIHJhbmdlIHdpdGhpbiBhIGxhcmdlIFZNQSB3b3VsZCBpbmNvcnJlY3RseSByZWdpc3RlciB0aGUgYG1tYCB3aXRoIGtodWdlcGFnZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxhcmdlIFZNQSdzIHNpemUsIGJlZm9yZSB0aGUgVk1BIHdhcyBzcGxpdC4gQnkgbW92aW5nIHRoZSByZWdpc3RyYXRpb24gdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIHRoZSByZWdpc3RyYXRpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBuZXdseSBzcGxpdC9tZXJnZWQgVk1BLCBlbnN1cmluZyB0aGF0IGtodWdlcGFnZWQgaXMgb25seSB3b2tlbiB1cCBpZiB0aGUgcmVzdWx0aW5nIFZNQSBpcyBhY3R1YWxseSBsYXJnZSBlbm91Z2ggdG8gYmUgY29sbGFwc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBraHVnZXBhZ2VkIHdha2V1cHMgYW5kIFZNQSBoYW5kbGluZywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Yjk0MmY2ZGEyMGExZGVjNjNiZDBmZDY2ZmQ1MWE0N2RjOTg3Mzk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDM6Mzc6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDVhMDZlMzk0MmU4ODkuLjc5ZWZmZDNmM2RhNGYgMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTQ1NCwxMiArNDU0LDYgQEAgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRjYXNlIE1BRFZfSFVHRVBBR0U6XG4gXHRcdCp2bV9mbGFncyBcdTAwMjY9IH5WTV9OT0hVR0VQQUdFO1xuIFx0XHQqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7XG4tXHRcdC8qXG4tXHRcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2Nhbixcbi1cdFx0ICogcmVnaXN0ZXIgaXQgaGVyZSB3aXRob3V0IHdhaXRpbmcgYSBwYWdlIGZhdWx0IHRoYXRcbi1cdFx0ICogbWF5IG5vdCBoYXBwZW4gYW55IHRpbWUgc29vbi5cbi1cdFx0ICovXG4tXHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgKnZtX2ZsYWdzKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE1BRFZfTk9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX0hVR0VQQUdFO1xuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggYzE3OTkzODA5N2JmMC4uY2I5M2NmODJkOGRmNiAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtMTc4LDYgKzE3OCwxNCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcbiBcdC8qIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS4gKi9cbiBcdHZtYV9zdGFydF93cml0ZSh2bWEpO1xuIFx0dm1hLVx1MDAzZWZsYWdzID0gbmV3X3ZtYV9mbGFncztcbitcdC8qXG4rXHQgKiBJZiB0aGUgdm1hIGJlY29tZSBnb29kIGZvciBraHVnZXBhZ2VkIHRvIHNjYW4sXG4rXHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxuK1x0ICogbWF5IG5vdCBoYXBwZW4gYW55IHRpbWUgc29vbi5cbitcdCAqL1xuK1x0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxuK1x0XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYV9mbGFnc190b19sZWdhY3kobmV3X3ZtYV9mbGFncykpO1xuK1xuIFx0aWYgKHNldF9uZXdfYW5vbl9uYW1lKVxuIFx0XHRyZXR1cm4gcmVwbGFjZV9hbm9uX3ZtYV9uYW1lKHZtYSwgYW5vbl9uYW1lKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM3OjU4Ljc1OTE3NDcwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzMzODU0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIGtodWdlcGFnZWRfZW50ZXJfdm1hIFBhdGNoKipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCdzIHNoaWZ0aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgb3ZlciB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2h5P1wiIFdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vdmU/IExldCdzIHRyYWNlIGl0IHRocm91Z2guIFdlJ3JlIHJlbW92aW5nIGl0IGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgaW5zZXJ0aW5nIGl0IGludG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaW4gYG1tL21hZHZpc2UuY2AuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBoaWVyYXJjaHkuIElzIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSBgaHVnZXBhZ2VfbWFkdmlzZWAsIG9yIGFyZSB0aGVyZSBvdGhlciBjYWxsIHNpdGVzIHdlIG5lZWQgdG8gY29uc2lkZXI/IEl0IGxvb2tzIGxpa2UgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgKmlzKiB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyB0aGUgVk1BIGZsYWdzIGJhc2VkIG9uIGBtYWR2aXNlYCBjYWxscywgd2hpY2ggbWFrZXMgc2Vuc2UuIEhtbSwgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIHRoYXQgYGh1Z2VwYWdlX21hZHZpc2VgIGl0c2VsZiBpcyBhY3R1YWxseSBpbnZva2VkIGJ5IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAsIHdoaWNoICp0aGVuKiBjYWxscyBgbWFkdmlzZV91cGRhdGVfdm1hYC4gUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgbW92aW5nIHRoZSB3b3JrLCBpbiB0ZXJtcyBvZiBWTUEgbW9kaWZpY2F0aW9ucywgdG8gKmJlZm9yZSogdGhlIGh1Z2VwYWdlLXNwZWNpZmljIGxvZ2ljIGdldHMgaW52b2x2ZWQuXG5cblRvIGJlIHN1cmUsIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgY3Jvc3MtcmVmZXJlbmNlIHRoZSByZWxldmFudCBzZWN0aW9ucyBpbiBgbW0vbWFkdmlzZS5jYCBhbmQgYG1tL2todWdlcGFnZWQuY2AgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGNoYW5nZS4gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb3ZlIGFmZmVjdHMgdGhlIG92ZXJhbGwgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODowMy44OTI1NjIyNThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNTk5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV91cGRhdGVfdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTM4PXN0YXRpYyBpbnQgcmVwbGFjZV9hbm9uX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MC0gKi9cXG5tbS9tYWR2aXNlLmM6MTUxOnN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbm1tL21hZHZpc2UuYy0xNTItXFx0XFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTMzNj1zdGF0aWMgYm9vbCBjYW5fbWFkdmlzZV9tb2RpZnkoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM0Mi0vKlxcbm1tL21hZHZpc2UuYzoxMzQzOiAqIEFwcGx5IGFuIG1hZHZpc2UgYmVoYXZpb3IgdG8gYSByZWdpb24gb2YgYSB2bWEuICBtYWR2aXNlX3VwZGF0ZV92bWFcXG5tbS9tYWR2aXNlLmMtMTM0NC0gKiB3aWxsIGhhbmRsZSBzcGxpdHRpbmcgYSB2bSBhcmVhIGludG8gc2VwYXJhdGUgYXJlYXMsIGVhY2ggYXJlYSB3aXRoIGl0cyBvd25cXG4tLVxcbm1tL21hZHZpc2UuYz0xMzQ3PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTM3OC1cXG5tbS9tYWR2aXNlLmM6MTM3OTpcXHQvKiBUaGUgYmVsb3cgYmVoYXZpb3VycyB1cGRhdGUgVk1BcyB2aWEgbWFkdmlzZV91cGRhdGVfdm1hKCkuICovXFxubW0vbWFkdmlzZS5jLTEzODAtXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ0MC1cXG5tbS9tYWR2aXNlLmM6MTQ0MTpcXHRlcnJvciA9IG1hZHZpc2VfdXBkYXRlX3ZtYShuZXdfZmxhZ3MsIG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYy0xNDQyLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MDMuOTM5OTI0NTUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzNzQ2MzMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtodWdlcGFnZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNoaWZ0aW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb3ZlciB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSXMgaXQgZGVmaW5lZCB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2AgaXRzZWxmPyBPciBwZXJoYXBzIGl0J3MgYSBkZWNsYXJhdGlvbiByZXNpZGluZyBpbiBgaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmhgPyBLbm93aW5nIGl0cyBsb2NhdGlvbiBpcyB0aGUgZmlyc3Qgc3RlcCB0byBwcm9wZXJseSBldmFsdWF0aW5nIHdoYXQgdGhlIGNvZGUgY2hhbmdlIG1lYW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MDcuMjc3Mzg5OTA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM4OTUxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTE1PWV4dGVybiB2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDoxNjpleHRlcm4gdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0xNy1cXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaD0zOD1zdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDAtfVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjQxOnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00Mi1cXHRcXHRcXHRcXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNTIwPXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXFx0XFx0cmV0dXJuIHJldDtcXG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4Ni1cXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxcbm1tL21hZHZpc2UuYzoxODc6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcXG5tbS9tYWR2aXNlLmMtMTg4LVxcbi0tXFxubW0vdm1hLmM9ODg5PXN0YXRpYyBfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2UoXFxuLS1cXG5tbS92bWEuYy0xMDczLVxcdHZtYV9zZXRfZmxhZ3NfbWFzayh2bWctXFx1MDAzZXRhcmdldCwgc3RpY2t5X2ZsYWdzKTtcXG5tbS92bWEuYzoxMDc0OlxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtZy1cXHUwMDNldGFyZ2V0LCB2bWctXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0xMDc1LVxcdHZtZy1cXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcXG4tLVxcbm1tL3ZtYS5jPTExNDA9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuLS1cXG5tbS92bWEuYy0xMTk1LVxcdGlmICh2bWctXFx1MDAzZXRhcmdldCBcXHUwMDI2XFx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XFxubW0vdm1hLmM6MTE5NjpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXFx1MDAzZXRhcmdldCwgdm1nLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vdm1hLmMtMTE5Ny1cXHRcXHR2bWctXFx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XFxuLS1cXG5tbS92bWEuYz0yNjM0PXN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTI2OTEtXFx0LypcXG5tbS92bWEuYzoyNjkyOlxcdCAqIHZtYV9tZXJnZV9uZXdfcmFuZ2UoKSBjYWxscyBraHVnZXBhZ2VkX2VudGVyX3ZtYSgpIHRvbywgdGhlIGJlbG93XFxubW0vdm1hLmMtMjY5My1cXHQgKiBjYWxsIGNvdmVycyB0aGUgbm9uLW1lcmdlIGNhc2UuXFxuLS1cXG5tbS92bWEuYy0yNjk1LVxcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxcbm1tL3ZtYS5jOjI2OTY6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCBtYXAtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0yNjk3LVxcdCp2bWFwID0gdm1hO1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTE4MT1zdGF0aWMgaW5saW5lIGJvb2wgbXBvbF9lcXVhbChzdHJ1Y3QgbWVtcG9saWN5ICphLCBzdHJ1Y3QgbWVtcG9saWN5ICpiKVxcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTE4NS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6MTg2OnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMTg3LVxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MDguODUxMjkwNzE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyMjE0MzY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hZHZpc2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBUaGlzIGltcGxpZXMgaXQgd2lsbCBub3cgYmUgdHJpZ2dlcmVkIGJ5ICphbnkqIGBtYWR2aXNlYCBjYWxsIHRoYXQgdXBkYXRlcyBWTUEgZmxhZ3MgYW5kIHNwZWNpZmljYWxseSBzZXRzIHRoZSBgVk1BX0hVR0VQQUdFX0JJVGAsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGRpcmVjdGx5IHRpZWQgdG8gYFZNX0hVR0VQQUdFYC4gU2VlbXMgcmVhc29uYWJsZSBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJyb2FkZW5pbmcgdGhlIHNjb3BlIGEgYml0LiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcuIGBWTUFfSFVHRVBBR0VfQklUYCwgaXMgdGhhdCB0aGUgcmlnaHQgdGVybWlub2xvZ3k/IExldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgY29ycmVjdCBiaXQgaW4gdGhlIGZsYWcuIEFuZCwganVzdCB0byBiZSBzdXJlLCBJIHNlZSBgdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVClgLCBidXQgd2hhdCAqaXMqIGBuZXdfdm1hX2ZsYWdzYCBoZXJlPyBJcyBpdCBhIHN0cmFpZ2h0IGB2bV9mbGFnc190YCwgb3IgaXMgdGhpcyBiZWluZyB1c2VkIGluIGEgYHN0cnVjdCB2bWFfZmxhZ3NgIHNvbWV3aGVyZT8gSSdtIGdldHRpbmcgYSBsaXR0bGUgZnV6enkgb24gdGhhdC4gR290dGEgYmUgcHJlY2lzZSBoZXJlLiBPa2F5LCBsZXQncyBqdXN0IGdvIHN0cmFpZ2h0IHRvIGBtbS9tYWR2aXNlLmNgIGFuZCBkaWcgaW50byBgbWFkdmlzZV91cGRhdGVfdm1hYCBpdHNlbGYuIEkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGF0IGBuZXdfdm1hX2ZsYWdzYCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gR290dGEgYmUgc3VyZSB0aGUgbG9naWMgaXMgc291bmQgd2l0aCB0aGVzZSBmbGFnIG1hbmlwdWxhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MTQuMzczNDM2ODg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTM0NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfdXBkYXRlX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTEzOD1zdGF0aWMgaW50IHJlcGxhY2VfYW5vbl92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTAtICovXFxubW0vbWFkdmlzZS5jOjE1MTpzdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcXG5tbS9tYWR2aXNlLmMtMTUyLVxcdFxcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzY9c3RhdGljIGJvb2wgY2FuX21hZHZpc2VfbW9kaWZ5KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEzNDItLypcXG5tbS9tYWR2aXNlLmM6MTM0MzogKiBBcHBseSBhbiBtYWR2aXNlIGJlaGF2aW9yIHRvIGEgcmVnaW9uIG9mIGEgdm1hLiAgbWFkdmlzZV91cGRhdGVfdm1hXFxubW0vbWFkdmlzZS5jLTEzNDQtICogd2lsbCBoYW5kbGUgc3BsaXR0aW5nIGEgdm0gYXJlYSBpbnRvIHNlcGFyYXRlIGFyZWFzLCBlYWNoIGFyZWEgd2l0aCBpdHMgb3duXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTM0Nz1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTEzNzgtXFxubW0vbWFkdmlzZS5jOjEzNzk6XFx0LyogVGhlIGJlbG93IGJlaGF2aW91cnMgdXBkYXRlIFZNQXMgdmlhIG1hZHZpc2VfdXBkYXRlX3ZtYSgpLiAqL1xcbm1tL21hZHZpc2UuYy0xMzgwLVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NDAtXFxubW0vbWFkdmlzZS5jOjE0NDE6XFx0ZXJyb3IgPSBtYWR2aXNlX3VwZGF0ZV92bWEobmV3X2ZsYWdzLCBtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTQ0Mi1vdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjE0LjQxNzk3NTU2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjQ2MzgwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWFkdmlzZWAgY2FsbHMgYXJlIHByb2Nlc3NlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIHN0cnVjdHVyZXMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGNoYW5nZXMgdG8gcGFnZSBhY2Nlc3MgcGF0dGVybnMgYW5kIGNhY2hpbmcgaGludHMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgYG1hZHZpc2VgIHN5c3RlbSBjYWxsLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSB0YWJsZXMuIEkgc3VzcGVjdCB0aGVyZSBhcmUgYSBmZXcgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMsIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIHRoYXQgSSdsbCB3YW50IHRvIHRyYWNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB2YXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIGhlcmUgaXMga2V5IHRvIG9wdGltaXppbmcgYXBwbGljYXRpb24gbWVtb3J5IGJlaGF2aW9yIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0J3Mgc2VlIGhvdyBgbWFkdmlzZV91cGRhdGVfdm1hYCBhY2NvbXBsaXNoZXMgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjIwLjU0MjYxNjQ1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1MDpcXHQgKi9cXG4gMTUxOlxcdHN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbiAxNTI6XFx0XFx0XFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuIDE1MzpcXHR7XFxuIDE1NDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXZtYTtcXG4gMTU1OlxcdFxcdHZtYV9mbGFnc190IG5ld192bWFfZmxhZ3MgPSBsZWdhY3lfdG9fdm1hX2ZsYWdzKG5ld19mbGFncyk7XFxuIDE1NjpcXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2U7XFxuIDE1NzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfbmFtZSAqYW5vbl9uYW1lID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlYW5vbl9uYW1lO1xcbiAxNTg6XFx0XFx0Ym9vbCBzZXRfbmV3X2Fub25fbmFtZSA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yID09IF9fTUFEVl9TRVRfQU5PTl9WTUFfTkFNRTtcXG4gMTU5OlxcdFxcdFZNQV9JVEVSQVRPUih2bWksIG1hZHZfYmVoYXZpb3ItXFx1MDAzZW1tLCByYW5nZS1cXHUwMDNlc3RhcnQpO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRpZiAodm1hX2ZsYWdzX3NhbWVfbWFzayhcXHUwMDI2dm1hLVxcdTAwM2VmbGFncywgbmV3X3ZtYV9mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gMTYyOlxcdFxcdCAgICAoIXNldF9uZXdfYW5vbl9uYW1lIHx8XFxuIDE2MzpcXHRcXHQgICAgIGFub25fdm1hX25hbWVfZXEoYW5vbl92bWFfbmFtZSh2bWEpLCBhbm9uX25hbWUpKSlcXG4gMTY0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRpZiAoc2V0X25ld19hbm9uX25hbWUpXFxuIDE2NzpcXHRcXHRcXHR2bWEgPSB2bWFfbW9kaWZ5X25hbWUoXFx1MDAyNnZtaSwgbWFkdl9iZWhhdmlvci1cXHUwMDNlcHJldiwgdm1hLFxcbiAxNjg6XFx0XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLCBhbm9uX25hbWUpO1xcbiAxNjk6XFx0XFx0ZWxzZVxcbiAxNzA6XFx0XFx0XFx0dm1hID0gdm1hX21vZGlmeV9mbGFncyhcXHUwMDI2dm1pLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VwcmV2LCB2bWEsXFxuIDE3MTpcXHRcXHRcXHRcXHRyYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsIFxcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0aWYgKElTX0VSUih2bWEpKVxcbiAxNzQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIodm1hKTtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0bWFkdl9iZWhhdmlvci1cXHUwMDNldm1hID0gdm1hO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHQvKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfbG9jayBoZWxkIGluIHdyaXRlIG1vZGUuICovXFxuIDE3OTpcXHRcXHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcXG4gMTgwOlxcdFxcdHZtYS1cXHUwMDNlZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzO1xcbiAxODE6XFx0XFx0LypcXG4gMTgyOlxcdFxcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcXG4gMTgzOlxcdFxcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XFxuIDE4NDpcXHRcXHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxcbiAxODU6XFx0XFx0ICovXFxuIDE4NjpcXHRcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxcbiAxODc6XFx0XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0aWYgKHNldF9uZXdfYW5vbl9uYW1lKVxcbiAxOTA6XFx0XFx0XFx0cmV0dXJuIHJlcGxhY2VfYW5vbl92bWFfbmFtZSh2bWEsIGFub25fbmFtZSk7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdHJldHVybiAwO1xcbiAxOTM6XFx0fVxcbiAxOTQ6XFx0XFxuIDE5NTpcXHQjaWZkZWYgQ09ORklHX1NXQVBcXG4gMTk2OlxcdHN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIDE5NzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDE5ODpcXHR7XFxuIDE5OTpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjIwLjU0MjczNjU5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMyMTg1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIFJlbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGludG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgc2hpZnQ7IGBtYWR2aXNlX3VwZGF0ZV92bWFgIGlzIHVzZWQgZm9yIG1vcmUgdGhhbiBqdXN0IGh1Z2VwYWdlLXJlbGF0ZWQgYG1hZHZpc2VgIGNhbGxzLiBOb3csIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoYXQgaXMgc3RhcnRpbmcgdG8gYmVjb21lIGNsZWFyLiBJZiBgbWFkdmlzZV91cGRhdGVfdm1hYCBoYW5kbGVzICpvdGhlciogYG1hZHZpc2VgIGJlaGF2aW9ycywgYW5kIHRoZSBgbmV3X3ZtYV9mbGFnc2AgaGFzIGBWTUFfSFVHRVBBR0VfQklUYCBzZXQsIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCAqd2lsbCogYmUgaW52b2tlZC4gSG9sZCBvbi4uLiB3aGF0IGhhcHBlbnMgaWYgYFZNQV9IVUdFUEFHRV9CSVRgIGlzIGFscmVhZHkgc2V0LCBhbmQgd2UncmUganVzdCB1cGRhdGluZyAqYW5vdGhlciogZmxhZywgbGlrZSBzYXksIGBNQURWX0RPTlRORUVEYD8gYG5ld192bWFfZmxhZ3NgIHdvdWxkICpzdGlsbCogaGF2ZSBgVk1BX0hVR0VQQUdFX0JJVGAgc2V0LCB3b3VsZG4ndCBpdD8gV2hpY2ggd291bGQgbWVhbiBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGdldHMgY2FsbGVkICphZ2FpbiohIFJpZ2h0LCB0aGlzIGlzIGEgcG90ZW50aWFsIGlzc3VlLlxuXG5TbywgaXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBkZXNpZ25lZCB0byBoYW5kbGUgYmVpbmcgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIFZNQT8gSSBiZXR0ZXIgdmVyaWZ5IHRoYXQgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGEgc3VidGxlIGJ1Zy4gTGV0IG1lIGNoZWNrIHRoZSBsb2dpYyB3aXRoaW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpdHNlbGYuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgcmVmYWN0b3JpbmcgZG9lc24ndCB0cmlnZ2VyIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgcmVzb3VyY2UgY29udGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjI1LjQ3NDkyNDc4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MDpcXHR9XFxuIDU4MTpcXHRcXG4gNTgyOlxcdHN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA1ODM6XFx0XFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXFxuIDU4NDpcXHR7XFxuIDU4NTpcXHRcXHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XFxuIDU4NjpcXHR9XFxuIDU4NzpcXHRcXG4gNTg4OlxcdHZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDU4OTpcXHRcXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuIDU5MDpcXHR7XFxuIDU5MTpcXHRcXHRpZiAoIW1tX2ZsYWdzX3Rlc3QoTU1GX1ZNX0hVR0VQQUdFLCB2bWEtXFx1MDAzZXZtX21tKSBcXHUwMDI2XFx1MDAyNiBodWdlcGFnZV9lbmFibGVkKClcXG4gNTkyOlxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXFxuIDU5MzpcXHRcXHRcXHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVxcdTAwM2V2bV9tbSk7XFxuIDU5NDpcXHR9XFxuIDU5NTpcXHRcXG4gNTk2OlxcdHZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIDU5NzpcXHR7XFxuIDU5ODpcXHRcXHRzdHJ1Y3QgbW1fc2xvdCAqc2xvdDtcXG4gNTk5OlxcdFxcdGludCBmcmVlID0gMDtcXG4gNjAwOlxcdFxcbiA2MDE6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbiA2MDI6XFx0XFx0c2xvdCA9IG1tX3Nsb3RfbG9va3VwKG1tX3Nsb3RzX2hhc2gsIG1tKTtcXG4gNjAzOlxcdFxcdGlmIChzbG90IFxcdTAwMjZcXHUwMDI2IGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IHNsb3QpIHtcXG4gNjA0OlxcdFxcdFxcdG1tX3Nsb3RfcmVtb3ZlKHNsb3QpO1xcbiA2MDU6XFx0XFx0XFx0ZnJlZSA9IDE7XFxuIDYwNjpcXHRcXHR9XFxuIDYwNzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG4gNjA4OlxcdFxcbiA2MDk6XFx0XFx0aWYgKGZyZWUpIHtcXG4gNjEwOlxcdFxcdFxcdG1tX2ZsYWdzX2NsZWFyKE1NRl9WTV9IVUdFUEFHRSwgbW0pO1xcbiA2MTE6XFx0XFx0XFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIHNsb3QpO1xcbiA2MTI6XFx0XFx0XFx0bW1kcm9wKG1tKTtcXG4gNjEzOlxcdFxcdH0gZWxzZSBpZiAoc2xvdCkge1xcbiA2MTQ6XFx0XFx0XFx0LypcXG4gNjE1OlxcdFxcdFxcdCAqIFRoaXMgaXMgcmVxdWlyZWQgdG8gc2VyaWFsaXplIGFnYWluc3RcXG4gNjE2OlxcdFxcdFxcdCAqIGNvbGxhcHNlX3Rlc3RfZXhpdCgpICh3aGljaCBpcyBndWFyYW50ZWVkIHRvIHJ1blxcbiA2MTc6XFx0XFx0XFx0ICogdW5kZXIgbW1hcF9sb2NrIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxcbiA2MTg6XFx0XFx0XFx0ICogcGFnZXRhYmxlcyB3aWxsIGJlIGRlc3Ryb3llZCkgdW50aWwga2h1Z2VwYWdlZCBoYXMgZmluaXNoZWRcXG4gNjE5OlxcdFxcdFxcdCAqIHdvcmtpbmcgb24gdGhlIHBhZ2V0YWJsZXMgdW5kZXIgdGhlIG1tYXBfbG9jay5cXG4gNjIwOlxcdFxcdFxcdCAqL1xcbiA2MjE6XFx0XFx0XFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcXG4gNjIyOlxcdFxcdFxcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcXG4gNjIzOlxcdFxcdH1cXG4gNjI0OlxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0c3RhdGljIHZvaWQgY29sbGFwc2VfY29udHJvbF9pbml0X3NjYW4oc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbiA2Mjc6XFx0e1xcbiA2Mjg6XFx0XFx0bWVtc2V0KGNjLVxcdTAwM2Vub2RlX2xvYWQsIDAsIHNpemVvZihjYy1cXHUwMDNlbm9kZV9sb2FkKSk7XFxuIDYyOTpcXHRcXHRub2Rlc19jbGVhcihjYy1cXHUwMDNlYWxsb2Nfbm1hc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODoyNS40NzUwNzk3MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxMDYxNDAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSB3aGVyZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGlzIGNhbGxlZCB1bmRlciBhIHNsaWdodGx5IGJyb2FkZXIgc2V0IG9mIGNpcmN1bXN0YW5jZXMuIEluaXRpYWxseSwgbXkgdGhvdWdodCB3YXMsIFwiaXQncyBzYWZlLCBzaW5jZSB0aGUgY29kZSBjaGVja3MgYE1NRl9WTV9IVUdFUEFHRWAuXCIgVGhlbiwgSSBoYXZlIHRvIHN0b3AgYW5kIHRoaW5rIGlmIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyBzYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMsIGJ1dCBiZWZvcmUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3YXMgbGltaXRlZCB0byBgTUFEVl9IVUdFUEFHRWAgY2FsbHMuIE5vdywgaXQncyB0cmlnZ2VyZWQgd2hlbmV2ZXIgVk1BIGZsYWdzIGFyZSBtb2RpZmllZCBhbmQgYFZNQV9IVUdFUEFHRV9CSVRgIGlzIHNldC5cblxuU28gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIGZsb3cuIElmIGBNQURWX0hVR0VQQUdFYCBpcyBjYWxsZWQsIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkLCB0aGF0J3MgY2xlYXIuIEEgc3Vic2VxdWVudCBgbWFkdmlzZWAgY2FsbCAqb24gdGhlIHNhbWUgVk1BKiB3aXRoIGBWTUFfSFVHRVBBR0VfQklUYCBzZXQgd291bGQgdHJpZ2dlciBhbm90aGVyIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gQnV0IHRoYXQncyBwcm9iYWJseSBva2F5LCBiZWNhdXNlIHdoZW4gdGhlIFZNQSB3YXMgY3JlYXRlZCBvciB3aGVuIHRoZSBiaXQgd2FzIHNldCwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3YXMgYWxyZWFkeSBjYWxsZWQuIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIGluIGB2bWFfbWVyZ2VfbmV3X3JhbmdlYCBhbmQgYF9fbW1hcF9uZXdfdm1hYCBpZiBgVk1fSFVHRVBBR0VgIGlzIHNldC5cblxuVGhlIHRyaWNreSBwYXJ0OiBpcyB0aGVyZSBhIHNjZW5hcmlvIHdoZXJlIGBWTUFfSFVHRVBBR0VfQklUYCBpcyBzZXQgYnV0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgKndhc24ndCogY2FsbGVkPyBUaGUgb25seSBzY2VuYXJpbyB0aGF0IEkgY2FuIHNlZSB3b3VsZCBiZSBpZiBgaHVnZXBhZ2VfZW5hYmxlZCgpYCB3YXMgZmFsc2UgZHVyaW5nIFZNQSBjcmVhdGlvbiBhbmQgbGF0ZXIgYmVjb21lIHRydWUuIEJ1dCBldmVuIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBjaGVja3MgYGh1Z2VwYWdlX2VuYWJsZWQoKWAgYW5kIGlmIGl0IHdlcmUgZmFsc2UgYXQgY3JlYXRpb24sIGl0IHdvdWxkIG5vdCBydW4uIFdoZW4gaXQgZG9lcyBiZWNvbWUgdHJ1ZSwgY2FsbGluZyBgbWFkdmlzZWAgd291bGQgbm93IHRyaWdnZXIgdGhlIHByb2Nlc3MuXG5cbk9rYXksIGxldCdzIHRyYWNlIHRoaXMgZnVydGhlci4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkIGJ5IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAuIE5vdywgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgc3BlY2lmaWNhbGx5IGF2b2lkcyBhbnkgd29yayBpZiB0aGUgVk1BIGZsYWdzIGFyZSB0aGUgc2FtZTpcblxuYGBgY1xuXHRpZiAodm1hX2ZsYWdzX3NhbWVfbWFzayhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIG5ld192bWFfZmxhZ3MpIFx1MDAyNlx1MDAyNlxuXHQgICAgKCFzZXRfbmV3X2Fub25fbmFtZSB8fFxuXHQgICAgIGFub25fdm1hX25hbWVfZXEoYW5vbl92bWFfbmFtZSh2bWEpLCBhbm9uX25hbWUpKSlcblx0XHRyZXR1cm4gMDtcbmBgYFxuXG5UaGlzIG1lYW5zIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgKm9ubHkqIGNhbGxlZCBpZiB0aGUgZmxhZ3MgY2hhbmdlICphbmQqIHRoZSBuZXcgZmxhZ3MgaW5jbHVkZSBgVk1BX0hVR0VQQUdFX0JJVGAuIFNvLCB3aXRoIGBNQURWX0hVR0VQQUdFYCBmb3IgaW5zdGFuY2UsIGlmIHRoZSBiaXQgd2Fzbid0IHNldCwgdGhlIGZsYWdzIGNoYW5nZSBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBnZXRzIGNhbGxlZC4gTWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgYE1BRFZfRE9OVE5FRURgPyBUaGF0IGRvZXNuJ3QgYWx0ZXIgVk1BIGZsYWdzLCBzbyBpdCdzIG5vdCBoYW5kbGVkIGJ5IGBtYWR2aXNlX3VwZGF0ZV92bWFgLiBUaGF0J3MgZ29vZC5cblxuSSBuZWVkIHRvIGNhdGFsb2d1ZSB3aGljaCBtYWR2aXNlIGJlaGF2aW9ycyBpbXBhY3QgVk1BIGZsYWdzIGFuZCB3aWxsIGNhdXNlIHRoaXMgYWRkaXRpb25hbCBjYWxsOiBgTUFEVl9NRVJHRUFCTEVgLCBgTUFEVl9VTk1FUkdFQUJMRWAsIGBNQURWX0hVR0VQQUdFYCwgYE1BRFZfTk9IVUdFUEFHRWAsIGBNQURWX0RPTlRGT1JLYCwgYE1BRFZfRE9GT1JLYCwgYE1BRFZfV0lQRU9ORk9SS2AsIGBNQURWX0tFRVBPTkZPUktgLCBgTUFEVl9DT0xEYCwgYE1BRFZfUEFHRU9VVGAsIGBNQURWX1BPUFVMQVRFX1JFQURgLCBgTUFEVl9QT1BVTEFURV9XUklURWAuIEkgc2hvdWxkIGNoZWNrIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAgdG8gY29uZmlybSB0aGF0IHRoZXNlIGJlaGF2aW9ycyBhY3R1YWxseSBjYWxsIGBtYWR2aXNlX3VwZGF0ZV92bWFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzg6MzUuNTgxMjIzMjE0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0NzpcXHRzdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjEzNDg6XFx0e1xcbjEzNDk6XFx0XFx0aW50IGJlaGF2aW9yID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3I7XFxuMTM1MDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXZtYTtcXG4xMzUxOlxcdFxcdHZtX2ZsYWdzX3QgbmV3X2ZsYWdzID0gdm1hLVxcdTAwM2V2bV9mbGFncztcXG4xMzUyOlxcdFxcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSA9IFxcdTAwMjZtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZTtcXG4xMzUzOlxcdFxcdGludCBlcnJvcjtcXG4xMzU0OlxcdFxcbjEzNTU6XFx0XFx0aWYgKHVubGlrZWx5KCFjYW5fbWFkdmlzZV9tb2RpZnkobWFkdl9iZWhhdmlvcikpKVxcbjEzNTY6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xMzU3OlxcdFxcbjEzNTg6XFx0XFx0c3dpdGNoIChiZWhhdmlvcikge1xcbjEzNTk6XFx0XFx0Y2FzZSBNQURWX1JFTU9WRTpcXG4xMzYwOlxcdFxcdFxcdHJldHVybiBtYWR2aXNlX3JlbW92ZShtYWR2X2JlaGF2aW9yKTtcXG4xMzYxOlxcdFxcdGNhc2UgTUFEVl9XSUxMTkVFRDpcXG4xMzYyOlxcdFxcdFxcdHJldHVybiBtYWR2aXNlX3dpbGxuZWVkKG1hZHZfYmVoYXZpb3IpO1xcbjEzNjM6XFx0XFx0Y2FzZSBNQURWX0NPTEQ6XFxuMTM2NDpcXHRcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xkKG1hZHZfYmVoYXZpb3IpO1xcbjEzNjU6XFx0XFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxuMTM2NjpcXHRcXHRcXHRyZXR1cm4gbWFkdmlzZV9wYWdlb3V0KG1hZHZfYmVoYXZpb3IpO1xcbjEzNjc6XFx0XFx0Y2FzZSBNQURWX0ZSRUU6XFxuMTM2ODpcXHRcXHRjYXNlIE1BRFZfRE9OVE5FRUQ6XFxuMTM2OTpcXHRcXHRjYXNlIE1BRFZfRE9OVE5FRURfTE9DS0VEOlxcbjEzNzA6XFx0XFx0XFx0cmV0dXJuIG1hZHZpc2VfZG9udG5lZWRfZnJlZShtYWR2X2JlaGF2aW9yKTtcXG4xMzcxOlxcdFxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG4xMzcyOlxcdFxcdFxcdHJldHVybiBtYWR2aXNlX2NvbGxhcHNlKHZtYSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLFxcbjEzNzM6XFx0XFx0XFx0XFx0XFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfZHJvcHBlZCk7XFxuMTM3NDpcXHRcXHRjYXNlIE1BRFZfR1VBUkRfSU5TVEFMTDpcXG4xMzc1OlxcdFxcdFxcdHJldHVybiBtYWR2aXNlX2d1YXJkX2luc3RhbGwobWFkdl9iZWhhdmlvcik7XFxuMTM3NjpcXHRcXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbjEzNzc6XFx0XFx0XFx0cmV0dXJuIG1hZHZpc2VfZ3VhcmRfcmVtb3ZlKG1hZHZfYmVoYXZpb3IpO1xcbjEzNzg6XFx0XFxuMTM3OTpcXHRcXHQvKiBUaGUgYmVsb3cgYmVoYXZpb3VycyB1cGRhdGUgVk1BcyB2aWEgbWFkdmlzZV91cGRhdGVfdm1hKCkuICovXFxuMTM4MDpcXHRcXG4xMzgxOlxcdFxcdGNhc2UgTUFEVl9OT1JNQUw6XFxuMTM4MjpcXHRcXHRcXHRuZXdfZmxhZ3MgPSBuZXdfZmxhZ3MgXFx1MDAyNiB+Vk1fUkFORF9SRUFEIFxcdTAwMjYgflZNX1NFUV9SRUFEO1xcbjEzODM6XFx0XFx0XFx0YnJlYWs7XFxuMTM4NDpcXHRcXHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcXG4xMzg1OlxcdFxcdFxcdG5ld19mbGFncyA9IChuZXdfZmxhZ3MgXFx1MDAyNiB+Vk1fUkFORF9SRUFEKSB8IFZNX1NFUV9SRUFEO1xcbjEzODY6XFx0XFx0XFx0YnJlYWs7XFxuMTM4NzpcXHRcXHRjYXNlIE1BRFZfUkFORE9NOlxcbjEzODg6XFx0XFx0XFx0bmV3X2ZsYWdzID0gKG5ld19mbGFncyBcXHUwMDI2IH5WTV9TRVFfUkVBRCkgfCBWTV9SQU5EX1JFQUQ7XFxuMTM4OTpcXHRcXHRcXHRicmVhaztcXG4xMzkwOlxcdFxcdGNhc2UgTUFEVl9ET05URk9SSzpcXG4xMzkxOlxcdFxcdFxcdG5ld19mbGFncyB8PSBWTV9ET05UQ09QWTtcXG4xMzkyOlxcdFxcdFxcdGJyZWFrO1xcbjEzOTM6XFx0XFx0Y2FzZSBNQURWX0RPRk9SSzpcXG4xMzk0OlxcdFxcdFxcdGlmIChuZXdfZmxhZ3MgXFx1MDAyNiBWTV9TUEVDSUFMKVxcbjEzOTU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTM5NjpcXHRcXHRcXHRuZXdfZmxhZ3MgXFx1MDAyNj0gflZNX0RPTlRDT1BZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODozNS41ODEzNDc4MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4OTc5OTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV92bWFfYmVoYXZpb3JgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAgaXMgaW1wbGVtZW50ZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQgKmJlaGF2ZXMqIGluIHByYWN0aWNlLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBiYXNpY3Mgb2YgYG1hZHZpc2VgIGFuZCB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcyksIG9mIGNvdXJzZSwgYnV0IHRoZSBzdWJ0bGV0aWVzIGFsd2F5cyBsaWUgaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgd2FudCB0byBrbm93IHRoZSAqZXhhY3QqIHNlcXVlbmNlIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgYSBjYWxsIHRvIGBtYWR2aXNlYCB3aXRoIGEgc3BlY2lmaWMgYWR2aWNlIGNvZGUgd2l0aGluIGEgcGFydGljdWxhciBWTUEgY29udGV4dC5cblxuSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgYG1hZHZpc2VgIGZsYWdzIGFuZCB3aGV0aGVyIHRoZXkncmUgaG9ub3VyZWQuIFNvLCBJIG5lZWQgdG8ga25vdyB0aGUgcGF0aCBvZiB0aGUgZXhlY3V0aW9uLCBhbmQgYW55IGRhdGEgc3RydWN0dXJlcyBtb2RpZmllZC5cblxuV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXM/IFdoYXQgYWJvdXQgY29uY3VycmVudCBhY2Nlc3M/IERvZXMgdGhlIGtlcm5lbCBlbXBsb3kgYW55IGxvY2tzPyBIb3cgYXJlIHRoZXNlIGxvY2tzIGltcGxlbWVudGVkIGFuZCBob3cgZWZmZWN0aXZlIGFyZSB0aGV5PyBXaGF0IGhhcHBlbnMgaWYgdGhlIFZNQSBzcGFucyBtdWx0aXBsZSBwaHlzaWNhbCBwYWdlcyBvciByZWdpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnM/XG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgbWFkdmlzZWAgYW5kIHBhZ2UgcmVjbGFtYXRpb24uIEhvdyBpcyB0aGUgYWR2aWNlIHVzZWQgKG9yIGlnbm9yZWQpIGJ5IHRoZSBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobXM/IERvZXMgdGhlIGtlcm5lbCBhZ2dyZXNzaXZlbHkgZnJlZSB1cCBtZW1vcnkgb3IgZG9lcyBpdCB3YWl0IGZvciBhIHNpZ25hbD8gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCB3b3JrbG9hZHMg4oCTIGFyZSB0aGVyZSBhbnkgd29ya2xvYWRzIHRoYXQgY2FuIGJlbmVmaXQgZnJvbSB1c2luZyBgbWFkdmlzZWA/XG5cbkluIGVzc2VuY2UsIEkgbmVlZCBhIGRlZXAgZGl2ZS4gSSdtIG5vdCBqdXN0IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgb3ZlcnZpZXc7IEkgd2FudCB0byBrbm93IHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjM5Ljc3MTE0ODg5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTc6XFx0XFx0XFx0YnJlYWs7XFxuMTM5ODpcXHRcXHRjYXNlIE1BRFZfV0lQRU9ORk9SSzpcXG4xMzk5OlxcdFxcdFxcdC8qIE1BRFZfV0lQRU9ORk9SSyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBhbm9ueW1vdXMgbWVtb3J5LiAqL1xcbjE0MDA6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSB8fCBuZXdfZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpXFxuMTQwMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDAyOlxcdFxcdFxcdG5ld19mbGFncyB8PSBWTV9XSVBFT05GT1JLO1xcbjE0MDM6XFx0XFx0XFx0YnJlYWs7XFxuMTQwNDpcXHRcXHRjYXNlIE1BRFZfS0VFUE9ORk9SSzpcXG4xNDA1OlxcdFxcdFxcdGlmIChuZXdfZmxhZ3MgXFx1MDAyNiBWTV9EUk9QUEFCTEUpXFxuMTQwNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDA3OlxcdFxcdFxcdG5ld19mbGFncyBcXHUwMDI2PSB+Vk1fV0lQRU9ORk9SSztcXG4xNDA4OlxcdFxcdFxcdGJyZWFrO1xcbjE0MDk6XFx0XFx0Y2FzZSBNQURWX0RPTlREVU1QOlxcbjE0MTA6XFx0XFx0XFx0bmV3X2ZsYWdzIHw9IFZNX0RPTlREVU1QO1xcbjE0MTE6XFx0XFx0XFx0YnJlYWs7XFxuMTQxMjpcXHRcXHRjYXNlIE1BRFZfRE9EVU1QOlxcbjE0MTM6XFx0XFx0XFx0aWYgKCghaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgXFx1MDAyNlxcdTAwMjYgKG5ld19mbGFncyBcXHUwMDI2IFZNX1NQRUNJQUwpKSB8fFxcbjE0MTQ6XFx0XFx0XFx0ICAgIChuZXdfZmxhZ3MgXFx1MDAyNiBWTV9EUk9QUEFCTEUpKVxcbjE0MTU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQxNjpcXHRcXHRcXHRuZXdfZmxhZ3MgXFx1MDAyNj0gflZNX0RPTlREVU1QO1xcbjE0MTc6XFx0XFx0XFx0YnJlYWs7XFxuMTQxODpcXHRcXHRjYXNlIE1BRFZfTUVSR0VBQkxFOlxcbjE0MTk6XFx0XFx0Y2FzZSBNQURWX1VOTUVSR0VBQkxFOlxcbjE0MjA6XFx0XFx0XFx0ZXJyb3IgPSBrc21fbWFkdmlzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG4xNDIxOlxcdFxcdFxcdFxcdFxcdGJlaGF2aW9yLCBcXHUwMDI2bmV3X2ZsYWdzKTtcXG4xNDIyOlxcdFxcdFxcdGlmIChlcnJvcilcXG4xNDIzOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0MjQ6XFx0XFx0XFx0YnJlYWs7XFxuMTQyNTpcXHRcXHRjYXNlIE1BRFZfSFVHRVBBR0U6XFxuMTQyNjpcXHRcXHRjYXNlIE1BRFZfTk9IVUdFUEFHRTpcXG4xNDI3OlxcdFxcdFxcdGVycm9yID0gaHVnZXBhZ2VfbWFkdmlzZSh2bWEsIFxcdTAwMjZuZXdfZmxhZ3MsIGJlaGF2aW9yKTtcXG4xNDI4OlxcdFxcdFxcdGlmIChlcnJvcilcXG4xNDI5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0MzA6XFx0XFx0XFx0YnJlYWs7XFxuMTQzMTpcXHRcXHRjYXNlIF9fTUFEVl9TRVRfQU5PTl9WTUFfTkFNRTpcXG4xNDMyOlxcdFxcdFxcdC8qIE9ubHkgYW5vbnltb3VzIG1hcHBpbmdzIGNhbiBiZSBuYW1lZCAqL1xcbjE0MzM6XFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSBcXHUwMDI2XFx1MDAyNiAhdm1hX2lzX2Fub25fc2htZW0odm1hKSlcXG4xNDM0OlxcdFxcdFxcdFxcdHJldHVybiAtRUJBREY7XFxuMTQzNTpcXHRcXHRcXHRicmVhaztcXG4xNDM2OlxcdFxcdH1cXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0LyogVGhpcyBpcyBhIHdyaXRlIG9wZXJhdGlvbi4qL1xcbjE0Mzk6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWxvY2tfbW9kZSAhPSBNQURWSVNFX01NQVBfV1JJVEVfTE9DSyk7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdGVycm9yID0gbWFkdmlzZV91cGRhdGVfdm1hKG5ld19mbGFncywgbWFkdl9iZWhhdmlvcik7XFxuMTQ0MjpcXHRvdXQ6XFxuMTQ0MzpcXHRcXHQvKlxcbjE0NDQ6XFx0XFx0ICogbWFkdmlzZSgpIHJldHVybnMgRUFHQUlOIGlmIGtlcm5lbCByZXNvdXJjZXMsIHN1Y2ggYXNcXG4xNDQ1OlxcdFxcdCAqIHNsYWIsIGFyZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS5cXG4xNDQ2OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODozOS43NzEyNzY4MzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA4MTA1ODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgbWFkdmlzZV91cGRhdGVfdm1hYCBhbmQgSHVnZSBQYWdlcyoqXG5cbk9rYXksIHNvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGhhbmRsZXMgYSB3aG9sZSBzbGV3IG9mIGBtYWR2aXNlYCBmbGFnczogYE5PUk1BTGAsIGBTRVFVRU5USUFMYCwgYFJBTkRPTWAsIHRoZSBgRE9OVEZPUksvRE9GT1JLYCBncm91cCwgdGhlIGBXSVBFT05GT1JLL0tFRVBPTkZPUktgIGdyb3VwLCBgRE9OVERVTVBgLCBgRE9EVU1QYCwgYE1FUkdFQUJMRWAsIGBVTk1FUkdFQUJMRWAsIGBIVUdFUEFHRWAsIGBOT0hVR0VQQUdFYCwgYW5kIGBfX01BRFZfU0VUX0FOT05fVk1BX05BTUVgLiBUaGF0J3MgYSBsb3Qgb2YgcG90ZW50aWFsIHN0YXRlIGNoYW5nZXMhXG5cbkknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBodWdlIHBhZ2VzLCBzcGVjaWZpY2FsbHkgdGhlIGNhc2Ugd2hlcmUgYSBWTUEgKmFscmVhZHkqIGhhcyBgVk1fSFVHRVBBR0VgIHNldC4gSWYgSSBzdWJzZXF1ZW50bHkgY2FsbCBgTUFEVl9OT1JNQUxgIG9uIHRoYXQgVk1BLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbmV3X2ZsYWdzYCB3b3VsZCBhbHNvIGluaGVyaXQgdGhlIGBWTV9IVUdFUEFHRWAgYml0LiBNYWtlcyBzZW5zZSBzbyBmYXIuXG5cbk5vdywgaWYgdGhlIHJlc3VsdGluZyBmbGFncyBhcmUgYWN0dWFsbHkgKmRpZmZlcmVudCog4oCTIHNheSwgaWYgYFZNX1JBTkRfUkVBRGAgZ2V0cyBjbGVhcmVkIOKAkyB0aGVuIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHdpbGwgdHJpZ2dlciB0aGUgY29yZSBsb2dpYy4gVGhpcyBzZWVtcyB0byBiZSB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYHZtYV9mbGFnc190ZXN0KFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpYCBjaGVjayB3aWxsIG5vdyBldmFsdWF0ZSB0byB0cnVlLCBhcyBleHBlY3RlZCwgYmVjYXVzZSBgVk1fSFVHRVBBR0VgIGlzIHNldC5cblxuQ29uc2VxdWVudGx5LCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdpbGwgYmUgY2FsbGVkLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB0aGUgdHJhbnNpdGlvbi4gQnV0Li4uIGEgbmFnZ2luZyBxdWVzdGlvbiBjb21lcyB0byBtaW5kOiBXaGF0IGhhcHBlbnMgaWYgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBnZXRzIGNhbGxlZCAqYWdhaW4qIG9uIHRoZSBzYW1lIFZNQT8gSXMgdGhpcyBhIHBvdGVudGlhbCBkb3VibGUtZW50cnkgcHJvYmxlbT8gRG9lcyBpdCBjYXVzZSBhbnkgdW53YW50ZWQgc2lkZS1lZmZlY3RzLCBzdWNoIGFzIG1lbW9yeSBjb3JydXB0aW9uIG9yIGEgcmVkdW5kYW50IGF0dGVtcHQgdG8gcmUtZXN0YWJsaXNoIGh1Z2UgcGFnZXM/XG5cbkkgbmVlZCB0byByZS1leGFtaW5lIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgdGhvcm91Z2hseSB0byBjb25maXJtIGhvdyBpdCBoYW5kbGVzIHJlLWVudHJ5IGFuZCBlbnN1cmUgdGhhdCB0aGlzIHJlLWVudHJhbnQgc2NlbmFyaW8gaXMgaGFuZGxlZCBzYWZlbHkuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGUgbG9ja2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM4OjQ1Ljg1MjMzNzc1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4ODpcXHR2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA1ODk6XFx0XFx0XFx0XFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbiA1OTA6XFx0e1xcbiA1OTE6XFx0XFx0aWYgKCFtbV9mbGFnc190ZXN0KE1NRl9WTV9IVUdFUEFHRSwgdm1hLVxcdTAwM2V2bV9tbSkgXFx1MDAyNlxcdTAwMjYgaHVnZXBhZ2VfZW5hYmxlZCgpXFxuIDU5MjpcXHRcXHQgICAgXFx1MDAyNlxcdTAwMjYgY29sbGFwc2VfcG9zc2libGUodm1hLCB2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKVxcbiA1OTM6XFx0XFx0XFx0X19raHVnZXBhZ2VkX2VudGVyKHZtYS1cXHUwMDNldm1fbW0pO1xcbiA1OTQ6XFx0fVxcbiA1OTU6XFx0XFxuIDU5NjpcXHR2b2lkIF9fa2h1Z2VwYWdlZF9leGl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiA1OTc6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODo0NS44NTI0ODI3MzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2Nzk5NzIxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBraHVnZXBhZ2VkX2VudGVyX3ZtYSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmdW5jdGlvbiwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIGl0IHNlZW1zIG9kZGx5IHJlZHVuZGFudC4gSXQgY2hlY2tzIGlmIGAhbW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIHZtYS1cdTAwM2V2bV9tbSlgLiBCdXQgaG9sZCBvbiwgdGhlIGBNTUZfVk1fSFVHRVBBR0VgIGZsYWcgaXMgb24gdGhlIGBtbV9zdHJ1Y3RgLCBub3QgdGhlIGluZGl2aWR1YWwgYHZtX2FyZWFfc3RydWN0YCEgU28sIGFsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGRvZXMgaXMgbWFrZSBzdXJlIHRoZSBgbW1gIGlzIHJlZ2lzdGVyZWQgZm9yIGtodWdlcGFnZWQuIFRoaXMgbWVhbnMgY2FsbGluZyBpdCBtdWx0aXBsZSB0aW1lcyBpcyBoYXJtbGVzcywgYXMgaXQgb25seSBkb2VzIHNvbWV0aGluZyB0aGUgZmlyc3QgdGltZS5cblxuTm93LCBJJ20gY3VyaW91cyBhYm91dCB0aGUgY29udGV4dC4gV2h5IHdhcyB0aGlzIHBhdGNoIG1hZGUgaW4gdGhlIGZpcnN0IHBsYWNlPyBVbmZvcnR1bmF0ZWx5LCBJIG9ubHkgaGF2ZSB0aGUgZGlmZiBoZXJlLCBub3QgdGhlIGZ1bGwgY29tbWl0IG1lc3NhZ2UuIExldCdzIHNlZS4uLiBBaCwgdGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgcmV2ZWFscyB0aGUgaW50ZW50OiBpdCdzIGFib3V0IHJlZ2lzdGVyaW5nIGEgVk1BIGZvciBraHVnZXBhZ2VkIHNjYW5uaW5nIHdpdGhvdXQgd2FpdGluZyBmb3IgYSBwYWdlIGZhdWx0LlxuXG5UaGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIHJlYWxpemUgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgaXMgY2FsbGVkIHdoZW4gc29tZW9uZSBkb2VzIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYC4gSXQgc2V0cyBgVk1fSFVHRVBBR0VgIGluIGBuZXdfZmxhZ3NgLiBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4gdXNlcyB0aGlzLlxuXG5IZXJlJ3MgdGhlIGNyaXRpY2FsIHBpZWNlOiBgaHVnZXBhZ2VfbWFkdmlzZWAgb25seSBtb2RpZmllcyBgbmV3X2ZsYWdzYCwgbm90IHRoZSBhY3R1YWwgYHZtYS1cdTAwM2V2bV9mbGFnc2AuIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGNhbGxzIGB2bWFfbW9kaWZ5X2ZsYWdzYC4gVGhpcyBmdW5jdGlvbiBtaWdodCBzcGxpdCB0aGUgVk1BLiBJZiB0aGUgVk1BIGlzIHNwbGl0LCB0aGUgYHZtYWAgcG9pbnRlciBJJ20gd29ya2luZyB3aXRoIG1pZ2h0IGNoYW5nZSwgb3IgYSBuZXcgVk1BIG1pZ2h0IGJlIGNyZWF0ZWQhIEJ1dCB3YWl0LCBgaHVnZXBhZ2VfbWFkdmlzZWAgcHJldmlvdXNseSBjYWxsZWQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3aXRoIHRoZSAqb2xkKiBgdm1hYCBwb2ludGVyLCBiZWZvcmUgdGhlIHNwbGl0IVxuXG5Ib3dldmVyLCBJIHJlY2FsbCB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAganVzdCBzZXRzIGBNTUZfVk1fSFVHRVBBR0VgIG9uIGB2bWEtXHUwMDNldm1fbW1gLiBTaW5jZSB0aGUgYG1tYCBpcyB0aGUgc2FtZSBmb3IgYWxsIFZNQXMgd2l0aGluIHRoYXQgbWVtb3J5IHNwYWNlLCB0aGlzIHNlZW1zIGxlc3MgY29uY2VybmluZy5cblxuT2theSwgSSB0aGluayBJJ20gZ2V0dGluZyBpdC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIG1hdHRlcnMuIEkgbmVlZCB0byBsb29rIGF0IGBjb2xsYXBzZV9wb3NzaWJsZWAgdG8gc2VlIGlmIHRoZSBWTUEncyBzdWl0YWJpbGl0eSBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyBpcyBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODo1Ny41MzI0NTc2MTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODI6XFx0c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDU4MzpcXHRcXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcXG4gNTg0OlxcdHtcXG4gNTg1OlxcdFxcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcXG4gNTg2OlxcdH1cXG4gNTg3OlxcdFxcbiA1ODg6XFx0dm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gNTg5OlxcdFxcdFxcdFxcdCAgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4gNTkwOlxcdHtcXG4gNTkxOlxcdFxcdGlmICghbW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIHZtYS1cXHUwMDNldm1fbW0pIFxcdTAwMjZcXHUwMDI2IGh1Z2VwYWdlX2VuYWJsZWQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozODo1Ny41MzI2NjgxODFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5ODM0MjU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc2AgaXMgYmVoYXZpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgaGFuZGxpbmcgdGhlIHBvdGVudGlhbCBvcmRlcnMuIEkgYW0gbW9zdCBpbnRlcmVzdGVkIGluIHRoZSBjb3JuZXIgY2FzZXMsIHNwZWNpZmljYWxseSB0aGUgZWZmZWN0cyBvZiBlZGdlIGRhdGEuIEFyZSB0aGVzZSBiZWluZyBoYW5kbGVkIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzLCBvciB1bmV4cGVjdGVkIGRhdGEgbXV0YXRpb25zPyBJIHdpbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGxvZ2ljLCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlIGNoYW5nZXMgb3IgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gQW55IGlzc3VlcyBoZXJlIHdvdWxkIGNhc2NhZGUsIHNvIHRoaXMgZGVzZXJ2ZXMgYW4gZXNwZWNpYWxseSB0aG9yb3VnaCByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOTowMC4yMzEwMTM1MTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjg1MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3Bvc3NpYmxlX29yZGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTUzMj12b2lkIF9fa2h1Z2VwYWdlZF9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NjctICovXFxubW0va2h1Z2VwYWdlZC5jOjU2ODpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU2OS1cXHRcXHR2bV9mbGFnc190IHZtX2ZsYWdzLCBlbnVtIHR2YV90eXBlIHR2YV9mbGFncylcXG4tLVxcbm1tL2todWdlcGFnZWQuYz01ODI9c3RhdGljIGJvb2wgY29sbGFwc2VfcG9zc2libGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTg0LXtcXG5tbS9raHVnZXBhZ2VkLmM6NTg1OlxcdHJldHVybiBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzKTtcXG5tbS9raHVnZXBhZ2VkLmMtNTg2LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNjA2PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE2MzUtXFxubW0va2h1Z2VwYWdlZC5jOjE2MzY6XFx0ZW5hYmxlZF9vcmRlcnMgPSBjb2xsYXBzZV9wb3NzaWJsZV9vcmRlcnModm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCB0dmFfZmxhZ3MpO1xcbm1tL2todWdlcGFnZWQuYy0xNjM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOTowMC4yNzUzMDMzNTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MjMyMjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCBmdW5jdGlvbi4gSXQncyBhIGtleSBwaWVjZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYyBpbnNpZGUgYW5kIG91dC4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGNvbWJpbmF0b3JpY3Mgb3IgdGhlIHNwZWNpZmljIG9yZGVyaW5nIGNvbnN0cmFpbnRzIGFmdGVyIHRoZSBpbml0aWFsIG9yZGVyIGNvbnN0cnVjdGlvbiBwaGFzZS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHN1Y2ggYSBmdW5jdGlvbiBpcyBvZnRlbiBhIGJvdHRsZW5lY2ssIHByb25lIHRvIGluZWZmaWNpZW5jaWVzIGlmIG5vdCBpbXBsZW1lbnRlZCBjYXJlZnVsbHkuIExldCdzIHNlZSBpZiBpdCdzIGdvdCBjbGV2ZXIgYWxnb3JpdGhtcyBvciBqdXN0IGJydXRlLWZvcmNlIGFwcHJvYWNoZXMuIEnigJltIGhvcGluZyBpdCBsZXZlcmFnZXMgc29tZSBvZiB0aGUgb3B0aW1pemF0aW9ucyBJJ3ZlIHNlZW4gaW4gc2ltaWxhciBjb21iaW5hdG9yaWFsIHByb2JsZW1zLiBJcyBpdCB1c2luZyBtZW1vaXphdGlvbiwgZHluYW1pYyBwcm9ncmFtbWluZywgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIG9yZGVyaW5nIHN0cnVjdHVyZSB0byByZWR1Y2UgdGhlIHNlYXJjaCBzcGFjZT8gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBvcGVyYXRlcyBvbiDigJMgdGhleSBvZnRlbiBob2xkIHRoZSBrZXkgdG8gcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIGhvdyBpdCBpZGVudGlmaWVzIGFuZCBtZXJnZXMgb3ZlcmxhcHBpbmcgb3IgcmVkdW5kYW50IG9yZGVyczsgdGhhdCdzIHdoZXJlIGNvbXBsZXhpdHkgY2FuIHJlYWxseSBleHBsb2RlLiBBbmQgb2YgY291cnNlLCBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYW5kIGJvdW5kYXJ5IGNvbmRpdGlvbnMgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cyBvciBjcmFzaGVzLiBUaGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCdzIHN0YXJ0IHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzk6MDMuOTU3NjI5ODM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY4OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gNTY5OlxcdFxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsIGVudW0gdHZhX3R5cGUgdHZhX2ZsYWdzKVxcbiA1NzA6XFx0e1xcbiA1NzE6XFx0XFx0dW5zaWduZWQgbG9uZyBvcmRlcnM7XFxuIDU3MjpcXHRcXG4gNTczOlxcdFxcdC8qIElmIGtodWdlcGFnZWQgaXMgc2Nhbm5pbmcgYW4gYW5vbnltb3VzIHZtYSwgYWxsb3cgbVRIUCBjb2xsYXBzZSAqL1xcbiA1NzQ6XFx0XFx0aWYgKCh0dmFfZmxhZ3MgPT0gVFZBX0tIVUdFUEFHRUQpIFxcdTAwMjZcXHUwMDI2IHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4gNTc1OlxcdFxcdFxcdG9yZGVycyA9IFRIUF9PUkRFUlNfQUxMX0FOT047XFxuIDU3NjpcXHRcXHRlbHNlXFxuIDU3NzpcXHRcXHRcXHRvcmRlcnMgPSBCSVQoSFBBR0VfUE1EX09SREVSKTtcXG4gNTc4OlxcdFxcbiA1Nzk6XFx0XFx0cmV0dXJuIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0dmFfZmxhZ3MsIG9yZGVycyk7XFxuIDU4MDpcXHR9XFxuIDU4MTpcXHRcXG4gNTgyOlxcdHN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA1ODM6XFx0XFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncywgZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MpXFxuIDU4NDpcXHR7XFxuIDU4NTpcXHRcXHRyZXR1cm4gY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR2YV9mbGFncyk7XFxuIDU4NjpcXHR9XFxuIDU4NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzk6MDMuOTU3Nzc3MDU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODI4NTkzMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlcGFnZSBhbmQgVk1BIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCBtZSB3YWxrIHRocm91Z2ggdGhpcy4gSSdtIGZvY3VzaW5nIG9uIGhvdyBgaHVnZXBhZ2VfbWFkdmlzZWAgYW5kIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBga2h1Z2VwYWdlZGAgcHJvY2Vzcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGUgVk1BIHN1aXRhYmlsaXR5IGlzIHByb3Blcmx5IGFzc2Vzc2VkLCBsb29raW5nIGF0IGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBtaWdodCBiZSBjYWxsZWQgd2l0aCBhbiBvdXRkYXRlZCBWTUEgcG9pbnRlci4gSWYgYGh1Z2VwYWdlX21hZHZpc2VgIHVzZWQgYW4gb2xkIFZNQSBwb2ludGVyIGl0IG1pZ2h0IHBvaW50IHRvIGFuIGFub255bW91cyBWTUEgdGhhdCBkb2VzIG5vdCBoYXZlIHRoZSByaWdodCBzaXplLiBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBjb21lcyAqYWZ0ZXIqIGBodWdlcGFnZV9tYWR2aXNlYC4gSSBoYXZlIGEgY2xlYXIgaWRlYSBvbiB3aGF0IGBtYWR2aXNlX3VwZGF0ZV92bWFgIGlzIGRvaW5nLiBJdCBtb2RpZmllcyBWTUEgZmxhZ3MgYW5kIHBvc3NpYmx5IHJlbmFtZXMgdGhlIFZNQS5cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHBvdGVudGlhbCB0aW1pbmcgaXNzdWU6IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbWlnaHQgYmUgY2FsbGVkICpiZWZvcmUqIHRoZSBWTUEgZ2V0cyBzcGxpdCBvciBtb2RpZmllZCBieSBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCdzIHdoZXJlIGBjb2xsYXBzZV9wb3NzaWJsZWAgY29tZXMgaW4uIEl0IHNlZW1zIGxpa2UgYSBWTUEgY2FuIGJlIHNwbGl0LCBhbmQgdGhlbiBpZiB0aGUgc3BsaXQgVk1BIGlzIHRvbyBzbWFsbCB0byBiZSBhIGh1Z2VwYWdlLCBgY29sbGFwc2VfcG9zc2libGVgIGNvdWxkIHJldHVybiBmYWxzZS4gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGJ1ZywgYnV0IHRoZW4gSSByZWNhbGwgdGhhdCBgaHVnZXBhZ2VfbWFkdmlzZWAgcGFzc2VzIHRoZSBvcmlnaW5hbCBWTUEsIHdoaWNoICptaWdodCogYmUgbGFyZ2UgZW5vdWdoLCBzbyBgY29sbGFwc2VfcG9zc2libGVgIHJldHVybnMgdHJ1ZS4gQnV0IGl0IGp1c3QgcmVnaXN0ZXJzIHRoZSBgbW1gIGZvciBjb25zaWRlcmF0aW9uLCBzbyB0aGUgaW5kaXZpZHVhbCBWTUEgc2l6ZSBkb2Vzbid0IG1hdHRlciBhdCB0aGF0IHBvaW50LCBhcyBsb25nIGFzICpzb21lKiBWTUEgKm1pZ2h0KiBiZSBzdWl0YWJsZS4gVGhhdCdzIGZpbmUuXG5cbk5vdywgaWYgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIGZhaWxzIChlLmcuLCBgRU5PTUVNYCBpbiBgdm1hX21vZGlmeV9mbGFnc2ApLCB0aGUgY29kZSByZXR1cm5zIGFuIGVycm9yLCBidXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBoYXMgKmFscmVhZHkqIGJlZW4gY2FsbGVkISBUaGUgYG1tYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIGV2ZW4gdGhvdWdoIHRoZSBgbWFkdmlzZWAgZmFpbGVkLiBUaGF0IHNob3VsZG4ndCBiZSBhIGJpZyBkZWFsLCBiZWNhdXNlIGl0IHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGNsZWFuIHVwLlxuXG5UaGUgbmV4dCBzY2VuYXJpbyB0byBjb25zaWRlciBpcyBhIFZNQSBjcmVhdGVkIHdpdGggYFZNX0hVR0VQQUdFYCB0aGF0IGlzICppbml0aWFsbHkqIHVuc3VpdGFibGUuIGBtYWR2aXNlKE1BRFZfRE9OVEZPUkspYCBpcyBjYWxsZWQsIHRoZW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIGFuZCBmaW5hbGx5LCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBUaGlzIGxvb2tzIGxpa2UgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGEgYnVnLlxuXG5UaGVyZSdzIGFub3RoZXIgY2FzZSBJIGhhdmVuJ3QgY29uc2lkZXJlZC4gV2hvIGVsc2UgY2FuIHNldCBgVk1fSFVHRVBBR0VgPyBJdCBzZWVtcyBsaWtlIGl0IGlzIG9ubHkgc2V0IGJ5IGBodWdlcGFnZV9tYWR2aXNlYC4gQnV0IHdhaXQsIHdoYXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgaXMgY2FsbGVkIGZvciBgTUFEVl9OT1JNQUxgIG9uIGEgVk1BIHRoYXQgKmFscmVhZHkqIGhhcyBgVk1fSFVHRVBBR0VgPyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGlzIGNhbGxlZCBhZ2FpbiwgYnV0IHRoYXQncyBmaW5lLCBiZWNhdXNlIGl0IGNoZWNrcyBpZiBgTU1GX1ZNX0hVR0VQQUdFYCBpcyBhbHJlYWR5IHNldCwgYW5kIGRvZXMgbm90aGluZyBpZiBpdCBpcy4gSXQncyBvbmx5IGNsZWFyZWQgZHVyaW5nIGBfX2todWdlcGFnZWRfZXhpdGAgd2hlbiB0aGUgbW0gaXMgZGVzdHJveWVkLlxuXG5UaGUgY3JpdGljYWwgY2FzZSBhcHBlYXJzIHRvIGJlIHdoZW4gYHZtYV9tb2RpZnlfZmxhZ3NgIG1lcmdlcyBhIFZNQSB3aXRoIGFuIGFkamFjZW50IFZNQS4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyB0aGVuIGNhbGxlZCB3aXRoIHRoZSBtZXJnZWQgVk1BLiBUaGUgbWVyZ2VkIFZNQSBtaWdodCBiZSBsYXJnZSBlbm91Z2gsIHdoaWxlIHRoZSBvcmlnaW5hbCB3YXMgbm90ISBTcGVjaWZpY2FsbHksIGlmIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBpcyBjYWxsZWQgb24gYSBzbWFsbCByYW5nZSwgYGh1Z2VwYWdlX21hZHZpc2VgIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb24gdGhhdCBvcmlnaW5hbCBzbWFsbCBWTUEuIElmIHRoYXQgVk1BIGlzIHRvbyBzbWFsbCwgYGNvbGxhcHNlX3Bvc3NpYmxlYCByZXR1cm5zIGZhbHNlLiBOb3csIGBtYWR2aXNlX3VwZGF0ZV92bWFgIG1lcmdlcyB0aGF0IHNtYWxsIFZNQSB3aXRoIGFub3RoZXIgVk1BLiBUaGUgbWVyZ2VkIFZNQSBpcyBub3cgbGFyZ2UgZW5vdWdoIHRvIGJlIGEgaHVnZXBhZ2UsIGJ1dCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdhcyAqYWxyZWFkeSogY2FsbGVkIChhbmQsIGltcG9ydGFudGx5LCAqZGlkbid0KiBjYWxsIGBfX2todWdlcGFnZWRfZW50ZXJgKS4gRnVydGhlcm1vcmUsIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGRvZXMgKm5vdCogY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBTbywgdGhlIGBtbWAgaXMgKm5ldmVyKiByZWdpc3RlcmVkIHdpdGggYGtodWdlcGFnZWRgIVxuVGhpcyBuZWVkcyB2ZXJpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjE4Ljc4NjM3MjIzMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzMjpcXHR2b2lkIF9fa2h1Z2VwYWdlZF9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gNTMzOlxcdHtcXG4gNTM0OlxcdFxcdHN0cnVjdCBtbV9zbG90ICpzbG90O1xcbiA1MzU6XFx0XFx0aW50IHdha2V1cDtcXG4gNTM2OlxcdFxcbiA1Mzc6XFx0XFx0LyogX19raHVnZXBhZ2VkX2V4aXQoKSBtdXN0IG5vdCBydW4gZnJvbSB1bmRlciB1cyAqL1xcbiA1Mzg6XFx0XFx0Vk1fQlVHX09OX01NKGNvbGxhcHNlX3Rlc3RfZXhpdChtbSksIG1tKTtcXG4gNTM5OlxcdFxcbiA1NDA6XFx0XFx0c2xvdCA9IG1tX3Nsb3RfYWxsb2MobW1fc2xvdF9jYWNoZSk7XFxuIDU0MTpcXHRcXHRpZiAoIXNsb3QpXFxuIDU0MjpcXHRcXHRcXHRyZXR1cm47XFxuIDU0MzpcXHRcXG4gNTQ0OlxcdFxcdGlmICh1bmxpa2VseShtbV9mbGFnc190ZXN0X2FuZF9zZXQoTU1GX1ZNX0hVR0VQQUdFLCBtbSkpKSB7XFxuIDU0NTpcXHRcXHRcXHRtbV9zbG90X2ZyZWUobW1fc2xvdF9jYWNoZSwgc2xvdCk7XFxuIDU0NjpcXHRcXHRcXHRyZXR1cm47XFxuIDU0NzpcXHRcXHR9XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG4gNTUwOlxcdFxcdG1tX3Nsb3RfaW5zZXJ0KG1tX3Nsb3RzX2hhc2gsIG1tLCBzbG90KTtcXG4gNTUxOlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjE4Ljc4NjUwNzI4M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODIwMTc0NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyB0aGUgTUFEVl9IVUdFUEFHRSBCdWc6IEEgRGVlcCBEaXZlKipcblxuT2theSwgdGhpcyBpcyBnb29kLiBJIHRoaW5rIEkndmUgZ290IGl0LiBUaGUgY29yZSBpc3N1ZSBpcyB0aGlzOiBXaGVuIGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBpcyB1c2VkIG9uIGEgc21hbGwgbWVtb3J5IHJlZ2lvbiwgdGhlIGBodWdlcGFnZV9tYWR2aXNlYCBmdW5jdGlvbiBjYWxscyBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG9uIHRoZSAqb3JpZ2luYWwqIFZNQS4gVGhhdCBWTUEgbWlnaHQgYmUgdG9vIHNtYWxsLCBzbyBgY29sbGFwc2VfcG9zc2libGVgIHJldHVybnMgZmFsc2UgYW5kIHdlIGRvbid0IHByb2NlZWQuIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIG1lcmdlcyB0aGF0IHNtYWxsIFZNQSB3aXRoIGEgbmVpZ2hib3IuIFRoZSAqbWVyZ2VkKiBWTUEgY291bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGJlbmVmaXQgZnJvbSBodWdlcGFnZXMsIGJ1dCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgICppc24ndCogY2FsbGVkIG9uIHRoZSBtZXJnZWQgVk1BLiBTbywgdGhlIGtlcm5lbCBkb2Vzbid0IHJlZ2lzdGVyIHRoZSBtZW1vcnkgbWFwIChgbW1gKSB3aXRoIHRoZSBraHVnZXBhZ2VkIGRhZW1vbi4gVGhhdCdzIGEgY2xlYXIgZmFpbHVyZS5cblxuVGhlIHBhdGNoIHByb3ZpZGVzIGEgY2xlYXIgc29sdXRpb24uIEl0J3MgY2xldmVybHkgZG9uZTsgd2UgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGluIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCAqYWZ0ZXIqIHRoZSBgdm1hX21vZGlmeV9mbGFnc2AgZnVuY3Rpb24gZG9lcyB0aGUgbWVyZ2luZy4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIG9uIHRoZSAqbWVyZ2VkKiBWTUEsIHdoaWNoIGlzIG5vdyBsYXJnZSBlbm91Z2ggdG8gcGFzcyB0aGUgYGNvbGxhcHNlX3Bvc3NpYmxlYCBjaGVjaywgYW5kIGZpbmFsbHkgZXhlY3V0ZXMgYF9fa2h1Z2VwYWdlZF9lbnRlcmAhIFRoYXQncyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgYnVnIHdoZXJlIGFkamFjZW50IHNtYWxsIHJhbmdlcyB1c2luZyBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgZmFpbGVkIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcGF0aHMgdGhhdCBtaWdodCBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb24gdGhlIG1lcmdlZCBWTUEuIExldCdzIG1ha2Ugc3VyZS4gVGhlIGNyaXRpY2FsIHN0ZXAgaXMgYHZtYV9tb2RpZnlfZmxhZ3NgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lc24ndCAqaXRzZWxmKiBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYXQgYW55IHBvaW50LiBKdXN0IHRvIGJlIHN1cmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLiBCdXQgb3ZlcmFsbCwgdGhpcyBpcyBhIGNsZWFuIGFuZCBlZmZlY3RpdmUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQzNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjI0LjYwNjY4NTIyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2OTYwNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX21vZGlmeV9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE1MT1zdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcXG4tLVxcbm1tL21hZHZpc2UuYy0xNjktXFx0ZWxzZVxcbm1tL21hZHZpc2UuYzoxNzA6XFx0XFx0dm1hID0gdm1hX21vZGlmeV9mbGFncyhcXHUwMDI2dm1pLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VwcmV2LCB2bWEsXFxubW0vbWFkdmlzZS5jLTE3MS1cXHRcXHRcXHRyYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsIFxcdTAwMjZuZXdfdm1hX2ZsYWdzKTtcXG4tLVxcbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21sb2NrLmMtNDg0LVxcbm1tL21sb2NrLmM6NDg1OlxcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHJldiwgdm1hLCBzdGFydCwgZW5kLCBuZXdfdm1hX2ZsYWdzKTtcXG5tbS9tbG9jay5jLTQ4Ni1cXHRpZiAoSVNfRVJSKHZtYSkpIHtcXG4tLVxcbm1tL21wcm90ZWN0LmM9NzYwPW1wcm90ZWN0X2ZpeHVwKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21wcm90ZWN0LmMtODIzLVxcbm1tL21wcm90ZWN0LmM6ODI0OlxcdHZtYSA9IHZtYV9tb2RpZnlfZmxhZ3Modm1pLCAqcHByZXYsIHZtYSwgc3RhcnQsIGVuZCwgXFx1MDAyNm5ld192bWFfZmxhZ3MpO1xcbm1tL21wcm90ZWN0LmMtODI1LVxcdGlmIChJU19FUlIodm1hKSkge1xcbi0tXFxubW0vbXNlYWwuYz0zNT1zdGF0aWMgaW50IF9fbXNlYWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS9tc2VhbC5jLTU0LVxcbm1tL21zZWFsLmM6NTU6XFx0XFx0XFx0dm1hID0gdm1hX21vZGlmeV9mbGFncyhcXHUwMDI2dm1pLCBwcmV2LCB2bWEsIGN1cnJfc3RhcnQsXFxubW0vbXNlYWwuYy01Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgY3Vycl9lbmQsIFxcdTAwMjZ2bWFfZmxhZ3MpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0yMjYwPXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVzZXJmYXVsdGZkX2NsZWFyX3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIyOTUtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMjk2OlxcdHJldCA9IHZtYV9tb2RpZnlfZmxhZ3NfdWZmZCh2bWksIHByZXYsIHZtYSwgc3RhcnQsIGVuZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIyOTctXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuZXdfdm1hX2ZsYWdzLCBOVUxMX1ZNX1VGRkRfQ1RYLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0yMzEyPXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfcmVnaXN0ZXJfcmFuZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMzU4LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjM1OTpcXHRcXHR2bWEgPSB2bWFfbW9kaWZ5X2ZsYWdzX3VmZmQoXFx1MDAyNnZtaSwgcHJldiwgdm1hLCBzdGFydCwgdm1hX2VuZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIzNjAtXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuZXdfdm1hX2ZsYWdzLFxcbi0tXFxubW0vdm1hLmM9MTc0OD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuLS1cXG5tbS92bWEuYy0xNzg3LVxcbm1tL3ZtYS5jOjE3ODg6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG5tbS92bWEuYy0xNzg5LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bWEuYz0xODI1PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9wb2xpY3koc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbi0tXFxubW0vdm1hLmMtMTgzNi1cXG5tbS92bWEuYzoxODM3OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX21vZGlmeV9mbGFnc191ZmZkKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG5tbS92bWEuYy0xODM4LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bWEuaD00MjA9dm9pZCB1bm1hcF9yZWdpb24oc3RydWN0IHVubWFwX2Rlc2MgKnVubWFwKTtcXG4tLVxcbm1tL3ZtYS5oLTQyMi0vKipcXG5tbS92bWEuaDo0MjM6ICogdm1hX21vZGlmeV9mbGFncygpIC0gUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IHNwbGl0L21lcmdlIGluIHByZXBhcmF0aW9uIGZvclxcbm1tL3ZtYS5oLTQyNC0gKiBzZXR0aW5nIFZNQSBmbGFncyB0byAqQHZtX2ZsYWdzIGluIHRoZSByYW5nZSBAc3RhcnQgdG8gQGVuZCBjb250YWluZWQgd2l0aGluXFxuLS1cXG5tbS92bWEuaC00NDQtICovXFxubW0vdm1hLmg6NDQ1Ol9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfZmxhZ3Moc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbm1tL3ZtYS5oLTQ0Ni1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1hLmg9NDkyPV9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfcG9saWN5KHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4tLVxcbm1tL3ZtYS5oLTQ5Ny0vKipcXG5tbS92bWEuaDo0OTg6ICogdm1hX21vZGlmeV9mbGFnc191ZmZkKCkgLSBQZXJmb3JtIGFueSBuZWNlc3Nhcnkgc3BsaXQvbWVyZ2UgaW4gcHJlcGFyYXRpb24gZm9yXFxubW0vdm1hLmgtNDk5LSAqIHNldHRpbmcgVk1BIGZsYWdzIHRvIEB2bV9mbGFncyBhbmQgVUZGRCBjb250ZXh0IHRvIEBuZXdfY3R4IGluIHRoZSByYW5nZVxcbi0tXFxubW0vdm1hLmgtNTE4LSAqL1xcbm1tL3ZtYS5oOjUxOTpfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzX3VmZmQoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbm1tL3ZtYS5oLTUyMC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOToyNC42NTQzODU3OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU2NDE3OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdm1hX21vZGlmeV9mbGFnc2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgdm1hX21vZGlmeV9mbGFnc2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3ZtYS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIG9wZXJhdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgZmxhZyBtYW5pcHVsYXRpb24gaXRzZWxmIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIGFyb3VuZCB0aGUgVk1BLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2tpbmcgYW5kIGF0b21pY2l0eSB1c2VkLCBhcyBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgaW5jb25zaXN0ZW5jaWVzIHdpdGhpbiB0aGUgVk0gc3Vic3lzdGVtIGFyZSBzb21lIG9mIHRoZSB0b3VnaGVzdCBidWdzIHRvIGRlYnVnLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBtaWdodCBtb2RpZnkgdGhlIFZNQSBvciBhY2Nlc3MgaXQgd2hpbGUgYHZtYV9tb2RpZnlfZmxhZ3NgIGlzIGluIGZsaWdodC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBhdCBwbGF5LiBQZXJoYXBzIHRoaXMgd2lsbCB1bnZlaWwgc29tZSBzdWJ0bGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGF0IG5lZWQgZnVydGhlciBzY3J1dGlueS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOToyOC45MTA4MDY3MjVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3ODgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3ODg6XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4xNzg5OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMTc5MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4xNzkxOlxcdFxcdFxcdHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxcbjE3OTI6XFx0e1xcbjE3OTM6XFx0XFx0Vk1HX1ZNQV9TVEFURSh2bWcsIHZtaSwgcHJldiwgdm1hLCBzdGFydCwgZW5kKTtcXG4xNzk0OlxcdFxcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9ICp2bWFfZmxhZ3NfcHRyO1xcbjE3OTU6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpyZXQ7XFxuMTc5NjpcXHRcXG4xNzk3OlxcdFxcdHZtZy52bWFfZmxhZ3MgPSB2bWFfZmxhZ3M7XFxuMTc5ODpcXHRcXG4xNzk5OlxcdFxcdHJldCA9IHZtYV9tb2RpZnkoXFx1MDAyNnZtZyk7XFxuMTgwMDpcXHRcXHRpZiAoSVNfRVJSKHJldCkpXFxuMTgwMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MDI6XFx0XFxuMTgwMzpcXHRcXHQvKlxcbjE4MDQ6XFx0XFx0ICogRm9yIGEgbWVyZ2UgdG8gc3VjY2VlZCwgdGhlIGZsYWdzIG11c3QgbWF0Y2ggdGhvc2VcXG4xODA1OlxcdFxcdCAqIHJlcXVlc3RlZC4gSG93ZXZlciwgc3RpY2t5IGZsYWdzIG1heSBoYXZlIGJlZW4gcmV0YWluZWQsIHNvIHByb3BhZ2F0ZVxcbjE4MDY6XFx0XFx0ICogdGhlbSB0byB0aGUgY2FsbGVyLlxcbjE4MDc6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjI4LjkxMDk5NzY1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzQwNjYyMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgdm1hX21vZGlmeWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgdm1hX21vZGlmeWAsIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBtbS92bWEuY2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBkb2luZy4uLiB3aGF0IGFyZ3VtZW50cyBpdCB0YWtlcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTSBhcmVhIGl0c2VsZiwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGl0IGNhbGxzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHBlcm1pc3Npb25zIGNoYW5nZXMsIHBlcmhhcHMgYWRqdXN0aW5nIHRoZSBwYWdlIHRhYmxlcyBhbmQgVExCIGVudHJpZXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBvdmVyYWxsIGVmZmVjdCBvbiB0aGUgaW50ZWdyaXR5IG9mIHRoZSBtZW1vcnkgbWFwcGluZy4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBhbmQgYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgZnVuY3Rpb24ncyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjM3LjY1MTY2MzM3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc0OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc0ODpcXHRzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5KHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuMTc0OTpcXHR7XFxuMTc1MDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZy1cXHUwMDNlbWlkZGxlO1xcbjE3NTE6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IHZtZy1cXHUwMDNlc3RhcnQ7XFxuMTc1MjpcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IHZtZy1cXHUwMDNlZW5kO1xcbjE3NTM6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICptZXJnZWQ7XFxuMTc1NDpcXHRcXG4xNzU1OlxcdFxcdC8qIEZpcnN0LCB0cnkgdG8gbWVyZ2UuICovXFxuMTc1NjpcXHRcXHRtZXJnZWQgPSB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2Uodm1nKTtcXG4xNzU3OlxcdFxcdGlmIChtZXJnZWQpXFxuMTc1ODpcXHRcXHRcXHRyZXR1cm4gbWVyZ2VkO1xcbjE3NTk6XFx0XFx0aWYgKHZtZ19ub21lbSh2bWcpKVxcbjE3NjA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTc2MTpcXHRcXG4xNzYyOlxcdFxcdC8qXFxuMTc2MzpcXHRcXHQgKiBTcGxpdCBjYW4gZmFpbCBmb3IgcmVhc29ucyBvdGhlciB0aGFuIE9PTSwgc28gaWYgdGhlIHVzZXIgcmVxdWVzdHNcXG4xNzY0OlxcdFxcdCAqIHRoaXMgaXQncyBwcm9iYWJseSBhIG1pc3Rha2UuXFxuMTc2NTpcXHRcXHQgKi9cXG4xNzY2OlxcdFxcdFZNX1dBUk5fT04odm1nLVxcdTAwM2VnaXZlX3VwX29uX29vbSBcXHUwMDI2XFx1MDAyNlxcbjE3Njc6XFx0XFx0XFx0ICAgKHZtYS1cXHUwMDNldm1fc3RhcnQgIT0gc3RhcnQgfHwgdm1hLVxcdTAwM2V2bV9lbmQgIT0gZW5kKSk7XFxuMTc2ODpcXHRcXG4xNzY5OlxcdFxcdC8qIFNwbGl0IGFueSBwcmVjZWRpbmcgcG9ydGlvbiBvZiB0aGUgVk1BLiAqL1xcbjE3NzA6XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fc3RhcnQgXFx1MDAzYyBzdGFydCkge1xcbjE3NzE6XFx0XFx0XFx0aW50IGVyciA9IHNwbGl0X3ZtYSh2bWctXFx1MDAzZXZtaSwgdm1hLCBzdGFydCwgMSk7XFxuMTc3MjpcXHRcXG4xNzczOlxcdFxcdFxcdGlmIChlcnIpXFxuMTc3NDpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjE3NzU6XFx0XFx0fVxcbjE3NzY6XFx0XFxuMTc3NzpcXHRcXHQvKiBTcGxpdCBhbnkgdHJhaWxpbmcgcG9ydGlvbiBvZiB0aGUgVk1BLiAqL1xcbjE3Nzg6XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZW5kIFxcdTAwM2UgZW5kKSB7XFxuMTc3OTpcXHRcXHRcXHRpbnQgZXJyID0gc3BsaXRfdm1hKHZtZy1cXHUwMDNldm1pLCB2bWEsIGVuZCwgMCk7XFxuMTc4MDpcXHRcXG4xNzgxOlxcdFxcdFxcdGlmIChlcnIpXFxuMTc4MjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjE3ODM6XFx0XFx0fVxcbjE3ODQ6XFx0XFxuMTc4NTpcXHRcXHRyZXR1cm4gdm1hO1xcbjE3ODY6XFx0fVxcbjE3ODc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjM3LjY1MTg2MDg0OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTgwNDQ3NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1lcmdlIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAgaXMgYmVpbmcgY2FsbGVkLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgcmFuZ2UgbWVyZ2luZywgd2hpY2ggaXMgYSBrZXkgcHJvY2VzcyBpbiB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGVyZSB0byBzZWUgaWYgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY2FsbHMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gVGhlIGludGVncmF0aW9uIChvciBsYWNrIHRoZXJlb2YpIG9mIG1lcmdpbmcgd2l0aCBodWdlIHBhZ2UgbWFuYWdlbWVudCBpcyB2aXRhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIG92ZXJhbGwgbWVtb3J5IHV0aWxpemF0aW9uLiBNeSBuZXh0IHN0ZXAgaXMgYSBkZWVwIGRpdmUgaW50byB0aGUgYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOTo0Mi42MzIzMTE1NDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0XFx0XFx0XFx0dm1nLVxcdTAwM2VfX2FkanVzdF9uZXh0X3N0YXJ0ID0gdHJ1ZTtcXG4xMDYxOlxcdFxcdFxcdFxcdHZtZy1cXHUwMDNlc3RhcnQgPSBtaWRkbGUtXFx1MDAzZXZtX3N0YXJ0O1xcbjEwNjI6XFx0XFx0XFx0XFx0dm1nLVxcdTAwM2VlbmQgPSBzdGFydDtcXG4xMDYzOlxcdFxcdFxcdFxcdHZtZy1cXHUwMDNlcGdvZmYgPSB2bWFfc3RhcnRfcGdvZmYobWlkZGxlKTtcXG4xMDY0OlxcdFxcdFxcdFxcdHZtZy1cXHUwMDNlYW5vbl9wZ29mZiA9IHZtYV9zdGFydF9hbm9uX3Bnb2ZmKG1pZGRsZSk7XFxuMTA2NTpcXHRcXHRcXHR9XFxuMTA2NjpcXHRcXG4xMDY3OlxcdFxcdFxcdGVyciA9IGR1cF9hbm9uX3ZtYShuZXh0LCBtaWRkbGUsIFxcdTAwMjZhbm9uX2R1cCk7XFxuMTA2ODpcXHRcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdGlmIChlcnIgfHwgY29tbWl0X21lcmdlKHZtZykpXFxuMTA3MTpcXHRcXHRcXHRnb3RvIGFib3J0O1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHR2bWFfc2V0X2ZsYWdzX21hc2sodm1nLVxcdTAwM2V0YXJnZXQsIHN0aWNreV9mbGFncyk7XFxuMTA3NDpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXFx1MDAzZXRhcmdldCwgdm1nLVxcdTAwM2V2bV9mbGFncyk7XFxuMTA3NTpcXHRcXHR2bWctXFx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XFxuMTA3NjpcXHRcXHRyZXR1cm4gdm1nLVxcdTAwM2V0YXJnZXQ7XFxuMTA3NzpcXHRcXG4xMDc4OlxcdGFib3J0OlxcbjEwNzk6XFx0XFx0dm1hX2l0ZXJfc2V0KHZtZy1cXHUwMDNldm1pLCBzdGFydCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjQyLjYzMjQ1ODg5MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgzMTk1MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFdXJla2EhIEEgS2h1Z2VwYWdlZCBDb25uZWN0aW9uISoqXG5cbkFscmlnaHQsIHRoYXQncyBpdCEgSSd2ZSBiZWVuIGRpZ2dpbmcgdGhyb3VnaCB0aGlzIGNvZGUsIGFuZCBpdCBmaW5hbGx5IGNsaWNrcy4gYHZtYV9tZXJnZV9leGlzdGluZ19yYW5nZWAgKmRlZmluaXRlbHkqIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoYXQncyB0aGUga2V5LlxuXG5Ib2xkIG9uLi4uIGlmIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgIGlzIGNhbGxpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCwgdGhlbiBieSBkZWZpbml0aW9uLCBhIFZNQSBtZXJnZWQgaW4gdGhhdCBwcm9jZXNzICppcyogZ29pbmcgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGtodWdlcGFnZWQuIFRoaXMgaXMgZ29vZCBwcm9ncmVzcyEgXG5cbkxldCBtZSBqdXN0IG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoaXMgdHJhaW4gb2YgdGhvdWdodCBsb2dpY2FsbHkuIFNpbmNlIHRoYXQgb25lIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgSSdsbCBnbyBhaGVhZCBhbmQgY2hlY2sgb3V0IGhvdyBgdm1hX21lcmdlX25ld19yYW5nZWAgb3BlcmF0ZXMgbm93LiBJJ3ZlIGdvdCBhIGdvb2QgZmVlbGluZyBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzk6NDYuMTE1NjU2OTUzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTg1OlxcdFxcdFxcdGlmICghdm1nLVxcdTAwM2VqdXN0X2V4cGFuZCkge1xcbjExODY6XFx0XFx0XFx0XFx0LyogRXF1aXZhbGVudCB0byBnb2luZyB0byB0aGUgcHJldmlvdXMgcmFuZ2UuICovXFxuMTE4NzpcXHRcXHRcXHRcXHR2bWFfcHJldih2bWctXFx1MDAzZXZtaSk7XFxuMTE4ODpcXHRcXHRcXHR9XFxuMTE4OTpcXHRcXHR9XFxuMTE5MDpcXHRcXG4xMTkxOlxcdFxcdC8qXFxuMTE5MjpcXHRcXHQgKiBOb3cgdHJ5IHRvIGV4cGFuZCBhZGphY2VudCBWTUEocykuIFRoaXMgdGFrZXMgY2FyZSBvZiByZW1vdmluZyB0aGVcXG4xMTkzOlxcdFxcdCAqIGZvbGxvd2luZyBWTUEgaWYgd2UgaGF2ZSBWTUFzIG9uIGJvdGggc2lkZXMuXFxuMTE5NDpcXHRcXHQgKi9cXG4xMTk1OlxcdFxcdGlmICh2bWctXFx1MDAzZXRhcmdldCBcXHUwMDI2XFx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XFxuMTE5NjpcXHRcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXFx1MDAzZXRhcmdldCwgdm1nLVxcdTAwM2V2bV9mbGFncyk7XFxuMTE5NzpcXHRcXHRcXHR2bWctXFx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XFxuMTE5ODpcXHRcXHRcXHRyZXR1cm4gdm1nLVxcdTAwM2V0YXJnZXQ7XFxuMTE5OTpcXHRcXHR9XFxuMTIwMDpcXHRcXG4xMjAxOlxcdFxcdHJldHVybiBOVUxMO1xcbjEyMDI6XFx0fVxcbjEyMDM6XFx0XFxuMTIwNDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzozOTo0Ni4xMTU4MDQ3MzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MjY0MDQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVk1BIE1lcmdpbmcgYW5kIFNwbGl0dGluZyB3aXRoIGtodWdlcGFnZWQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cyB3aXRoIFZNQSBtb2RpZmljYXRpb25zLiBJIHNlZSB0aGF0IHdoZW4gYHZtYV9tZXJnZV9uZXdfcmFuZ2VgIGlzIGNhbGxlZCwgaXQgKmFsc28qIGNhbGxzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGlmIFZNQXMgYXJlIG1lcmdlZCBieSBgdm1hX21vZGlmeV9mbGFnc2AsIHRoZW4gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCAqc2hvdWxkKiBiZSBjYWxsZWQgb24gdGhlIHJlc3VsdGluZywgdW5pZmllZCBWTUEgdG8gaGFuZGxlIHBvdGVudGlhbCBodWdlcGFnZSBjb25zaWRlcmF0aW9ucy5cblxuTm93LCBhIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gY29tZXMgdG8gbWluZDogd2hhdCBoYXBwZW5zIHdoZW4gYHZtYV9tb2RpZnlfZmxhZ3NgICpzcGxpdHMqIGEgVk1BPyBEb2VzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZ2V0IGNhbGxlZCBpbiB0aGF0IHNjZW5hcmlvPyBJIG5lZWQgdG8ga25vdy4gVGhlIHNwbGl0IFZNQSBjYXNlIGlzIGNyaXRpY2FsLiBMZXQncyBkaWcgaW50byB0aGUgYHNwbGl0X3ZtYWAgZnVuY3Rpb247IHRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGFuc3dlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0aG9yb3VnaGx5IHRvIGVuc3VyZSBubyBodWdlcGFnZS1yZWxhdGVkIGlzc3VlcyBhcmlzZSBkdXJpbmcgVk1BIG1vZGlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6Mzk6NTEuMTU4NDQ4MDkyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyNDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraHVnZXBhZ2VkX2VudGVyX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWEuYz04ODk9c3RhdGljIF9fbXVzdF9jaGVjayBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9leGlzdGluZ19yYW5nZShcXG4tLVxcbm1tL3ZtYS5jLTEwNzMtXFx0dm1hX3NldF9mbGFnc19tYXNrKHZtZy1cXHUwMDNldGFyZ2V0LCBzdGlja3lfZmxhZ3MpO1xcbm1tL3ZtYS5jOjEwNzQ6XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1nLVxcdTAwM2V0YXJnZXQsIHZtZy1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL3ZtYS5jLTEwNzUtXFx0dm1nLVxcdTAwM2VzdGF0ZSA9IFZNQV9NRVJHRV9TVUNDRVNTO1xcbi0tXFxubW0vdm1hLmM9MTE0MD1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZV9uZXdfcmFuZ2Uoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4tLVxcbm1tL3ZtYS5jLTExOTUtXFx0aWYgKHZtZy1cXHUwMDNldGFyZ2V0IFxcdTAwMjZcXHUwMDI2ICF2bWFfZXhwYW5kKHZtZykpIHtcXG5tbS92bWEuYzoxMTk2OlxcdFxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtZy1cXHUwMDNldGFyZ2V0LCB2bWctXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0xMTk3LVxcdFxcdHZtZy1cXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcXG4tLVxcbm1tL3ZtYS5jPTI2MzQ9c3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxcbi0tXFxubW0vdm1hLmMtMjY5MS1cXHQvKlxcbm1tL3ZtYS5jOjI2OTI6XFx0ICogdm1hX21lcmdlX25ld19yYW5nZSgpIGNhbGxzIGtodWdlcGFnZWRfZW50ZXJfdm1hKCkgdG9vLCB0aGUgYmVsb3dcXG5tbS92bWEuYy0yNjkzLVxcdCAqIGNhbGwgY292ZXJzIHRoZSBub24tbWVyZ2UgY2FzZS5cXG4tLVxcbm1tL3ZtYS5jLTI2OTUtXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxubW0vdm1hLmM6MjY5NjpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIG1hcC1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL3ZtYS5jLTI2OTctXFx0KnZtYXAgPSB2bWE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjM5OjUxLjIwMzE3ODg5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAyMjcwNDE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbmQgVk1BIFNwbGl0dGluZy9NZXJnaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBwYXRoIGludm9sdmluZyBgc3BsaXRfdm1hYCBhbmQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYC4gSXQgaW5pdGlhbGx5IHNlZW1zIGxpa2UgYHNwbGl0X3ZtYWAgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEJ1dCwgaG9sZCBvbiwgaWYgYHZtYV9tb2RpZnlfZmxhZ3NgIHNwbGl0cyB0aGUgVk1BLCB0aGUgKm5ldyogVk1BIHNob3VsZCBpbmhlcml0IHRoZSBzYW1lIGZsYWdzIGFzIHRoZSBvcmlnaW5hbCBvbmUuIGB2bWFfbW9kaWZ5X2ZsYWdzYCBzcGxpdHMgYW5kIHJldHVybnMgdGhlIG1pZGRsZSBWTUEuIFRoZW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdXBkYXRlcyB0aGF0IG1pZGRsZSBWTUEncyBmbGFncy5cblxuTm93LCBpZiBgbWFkdmlzZV91cGRhdGVfdm1hYCAqZGlkbid0KiBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgYWZ0ZXIgdGhlIHNwbGl0LCB3ZSdkIGhhdmUgYSBwcm9ibGVtLiBUaGUgbWlkZGxlIFZNQSBjb3VsZCBoYXZlIGBWTV9IVUdFUEFHRWAgc2V0LCBidXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3b3VsZG4ndCBoYXZlIGJlZW4gaW52b2tlZCBvbiBpdCEgSG93ZXZlciwgaWYgYGh1Z2VwYWdlX21hZHZpc2VgICpkaWQqIGNhbGwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBCRUZPUkUgYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIGl0IHdvdWxkIGJlIGNhbGxlZCBvbiB0aGUgb3JpZ2luYWwgVk1BLiBBbmQgdGhlIG9yaWdpbmFsIG1pZ2h0IGhhdmUgYmVlbiBsYXJnZSBlbm91Z2ggdG8gdHJpZ2dlciBgX19raHVnZXBhZ2VkX2VudGVyYCBhbmQgcmVnaXN0ZXIgdGhlIGBtbWAuIEFmdGVyIHRoZSBzcGxpdCwgdGhlIG1pZGRsZSBWTUEgZ2V0cyBgVk1fSFVHRVBBR0VgLCBidXQgc2luY2UgYF9fa2h1Z2VwYWdlZF9lbnRlcmAgd2FzIGFscmVhZHkgY2FsbGVkLCB0aGUgYG1tYCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoYXQgc2VlbXMgZmluZS5cblxuQnV0IHdoYXQgYWJvdXQgd2hlbiBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQgd2l0aCBgTUFEVl9OT1JNQUxgIG9uIGEgVk1BIHRoYXQgKmRvZXNuJ3QqIGhhdmUgYFZNX0hVR0VQQUdFYD8gVGhlbiwgYG5ld192bWFfZmxhZ3NgIHdvbid0IGluY2x1ZGUgYFZNX0hVR0VQQUdFYCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgKm5vdCogY2FsbGVkLiBObyBpc3N1ZXMgdGhlcmUuXG5cbk5vdywgd2hhdCBhYm91dCB3aGVuIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGlzIGNhbGxlZCB3aXRoIGBNQURWX05PUk1BTGAgb24gYSBWTUEgdGhhdCAqYWxyZWFkeSogaGFzIGBWTV9IVUdFUEFHRWA/ICBgbmV3X3ZtYV9mbGFnc2Agc3RpbGwgaGFzIGl0IHNldC4gYHZtYV9tb2RpZnlfZmxhZ3NgIG1pZ2h0IHNwbGl0IGl0LCBhbmQgdGhlbiBgbWFkdmlzZV91cGRhdGVfdm1hYCBzZXRzIHRoZSBuZXcgVk1BJ3MgZmxhZ3MuIFRoZW4sIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgY2FsbGVkIHdpdGggdGhlIHVwZGF0ZWQgZmxhZ3MuIFNpbmNlIHRoZSBWTUEgKmFscmVhZHkqIGhhZCBgVk1fSFVHRVBBR0VgLCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHdhcyBhbHJlYWR5IGNhbGxlZCBhdCB0aGUgdGltZSBpdCB3YXMgc2V0LiAgU28gY2FsbGluZyBpdCBhZ2FpbiBpcyBoYXJtbGVzcyBzaW5jZSB0aGUgYG1tYCBoYXMgdGhlIGBNTUZfVk1fSFVHRVBBR0VgIGZsYWcgYWxyZWFkeSBzZXQuIFVubGVzcyB0aGUgb3JpZ2luYWwgVk1BIHdhcyAqdG9vIHNtYWxsKiwgaW4gd2hpY2ggY2FzZSwgZXZlbiBhZnRlciB0aGUgc3BsaXQsIGl0IGRvZXNuJ3QgcmVnaXN0ZXIuXG5cbldhaXQsIHdoYXQgaWYgYG1hZHZpc2VfdXBkYXRlX3ZtYWAgKm1lcmdlcyogdGhlIFZNQT8gSWYgc28sIGB2bWFfbW9kaWZ5X2ZsYWdzYCB3b3VsZCBjYWxsIGB2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2VgLCB3aGljaCAqZG9lcyogY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIG9uIHRoZSBtZXJnZWQgVk1BISBTbywgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBhbHJlYWR5IGNhbGxlZCBieSB0aGUgbWVyZ2UhIFRoZW4sIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGNhbGxzIGl0ICphZ2FpbiouIEJ1dCB0aGF0J3MgaGFybWxlc3MsIHJpZ2h0P1xuXG5Tbywgd2h5IHdhcyB0aGlzIHBhdGNoIGV2ZW4gbmVlZGVkPyBUaW1lIHRvIHJldmlzaXQgYGh1Z2VwYWdlX21hZHZpc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDowMy4yMjU4ODU1NTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2todWdlcGFnZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ0NjpcXHRcXHQvKiBmb3IgUE1EIGNvbGxhcHNlLCByZXNwZWN0IHRoZSB1c2VyIGRlZmluZWQgbWF4aW11bSAqL1xcbiA0NDc6XFx0XFx0cmV0dXJuIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcDtcXG4gNDQ4OlxcdH1cXG4gNDQ5OlxcdFxcbiA0NTA6XFx0aW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDQ1MTpcXHRcXHRcXHQgICAgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKVxcbiA0NTI6XFx0e1xcbiA0NTM6XFx0XFx0c3dpdGNoIChhZHZpY2UpIHtcXG4gNDU0OlxcdFxcdGNhc2UgTUFEVl9IVUdFUEFHRTpcXG4gNDU1OlxcdFxcdFxcdCp2bV9mbGFncyBcXHUwMDI2PSB+Vk1fTk9IVUdFUEFHRTtcXG4gNDU2OlxcdFxcdFxcdCp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTtcXG4gNDU3OlxcdFxcdFxcdGJyZWFrO1xcbiA0NTg6XFx0XFx0Y2FzZSBNQURWX05PSFVHRVBBR0U6XFxuIDQ1OTpcXHRcXHRcXHQqdm1fZmxhZ3MgXFx1MDAyNj0gflZNX0hVR0VQQUdFO1xcbiA0NjA6XFx0XFx0XFx0KnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7XFxuIDQ2MTpcXHRcXHRcXHQvKlxcbiA0NjI6XFx0XFx0XFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcXG4gNDYzOlxcdFxcdFxcdCAqIHRoaXMgdm1hIGV2ZW4gaWYgd2UgbGVhdmUgdGhlIG1tIHJlZ2lzdGVyZWQgaW4ga2h1Z2VwYWdlZCBpZlxcbiA0NjQ6XFx0XFx0XFx0ICogaXQgZ290IHJlZ2lzdGVyZWQgYmVmb3JlIFZNX05PSFVHRVBBR0Ugd2FzIHNldC5cXG4gNDY1OlxcdFxcdFxcdCAqL1xcbiA0NjY6XFx0XFx0XFx0YnJlYWs7XFxuIDQ2NzpcXHRcXHR9XFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdHJldHVybiAwO1xcbiA0NzA6XFx0fVxcbiA0NzE6XFx0XFxuIDQ3MjpcXHRpbnQgX19pbml0IGtodWdlcGFnZWRfaW5pdCh2b2lkKVxcbiA0NzM6XFx0e1xcbiA0NzQ6XFx0XFx0bW1fc2xvdF9jYWNoZSA9IEtNRU1fQ0FDSEUobW1fc2xvdCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjAzLjIyNjAzNDIyMloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQwODU4NTA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtodWdlcGFnZWQgSW50ZXJhY3Rpb24gd2l0aCBNQURWX0hVR0VQQUdFKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYGtodWdlcGFnZWRgIGludGVyYWN0cyB3aXRoIGBNQURWX0hVR0VQQUdFYCBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGF0IGRpZmYgd2hlcmUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCB3YXMgY2FsbGVkIHdpdGhpbiBgaHVnZXBhZ2VfbWFkdmlzZWAuICBUaGUgY29yZSB0aGluZyBpcywgYGh1Z2VwYWdlX21hZHZpc2VgIGdldHMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCB3aGVuIGBNQURWX0hVR0VQQUdFYCBvciBgTUFEVl9OT0hVR0VQQUdFYCBpcyB1c2VkLlxuXG5Jbml0aWFsbHksIEkgdGhvdWdodCwgXCJIbW0sIGBodWdlcGFnZV9tYWR2aXNlYCBpcyBjYWxsaW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2l0aCBgbmV3X2ZsYWdzYCwgd2hpY2ggKmRvZXMqIGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQsIGJ1dCBhdCB0aGF0IHBvaW50LCB0aGUgVk1BJ3MgYHZtX2ZsYWdzYCAqZG9lc24ndCogeWV0IGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQuXCIgIEhvd2V2ZXIsIEkgdGhlbiByZW1lbWJlcmVkIHRoYXQgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpdHNlbGYgY2hlY2tzIHRoZSBWTUEncyBzdWl0YWJpbGl0eSB1c2luZyBgY29sbGFwc2VfcG9zc2libGVgLCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBDcnVjaWFsbHksIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHVzZXMgYHZtX2ZsYWdzYCB3aGljaCBub3csIGluIHRoaXMgZXhlY3V0aW9uIHBhdGgsIGhhcyBgVk1fSFVHRVBBR0VgIHNldC4gU28sIHRoZSByaWdodCBmbGFncyAqYXJlKiBiZWluZyB1c2VkIGluIHRoZSBjcml0aWNhbCBjaGVja3MsIHNvIHRoYXQgc2VlbXMgZmluZS5cblxuVGhlbiBJIGNvbnNpZGVyZWQgZXJyb3IgY2FzZXMuICBXaGF0IGlmIGBtYWR2aXNlX3VwZGF0ZV92bWFgIGZhaWxzPyBJZiBpdCBmYWlscyAobWF5YmUgZHVlIHRvIGAtRU5PTUVNYCBmcm9tIGB2bWFfbW9kaWZ5X2ZsYWdzYCksIGBodWdlcGFnZV9tYWR2aXNlYCBoYXMgKmFscmVhZHkqIGNhbGxlZCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFuZCByZWdpc3RlcmVkIHRoZSBgbW1gLCBidXQgdGhlIFZNQSdzIGZsYWdzIGhhdmVuJ3QgYmVlbiB1cGRhdGVkLiAgV2lsbCB0aGlzIGNhdXNlIGlzc3Vlcz8gIE5vLCBiZWNhdXNlIGBraHVnZXBhZ2VkYCBqdXN0IHNjYW5zIHRoZSBtbSBhbmQgZmluZHMgbm8gc3VpdGFibGUgVk1BcywgYW5kIGRvZXMgbm90aGluZy4gSXQgc2VlbXMgc2FmZS5cblxuTm93LCB3aGF0IGFib3V0IGlmIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHNwbGl0cyB0aGUgVk1BPyBJZiB0aGUgVk1BIGdldHMgc3BsaXQsIGEgbmV3IG9uZSBpcyBjcmVhdGVkLiBEb2VzIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgbmVlZCB0byBiZSBjYWxsZWQgb24gdGhpcyBuZXcgVk1BPyBObywgYmVjYXVzZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIHNpbXBseSByZWdpc3RlcnMgdGhlIGBtbWAsIHNvIHRoYXQgaGFuZGxlcyB0aGF0IGNhc2UgdG9vLlxuXG5BbmQgd2hhdCBhYm91dCBgTUFEVl9DT0xMQVBTRWA/IERvZXMgdGhhdCBjYWxsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWA/IE5vLCBpdCBsb29rcyBsaWtlIGBtYWR2aXNlX2NvbGxhcHNlYCBkb2Vzbid0IGNhbGwgaXQgZGlyZWN0bHkuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgSSdkIG5vcm1hbGx5IGdvIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlLCBidXQgSSdtIGxpbWl0ZWQgdG8gc2VhcmNoaW5nIHRoZSBrZXJuZWwgdHJlZS4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbnRleHQuIEknbGwgY2hlY2sgYGdpdCBsb2dgIG9uIGBtbS9raHVnZXBhZ2VkLmNgIG9yIGBtbS9tYWR2aXNlLmNgIGZvciBzb21lIGNvbnRleHQuXG5XYWl0LCB0aGF0IGNoYW5nZSBpcyB0aGUgSEVBRCBjb21taXQsIHNvIEkgY2FuIGp1c3QgcnVuIGBnaXQgc2hvdyBIRUFEYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDoxMy42MzQ2MjE4NzVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDYyNDI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIuKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCIuZ2l0L0NPTU1JVF9FRElUTVNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDoxMy42NzkwOTExOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgxMTAzODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdmVyc2lvbiBjb250cm9sIGFuZCBzb2Z0d2FyZSBkZXZlbG9wbWVudDpcblxuKipRdWljayBQZWVrIGF0IHRoZSBMYXRlc3QgQ2hhbmdlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSB2ZXJ5IGxhc3QgY29tbWl0IGluIHRoaXMgcmVwb3NpdG9yeSB3YXMuIE5vIG5lZWQgZm9yIGEgZnVsbCBoaXN0b3J5IGRpdmUgcmlnaHQgbm93LCBqdXN0IHRoZSBtb3N0IHJlY2VudCBvbmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBtb3N0IHJlY2VudCBjb21taXQuIExldCdzIGZpcmUgb2ZmIGBnaXQgbG9nIC0xYC4gVGhpcyBpcyBhIGNsYXNzaWMgcXVpY2stY2hlY2sgY29tbWFuZCwgZ2V0cyBtZSBleGFjdGx5IHdoYXQgSSBuZWVkIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IG91dHB1dCBjbHV0dGVyaW5nIHRoaW5ncyB1cC4gU2F2ZXMgdGltZSBhbmQgZ2V0cyBtZSBkaXJlY3RseSB0byB0aGUgbW9zdCBwZXJ0aW5lbnQgZGF0YS4gRG9uZSBhbmQgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3MDMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDoxNy40NjAxOTc5MTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODIwMTI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIuKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCIuZ2l0L2xvZ3MvSEVBRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6MTcuNTA2MDI2Njc5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDY1NjM3Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEZ1enppbmcgU3VyZmFjZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXZlbnVlIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAuIEkgd2FzIHRoaW5raW5nIEkgY291bGQgdXNlIGBnaXQgc2hvdyBIRUFEYCB3aXRoIHNvbWV0aGluZyBsaWtlIGBncmVwcGVyYCBidXQgcmVhbGl6ZWQgdGhhdCBvbmx5IHNlYXJjaGVzIHRyYWNrZWQgZmlsZXMuIEkgZG9uJ3QgZXZlbiBuZWVkIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIG1hdHRlcnMgZm9yIGZ1enppbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgbW92ZXMgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIHdpdGhpbiBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBpcyBub3cgdHJpZ2dlcmVkIGJ5ICphbnkqIG1hZHZpc2Ugb3BlcmF0aW9uIHRoYXQgdXBkYXRlcyBWTUEgZmxhZ3MsIGFzIGxvbmcgYXMgYFZNQV9IVUdFUEFHRV9CSVRgIGlzIHNldCBmb3IgdGhlIFZNQS5cblxuTXkgbmV4dCBzdGVwIGlzIHVuZGVyc3RhbmRpbmcgd2hhdCB0eXBlcyBvZiBgbWFkdmlzZWAgY2FsbHMgdHJpZ2dlciBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhhdCBlbmNvbXBhc3NlcyBhIGxvdDogYE1BRFZfTk9STUFMYCwgYE1BRFZfU0VRVUVOVElBTGAsIGBNQURWX1JBTkRPTWAsIGFsbCB0aGUgZm9yayBmbGFncyAoYE1BRFZfRE9OVEZPUktgLCBldGMuKSwgbWVyZ2VhYmxlIGZsYWdzLCBhbmQgb2YgY291cnNlLCBgTUFEVl9IVUdFUEFHRWAgYW5kIGBNQURWX05PSFVHRVBBR0VgLiBBbHNvIGBfX01BRFZfU0VUX0FOT05fVk1BX05BTUVgLiBUaGF0J3MgYSBsb3Qgb2YgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuTm93LCBob3cgZG9lcyBgVk1BX0hVR0VQQUdFX0JJVGAgZ2V0IHNldD8gT2J2aW91c2x5LCBhIFZNQSBjcmVhdGVkIHdpdGggYE1BUF9IVUdFUEFHRWAgaXMgcmVsZXZhbnQsIGJ1dCB3YWl0LCB0aGF0J3MgYE1BUF9IVUdFVExCYCwgbm90IGp1c3QgYE1BUF9IVUdFUEFHRWAuIEFoLCB0aGF0J3MgcmlnaHQsIGBWTV9IVUdFUEFHRWAgaXMgc2V0IGJ5IGBtYWR2aXNlKE1BRFZfSFVHRVBBR0UpYCBvciwgaW4gc29tZSBjYXNlcywgZGVmYXVsdHMgZm9yIGB0cmFuc3BhcmVudF9odWdlcGFnZWAuIEhvbGQgb24uLi4gaWYgYHRyYW5zcGFyZW50X2h1Z2VwYWdlPWFsd2F5c2AsIHRoZSBgVk1fSFVHRVBBR0VgIGlzbid0IHNldCwgaXQncyBhIHNlcGFyYXRlIG1lY2hhbmlzbSEgYFZNX0hVR0VQQUdFYCBpcyAqc3BlY2lmaWNhbGx5KiBmb3IgYG1hZHZpc2VgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGl0J3Mgbm90IHNldCBieSBgcHJjdGwoUFJfU0VUX1RIUF9ESVNBQkxFKWAuXG5cblNvLCB0aGUgb25seSB3YXkgaXMgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgLiBCdXQgdGhhdCBzZWVtcyBwcm9ibGVtYXRpYywgYmVjYXVzZSBpc24ndCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGFscmVhZHkgY2FsbGVkICp3aGVuKiBgTUFEVl9IVUdFUEFHRWAgaXMgY2FsbGVkPyBUaGF0IGFsbW9zdCBtYWtlcyB0aGUgcGF0Y2ggYSBuby1vcCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4uLiB1bmxlc3MuLi5cblxuV2hhdCBhYm91dCBgZm9ya2A/IFdoZW4gYSBwcm9jZXNzIGZvcmtzLCB0aGUgY2hpbGQgcHJvY2VzcyBnZXRzIGEgY29weSBvZiB0aGUgcGFyZW50J3MgVk1BcywgcmlnaHQ/IFRoZSBjaGlsZCdzIFZNQXMgKndpbGwqIGhhdmUgYFZNX0hVR0VQQUdFYCBzZXQsIGlmIHRoZSBwYXJlbnQgaGFkIHRoZW0uIEJ1dCB0aGUgY2hpbGQgcHJvY2VzcydzIG1lbW9yeSBtYXAgKGBtbWApIGlzIGJyYW5kIG5ldy4gU28gZG9lcyBgZm9ya2AgY2FsbCBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZvciB0aGUgbmV3IGBtbWA/IEkgbmVlZCB0byBjaGVjayBgZHVwX21tYXBgLCBgdm1hX2R1cF9wb2xpY3lgLCBvciBgY29weV92bWFgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgVk1BcyBhcmUgY29waWVkIGR1cmluZyBhIGBmb3JrYC4gVGhpcyBtaWdodCBiZSB0aGUga2V5LiBUaGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjI3Ljk3MTY2NjYwN1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MTExODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtodWdlcGFnZWRfZW50ZXJfdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mb3JrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjI4LjAxODM4MzUxMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMyODk3ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGb3JrIExvZ2ljKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2hlbiBhIHByb2Nlc3MgZm9ya3MsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBodWdlIHBhZ2VzLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgZ29pbmcgb24gd2l0aCBga2h1Z2VwYWdlZGAsIGFuZCBga2VybmVsL2ZvcmsuY2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gTGV0J3Mgc2VlIGhvdyBga2h1Z2VwYWdlZF9lbnRlcmAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgZm9yayBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGludGVyYWN0aW9ucyBjb25jZXJuaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgaG9wZWZ1bGx5LCBob3cgaHVnZSBwYWdlcyBhcmUgaGFuZGxlZCBkdXJpbmcgdGhlIGNvcHktb24td3JpdGUgcHJvY2VzcyBvciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgYWRkcmVzcyBzcGFjZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjYWxscyB0byBlbnN1cmUgdGhhdCB0aGUgaHVnZSBwYWdlIG1hbmFnZW1lbnQgaXMgY29ycmVjdGx5IHNldCBmb3IgdGhlIG5ldyBjaGlsZCBwcm9jZXNzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjgwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6MzAuOTUxMjg0MDU2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxMTk5NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9lbnRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDozMC45OTU5MDgwNVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTAzNTk1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGtodWdlcGFnZWRfZW50ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgY2hlY2sgb3V0IGBraHVnZXBhZ2VkX2VudGVyYCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBJIGtub3cgdGhlIGtlcm5lbCdzIGh1Z2UgcGFnZSBtYW5hZ2VtZW50IGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBwZXJmb3JtYW5jZSwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoaXMgZW50cnkgcG9pbnQuIEknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIGtodWdlcGFnZWQgZGFlbW9uJ3Mgb3BlcmF0aW9uLCBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIG9mIGh1Z2UgcGFnZXMgd2hlbiBhIHByb2Nlc3MgcmVxdWVzdHMgb25lIG9yIHdoZW4gdGhlIHN5c3RlbSBkZXRlY3RzIGFuIG9wcG9ydHVuaXR5LiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZSBwYWdlIGFsbG9jYXRpb24sIHRoZSBtZW1vcnkgcG9saWNpZXMgaW52b2x2ZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGl0IHVzZXMgYW5kIHdoZXRoZXIgdGhlcmUncyBwb3RlbnRpYWwgZm9yIGNvbnRlbnRpb24uIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uJ3MgbG9naWMgcHJvdmlkZXMgdGhlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDozNS44OTk1MDYwOTRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDY0MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtodWdlcGFnZWRfZW50ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTUyMD12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTMwLVxcdFxcdHJldHVybiByZXQ7XFxubW0vaHVnZV9tZW1vcnkuYzoxNTMxOlxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vaHVnZV9tZW1vcnkuYy0xNTMyLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTUxND1zdGF0aWMgYm9vbCBodWdlcGFnZV9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTMxLVxcbm1tL2todWdlcGFnZWQuYzo1MzI6dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0va2h1Z2VwYWdlZC5jLTUzMy17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkyLVxcdCAgICBcXHUwMDI2XFx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXFxubW0va2h1Z2VwYWdlZC5jOjU5MzpcXHRcXHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVxcdTAwM2V2bV9tbSk7XFxubW0va2h1Z2VwYWdlZC5jLTU5NC19XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxPXN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4Ni1cXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKVxcbm1tL21hZHZpc2UuYzoxODc6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWFfZmxhZ3NfdG9fbGVnYWN5KG5ld192bWFfZmxhZ3MpKTtcXG5tbS9tYWR2aXNlLmMtMTg4LVxcbi0tXFxubW0vdm1hLmM9ODg5PXN0YXRpYyBfX211c3RfY2hlY2sgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfZXhpc3RpbmdfcmFuZ2UoXFxuLS1cXG5tbS92bWEuYy0xMDczLVxcdHZtYV9zZXRfZmxhZ3NfbWFzayh2bWctXFx1MDAzZXRhcmdldCwgc3RpY2t5X2ZsYWdzKTtcXG5tbS92bWEuYzoxMDc0OlxcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtZy1cXHUwMDNldGFyZ2V0LCB2bWctXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0xMDc1LVxcdHZtZy1cXHUwMDNlc3RhdGUgPSBWTUFfTUVSR0VfU1VDQ0VTUztcXG4tLVxcbm1tL3ZtYS5jPTExNDA9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2VfbmV3X3JhbmdlKHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcpXFxuLS1cXG5tbS92bWEuYy0xMTk1LVxcdGlmICh2bWctXFx1MDAzZXRhcmdldCBcXHUwMDI2XFx1MDAyNiAhdm1hX2V4cGFuZCh2bWcpKSB7XFxubW0vdm1hLmM6MTE5NjpcXHRcXHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWctXFx1MDAzZXRhcmdldCwgdm1nLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vdm1hLmMtMTE5Ny1cXHRcXHR2bWctXFx1MDAzZXN0YXRlID0gVk1BX01FUkdFX1NVQ0NFU1M7XFxuLS1cXG5tbS92bWEuYz0yNjM0PXN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTI2OTEtXFx0LypcXG5tbS92bWEuYzoyNjkyOlxcdCAqIHZtYV9tZXJnZV9uZXdfcmFuZ2UoKSBjYWxscyBraHVnZXBhZ2VkX2VudGVyX3ZtYSgpIHRvbywgdGhlIGJlbG93XFxubW0vdm1hLmMtMjY5My1cXHQgKiBjYWxsIGNvdmVycyB0aGUgbm9uLW1lcmdlIGNhc2UuXFxuLS1cXG5tbS92bWEuYy0yNjk1LVxcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxcbm1tL3ZtYS5jOjI2OTY6XFx0XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCBtYXAtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS92bWEuYy0yNjk3LVxcdCp2bWFwID0gdm1hO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDozNS45NDg1Nzc1NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIwOTQ5NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IER1cGxpY2F0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgbWVtb3J5IGR1cGxpY2F0aW9uIHByb2Nlc3MgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBkdXBfbW1hcGAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgZHVwX21tYXBgIGxpa2VseSBpbnRlcmZhY2VzIHdpdGggc29tZSBwb2xpY3kgYXJvdW5kIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgZHVwbGljYXRpb24g4oCTIEknbSB0aGlua2luZyBzb21ldGhpbmcgbGlrZSBgdm1hX2R1cF9wb2xpY3lgIG9yIHNpbWlsYXIuIEJ1dCB0aGUgY29yZSBxdWVzdGlvbiBidXp6aW5nIGluIG15IGhlYWQgaXMgd2hldGhlciBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGdldHMgaW52b2x2ZWQuIFRoYXQncyB0aGUgcmVhbCBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaHVnZSBwYWdlIG1hbmFnZW1lbnQgZ2V0cyBoYW5kbGVkIGR1cmluZyBhIGBtbWFwYCBkdXBsaWNhdGlvbi5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgcmlnaHQgaW4gYGtlcm5lbC9mb3JrLmNgLCB3aGVyZSBgZHVwX21tYXBgIHJlc2lkZXMuIEkgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgYGR1cF9tbWFwYCBjYWxscyBhbmQgaG93IHRoZSBWTUFzIGFyZSBiZWluZyBoYW5kbGVkIGF0IHRoaXMgc3RhZ2UuIFRoYXQncyB3aGVyZSB0aGUgYW5zd2VycyBsaWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzcxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6MzkuMjY5NTI5Njc0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE4NjE3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHVwX21tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2ZvcmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZm9yay5jLTExOS1cXG5rZXJuZWwvZm9yay5jOjEyMDovKiBGb3IgZHVwX21tYXAoKS4gKi9cXG5rZXJuZWwvZm9yay5jLTEyMS0jaW5jbHVkZSBcXFwiLi4vbW0vaW50ZXJuYWwuaFxcXCJcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTUyNz1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZHVwX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxcbi0tXFxua2VybmVsL2ZvcmsuYy0xNTQxLVxcbmtlcm5lbC9mb3JrLmM6MTU0MjpcXHR1cHJvYmVfc3RhcnRfZHVwX21tYXAoKTtcXG5rZXJuZWwvZm9yay5jOjE1NDM6XFx0ZXJyID0gZHVwX21tYXAobW0sIG9sZG1tKTtcXG5rZXJuZWwvZm9yay5jLTE1NDQtXFx0aWYgKGVycilcXG5rZXJuZWwvZm9yay5jLTE1NDUtXFx0XFx0Z290byBmcmVlX3B0O1xcbmtlcm5lbC9mb3JrLmM6MTU0NjpcXHR1cHJvYmVfZW5kX2R1cF9tbWFwKCk7XFxua2VybmVsL2ZvcmsuYy0xNTQ3LVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xNTYxLVxcdGlmIChlcnIpXFxua2VybmVsL2ZvcmsuYzoxNTYyOlxcdFxcdHVwcm9iZV9lbmRfZHVwX21tYXAoKTtcXG5rZXJuZWwvZm9yay5jLTE1NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjM5LjQ4MTM5NjQ3N1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg0MDgwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGR1cF9tbWFwYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkdXBsaWNhdGVkIG1lbW9yeSBtYXBwaW5ncyB3b3JrLCBwYXJ0aWN1bGFybHkgdGhlIGBkdXBfbW1hcGAgZnVuY3Rpb24uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhlIGtlcm5lbCwgSSdtIHByZXR0eSBzdXJlIHRoYXQgdGhlIGNydWNpYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhpcyBhcmUgZ29pbmcgdG8gYmUgbmVzdGxlZCBpbiBlaXRoZXIgYG1tL21lbW9yeS5jYCBvciBgbW0vbW1hcC5jYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hcHBpbmcgZHVwbGljYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIOKAkyBsZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aG9zZSBwYWdlIHRhYmxlcyBhbmQgcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzNjAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDo0Ni45NjU0ODEwMTdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTE4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1cF9tbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTE1MTc9dm9pZCBkdXBfbW1fZXhlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKTtcXG5tbS9pbnRlcm5hbC5oOjE1MTg6aW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSk7XFxubW0vaW50ZXJuYWwuaC0xNTE5LVxcbi0tXFxubW0vbWVtb3J5LmM9Mjk4PXZvaWQgZnJlZV9wZ2RfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTM2OS0gKlxcbm1tL21lbW9yeS5jOjM3MDogKiBUaGUgdm1hX2VuZCBkaWZmZXJzIGZyb20gdGhlIHBnX2VuZCB3aGVuIGEgZHVwX21tYXAoKSBmYWlsZWQgYW5kIHRoZSB0cmVlIGhhc1xcbm1tL21lbW9yeS5jLTM3MS0gKiB1bnJlbGF0ZWQgZGF0YSB0byB0aGUgbW1fc3RydWN0IGJlaW5nIHRvcm4gZG93bi5cXG4tLVxcbm1tL21tYXAuYz0xMjg4PXZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vbW1hcC5jLTEzMDMtXFx0aWYgKCF2bWEpIHtcXG5tbS9tbWFwLmM6MTMwNDpcXHRcXHQvKiBDYW4gaGFwcGVuIGlmIGR1cF9tbWFwKCkgcmVjZWl2ZWQgYW4gT09NICovXFxubW0vbW1hcC5jLTEzMDUtXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLS1cXG5tbS9tbWFwLmM9MTY4Nj1ib29sIG1tYXBfcmVhZF9sb2NrX21heWJlX2V4cGFuZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL21tYXAuYy0xNzA3LVxcbm1tL21tYXAuYzoxNzA4Ol9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG5tbS9tbWFwLmMtMTcwOS17XFxuLS1cXG5tbS9tbWFwLmMtMTcxOC1cXHRmbHVzaF9jYWNoZV9kdXBfbW0ob2xkbW0pO1xcbm1tL21tYXAuYzoxNzE5OlxcdHVwcm9iZV9kdXBfbW1hcChvbGRtbSwgbW0pO1xcbm1tL21tYXAuYy0xNzIwLVxcdC8qXFxuLS1cXG5tbS9tbWFwLmMtMTgyNi1cXHQvKiBhIG5ldyBtbSBoYXMganVzdCBiZWVuIGNyZWF0ZWQgKi9cXG5tbS9tbWFwLmM6MTgyNzpcXHRyZXR2YWwgPSBhcmNoX2R1cF9tbWFwKG9sZG1tLCBtbSk7XFxubW0vbW1hcC5jLTE4MjgtbG9vcF9vdXQ6XFxuLS1cXG5tbS9ub21tdS5jPTE5MjU9c3Vic3lzX2luaXRjYWxsKGluaXRfYWRtaW5fcmVzZXJ2ZSk7XFxubW0vbm9tbXUuYy0xOTI2LVxcbm1tL25vbW11LmM6MTkyNzppbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbm1tL25vbW11LmMtMTkyOC17XFxuLS1cXG5tbS92bWFfaW5pdC5jPTQ1PXN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vdm1hX2luaXQuYy02MS1cXHQgKiBzcmMtXFx1MDAzZXNoYXJlZC5yYiBtYXkgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5IHdoZW4gY2FsbGVkIGZyb21cXG5tbS92bWFfaW5pdC5jOjYyOlxcdCAqIGR1cF9tbWFwKCksIGJ1dCB0aGUgY2xvbmUgd2lsbCByZWluaXRpYWxpemUgaXQuXFxubW0vdm1hX2luaXQuYy02My1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6NDcuMDI0NDAzMzE0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDI0ODc2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgZHVwX21tYXBgIGluIGBtbS9tbWFwLmNgIGFuZCBzdGFydCBkaXNzZWN0aW5nIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGR1cGxpY2F0aW5nIGEgbWVtb3J5IG1hcC4gTXkgZXhwZXJ0aXNlIGlzIHN1Y2ggdGhhdCBJIGNhbiBxdWlja2x5IGdyYXNwIHRoZSBmdW5kYW1lbnRhbCBjb25jZXB0cywgYnV0IEkgbmVlZCB0byBmb2N1cyBvbiBhbnkgaW50cmljYWNpZXMgb3IgdW51c3VhbCBhc3BlY3RzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGNvcHktb24td3JpdGUsIHNoYXJpbmcsIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIG9mZmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjUwLjUyNjg5MzgxOFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MDgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3MDg6XFx0X19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbjE3MDk6XFx0e1xcbjE3MTA6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICptcG50LCAqdG1wO1xcbjE3MTE6XFx0XFx0aW50IHJldHZhbDtcXG4xNzEyOlxcdFxcdHVuc2lnbmVkIGxvbmcgY2hhcmdlID0gMDtcXG4xNzEzOlxcdFxcdExJU1RfSEVBRCh1Zik7XFxuMTcxNDpcXHRcXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7XFxuMTcxNTpcXHRcXG4xNzE2OlxcdFxcdGlmIChtbWFwX3dyaXRlX2xvY2tfa2lsbGFibGUob2xkbW0pKVxcbjE3MTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4xNzE4OlxcdFxcdGZsdXNoX2NhY2hlX2R1cF9tbShvbGRtbSk7XFxuMTcxOTpcXHRcXHR1cHJvYmVfZHVwX21tYXAob2xkbW0sIG1tKTtcXG4xNzIwOlxcdFxcdC8qXFxuMTcyMTpcXHRcXHQgKiBOb3QgbGlua2VkIGluIHlldCAtIG5vIGRlYWRsb2NrIHBvdGVudGlhbDpcXG4xNzIyOlxcdFxcdCAqL1xcbjE3MjM6XFx0XFx0bW1hcF93cml0ZV9sb2NrX25lc3RlZChtbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbjE3MjQ6XFx0XFxuMTcyNTpcXHRcXHQvKiBObyBvcmRlcmluZyByZXF1aXJlZDogZmlsZSBhbHJlYWR5IGhhcyBiZWVuIGV4cG9zZWQuICovXFxuMTcyNjpcXHRcXHRkdXBfbW1fZXhlX2ZpbGUobW0sIG9sZG1tKTtcXG4xNzI3OlxcdFxcbjE3Mjg6XFx0XFx0bW0tXFx1MDAzZXRvdGFsX3ZtID0gb2xkbW0tXFx1MDAzZXRvdGFsX3ZtO1xcbjE3Mjk6XFx0XFx0bW0tXFx1MDAzZWRhdGFfdm0gPSBvbGRtbS1cXHUwMDNlZGF0YV92bTtcXG4xNzMwOlxcdFxcdG1tLVxcdTAwM2VleGVjX3ZtID0gb2xkbW0tXFx1MDAzZWV4ZWNfdm07XFxuMTczMTpcXHRcXHRtbS1cXHUwMDNlc3RhY2tfdm0gPSBvbGRtbS1cXHUwMDNlc3RhY2tfdm07XFxuMTczMjpcXHRcXG4xNzMzOlxcdFxcdC8qIFVzZSBfX210X2R1cCgpIHRvIGVmZmljaWVudGx5IGJ1aWxkIGFuIGlkZW50aWNhbCBtYXBsZSB0cmVlLiAqL1xcbjE3MzQ6XFx0XFx0cmV0dmFsID0gX19tdF9kdXAoXFx1MDAyNm9sZG1tLVxcdTAwM2VtbV9tdCwgXFx1MDAyNm1tLVxcdTAwM2VtbV9tdCwgR0ZQX0tFUk5FTCk7XFxuMTczNTpcXHRcXHRpZiAodW5saWtlbHkocmV0dmFsKSlcXG4xNzM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3Mzc6XFx0XFxuMTczODpcXHRcXHRtdF9jbGVhcl9pbl9yY3Uodm1pLm1hcy50cmVlKTtcXG4xNzM5OlxcdFxcdGZvcl9lYWNoX3ZtYSh2bWksIG1wbnQpIHtcXG4xNzQwOlxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbjE3NDE6XFx0XFxuMTc0MjpcXHRcXHRcXHRyZXR2YWwgPSB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUobXBudCk7XFxuMTc0MzpcXHRcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4xNzQ0OlxcdFxcdFxcdFxcdGdvdG8gbG9vcF9vdXQ7XFxuMTc0NTpcXHRcXHRcXHRpZiAodm1hX3Rlc3QobXBudCwgVk1BX0RPTlRDT1BZX0JJVCkpIHtcXG4xNzQ2OlxcdFxcdFxcdFxcdHJldHZhbCA9IHZtYV9pdGVyX2NsZWFyX2dmcChcXHUwMDI2dm1pLCBtcG50LVxcdTAwM2V2bV9zdGFydCxcXG4xNzQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBtcG50LVxcdTAwM2V2bV9lbmQsIEdGUF9LRVJORUwpO1xcbjE3NDg6XFx0XFx0XFx0XFx0aWYgKHJldHZhbClcXG4xNzQ5OlxcdFxcdFxcdFxcdFxcdGdvdG8gbG9vcF9vdXQ7XFxuMTc1MDpcXHRcXG4xNzUxOlxcdFxcdFxcdFxcdHZtX3N0YXRfYWNjb3VudChtbSwgbXBudC1cXHUwMDNldm1fZmxhZ3MsIC12bWFfcGFnZXMobXBudCkpO1xcbjE3NTI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTc1MzpcXHRcXHRcXHR9XFxuMTc1NDpcXHRcXHRcXHRjaGFyZ2UgPSAwO1xcbjE3NTU6XFx0XFx0XFx0aWYgKHZtYV90ZXN0KG1wbnQsIFZNQV9BQ0NPVU5UX0JJVCkpIHtcXG4xNzU2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuID0gdm1hX3BhZ2VzKG1wbnQpO1xcbjE3NTc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjUwLjUyNzAxMzg4OFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjgzMDc4MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIHNvbWUgdGVjaG5pY2FsIHByb2JsZW0gYW5kIHRoYXQgJ2BkdXBfbW1hcGAnIGlzIGEgcmVsZXZhbnQgZnVuY3Rpb24gb3IgY29uY2VwdCBpbiBteSBmaWVsZDpcblxuKipEZWVwZXIgRGl2ZSBpbnRvIGBkdXBfbW1hcGAqKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhpcyBgZHVwX21tYXBgIHRoaW5nLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlcmUncyBtb3JlIHRvIHVuZGVyc3RhbmQgaGVyZSwgYW5kIHdoYXRldmVyIG51YW5jZSBJJ20gbWlzc2luZyBpcyBrZXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKndoeSogd2UncmUgZXZlbiBjb25zaWRlcmluZyB0aGlzLiBJcyBpdCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEEgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZT8gQXJlIHdlIHRyeWluZyB0byBhY2hpZXZlIGEgc3BlY2lmaWMgY29uY3VycmVuY3kgcGF0dGVybj8gT2theSwgbGV0J3MgcmVyZWFkIHRoZSByZWxldmFudCBzZWN0aW9ucyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBnbG9zc2VkIG92ZXIgYW55dGhpbmcuIFNvbWV0aW1lcyB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscyB3aXRoIHRoZXNlIG1lbW9yeSBtYXBwaW5nIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGV4cGxhaW4gdGhlIGJlaGF2aW9yIEknbSBvYnNlcnZpbmcuIEl04oCZcyBsaWtlbHkgdGhlIHNvdXJjZSBvZiBhbGwgbXkgY3VycmVudCBwYWluIGFuZCBzdWZmZXJpbmcuIExldCdzIHNlZSBpZiB0aGlzIGRlZXBlciBkaXZlIHVuY292ZXJzIHRoZSBhbnN3ZXJzIEkgc2Vlay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyNzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQwOjU0LjIxMDA5NjAwMloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NTg6XFx0XFx0XFx0XFx0aWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0ob2xkbW0sIGxlbikpIC8qIHNpYyAqL1xcbjE3NTk6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsX25vbWVtO1xcbjE3NjA6XFx0XFx0XFx0XFx0Y2hhcmdlID0gbGVuO1xcbjE3NjE6XFx0XFx0XFx0fVxcbjE3NjI6XFx0XFxuMTc2MzpcXHRcXHRcXHR0bXAgPSB2bV9hcmVhX2R1cChtcG50KTtcXG4xNzY0OlxcdFxcdFxcdGlmICghdG1wKVxcbjE3NjU6XFx0XFx0XFx0XFx0Z290byBmYWlsX25vbWVtO1xcbjE3NjY6XFx0XFx0XFx0cmV0dmFsID0gdm1hX2R1cF9wb2xpY3kobXBudCwgdG1wKTtcXG4xNzY3OlxcdFxcdFxcdGlmIChyZXR2YWwpXFxuMTc2ODpcXHRcXHRcXHRcXHRnb3RvIGZhaWxfbm9tZW1fcG9saWN5O1xcbjE3Njk6XFx0XFx0XFx0dG1wLVxcdTAwM2V2bV9tbSA9IG1tO1xcbjE3NzA6XFx0XFx0XFx0cmV0dmFsID0gZHVwX3VzZXJmYXVsdGZkKHRtcCwgXFx1MDAyNnVmKTtcXG4xNzcxOlxcdFxcdFxcdGlmIChyZXR2YWwpXFxuMTc3MjpcXHRcXHRcXHRcXHRnb3RvIGZhaWxfbm9tZW1fYW5vbl92bWFfZm9yaztcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0XFx0aWYgKHZtYV90ZXN0KHRtcCwgVk1BX1dJUEVPTkZPUktfQklUKSkge1xcbjE3NzU6XFx0XFx0XFx0XFx0LypcXG4xNzc2OlxcdFxcdFxcdFxcdCAqIFZNQV9XSVBFT05GT1JLX0JJVCBnZXRzIGEgY2xlYW4gc2xhdGUgaW4gdGhlIGNoaWxkLlxcbjE3Nzc6XFx0XFx0XFx0XFx0ICogRG9uJ3QgcHJlcGFyZSBhbm9uX3ZtYSB1bnRpbCBmYXVsdCBzaW5jZSB3ZSBkb24ndFxcbjE3Nzg6XFx0XFx0XFx0XFx0ICogY29weSBwYWdlIGZvciBjdXJyZW50IHZtYS5cXG4xNzc5OlxcdFxcdFxcdFxcdCAqL1xcbjE3ODA6XFx0XFx0XFx0XFx0dG1wLVxcdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XFxuMTc4MTpcXHRcXHRcXHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcXG4xNzgyOlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9ub21lbV9hbm9uX3ZtYV9mb3JrO1xcbjE3ODM6XFx0XFxuMTc4NDpcXHRcXHRcXHR2bWFfc3RhcnRfd3JpdGUodG1wKTtcXG4xNzg1OlxcdFxcdFxcdHZtYV9jbGVhcl9mbGFnc19tYXNrKHRtcCwgVk1BX0xPQ0tFRF9NQVNLKTtcXG4xNzg2OlxcdFxcdFxcdC8qXFxuMTc4NzpcXHRcXHRcXHQgKiBDb3B5L3VwZGF0ZSBodWdldGxiIHByaXZhdGUgdm1hIGluZm9ybWF0aW9uLlxcbjE3ODg6XFx0XFx0XFx0ICovXFxuMTc4OTpcXHRcXHRcXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHRtcCkpXFxuMTc5MDpcXHRcXHRcXHRcXHRodWdldGxiX2R1cF92bWFfcHJpdmF0ZSh0bXApO1xcbjE3OTE6XFx0XFxuMTc5MjpcXHRcXHRcXHQvKlxcbjE3OTM6XFx0XFx0XFx0ICogTGluayB0aGUgdm1hIGludG8gdGhlIE1ULiBBZnRlciB1c2luZyBfX210X2R1cCgpLCBtZW1vcnlcXG4xNzk0OlxcdFxcdFxcdCAqIGFsbG9jYXRpb24gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLCBzbyBpdCBjYW5ub3QgZmFpbC5cXG4xNzk1OlxcdFxcdFxcdCAqL1xcbjE3OTY6XFx0XFx0XFx0dm1hX2l0ZXJfYnVsa19zdG9yZShcXHUwMDI2dm1pLCB0bXApO1xcbjE3OTc6XFx0XFxuMTc5ODpcXHRcXHRcXHRtbS1cXHUwMDNlbWFwX2NvdW50Kys7XFxuMTc5OTpcXHRcXG4xODAwOlxcdFxcdFxcdGlmICh0bXAtXFx1MDAzZXZtX29wcyBcXHUwMDI2XFx1MDAyNiB0bXAtXFx1MDAzZXZtX29wcy1cXHUwMDNlb3BlbilcXG4xODAxOlxcdFxcdFxcdFxcdHRtcC1cXHUwMDNldm1fb3BzLVxcdTAwM2VvcGVuKHRtcCk7XFxuMTgwMjpcXHRcXG4xODAzOlxcdFxcdFxcdGZpbGUgPSB0bXAtXFx1MDAzZXZtX2ZpbGU7XFxuMTgwNDpcXHRcXHRcXHRpZiAoZmlsZSkge1xcbjE4MDU6XFx0XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuMTgwNjpcXHRcXG4xODA3OlxcdFxcdFxcdFxcdGdldF9maWxlKGZpbGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MDo1NC4yMTAyMTAwNTJaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MjA1MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgZHVwX21tYXBgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMgYGR1cF9tbWFwYCB0aGluZy4gU2VlbXMgbGlrZSB0aGUgaW5pdGlhbCBzY2FuIHdhc24ndCBxdWl0ZSBlbm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhdCBhIG1vcmUgZ3JhbnVsYXIgbGV2ZWwuIENsZWFybHksIHRoZXJlJ3MgbW9yZSB0byBiZSBnbGVhbmVkIHRoYW4gYSBjdXJzb3J5IGdsYW5jZS4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hcHBpbmcuIFdoYXQgYXJlIHRoZSBudWFuY2VzPyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGJlIGxlc3Mgb2J2aW91cz8gQXJlIHRoZXJlIHBsYXRmb3JtLXNwZWNpZmljIGJlaGF2aW9ycyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoaXMgY2FsbHMgZm9yIGEgZGVlcGVyIGRpdmU7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBkb2N1bWVudGF0aW9uLCB0aGUgc291cmNlIGNvZGUsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSByZWxldmFudCByZXNlYXJjaCBwYXBlcnMgb3IgbWFpbGluZyBsaXN0IGRpc2N1c3Npb25zLiBJJ20gbG9va2luZyBmb3IgYSBzb2xpZCBncmFzcCBvZiAqd2h5KiB0aGlzIGNhbGwgZXhpc3RzLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHdoYXQgdGhlIGludGVyYWN0aW9ucyBhcmUgd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgc3lzdGVtLiBJ4oCZbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaXRzIHJvbGUgaW4gc2hhcmVkIG1lbW9yeSBzY2VuYXJpb3Mgb3IgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIC0gdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHdoZXJlIHN1YnRsZSBidWdzIGNhbiBsdXJrLiBNeSBnb2FsIGlzIGEgdHJ1bHkgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBub3QganVzdCBhIHN1cGVyZmljaWFsIG92ZXJ2aWV3LiBTbyBsZXQncyBjcmFjayB0aGlzIG9wZW4gYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6NTcuNTgyMjY1MjAyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgwODpcXHRcXHRcXHRcXHRpX21tYXBfbG9ja193cml0ZShtYXBwaW5nKTtcXG4xODA5OlxcdFxcdFxcdFxcdGlmICh2bWFfaXNfc2hhcmVkX21heXdyaXRlKHRtcCkpXFxuMTgxMDpcXHRcXHRcXHRcXHRcXHRtYXBwaW5nX2FsbG93X3dyaXRhYmxlKG1hcHBpbmcpO1xcbjE4MTE6XFx0XFx0XFx0XFx0Zmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKTtcXG4xODEyOlxcdFxcdFxcdFxcdC8qIGluc2VydCB0bXAgaW50byB0aGUgc2hhcmUgbGlzdCwganVzdCBhZnRlciBtcG50ICovXFxuMTgxMzpcXHRcXHRcXHRcXHRtYXBwaW5nX3JtYXBfdHJlZV9pbnNlcnRfYWZ0ZXIodG1wLCBtcG50LCBtYXBwaW5nKTtcXG4xODE0OlxcdFxcdFxcdFxcdGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTtcXG4xODE1OlxcdFxcdFxcdFxcdGlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7XFxuMTgxNjpcXHRcXHRcXHR9XFxuMTgxNzpcXHRcXG4xODE4OlxcdFxcdFxcdGlmICghdm1hX3Rlc3QodG1wLCBWTUFfV0lQRU9ORk9SS19CSVQpKVxcbjE4MTk6XFx0XFx0XFx0XFx0cmV0dmFsID0gY29weV9wYWdlX3JhbmdlKHRtcCwgbXBudCk7XFxuMTgyMDpcXHRcXG4xODIxOlxcdFxcdFxcdGlmIChyZXR2YWwpIHtcXG4xODIyOlxcdFxcdFxcdFxcdG1wbnQgPSB2bWFfbmV4dChcXHUwMDI2dm1pKTtcXG4xODIzOlxcdFxcdFxcdFxcdGdvdG8gbG9vcF9vdXQ7XFxuMTgyNDpcXHRcXHRcXHR9XFxuMTgyNTpcXHRcXHR9XFxuMTgyNjpcXHRcXHQvKiBhIG5ldyBtbSBoYXMganVzdCBiZWVuIGNyZWF0ZWQgKi9cXG4xODI3OlxcdFxcdHJldHZhbCA9IGFyY2hfZHVwX21tYXAob2xkbW0sIG1tKTtcXG4xODI4OlxcdGxvb3Bfb3V0OlxcbjE4Mjk6XFx0XFx0dm1hX2l0ZXJfZnJlZShcXHUwMDI2dm1pKTtcXG4xODMwOlxcdFxcdGlmICghcmV0dmFsKSB7XFxuMTgzMTpcXHRcXHRcXHRtdF9zZXRfaW5fcmN1KHZtaS5tYXMudHJlZSk7XFxuMTgzMjpcXHRcXHRcXHRrc21fZm9yayhtbSwgb2xkbW0pO1xcbjE4MzM6XFx0XFx0XFx0a2h1Z2VwYWdlZF9mb3JrKG1tLCBvbGRtbSk7XFxuMTgzNDpcXHRcXHR9IGVsc2Uge1xcbjE4MzU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxuMTgzNjpcXHRcXG4xODM3OlxcdFxcdFxcdC8qXFxuMTgzODpcXHRcXHRcXHQgKiBUaGUgZW50aXJlIG1hcGxlIHRyZWUgaGFzIGFscmVhZHkgYmVlbiBkdXBsaWNhdGVkLCBidXRcXG4xODM5OlxcdFxcdFxcdCAqIHJlcGxhY2luZyB0aGUgdm1hcyBmYWlsZWQgYXQgbXBudCAod2hpY2ggY291bGQgYmUgTlVMTCBpZlxcbjE4NDA6XFx0XFx0XFx0ICogYWxsIHdlcmUgYWxsb2NhdGVkIGJ1dCB0aGUgbGFzdCB2bWEgd2FzIG5vdCBmdWxseSBzZXQgdXApLlxcbjE4NDE6XFx0XFx0XFx0ICogVXNlIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBmYWlsdXJlIHBvaW50IHRvIGNsZWFuIHVwIHRoZVxcbjE4NDI6XFx0XFx0XFx0ICogcGFydGlhbGx5IGluaXRpYWxpemVkIHRyZWUuXFxuMTg0MzpcXHRcXHRcXHQgKi9cXG4xODQ0OlxcdFxcdFxcdGlmICghbW0tXFx1MDAzZW1hcF9jb3VudCkge1xcbjE4NDU6XFx0XFx0XFx0XFx0LyogemVybyB2bWFzIHdlcmUgd3JpdHRlbiB0byB0aGUgbmV3IHRyZWUuICovXFxuMTg0NjpcXHRcXHRcXHRcXHRlbmQgPSAwO1xcbjE4NDc6XFx0XFx0XFx0fSBlbHNlIGlmIChtcG50KSB7XFxuMTg0ODpcXHRcXHRcXHRcXHQvKiBwYXJ0aWFsIHRyZWUgZmFpbHVyZSAqL1xcbjE4NDk6XFx0XFx0XFx0XFx0ZW5kID0gbXBudC1cXHUwMDNldm1fc3RhcnQ7XFxuMTg1MDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4NTE6XFx0XFx0XFx0XFx0LyogQWxsIHZtYXMgd2VyZSB3cml0dGVuIHRvIHRoZSBuZXcgdHJlZSAqL1xcbjE4NTI6XFx0XFx0XFx0XFx0ZW5kID0gVUxPTkdfTUFYO1xcbjE4NTM6XFx0XFx0XFx0fVxcbjE4NTQ6XFx0XFxuMTg1NTpcXHRcXHRcXHQvKiBIaWRlIG1tIGZyb20gb29tIGtpbGxlciBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgYmVpbmcgZnJlZWQgKi9cXG4xODU2OlxcdFxcdFxcdG1tX2ZsYWdzX3NldChNTUZfT09NX1NLSVAsIG1tKTtcXG4xODU3OlxcdFxcdFxcdGlmIChlbmQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDA6NTcuNTgyMzg4NzYyWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDAxNzM5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGtodWdlcGFnZWRfZm9ya2AgQ2FsbCoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIGEgYGtodWdlcGFnZWRfZm9yayhtbSwgb2xkbW0pYCBjYWxsLiBUaGlzIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgYGtodWdlcGFnZWRgIGRhZW1vbiBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgYW5kIHRoYXQgYGZvcmtgIGNhbGw/IFRoYXQncyB3aGVyZSB3ZSBnZXQgdGhlIGludGVyZXN0aW5nIHN0dWZmLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyBkdXJpbmcgYSBmb3JrIHRoYXQgaW52b2x2ZXMgaHVnZSBwYWdlcywgYW5kIGhvdyBga2h1Z2VwYWdlZGAgaXMgZ2V0dGluZyBpbnZvbHZlZCB3aXRoIGBtbWAgKHRoZSBtZW1vcnkgbWFwIG9mIHRoZSBuZXcgcHJvY2VzcykgYW5kIGBvbGRtbWAgKHRoZSBtZW1vcnkgbWFwIG9mIHRoZSBwYXJlbnQgcHJvY2VzcykuIEkgd2FudCB0byBzZWUgaWYgd2UgYXJlIG1ha2luZyBuZXcgVEhQIGFsbG9jYXRpb25zIGZvciB0aGUgY2hpbGQsIG9yIGlmIGl0IGlzIHNoYXJpbmcgVEhQIG1hcHBpbmdzIGZyb20gdGhlIHBhcmVudC4gQXJlIHdlIHVzaW5nIENPVyAoY29weSBvbiB3cml0ZSkgcHJvcGVybHk/IFRoZXJlJ3MgYSBsb3QgdG8gdW5wYWNrIGluIHRoaXMgc2luZ2xlIGxpbmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gYGtodWdlcGFnZWRfZm9ya2AgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6MDAuODIyNTY1ODU4WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIzNjI0NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9mb3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6MDAuODY4ODA3OTMzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzA3MzYwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8ga2h1Z2VwYWdlZF9mb3JrKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGtodWdlcGFnZWRfZm9ya2AgZnVuY3Rpb24uIFdoZXJlIHdvdWxkIEkgZmluZCB0aGUgZGVjbGFyYXRpb24gYW5kIHJlbGF0ZWQgc3RydWN0dXJlcz8gVGhlIHN0YW5kYXJkIHBsYWNlOiBgaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmhgLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmb3JrIG1lY2hhbmlzbSBpbnRlcmFjdHMgd2l0aCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGNvcHktb24td3JpdGUgaW1wbGljYXRpb25zLCBhbmQgdGhlIGdlbmVyYWwgZmxvdyBvZiBob3cgdGhlIGh1Z2UgcGFnZSBtYXBwaW5ncyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBwcm9jZXNzIGZvcmsuIEFueSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgb3IgZmxhZ3MgZGVmaW5lZCBoZXJlIGFyZSBjcnVjaWFsLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBuZXcgcHJvY2VzcyBpbmhlcml0cyBvciBzaGFyZXMgZXhpc3RpbmcgaHVnZSBwYWdlIG1hcHBpbmdzLCBhbmQgd2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgY29uc2lzdGVuY3kgYW5kIHByZXZlbnQgY29ycnVwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTowNS42OTk1NDcwOVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTMxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZF9mb3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTIwPXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTIyLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjIzOnN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2Zvcmsoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTI0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0zNC0jZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDozNTpzdGF0aWMgaW5saW5lIHZvaWQga2h1Z2VwYWdlZF9mb3JrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0zNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjA1Ljc1NDk2NTMxNloiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc1MzQyNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBga2h1Z2VwYWdlZF9mb3JrYCBmdW5jdGlvbi4gSSd2ZSBoZWFyZCBhYm91dCB0aGlzLCBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBmb3JraW5nIGFuZCBodWdlIHBhZ2VzLiBMZXQgbWUgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGludGVycGxheSB3b3JrcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZnVuY3Rpb24gaGFzIHNvbWUgc3BlY2lhbCBpbnRlcmFjdGlvbiwgb3IgaWYgaXQncyB0aGUgbW9yZSBzdHJhaWdodGZvcndhcmQgbWV0aG9kIGZvciBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBjb2RlLCBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTowOC42MzAzMTAxMTNaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjMsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjM6XFx0c3RhdGljIGlubGluZSB2b2lkIGtodWdlcGFnZWRfZm9yayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pXFxuICAyNDpcXHR7XFxuICAyNTpcXHRcXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIG9sZG1tKSlcXG4gIDI2OlxcdFxcdFxcdF9fa2h1Z2VwYWdlZF9lbnRlcihtbSk7XFxuICAyNzpcXHR9XFxuICAyODpcXHRcXG4gIDI5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuICAzMDpcXHR7XFxuICAzMTpcXHRcXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVk1fSFVHRVBBR0UsIG1tKSlcXG4gIDMyOlxcdFxcdFxcdF9fa2h1Z2VwYWdlZF9leGl0KG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6MDguNjMwMzcwMjEzWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NDQxOTkwNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBraHVnZXBhZ2VkX2ZvcmsgUGF0Y2gncyBGdW5jdGlvbmFsIEltcGFjdCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgaG93IGBraHVnZXBhZ2VkX2ZvcmtgIHdvcmtzLCBhbmQgSSBzZWUgdGhlIGNoaWxkIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGtodWdlcGFnZWQgcmVnaXN0cmF0aW9uIGZyb20gdGhlIHBhcmVudCBpZiB0aGUgb2xkIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYG1tYCkgaGFkIGBNTUZfVk1fSFVHRVBBR0VgIHNldC4gQnV0IHRoZW4sIEkgaGFkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoJ3MgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuXG5cbkkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHRocm91Z2ggYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgIHRvIHNlZSB0aGUgcmVnaXN0cmF0aW9uIGVmZmVjdHMuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBgbW1gIHJlZ2lzdHJhdGlvbiBzZWVtZWQgdG8gaGFwcGVuIGVhcmx5LCB3aXRoaW4gYGh1Z2VwYWdlX21hZHZpc2VgLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgc3Vic2VxdWVudCBWTUEgbW9kaWZpY2F0aW9ucyBzdWNjZWVkZWQgb3IgZmFpbGVkLiBUaGlzIGNvbmNlcm5lZCBtZTogaWYgVk1BcyB3ZXJlIG1lcmdlZCBsYXRlciwgcmVnaXN0cmF0aW9uIHdvdWxkIGhhcHBlbiBldmVuIGZvciBzbWFsbCBpbml0aWFsIFZNQXMuIEkgaGFkIHRvIHZlcmlmeSBteSBhc3N1bXB0aW9uLiBXaGVuIGBNQURWX0hVR0VQQUdFYCBpcyBjYWxsZWQgb24gYSBzbWFsbCBWTUEsIGl0IHRyaWdnZXJzIGEgY2FsbCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgLiBIb3dldmVyLCB0aGUgY2hlY2sgYGNvbGxhcHNlX3Bvc3NpYmxlYCBpbiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgYmVjYXVzZSB0aGUgc21hbGwgVk1BIGlzbid0IGxhcmdlIGVub3VnaCBmb3IgVEhQLiBTbywgYF9fa2h1Z2VwYWdlZF9lbnRlcmAgaXMgTk9UIGNhbGxlZC4gVGhlIGBtbWAgaXMgdGhlbiBtZXJnZWQgd2l0aCBhbiBhZGphY2VudCBWTUEsIHdoaWNoIGlzIGxhcmdlIGVub3VnaCwgYW5kIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgSVMgY2FsbGVkIG9uIHRoZSBtZXJnZWQgVk1BLiBTbywgdGhpcyBjb25maXJtcyB0aGF0IHRoZSBgbW1gIGlzIHJlZ2lzdGVyZWQgZXZlbiBpZiB0aGUgb3JpZ2luYWwgVk1BIHdhcyB0b28gc21hbGwgYW5kIHRoYXQncyBjb25jZXJuaW5nLlxuXG5CdXQgd2hhdCBidWcgZG9lcyB0aGUgcGF0Y2ggZml4PyBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IGFkZHJlc3Npbmcgc2l0dWF0aW9ucyB3aGVyZSBgbWFkdmlzZV91cGRhdGVfdm1hYCBpcyBjYWxsZWQsIG5vdCBqdXN0IGZvciBgTUFEVl9IVUdFUEFHRWAsIGJ1dCBhbHNvIGZvciBvdGhlciBgbWFkdmlzZWAgZmxhZ3MgbGlrZSBgTUFEVl9OT1JNQUxgLCBgTUFEVl9TRVFVRU5USUFMYCwgZXRjLiBJZiBhIFZNQSB3aXRoIGBWTV9IVUdFUEFHRWAgc2V0IGxhdGVyIGhhcyBhIGNhbGwgdG8gYE1BRFZfTk9STUFMYCwgdGhlbiBhIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBvY2N1cnMsIGJ1dCBpdCBkb2VzIG5vdGhpbmcgaWYgYE1NRl9WTV9IVUdFUEFHRWAgaXMgYWxyZWFkeSBzZXQuXG5cbkkgaGFkIGEgbW9tZW50IG9mIGNsYXJpdHkuIFdoYXQgaWYgYE1NRl9WTV9IVUdFUEFHRWAgKmlzbid0KiBzZXQgaW5pdGlhbGx5LCBidXQgYFZNX0hVR0VQQUdFYCAqaXMqPyBUaGlzIGhhcHBlbnMgaWYgYGh1Z2VwYWdlX2VuYWJsZWQoKWAgaXMgZmFsc2UgaW5pdGlhbGx5LCBidXQgbGF0ZXIgYmVjb21lcyB0cnVlIChlLmcuLCB3aGVuIHRoZSBhZG1pbiBlbmFibGVzIFRIUCksIGFuZCB0aGVuIGBtYWR2aXNlKE1BRFZfTk9STUFMKWAgaXMgY2FsbGVkLiBJbiB0aGlzIGNhc2UsIGBfX2todWdlcGFnZWRfZW50ZXJgIGlzIGNhbGxlZCBiZWNhdXNlIGBodWdlcGFnZV9lbmFibGVkKClgIGlzIG5vdyB0cnVlLiBUaGlzIG1lYW5zLCAqYmVmb3JlKiB0aGUgcGF0Y2gsIHRoaXMgc2NlbmFyaW8gd291bGQgbm90IHJlZ2lzdGVyIHRoZSBgbW1gLCB3aGVyZWFzIG5vdywgaXQgZG9lcy4gSXMgdGhpcyB3aGF0J3MgaW50ZW5kZWQ/IEkgY29uc2lkZXJlZCB0aGUgYE1BRFZfQ09MTEFQU0VgIGZsYWcsIGJ1dCB0aGF0IGRvZXNuJ3QgbW9kaWZ5IHRoZSBWTUEgZmxhZ3MsIHNvIHRoaXMgaXMgdW5yZWxhdGVkLlxuXG5IZXJlJ3MgdGhlIGtleTogV2hhdCBpZiBgbWFkdmlzZV91cGRhdGVfdm1hYCAqc3BsaXRzKiB0aGUgVk1BPyBXaGVuIEkgZHVnIGRlZXBlciwgSSByZWFsaXplZCB0aGUgYnVnJ3MgY29yZSBsaWVzIGluIGhvdyB0aGUgYGtodWdlcGFnZWRgIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGhhbmRsZWQgVk1BIHNwbGl0dGluZy4gSWYgYE1BRFZfSFVHRVBBR0VgIGlzIGNhbGxlZCBvbiBhIGxhcmdlIFZNQSwgYF9fa2h1Z2VwYWdlZF9lbnRlcmAgZ2V0cyBjYWxsZWQsIHJlZ2lzdGVyaW5nIHRoZSBgbW1gLiBUaGVuLCBgbWFkdmlzZV91cGRhdGVfdm1hYCBzcGxpdHMgdGhlIFZNQSwgY3JlYXRpbmcgc21hbGxlciBWTUFzLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgYG1tYCB3YXMgKmFscmVhZHkqIHJlZ2lzdGVyZWQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHRpbmcsIHNwbGl0LCBWTUEgd2l0aCBgVk1fSFVHRVBBR0VgIHdhcyBzbWFsbC4gKkFmdGVyKiB0aGUgcGF0Y2gsIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgaXMgTk9UIGNhbGxlZCBvbiB0aGUgb3JpZ2luYWwgVk1BLCBidXQgb24gdGhlIG5ldyBzbWFsbCBWTUEuIFRoYXQgbWVhbnMsIGBjb2xsYXBzZV9wb3NzaWJsZWAgd291bGQgY29ycmVjdGx5IGRldGVybWluZSB0aGF0IHRoZSBzbWFsbCBWTUEgaXMgbm90IHN1aXRhYmxlIGZvciBUSFAgYW5kIE5PVCByZWdpc3RlciB0aGUgYG1tYC4gSXQgcHJldmVudHMga2h1Z2VwYWdlZCBmcm9tIHdha2luZyB1cCBhbmQgc2Nhbm5pbmcgYW4gYG1tYCB0aGF0IG9ubHkgaGFzIGEgc21hbGwgYFZNX0hVR0VQQUdFYCBWTUEuXG5cblNwZWNpZmljYWxseSwgaXQgc3RvcHMga2h1Z2VwYWdlZCBmcm9tIHNjYW5uaW5nIGZvciBUSFAsIGlmIHRoZSBhZHZpc2VkIHJhbmdlIGlzIHNtYWxsLiBCZWZvcmUgdGhlIHBhdGNoLCBpdCB3b3VsZCBzY2FuIHRoZSB3aG9sZSBtbSBhZnRlciBhbiBpbml0aWFsIG1hZHZpc2UgY2FsbCBvbiB0aGUgbGFyZ2VyIHJhbmdlLlxuXG5JIGhhdmUgaXQhIFRoaXMgcGF0Y2gncyBwcmltYXJ5IGZ1bmN0aW9uIGlzIHRvIGVuc3VyZSB0aGF0IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgb3BlcmF0ZXMgb24gdGhlICpjb3JyZWN0KiBWTUEgYm91bmRzIGFmdGVyIHNwbGl0cy9tZXJnZXMuIFRoaXMgaXMgYSBjbGVhciBidWcgZml4LCBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IGtodWdlcGFnZWQgd2FrZXVwcyBhbmQgd2FzdGVkIENQVSBjeWNsZXMgd2hlbiBhIHNtYWxsIHBvcnRpb24gb2YgYSBWTUEgaXMgbWFya2VkIGFzIGBIVUdFUEFHRWAuIFRoaXMgYmVoYXZpb3IgbmVlZHMgZnV6emluZyFcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBmdXJ0aGVyOlxuKiAgIEEgNEtCIHJhbmdlIHdpdGhpbiBhIDJNQiBWTUEsIGJlZm9yZSB0aGUgcGF0Y2gsIHdvdWxkIHJlZ2lzdGVyIGBtbWAsIHdoaWxlXG5cbiIsIklucHV0VG9rZW5zIjozNjUxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTozNC4wNzIzNjMzNjJaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjE3NTU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeU1lTQ0FMTF9ERUZJTkUuKm1hZHZpc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xOTkzPWludCBkb19tYWR2aXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLCBpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMjAyMC1cXG5tbS9tYWR2aXNlLmM6MjAyMTpTWVNDQUxMX0RFRklORTMobWFkdmlzZSwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuX2luLCBpbnQsIGJlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0yMDIyLXtcXG4tLVxcbm1tL21hZHZpc2UuYz0yMDI3PXN0YXRpYyBzc2l6ZV90IHZlY3Rvcl9tYWR2aXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMjA5My1cXG5tbS9tYWR2aXNlLmM6MjA5NDpTWVNDQUxMX0RFRklORTUocHJvY2Vzc19tYWR2aXNlLCBpbnQsIHBpZGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICosIHZlYyxcXG5tbS9tYWR2aXNlLmMtMjA5NS1cXHRcXHRzaXplX3QsIHZsZW4sIGludCwgYmVoYXZpb3IsIHVuc2lnbmVkIGludCwgZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjM0LjQ3ODU0NTY0NloiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAwMDgyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlLCBmb2N1c2luZyBvbiBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFN5c3RlbSBDYWxscyBhbmQgS0hVR0VQQUdFRCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdoZXJlIHdlIGNhbiBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgYW5kIG9wdGltaXplIHBlcmZvcm1hbmNlLiBNeSBpbml0aWFsIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gdGhvc2UgYG1hZHZpc2VgIHJlbGF0ZWQgc3lzdGVtIGNhbGxzOiBgZG9fbWFkdmlzZWAsIGBzeXNfbWFkdmlzZWAsIGFuZCBgc3lzX3Byb2Nlc3NfbWFkdmlzZWAuICBVbmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoZXNlIGNhbGxzIGltcGFjdCBwYWdlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpcyBjcnVjaWFsLiBXZSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgYXQgZWFjaCBzdGFnZS4gSXQncyBhYm91dCBmaWd1cmluZyBvdXQgaG93IHRoZSBhZHZpY2UgZ2l2ZW4gYWZmZWN0cyBwaHlzaWNhbCBtZW1vcnkgdXNhZ2UsIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cbkJleW9uZCB0aG9zZSwgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbHNvIGNhdGNoZXMgbXkgZXllLiBUaGlzIHdpbGwgYmUgYSBnb29kIHBvaW50IHRvIGZvY3VzIG9uIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLiBXZSBzaG91bGQgZXhhbWluZSBob3cgdGhlIGtlcm5lbCBkZWNpZGVzIHRvIHVzZSBodWdlIHBhZ2VzIHdpdGhpbiBhIHZpcnR1YWwgbWVtb3J5IGFyZWEsIGFzIHRoaXMgaW1wYWN0cyBib3RoIG1lbW9yeSBmb290cHJpbnQgYW5kIFRMQiBwZXJmb3JtYW5jZS4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGlmIHRoZXJlIGFyZSBhcmVhcyB3ZSBjYW4gcmVmaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIyNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjM4LjY3ODYzMTUxNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MzI3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTU4Mj1zdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01ODctXFxubW0va2h1Z2VwYWdlZC5jOjU4ODp2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy01ODktXFx0XFx0XFx0ICB2bV9mbGFnc190IHZtX2ZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTozOC43MjIxNjgxMjlaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1NzYyNzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZ1bmN0aW9uIGlzbid0IGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzLiBGaXJzdCwgaXQgaW1wbGllcyBpdCBtaWdodCBiZSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgbGlua2FnZSwgbWVhbmluZyBpdCdzIHBvdGVudGlhbGx5IGV4cG9zZWQgZm9yIHVzZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUga2VybmVsIG1vZHVsZSB3aGVyZSBpdCdzIGRlZmluZWQuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgd2h5LCB0aG91Z2guIElzIGl0IGJlaW5nIGNhbGxlZCBieSBvdGhlciBtb2R1bGVzLCBvciBpcyBpdCBwYXJ0IG9mIHNvbWUgbGFyZ2VyIHN1YnN5c3RlbT8gSSdkIHdhbnQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgY3Jvc3MtcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFNlY29uZCwgbm90IGJlaW5nIHN0YXRpYyBtZWFucyB0aGF0IHRoZSBjb21waWxlciBpc24ndCBtYWtpbmcgYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyBzY29wZS4gSXQgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IG1hbmFnZWQgaWYgaXRzIGNhbGxpbmcgbG9jYXRpb24gaXMgbm90IGNsZWFybHkgZGVmaW5lZC5cblxuVGhlIHNhbWUgZ29lcyBmb3IgYGh1Z2VwYWdlX21hZHZpc2VgLiBJdHMgbGFjayBvZiBgc3RhdGljYCBkZWNsYXJhdGlvbiBpcyBlcXVhbGx5IG5vdGV3b3J0aHkuIE5vdywgdGhhdCBsaWtlbHkgbWVhbnMgaXQgaXMgYWxzbyBpbnRlbmRlZCBmb3IgbGlua2FnZSBvdXRzaWRlIG9mIHRoZSBzaW5nbGUgZmlsZSBpbiB3aGljaCBpdCdzIGRlZmluZWQuIEhvd2V2ZXIsIGRlcGVuZGluZyBvbiBpdHMgdXNlIGFuZCBsb2NhdGlvbiwgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgY2FsbGVkIGZyb20gdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBUaGlzIGNhbiBoYXZlIHNlcmlvdXMgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkcyB0byBzZWN1cml0eSBjb25jZXJucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGlzIGZ1bmN0aW9uIHBhcnQgb2YgYSBicm9hZGVyIGh1Z2VwYWdlIG1hbmFnZW1lbnQgaW50ZXJmYWNlPyBBcmUgdGhlcmUgb3RoZXIgZmlsZXMgb3IgbW9kdWxlcyByZWx5aW5nIG9uIGl0PyBJdCBzZWVtcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGZvciBsaW5rYWdlIGFjcm9zcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIExpbnV4IGtlcm5lbCwgbm90IGp1c3Qgd2l0aGluIGEgc2luZ2xlIGZpbGUuXG5cbkluIGFueSBjYXNlLCB0aGUgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbnMgb2YgYm90aCBhcmUgd29ydGggc29tZSBzZXJpb3VzIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjY5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6NDMuMjc5Nzk3NDk2WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI5NjI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaHVnZXBhZ2VfbWFkdmlzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ0OS1cXG5tbS9raHVnZXBhZ2VkLmM6NDUwOmludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2todWdlcGFnZWQuYy00NTEtXFx0XFx0ICAgICB2bV9mbGFnc190ICp2bV9mbGFncywgaW50IGFkdmljZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6NDMuMzQ1MTAyMjYzWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTcyMTk1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBUaGlua2luZyBvbiBSZWxldmFudCBLZXJuZWwgRnVuY3Rpb25zKipcblxuUmlnaHQsIGZvY3VzaW5nIG9uIHRoZSBodWdlIHBhZ2UgbWVjaGFuaXNtcy4uLiBJJ20gdGhpbmtpbmcgd2UgY2FuIHN0cmVhbWxpbmUgdGhpbmdzIGJ5IGNvbmNlbnRyYXRpbmcgb24gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBhbmQgYGh1Z2VwYWdlX21hZHZpc2VgIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgdmlydHVhbCBtZW1vcnkgYXJlYXMgYXJlIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gaHVnZSBwYWdlcy5cblxuTm93LCB0aGF0IGJyaW5ncyB1cCBgbWFkdmlzZV91cGRhdGVfdm1hYC4gSXQgKmlzKiBpbiB0aGUgbWl4LCBidXQgc2luY2UgaXQncyBkZWNsYXJlZCBzdGF0aWMsIGl0J3MgcHJvYmFibHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBXZSBzaG91bGRuJ3QgbmVlZCB0byBkaXJlY3RseSBhZGRyZXNzIGl0IHdoZW4gYW5hbHl6aW5nIHRoZSBiaWdnZXIgcGljdHVyZS4gV2UgY2FuIHByb2JhYmx5IGp1c3Qgc2FmZWx5IGlnbm9yZSBpdCBmb3IgdGhpcyBwdXJwb3NlLlxuXG5UaGUgb3RoZXIgb25lIHRoYXQganVtcHMgb3V0IGlzIGB2bWFfbW9kaWZ5X2ZsYWdzYC4gVW5saWtlIHRoZSBzdGF0aWMgZnVuY3Rpb24gd2UganVzdCB0b3VjaGVkIHVwb24sIGB2bWFfbW9kaWZ5X2ZsYWdzYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0IHNob3VsZCBiZSBvbiBvdXIgcmFkYXIuIEl0IG11c3QgaGF2ZSBzb21lIHNpZ25pZmljYW5jZSBpbiBob3cgdGhlIGZsYWdzIGZvciBhIFZNQSBhcmUgbW9kaWZpZWQuIFdlIGRlZmluaXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTE4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjQ3LjEwMjMyNTk2NVoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMzIyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHZtX2FyZWFfc3RydWN0IFxcXFwqdm1hX21vZGlmeV9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWEuYz0xNzQ4PXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnkoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZylcXG4tLVxcbm1tL3ZtYS5jLTE3ODctXFxubW0vdm1hLmM6MTc4ODpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tb2RpZnlfZmxhZ3Moc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbm1tL3ZtYS5jLTE3ODktXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3ZtYS5jPTE4MjU9c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X3BvbGljeShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXFxuLS1cXG5tbS92bWEuYy0xODM2LVxcbm1tL3ZtYS5jOjE4Mzc6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbW9kaWZ5X2ZsYWdzX3VmZmQoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxcbm1tL3ZtYS5jLTE4MzgtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDE6NDcuMTU2NjY0MDAxWiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzU0Njk5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB2bWFfbW9kaWZ5X2ZsYWdzYCoqXG5cbk9rYXksIHNvIGB2bWFfbW9kaWZ5X2ZsYWdzYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIGl0LiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGxpdmVzLiBJIHZhZ3VlbHkgcmVtZW1iZXIgaXQgYmVpbmcgcmVsYXRlZCB0byBodWdlIHBhZ2VzLCBzbyBgbW0va2h1Z2VwYWdlZC5jYCBzb3VuZHMgcmlnaHQuIEp1c3QgdG8gYmUgc3VyZSwgSeKAmWxsIHRha2UgYSBxdWljayBwZWVrIGF0IGBtbS9NYWtlZmlsZWAgdG8gdmVyaWZ5IHRoYXQgYGtodWdlcGFnZWQub2AgaXMgYnVpbHQsIHdoaWNoIHdpbGwgY29uZmlybSBpdCdzIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBtb2R1bGUuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHByb2NlZHVyZSB3aGVuIEknbSBjaGFzaW5nIGRvd24ga2VybmVsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc4MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjUwLjQzMjEzNzYzMVoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MjE4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2h1Z2VwYWdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTo1MC40NzY4NjQ4MzZaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NTM0NzQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnM6XG5cbioqRGVlcCBEaXZlIGludG8gVEhQIGFuZCBtYWR2aXNlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGEgZmlybSByZXF1aXJlbWVudDogYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXI/IEl0IGxvb2tzIGxpa2UgYG1hZHZpc2VgIGlzIGFsd2F5cyBhY3RpdmUgdW5sZXNzIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCBpcyBkaXNhYmxlZC4gVGhhdCdzIGEga2V5IGRldGFpbCB0byByZW1lbWJlci5cblxuVG8gY29uZmlybSB0aGlzIGBBRFZJU0VfU1lTQ0FMTFNgIGJlaGF2aW9yLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2UgY29uZmlncy4gTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgaW5pdC9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGBBRFZJU0VfU1lTQ0FMTFNgLiBUaGF0IHNob3VsZCBzZXR0bGUgdGhlIG1hdHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTo1NS44NjIyMTQ5MjFaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDA3MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFEVklTRV9TWVNDQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5NDE9Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbi0tXFxuaW5pdC9LY29uZmlnLTE5NTEtXFxuaW5pdC9LY29uZmlnOjE5NTI6Y29uZmlnIEFEVklTRV9TWVNDQUxMU1xcbmluaXQvS2NvbmZpZy0xOTUzLVxcdGJvb2wgXFxcIkVuYWJsZSBtYWR2aXNlL2ZhZHZpc2Ugc3lzY2FsbHNcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MTo1NS45MDY2Mjc3NzZaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMDYxMDk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgY29uZmlybWVkIOKAkyB3ZSBhYnNvbHV0ZWx5IG5lZWQgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgLiBUaGF0J3Mgbm9uLW5lZ290aWFibGUgZm9yIHdoYXQgd2UncmUgd29ya2luZyBvbi4gTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyB0aGF0IGNvdWxkIGJpdGUgdXMgZG93biB0aGUgbGluZS4gV2Uga25vdyBpdCdzIHJlbGF0ZWQsIGJ1dCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIGlzIG5lZWRlZCBoZXJlIGZvciBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLiBUaW1lIHRvIGludmVzdGlnYXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjUxNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjU5LjIzNzI0MTkyMloiLCJTZXEiOjgwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2MzkzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTgtXFxubW0vS2NvbmZpZzo4NTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODYwLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODY1LVxcbm1tL0tjb25maWc6ODY2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjctXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODc0LVxcbm1tL0tjb25maWc6ODc1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODc2LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5MS1cXG5tbS9LY29uZmlnOjg5MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkzLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDEtXFxubW0vS2NvbmZpZzo5MDI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDMtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDktXFxubW0vS2NvbmZpZzo5MTA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE3LVxcbm1tL0tjb25maWc6OTE4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE5LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI3PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzYtXFxubW0vS2NvbmZpZzo5Mzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzOC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ1LVxcbm1tL0tjb25maWc6OTQ2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUzLVxcbm1tL0tjb25maWc6OTU0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTUtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2MS1cXG5tbS9LY29uZmlnOjk2MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2My1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQxOjU5LjMxMTg4NTgzWiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjU2NjI4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbW0vS2NvbmZpZ2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgc2NlbmFyaW86XG5cbioqQW5hbHl6aW5nIHRoZSBUcmFuc3BhcmVudCBIdWdlcGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9wdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZlYXR1cmUgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byBzZWUgaG93IHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBpcyBjb250cm9sbGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCdzIGluIHBsYWNlLiBJcyBpdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWM/IERvZXMgaXQgcmVseSBvbiBvdGhlciBmZWF0dXJlcz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25mbGljdHMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHZpc2liaWxpdHkgYW5kIGNvbmZpZ3VyYWJpbGl0eSBmcm9tIHRoZSBlbmQtdXNlciBwZXJzcGVjdGl2ZSwgYXMgd2VsbCBhcyB0aGUgdW5kZXJseWluZyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwuIFRoaXMgY29uZmlnIG9wdGlvbiBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaXMgc2V0IHVwIHRvIGRlYWwgd2l0aCBsYXJnZXIgbWVtb3J5IHBhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQzMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQyOjAyLjIzNzU1MTk3M1oiLCJTZXEiOjgyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzU6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4MzY6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODM3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDgzODpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4Mzk6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4NDA6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDg0MTpcXHRcXHRoZWxwXFxuIDg0MjpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODQzOlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4NDQ6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODQ1OlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODQ2OlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NDc6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg0ODpcXHRcXG4gODQ5OlxcdFxcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXFxuIDg1MDpcXHRcXG4gODUxOlxcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNob2ljZVxcbiA4NTQ6XFx0XFx0cHJvbXB0IFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MjowMi4yMzc2NTQ1OTNaIiwiU2VxIjo4MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA0NjYxMDA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSHVnZXBhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nOiB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgbmF0dXJhbGx5LCBhbmQgd2UgZGVmaW5pdGVseSBuZWVkIGBBRFZJU0VfU1lTQ0FMTFNgIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgcmVsZXZhbnQuIFRoZSBjZW50cmFsIHByb2JsZW0gaXQncyBhZGRyZXNzaW5nIGlzIGEgYnVnIGluIGhvdyBga2h1Z2VwYWdlZGAgaXMgd29rZW4gdXAgd2hlbiBkZWFsaW5nIHdpdGggYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIG9uIFZNQXMuXG5cbkJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgc3lzdGVtIHdvdWxkIHJlZ2lzdGVyIGEgVk1BIHdpdGggYGtodWdlcGFnZWRgIHVzaW5nIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgd2l0aGluIGBodWdlcGFnZV9tYWR2aXNlYC4gVGhlIGlzc3VlPyBJZiB5b3UgaGFkIGEgKmxhcmdlKiBWTUEgYW5kIHRoZW4gdXNlZCBgbWFkdmlzZWAgb24gYSAqc21hbGwqIHBvcnRpb24gb2YgaXQsIHRoZSBzeXN0ZW0gd2FzIHJlZ2lzdGVyaW5nIHRoZSAqb3JpZ2luYWwqIGxhcmdlIFZNQSdzIHNpemUsICpiZWZvcmUqIHRoZSBWTUEgc3BsaXQuIFRoaXMgY291bGQgbGVhZCB0byB1bm5lY2Vzc2FyeSBga2h1Z2VwYWdlZGAgd2FrZXVwcywgb3IgZXZlbiB0aGUgd3JvbmcgVk1BIGJlaW5nIGNvbnNpZGVyZWQuXG5cblRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSBtb3ZpbmcgdGhlIFZNQSByZWdpc3RyYXRpb24gdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoaXMgZW5zdXJlcyB0aGUgcmVnaXN0cmF0aW9uIGhhcHBlbnMgKmFmdGVyKiB0aGUgVk1BIGlzIHNwbGl0IG9yIG1lcmdlZCwgbWVhbmluZyBga2h1Z2VwYWdlZGAgd2lsbCAqb25seSogYmUgd29rZW4gdXAgaWYgdGhlIHJlc3VsdGluZyBWTUEgaXMgYWN0dWFsbHkgbGFyZ2UgZW5vdWdoIGZvciBodWdlcGFnZSBjb25zaWRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBraHVnZXBhZ2VkYCB3YWtldXBzIGFuZCBWTUEgaGFuZGxpbmcsIGJlaGF2ZXMuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGlzIGNoYW5nZSBpbiBiZWhhdmlvci5cblxuSSd2ZSBpZGVudGlmaWVkIHNvbWUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb246IGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAsIGBodWdlcGFnZV9tYWR2aXNlYCwgYW5kIGB2bWFfbW9kaWZ5X2ZsYWdzYC4gSSd2ZSBjaGVja2VkIGFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCAqbm90KiBzdGF0aWMsIHNvIHRoZXkncmUgYWNjZXNzaWJsZS5cblxuVGhlIGNvcmUgY29uZmlnIG5lZWRlZCBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyBuYXR1cmFsbHkg4oCTIGFuZCBgQURWSVNFX1NZU0NBTExTYCwgYnV0IEkgYWxzbyBkb3VibGUgY2hlY2tlZCB0aGF0IGBDT05GSUdfTU1VYCBpcyBpbXBsaWNpdGx5IGltcGxpZWQgYnkgdGhlIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlZmluaXRpb24sIHdoaWNoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgcmVsaWVzIG9uLiBCZXlvbmQgdGhhdCwgdGhlcmUgYXJlIG5vIG90aGVyIHNwZWNpZmljIGNvbmZpZ3MgcmVxdWlyZWQgdGhhdCBJIGNhbiBzZWUuIFNvLCB3aXRoIHRoaXMgdW5kZXJzdGFuZGluZywgSSBjYW4gbm93IGNyYWZ0IG15IHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk3OSwiT3V0cHV0VG9rZW5zIjoyNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MjoxMS4yODQyNjk3WiIsIlNlcSI6ODQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwODQyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJraHVnZXBhZ2VkX2VudGVyX3ZtYVwiLFxuICAgIFwiaHVnZXBhZ2VfbWFkdmlzZVwiLFxuICAgIFwidm1hX21vZGlmeV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSByZWdpc3RyYXRpb24gb2YgYSBWTUEgd2l0aCBraHVnZXBhZ2VkIChga2h1Z2VwYWdlZF9lbnRlcl92bWFgKSBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgb24gYSBzbWFsbCByYW5nZSB3aXRoaW4gYSBsYXJnZSBWTUEgd291bGQgaW5jb3JyZWN0bHkgcmVnaXN0ZXIgdGhlIGBtbWAgd2l0aCBraHVnZXBhZ2VkIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBsYXJnZSBWTUEncyBzaXplLCBiZWZvcmUgdGhlIFZNQSB3YXMgc3BsaXQuIEJ5IG1vdmluZyB0aGUgcmVnaXN0cmF0aW9uIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgLCB0aGUgcmVnaXN0cmF0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgbmV3bHkgc3BsaXQvbWVyZ2VkIFZNQSwgZW5zdXJpbmcgdGhhdCBraHVnZXBhZ2VkIGlzIG9ubHkgd29rZW4gdXAgaWYgdGhlIHJlc3VsdGluZyBWTUEgaXMgYWN0dWFsbHkgbGFyZ2UgZW5vdWdoIHRvIGJlIGNvbGxhcHNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMga2h1Z2VwYWdlZCB3YWtldXBzIGFuZCBWTUEgaGFuZGxpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2h1Z2VwYWdlZF9lbnRlcl92bWFcIixcbiAgICBcImh1Z2VwYWdlX21hZHZpc2VcIixcbiAgICBcInZtYV9tb2RpZnlfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgVk1BIHdpdGgga2h1Z2VwYWdlZCAoYGtodWdlcGFnZWRfZW50ZXJfdm1hYCkgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYG1hZHZpc2UoTUFEVl9IVUdFUEFHRSlgIG9uIGEgc21hbGwgcmFuZ2Ugd2l0aGluIGEgbGFyZ2UgVk1BIHdvdWxkIGluY29ycmVjdGx5IHJlZ2lzdGVyIHRoZSBgbW1gIHdpdGgga2h1Z2VwYWdlZCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgbGFyZ2UgVk1BJ3Mgc2l6ZSwgYmVmb3JlIHRoZSBWTUEgd2FzIHNwbGl0LiBCeSBtb3ZpbmcgdGhlIHJlZ2lzdHJhdGlvbiB0byBgbWFkdmlzZV91cGRhdGVfdm1hYCwgdGhlIHJlZ2lzdHJhdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIG5ld2x5IHNwbGl0L21lcmdlZCBWTUEsIGVuc3VyaW5nIHRoYXQga2h1Z2VwYWdlZCBpcyBvbmx5IHdva2VuIHVwIGlmIHRoZSByZXN1bHRpbmcgVk1BIGlzIGFjdHVhbGx5IGxhcmdlIGVub3VnaCB0byBiZSBjb2xsYXBzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGtodWdlcGFnZWQgd2FrZXVwcyBhbmQgVk1BIGhhbmRsaW5nLCB3aGljaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQyOjExLjM1NTM1OTgwN1oiLCJTZXEiOjg1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUwNDI4NDMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDAzOjQyOjExLjM1NTkwOTY5N1oiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NTAzNzMwMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgY2FsbCB0byBga2h1Z2VwYWdlZF9lbnRlcl92bWFgIGZyb20gYGh1Z2VwYWdlX21hZHZpc2VgIHRvIGBtYWR2aXNlX3VwZGF0ZV92bWFgIHRvIGVuc3VyZSB0aGUgVk1BIGlzIHJlZ2lzdGVyZWQgZm9yIGtodWdlcGFnZWQgc2Nhbm5pbmcgd2hlbiB0aGUgYFZNX0hVR0VQQUdFYCBmbGFnIGlzIHNldC4gVGhpcyBjaGFuZ2UgaW52b2x2ZXMgVk1BIGZsYWcgbWFuYWdlbWVudCBhbmQgZnVuY3Rpb24gY2FsbCByZWxvY2F0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSwgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGJ1Z3MsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliOTQyZjZkYTIwYTFkZWM2M2JkMGZkNjZmZDUxYTQ3ZGM5ODczOTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAwMzozNzo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xuaW5kZXggNWEwNmUzOTQyZTg4OS4uNzllZmZkM2YzZGE0ZiAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtNDU0LDEyICs0NTQsNiBAQCBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNhc2UgTUFEVl9IVUdFUEFHRTpcbiBcdFx0KnZtX2ZsYWdzIFx1MDAyNj0gflZNX05PSFVHRVBBR0U7XG4gXHRcdCp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTtcbi1cdFx0Lypcbi1cdFx0ICogSWYgdGhlIHZtYSBiZWNvbWUgZ29vZCBmb3Iga2h1Z2VwYWdlZCB0byBzY2FuLFxuLVx0XHQgKiByZWdpc3RlciBpdCBoZXJlIHdpdGhvdXQgd2FpdGluZyBhIHBhZ2UgZmF1bHQgdGhhdFxuLVx0XHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxuLVx0XHQgKi9cbi1cdFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCAqdm1fZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTUFEVl9OT0hVR0VQQUdFOlxuIFx0XHQqdm1fZmxhZ3MgXHUwMDI2PSB+Vk1fSFVHRVBBR0U7XG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCBjMTc5OTM4MDk3YmYwLi5jYjkzY2Y4MmQ4ZGY2IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4rKysgYi9tbS9tYWR2aXNlLmNcbkBAIC0xNzgsNiArMTc4LDE0IEBAIHN0YXRpYyBpbnQgbWFkdmlzZV91cGRhdGVfdm1hKHZtX2ZsYWdzX3QgbmV3X2ZsYWdzLFxuIFx0Lyogdm1fZmxhZ3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSBtbWFwX2xvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLiAqL1xuIFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XG4gXHR2bWEtXHUwMDNlZmxhZ3MgPSBuZXdfdm1hX2ZsYWdzO1xuK1x0LypcbitcdCAqIElmIHRoZSB2bWEgYmVjb21lIGdvb2QgZm9yIGtodWdlcGFnZWQgdG8gc2NhbixcbitcdCAqIHJlZ2lzdGVyIGl0IGhlcmUgd2l0aG91dCB3YWl0aW5nIGEgcGFnZSBmYXVsdCB0aGF0XG4rXHQgKiBtYXkgbm90IGhhcHBlbiBhbnkgdGltZSBzb29uLlxuK1x0ICovXG4rXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bmV3X3ZtYV9mbGFncywgVk1BX0hVR0VQQUdFX0JJVCkpXG4rXHRcdGtodWdlcGFnZWRfZW50ZXJfdm1hKHZtYSwgdm1hX2ZsYWdzX3RvX2xlZ2FjeShuZXdfdm1hX2ZsYWdzKSk7XG4rXG4gXHRpZiAoc2V0X25ld19hbm9uX25hbWUpXG4gXHRcdHJldHVybiByZXBsYWNlX2Fub25fdm1hX25hbWUodm1hLCBhbm9uX25hbWUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDM6NDI6MTEuMzU1OTEwNzg3WiIsIlNlcSI6ODcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MDM3MDg0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIGl0IGlzIGEgcmVmYWN0b3JpbmcsIHNwZWNpZmljYWxseSBtb3ZpbmcgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYC4gQmVmb3JlLCB3aGVuIGBNQURWX0hVR0VQQUdFYCB3YXMgc2V0IGluIGBodWdlcGFnZV9tYWR2aXNlYCwgd2UnZCBpbW1lZGlhdGVseSByZWdpc3RlciB0aGUgVk1BLiBOb3csIHRoYXQgcmVnaXN0cmF0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gYG1hZHZpc2VfdXBkYXRlX3ZtYWAsIGRpcmVjdGx5IGFmdGVyIHVwZGF0aW5nIHRoZSBWTUEncyBmbGFncy5cblxuVGhlIGtleSBpcyB0aGF0IHRoZSByZWxldmFudCBmbGFnIGNoZWNrIG5vdyBvY2N1cnMgaW5zaWRlIGBtYWR2aXNlX3VwZGF0ZV92bWFgOiBgaWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNm5ld192bWFfZmxhZ3MsIFZNQV9IVUdFUEFHRV9CSVQpKWAuIEl0J3MgZW5zdXJpbmcgdGhlIFZNQSBpcyBub3cgc3VpdGFibGUgZm9yIGtodWdlcGFnZWQgYmVmb3JlIHByb2NlZWRpbmcsIHVzaW5nIHRoZSBpbnRlcm5hbCBgdm1hX2ZsYWdzX3Rlc3RgIGZ1bmN0aW9uLCBhbmQgY29udmVydGluZyB0aG9zZSBmbGFncyB1c2luZyBgdm1hX2ZsYWdzX3RvX2xlZ2FjeWAuXG5cblRoZSBjb21tZW50IGluIHRoZSBjb2RlIGhpZ2hsaWdodHMgdGhlIHJlYXNvbiBmb3IgdGhpcyBpbW1lZGlhdGUgcmVnaXN0cmF0aW9uOiB0byBhdm9pZCB3YWl0aW5nIGZvciBhIHBhZ2UgZmF1bHQgdGhhdCBtaWdodCBuZXZlciBvY2N1ci4gVGhpcyBpcyBhIGdvb2QgbW92ZSB0byBnZXQgVk1BcyBpbnRvIHRoZSBraHVnZXBhZ2VkIHNjYW5uaW5nIHByb2Nlc3MgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgdXNlci1zcGFjZSBleHBvc2VkIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGdvb2QuIEl0IGRvZXNuJ3Qgc2VlbSB0byB0b3VjaCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55dGhpbmcgbGlrZSB0aGF0LCBzbyBJJ20gbm90IHdvcnJpZWQgYWJvdXQgdGhhdC4gVGhlIHVzdWFsIGNoZWNrcyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzLiBTbywgSSB3aWxsIGJlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGVhbiwgZm9jdXNlZCByZWZhY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MywiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwMzo0MjoxOC44NTk2MjI5ODlaIiwiU2VxIjo4OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBraHVnZXBhZ2VkX2VudGVyX3ZtYWAgZnJvbSBgaHVnZXBhZ2VfbWFkdmlzZWAgdG8gYG1hZHZpc2VfdXBkYXRlX3ZtYWAgdG8gZW5zdXJlIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCBmb3Iga2h1Z2VwYWdlZCBzY2FubmluZyB3aGVuIHRoZSBgVk1fSFVHRVBBR0VgIGZsYWcgaXMgc2V0LiBUaGlzIGNoYW5nZSBpbnZvbHZlcyBWTUEgZmxhZyBtYW5hZ2VtZW50IGFuZCBmdW5jdGlvbiBjYWxsIHJlbG9jYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgYnVncywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGNhbGwgdG8gYGtodWdlcGFnZWRfZW50ZXJfdm1hYCBmcm9tIGBodWdlcGFnZV9tYWR2aXNlYCB0byBgbWFkdmlzZV91cGRhdGVfdm1hYCB0byBlbnN1cmUgdGhlIFZNQSBpcyByZWdpc3RlcmVkIGZvciBraHVnZXBhZ2VkIHNjYW5uaW5nIHdoZW4gdGhlIGBWTV9IVUdFUEFHRWAgZmxhZyBpcyBzZXQuIFRoaXMgY2hhbmdlIGludm9sdmVzIFZNQSBmbGFnIG1hbmFnZW1lbnQgYW5kIGZ1bmN0aW9uIGNhbGwgcmVsb2NhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBidWdzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpmwwl[1] Phase: Succeeded StartedAt: 2026-08-18 03:42:29 +0000 UTC FinishedAt: 2026-08-18 03:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 03:42:29 +0000 UTC FinishedAt: 2026-08-18 03:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2] Phase: Succeeded StartedAt: 2026-08-18 03:42:29 +0000 UTC FinishedAt: 2026-08-18 07:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:42:29 +0000 UTC FinishedAt: 2026-08-18 07:21:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:42:29 +0000 UTC FinishedAt: 2026-08-18 03:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:42:29 +0000 UTC FinishedAt: 2026-08-18 03:42:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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-workflowpmwwl/series-workflowpmwwl-convert-artifact-4257388097/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:42:39 +0000 UTC FinishedAt: 2026-08-18 03:58:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:42:39 +0000 UTC FinishedAt: 2026-08-18 03:58:58 +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:*61d53acc-4784-45fc-9a23-74c87a1fb21f,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-workflowpmwwl/series-workflowpmwwl-convert-artifact-4257388097/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": "d8906aae-1c71-41fa-bc81-765b0f2b620d", "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-workflowpmwwl/series-workflowpmwwl-build-action-3083844719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:42:39 +0000 UTC FinishedAt: 2026-08-18 03:58:48 +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:*61d53acc-4784-45fc-9a23-74c87a1fb21f,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-workflowpmwwl/series-workflowpmwwl-convert-artifact-4257388097/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": "d8906aae-1c71-41fa-bc81-765b0f2b620d", "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-workflowpmwwl/series-workflowpmwwl-build-action-3083844719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:58:58 +0000 UTC FinishedAt: 2026-08-18 03:58:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:58:58 +0000 UTC FinishedAt: 2026-08-18 03:58:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:58:58 +0000 UTC FinishedAt: 2026-08-18 03:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:58:58 +0000 UTC FinishedAt: 2026-08-18 03:59:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-workflowpmwwl/series-workflowpmwwl-convert-artifact-673884692/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:59:08 +0000 UTC FinishedAt: 2026-08-18 04:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 03:59:08 +0000 UTC FinishedAt: 2026-08-18 04:01:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d8906aae-1c71-41fa-bc81-765b0f2b620d,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-workflowpmwwl/series-workflowpmwwl-build-action-3083844719/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-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:01:12 +0000 UTC FinishedAt: 2026-08-18 04:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:01:12 +0000 UTC FinishedAt: 2026-08-18 04:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:01:12 +0000 UTC FinishedAt: 2026-08-18 04:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:01:12 +0000 UTC FinishedAt: 2026-08-18 04:17:29 +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:*61d53acc-4784-45fc-9a23-74c87a1fb21f,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-workflowpmwwl/series-workflowpmwwl-convert-artifact-673884692/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": "9e8be58d-112c-4f83-99f2-f1b9029d63cd", "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-workflowpmwwl/series-workflowpmwwl-build-action-2641564384/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:01:12 +0000 UTC FinishedAt: 2026-08-18 04:17:19 +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:*61d53acc-4784-45fc-9a23-74c87a1fb21f,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-workflowpmwwl/series-workflowpmwwl-convert-artifact-673884692/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": "9e8be58d-112c-4f83-99f2-f1b9029d63cd", "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-workflowpmwwl/series-workflowpmwwl-build-action-2641564384/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:17:29 +0000 UTC FinishedAt: 2026-08-18 04:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:17:29 +0000 UTC FinishedAt: 2026-08-18 04:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:17:29 +0000 UTC FinishedAt: 2026-08-18 04:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:17:29 +0000 UTC FinishedAt: 2026-08-18 04:19:55 +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:*9e8be58d-112c-4f83-99f2-f1b9029d63cd,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-workflowpmwwl/series-workflowpmwwl-build-action-2641564384/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-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:05 +0000 UTC FinishedAt: 2026-08-18 07:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:05 +0000 UTC FinishedAt: 2026-08-18 07:21:25 +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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"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:*d8906aae-1c71-41fa-bc81-765b0f2b620d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9e8be58d-112c-4f83-99f2-f1b9029d63cd,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-workflowpmwwl/series-workflowpmwwl-build-action-3083844719/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-workflowpmwwl/series-workflowpmwwl-build-action-2641564384/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:05 +0000 UTC FinishedAt: 2026-08-18 04:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:05 +0000 UTC FinishedAt: 2026-08-18 04:20:08 +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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"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-workflowpmwwl/series-workflowpmwwl-convert-artifact-2147718205/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:05 +0000 UTC FinishedAt: 2026-08-18 04:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:05 +0000 UTC FinishedAt: 2026-08-18 04:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:05 +0000 UTC FinishedAt: 2026-08-18 04:20:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:15 +0000 UTC FinishedAt: 2026-08-18 07:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpmwwl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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":["khugepaged_enter_vma","hugepage_madvise","vma_modify_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"db2ddf30-018c-412d-9f2d-c3016ce0ddb7","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-08-18 04:20:15 +0000 UTC FinishedAt: 2026-08-18 07:21:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d8906aae-1c71-41fa-bc81-765b0f2b620d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9e8be58d-112c-4f83-99f2-f1b9029d63cd,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-workflowpmwwl/series-workflowpmwwl-build-action-3083844719/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-workflowpmwwl/series-workflowpmwwl-build-action-2641564384/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-workflowpmwwl/series-workflowpmwwl-convert-artifact-2147718205/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,}