Name: series-workflow9wsj9 Phase: Succeeded StartedAt: 2026-09-04 03:25:52 +0000 UTC FinishedAt: 2026-09-04 07:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[0] Phase: Succeeded StartedAt: 2026-09-04 03:25:52 +0000 UTC FinishedAt: 2026-09-04 04:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 03:25:52 +0000 UTC FinishedAt: 2026-09-04 04:12:03 +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": "bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMFD_CREATE", "HUGETLBFS", "UDMABUF" ], "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": "bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMFD_CREATE", "HUGETLBFS", "UDMABUF" ], "series_id": "7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memfd_alloc_folio", "memfd_pin_folios" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUZEX0NSRUFURSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBoYXNoYCwgYGVycmAsIGBucl9yZXN2YCwgYGZvbGlvYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5ld2x5IGFsbG9jYXRlZCBmb2xpb3MgY29udGludWUgdG8gYmUgY2xlYXJlZCB1c2luZyBgZm9saW9femVyb191c2VyKClgLiBUaGVyZSBhcmUgbm8gbmV3IGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBtb2RpZmllZCBkYXRhIGxlbmd0aHMvYm91bmRzLiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByZWZjb3VudGluZyBpc3N1ZXMpIGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gbG9ja2luZyBpbiBtZW1mZF9hbGxvY19mb2xpbygpIHdpdGhpbiBtbS9tZW1mZC5jLCBleHBhbmRpbmcgdGhlIGh1Z2V0bGJfZmF1bHRfbXV0ZXggbG9jayBzY29wZSBhY3Jvc3MgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgYW5kIGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpLiBUaGlzIHJlYWNoYWJsZSBtbSBwYXRoIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQikgY29tYmluZWQgd2l0aCB1ZG1hYnVmIG9yIGlvbW11ZmQgcGluIG9wZXJhdGlvbnMgKG1lbWZkX3Bpbl9mb2xpb3MpLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbG9ja2luZywgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZGNiMDc3NzZhMzUxOWEyODhmYzk5M2QzOGI0NzRkNDdhM2E1OGJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDoxMDoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuY1xuaW5kZXggYzcwOGQ5MjUzM2Y0YS4uMGY2ZmZmMDA0ZjVlNCAxMDA2NDRcbi0tLSBhL21tL21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWZkLmNcbkBAIC04MiwyMiAmIzQzOzgyLDMxIEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKG1lbWZkKTtcbiBcdFx0aW50IGVyciA9IC1FTk9NRU07XG4gXHRcdGxvbmcgbnJfcmVzdjtcbiYjNDM7XHRcdHUzMiBoYXNoO1xuIFxuIFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiBcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTtcbiBcdFx0aWR4IFx1MDAzZVx1MDAzZT0gaHVnZV9wYWdlX29yZGVyKGgpO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnRcbiYjNDM7XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4mIzQzO1x0XHQgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuJiM0MztcbiBcdFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcbi1cdFx0aWYgKG5yX3Jlc3YgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIEVSUl9QVFIobnJfcmVzdik7XG4mIzQzO1x0XHRpZiAobnJfcmVzdiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRlcnIgPSBucl9yZXN2O1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG4gXHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuIFx0XHRcdFx0XHRcdCAgICBOVUxMLFxuIFx0XHRcdFx0XHRcdCAgICBnZnBfbWFzayk7XG4gXHRcdGlmIChmb2xpbykge1xuLVx0XHRcdHUzMiBoYXNoO1xuLVxuIFx0XHRcdC8qXG4gXHRcdFx0ICogWmVybyB0aGUgZm9saW8gdG8gcHJldmVudCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuXG4gXHRcdFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xuQEAgLTExMiwyMCAmIzQzOzEyMSw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdFx0XHQgKi9cbiBcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogU2VyaWFsaXplIGh1Z2VwYWdlIGFsbG9jYXRpb24gYW5kIGluc3RhbnRpYXRpb24gdG8gcHJldmVudFxuLVx0XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4tXHRcdFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4tXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbi1cbiBcdFx0XHRlcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLFxuIFx0XHRcdFx0XHRcdFx0bWVtZmQtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdFx0XHRcdFx0aWR4KTtcbi1cbi1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4tXG4gXHRcdFx0aWYgKGVycikge1xuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRcdGdvdG8gZXJyX3VucmVzdjtcbkBAIC0xMzMsMTEgJiM0MzsxMzEsMTQgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuIFxuIFx0XHRcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcbiBcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuIFx0XHR9XG4gZXJyX3VucmVzdjpcbiBcdFx0aWYgKG5yX3Jlc3YgXHUwMDNlIDApXG4gXHRcdFx0aHVnZXRsYl91bnJlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICYjNDM7IDEsIDApO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuICNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUZEX0NSRUFURSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gbG9ja2luZyBpbiBtZW1mZF9hbGxvY19mb2xpbygpIHdpdGhpbiBtbS9tZW1mZC5jLCBleHBhbmRpbmcgdGhlIGh1Z2V0bGJfZmF1bHRfbXV0ZXggbG9jayBzY29wZSBhY3Jvc3MgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgYW5kIGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpLiBUaGlzIHJlYWNoYWJsZSBtbSBwYXRoIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQikgY29tYmluZWQgd2l0aCB1ZG1hYnVmIG9yIGlvbW11ZmQgcGluIG9wZXJhdGlvbnMgKG1lbWZkX3Bpbl9mb2xpb3MpLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbG9ja2luZywgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZGNiMDc3NzZhMzUxOWEyODhmYzk5M2QzOGI0NzRkNDdhM2E1OGJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNDoxMDoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWZkLmMgYi9tbS9tZW1mZC5jCmluZGV4IGM3MDhkOTI1MzNmNGEuLjBmNmZmZjAwNGY1ZTQgMTAwNjQ0Ci0tLSBhL21tL21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtZmQuYwpAQCAtODIsMjIgJiM0Mzs4MiwzMSBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpCiAJCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7CiAJCWludCBlcnIgPSAtRU5PTUVNOwogCQlsb25nIG5yX3Jlc3Y7CiYjNDM7CQl1MzIgaGFzaDsKIAogCQlnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTsKIAkJZ2ZwX21hc2sgJmFtcDs9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUpOwogCQlpZHggJmd0OyZndDs9IGh1Z2VfcGFnZV9vcmRlcihoKTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnQKJiM0MzsJCSAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyCiYjNDM7CQkgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS4KJiM0MzsJCSAqLwomIzQzOwkJaGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC0mZ3Q7Zl9tYXBwaW5nLCBpZHgpOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwomIzQzOwogCQlucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCAmIzQzOyAxLCBOVUxMLCBFTVBUWV9WTUFfRkxBR1MpOwotCQlpZiAobnJfcmVzdiAmbHQ7IDApCi0JCQlyZXR1cm4gRVJSX1BUUihucl9yZXN2KTsKJiM0MzsJCWlmIChucl9yZXN2ICZsdDsgMCkgewomIzQzOwkJCWVyciA9IG5yX3Jlc3Y7CiYjNDM7CQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJfQogCiAJCWZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsCiAJCQkJCQkgICAgbnVtYV9ub2RlX2lkKCksCiAJCQkJCQkgICAgTlVMTCwKIAkJCQkJCSAgICBnZnBfbWFzayk7CiAJCWlmIChmb2xpbykgewotCQkJdTMyIGhhc2g7Ci0KIAkJCS8qCiAJCQkgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4KIAkJCSAqIFVzZSBmb2xpb196ZXJvX3VzZXIoKSB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGh1Z2UvZ2lnYW50aWMKQEAgLTExMiwyMCAmIzQzOzEyMSw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCkKIAkJCSAqLwogCQkJX19mb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAotCQkJLyoKLQkJCSAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnQKLQkJCSAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyCi0JCQkgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS4KLQkJCSAqLwotCQkJaGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC0mZ3Q7Zl9tYXBwaW5nLCBpZHgpOwotCQkJbXV0ZXhfbG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwotCiAJCQllcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLAogCQkJCQkJCW1lbWZkLSZndDtmX21hcHBpbmcsCiAJCQkJCQkJaWR4KTsKLQotCQkJbXV0ZXhfdW5sb2NrKCZhbXA7aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7Ci0KIAkJCWlmIChlcnIpIHsKIAkJCQlmb2xpb19wdXQoZm9saW8pOwogCQkJCWdvdG8gZXJyX3VucmVzdjsKQEAgLTEzMywxMSAmIzQzOzEzMSwxNCBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpCiAKIAkJCWh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTsKIAkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7CiAJCQlyZXR1cm4gZm9saW87CiAJCX0KIGVycl91bnJlc3Y6CiAJCWlmIChucl9yZXN2ICZndDsgMCkKIAkJCWh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCAmIzQzOyAxLCAwKTsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7CiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgU3l6a2FsbGVyIEZ1enppbmc6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZXZhbHVhdGUgdGhpcyBwYXRjaCBmb3IgdXNlIHdpdGggc3l6a2FsbGVyLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IHNhZmV0eSBhbmQgcG9saWN5IGFyZSBwYXJhbW91bnQuIFRoaXMgaXMgc3RhbmRhcmQgc29mdHdhcmUgbWFpbnRlbmFuY2UsIGEgcGF0Y2ggYW5hbHlzaXMgZm9yIExpbnV4IGtlcm5lbCBmdXp6aW5nLiBObyByZWQgZmxhZ3MsIG5vdGhpbmcgZXhwbG9pdGF0aXZlIHJlcXVlc3RlZCwgc28gd2UgY2FuIHByb2NlZWQgc2FmZWx5LiBObyBpbW1lZGlhdGUgY29uY2VybnMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHRlY2huaWNhbCBkZXRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIGluc3BlY3QgdGhlIHBhdGNoIGl0c2VsZiBhbmQgbGV2ZXJhZ2UgdGhlIHVzdWFsIHRvb2xzIGZvciBjb2RlIGFuYWx5c2lzLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBmb2N1c2VkIG9uIGBtbS9tZW1mZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWVtZmRfYWxsb2NfZm9saW9gIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBleHBhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAgbG9jayBhY3Jvc3MgY2FsbHMgdG8gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgLCB0aGUgZm9saW8gemVyb2luZywgYW5kIHRoZSBhZGRpdGlvbiB0byB0aGUgcGFnZSBjYWNoZS4KCk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NrIGV4cGFuc2lvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgY2FsbGVycyBvZiBgbWVtZmRfYWxsb2NfZm9saW9gIGFuZCBleGFtaW5lIHJlbGF0ZWQgY29kZSBwYXRocyBhbmQgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvbmN1cnJlbmN5LCBwZXJmb3JtYW5jZSwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBmdXp6aW5nIGVmZmVjdGl2ZW5lc3MuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGxvY2sgc2NvcGUgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGJvdHRsZW5lY2tzIG9yLCB3b3JzZSwgcG90ZW50aWFsIGRlYWRsb2NrcyB0aGF0IGNvdWxkIGhpbmRlciBmdXp6aW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtZmQuaD0xMD1leHRlcm4gbG9uZyBtZW1mZF9mY250bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IGFyZyk7XG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0xMi0vKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMjctfVxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTI5LXtcbi0tXG5tbS9ndXAuYz0zNDQ1PWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5tbS9ndXAuYy0zNTIwLVx0XHRcdGlmICghbnJfZm91bmQpIHtcbm1tL2d1cC5jOjM1MjE6XHRcdFx0XHRmb2xpbyA9IG1lbWZkX2FsbG9jX2ZvbGlvKG1lbWZkLCBzdGFydF9pZHgpO1xubW0vZ3VwLmMtMzUyMi1cdFx0XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY3LSAqL1xubW0vbWVtZmQuYzo2ODpzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG5tbS9tZW1mZC5jLTY5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uIHdpdGggbWVtZmQqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgYG1lbWZkYCBpbXBsZW1lbnRhdGlvbi4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIG1lbW9yeSB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgZm9saW9zIGFyZSBhbGxvY2F0ZWQgYW5kIHBpbm5lZCwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZTogYG1tL21lbWZkLmNgIGFuZCBgbW0vZ3VwLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gem9uaW5nIGluIG9uIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGBtZW1mZF9waW5fZm9saW9zYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBhbGxvY2F0aW9uIGFuZCBwaW5uaW5nIG1lY2hhbmlzbXMsIGFuZCBJIHN1c3BlY3QgdGhleSYjMzk7bGwgcmV2ZWFsIHRoZSBjb3JlIGxvZ2ljIEkmIzM5O20gYWZ0ZXIuIEkmIzM5O20ga2VlbiB0byB0cmFjZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHMg4oCTIGhvdyB0aGUga2VybmVsIGNob29zZXMgYW5kIHJlc2VydmVzIHBhZ2VzIChvciBmb2xpb3MpIGZvciBgbWVtZmRgIG9iamVjdHMsIGFuZCBleGFjdGx5ICpob3cqIGFuZCAqd2hlbiogdGhlc2UgcGFnZXMgYXJlIHBpbm5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIHJlZmVyZW5jZSBjb3VudHMsIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMsIGFuZCB3aGV0aGVyIHdlJiMzOTtyZSBzZWVpbmcgYW55IHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBgbWVtZmRgIHVzYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWZkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdC8qXG4gIDYzOlx0ICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IG1lbWZkX3Bpbl91c2VyX3BhZ2VzKCkgaW4gR1VQIChndXAuYykuXG4gIDY0Olx0ICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXG4gIDY1Olx0ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXG4gIDY2Olx0ICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4gIDY3Olx0ICovXG4gIDY4Olx0c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuICA2OTpcdHtcbiAgNzA6XHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuICA3MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiAgNzI6XHRcdGdmcF90IGdmcF9tYXNrO1xuICA3MzpcdFxuICA3NDpcdFx0aWYgKGlzX2ZpbGVfaHVnZXBhZ2VzKG1lbWZkKSkge1xuICA3NTpcdFx0XHQvKlxuICA3NjpcdFx0XHQgKiBUaGUgZm9saW8gd291bGQgbW9zdCBsaWtlbHkgYmUgYWNjZXNzZWQgYnkgYSBETUEgZHJpdmVyLFxuICA3NzpcdFx0XHQgKiB0aGVyZWZvcmUsIHdlIGhhdmUgem9uZSBtZW1vcnkgY29uc3RyYWludHMgd2hlcmUgd2UgY2FuXG4gIDc4Olx0XHRcdCAqIGFsbG9jIGZyb20uIEFsc28sIHRoZSBmb2xpbyB3aWxsIGJlIHBpbm5lZCBmb3IgYW4gaW5kZWZpbml0ZVxuICA3OTpcdFx0XHQgKiBhbW91bnQgb2YgdGltZSwgc28gaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG1pZ3JhdGVkIGF3YXkuXG4gIDgwOlx0XHRcdCAqL1xuICA4MTpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShtZW1mZCk7XG4gIDgyOlx0XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XG4gIDgzOlx0XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuICA4NDpcdFx0XHRsb25nIG5yX3Jlc3Y7XG4gIDg1Olx0XHRcdHUzMiBoYXNoO1xuICA4NjpcdFxuICA4NzpcdFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiAgODg6XHRcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTtcbiAgODk6XHRcdFx0aWR4IFx1MDAzZVx1MDAzZT0gaHVnZV9wYWdlX29yZGVyKGgpO1xuICA5MDpcdFxuICA5MTpcdFx0XHQvKlxuICA5MjpcdFx0XHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XG4gIDkzOlx0XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4gIDk0Olx0XHRcdCAqIGNhbGxlcnMgb2YgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpLlxuICA5NTpcdFx0XHQgKi9cbiAgOTY6XHRcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4gIDk3Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gIDk4Olx0XG4gIDk5Olx0XHRcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICYjNDM7IDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XG4gMTAwOlx0XHRcdGlmIChucl9yZXN2IFx1MDAzYyAwKSB7XG4gMTAxOlx0XHRcdFx0ZXJyID0gbnJfcmVzdjtcbiAxMDI6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMTAzOlx0XHRcdH1cbiAxMDQ6XHRcbiAxMDU6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcbiAxMDY6XHRcdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4gMTA3Olx0XHRcdFx0XHRcdFx0ICAgIE5VTEwsXG4gMTA4Olx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrKTtcbiAxMDk6XHRcdFx0aWYgKGZvbGlvKSB7XG4gMTEwOlx0XHRcdFx0LypcbiAxMTE6XHRcdFx0XHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cbiAxMTI6XHRcdFx0XHQgKiBVc2UgZm9saW9femVyb191c2VyKCkgd2hpY2ggaXMgb3B0aW1pemVkIGZvciBodWdlL2dpZ2FudGljXG4gMTEzOlx0XHRcdFx0ICogcGFnZXMuIFBhc3MgMCBhcyBhZGRyX2hpbnQgc2luY2UgdGhpcyBpcyBub3QgYSBmYXVsdGluZyBwYXRoXG4gMTE0Olx0XHRcdFx0ICogIGFuZCB3ZSBkb24mIzM5O3QgaGF2ZSBhIHVzZXIgdmlydHVhbCBhZGRyZXNzIHlldC5cbiAxMTU6XHRcdFx0XHQgKi9cbiAxMTY6XHRcdFx0XHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApO1xuIDExNzpcdFxuIDExODpcdFx0XHRcdC8qXG4gMTE5Olx0XHRcdFx0ICogTWFyayB0aGUgZm9saW8gdXB0b2RhdGUgYmVmb3JlIGFkZGluZyB0byBwYWdlIGNhY2hlLFxuIDEyMDpcdFx0XHRcdCAqIGFzIHJlcXVpcmVkIGJ5IGZpbGVtYXAuYyBhbmQgb3RoZXIgaHVnZXRsYiBwYXRocy5cbiAxMjE6XHRcdFx0XHQgKi9cbiAxMjI6XHRcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIDEyMzpcdFxuIDEyNDpcdFx0XHRcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXG4gMTI1Olx0XHRcdFx0XHRcdFx0XHRtZW1mZC1cdTAwM2VmX21hcHBpbmcsXG4gMTI2Olx0XHRcdFx0XHRcdFx0XHRpZHgpO1xuIDEyNzpcdFx0XHRcdGlmIChlcnIpIHtcbiAxMjg6XHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMTI5Olx0XHRcdFx0XHRnb3RvIGVycl91bnJlc3Y7XG4gMTMwOlx0XHRcdFx0fVxuIDEzMTpcdFxuIDEzMjpcdFx0XHRcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcbiAxMzM6XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDEzNDpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbiAxMzU6XHRcdFx0XHRyZXR1cm4gZm9saW87XG4gMTM2Olx0XHRcdH1cbiAxMzc6XHRlcnJfdW5yZXN2OlxuIDEzODpcdFx0XHRpZiAobnJfcmVzdiBcdTAwM2UgMClcbiAxMzk6XHRcdFx0XHRodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgMCk7XG4gMTQwOlx0b3V0X3VubG9jazpcbiAxNDE6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIDE0MjpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDE0MzpcdFx0fVxuIDE0NDpcdCNlbmRpZlxuIDE0NTpcdFx0cmV0dXJuIHNobWVtX3JlYWRfZm9saW8obWVtZmQtXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHQvKlxuIDE0OTpcdCAqIFNldHRpbmcgU0VBTF9XUklURSByZXF1aXJlcyB1cyB0byB2ZXJpZnkgdGhlcmUmIzM5O3Mgbm8gcGVuZGluZyB3cml0ZXIuIEhvd2V2ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIEZvb3RzdGVwcyBvZiBgbWVtZmRfcGluX2ZvbGlvc2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgbWVtZmRfcGluX2ZvbGlvc2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtPyBJcyBpdCBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBpcyBpdCB1c2VkIGluIHNvbWUgc3BlY2lmaWMgc3Vic3lzdGVtPyBJIHdhbnQgdG8gc2VlIHdoYXQgaXRzIHJvbGUgaXMsIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLCBhbmQgd2hhdCBjb250ZXh0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGggc2hvdWxkIGdpdmUgbWUgc29tZSBnb29kIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGVyZSB0aGlzIHJhYmJpdCBob2xlIGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0zMDQ9c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTUtXHRlbmQgPSBzdGFydCAmIzQzOyAocGdjbnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpIC0gMTtcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzE2Olx0bnJfZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyhtZW1mZCwgc3RhcnQsIGVuZCwgZm9saW9zLCBwZ2NudCwgXHUwMDI2cGdvZmYpO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTctXHRpZiAobnJfZm9saW9zIFx1MDAzYz0gMClcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzNy1cdFx0ICogSW4gYSBnaXZlbiByYW5nZSwgb25seSB0aGUgZmlyc3Qgc3VicGFnZSBvZiB0aGUgZmlyc3QgZm9saW9cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzM4Olx0XHQgKiBoYXMgYW4gb2Zmc2V0LCB0aGF0IGlzIHJldHVybmVkIGJ5IG1lbWZkX3Bpbl9mb2xpb3MoKS5cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM5LVx0XHQgKiBUaGUgZmlyc3Qgc3VicGFnZXMgb2Ygb3RoZXIgZm9saW9zIChpbiB0aGUgcmFuZ2UpIGhhdmUgYW5cbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz04MjQ9c3RhdGljIGxvbmcgcGluX21lbWZkX3BhZ2VzKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM0LVx0LypcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzNTpcdCAqIHRvZG86IG1lbWZkX3Bpbl9mb2xpb3Mgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBwaW5uZWQgb2Zmc2V0IHNvXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzYtXHQgKiB3ZSBjYW4gY29tcHV0ZSBucGFnZXMgcGlubmVkLCBhbmQgYXZvaWQgbG9vcGluZyBvdmVyIGZvbGlvcyBoZXJlXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM4LVx0ICovXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4Mzk6XHRuZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyh1c2VyLVx1MDAzZWZpbGUsIHN0YXJ0LCBlbmQsIHVzZXItXHUwMDNldWZvbGlvcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTg0MC1cdFx0XHRcdCAgIG5mb2xpb3MsIFx1MDAyNm9mZnNldCk7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMzNjA9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tbS5oLTMzNjEtXHRcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbmluY2x1ZGUvbGludXgvbW0uaDozMzYyOmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzYzLVx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxuLS1cbm1tL2d1cC5jPTE5MD1FWFBPUlRfU1lNQk9MKHVucGluX3VzZXJfcGFnZSk7XG4tLVxubW0vZ3VwLmMtMTk1LSAqXG5tbS9ndXAuYzoxOTY6ICogRm9saW9zIHRoYXQgd2VyZSBwaW5uZWQgdmlhIG1lbWZkX3Bpbl9mb2xpb3MoKSBvciBvdGhlciBzaW1pbGFyIHJvdXRpbmVzXG5tbS9ndXAuYy0xOTctICogbXVzdCBiZSByZWxlYXNlZCBlaXRoZXIgdXNpbmcgdW5waW5fZm9saW8oKSBvciB1bnBpbl9mb2xpb3MoKS5cbi0tXG5tbS9ndXAuYz0zNDE3PUVYUE9SVF9TWU1CT0wocGluX3VzZXJfcGFnZXNfdW5sb2NrZWQpO1xuLS1cbm1tL2d1cC5jLTM0MTktLyoqXG5tbS9ndXAuYzozNDIwOiAqIG1lbWZkX3Bpbl9mb2xpb3MoKSAtIHBpbiBmb2xpb3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtZmRcbm1tL2d1cC5jLTM0MjEtICogQG1lbWZkOiAgICAgIHRoZSBtZW1mZCB3aG9zZSBmb2xpb3MgYXJlIHRvIGJlIHBpbm5lZFxuLS1cbm1tL2d1cC5jLTM0NDQtICovXG5tbS9ndXAuYzozNDQ1OmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbm1tL2d1cC5jLTM0NDYtXHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXG4tLVxubW0vZ3VwLmMtMzU0MS19XG5tbS9ndXAuYzozNTQyOkVYUE9SVF9TWU1CT0xfR1BMKG1lbWZkX3Bpbl9mb2xpb3MpO1xubW0vZ3VwLmMtMzU0My1cbi0tXG5tbS9ndXAuYy0zNTUzLSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBvYnRhaW5lZCBhIHBpbiBvbiBhIGxhcmdlIGZvbGlvXG5tbS9ndXAuYzozNTU0OiAqIHVzaW5nIG1lbWZkX3Bpbl9mb2xpb3MoKSwgYnV0IHdhbnRpbmcgdG8gbG9naWNhbGx5IHVucGluIHBhcnRzXG5tbS9ndXAuYy0zNTU1LSAqIChlLmcuLCBpbmRpdmlkdWFsIHBhZ2VzKSBvZiB0aGUgZm9saW8gbGF0ZXIsIGZvciBleGFtcGxlLCB1c2luZ1xuLS1cbm1tL21lbWZkLmM9Mzg9c3RhdGljIHZvaWQgbWVtZmRfdGFnX3BpbnMoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubW0vbWVtZmQuYy02NC0gKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcbm1tL21lbWZkLmM6NjU6ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXG5tbS9tZW1mZC5jLTY2LSAqIGluZGV4IGluIHRoZSBtYXBwaW5nLlxuLS1cbm1tL21lbWZkX2x1by5jPTg3PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5tbS9tZW1mZF9sdW8uYy0xMjktXHQgKiB0aGF0IGlzIHJlYWxseSBhIHByb2JsZW0gaW4gdGhlIGZ1dHVyZSwgd2UgY2FuIGhhdmUgYVxubW0vbWVtZmRfbHVvLmM6MTMwOlx0ICogbWVtZmRfcGluX2ZvbGlvcygpIHZhcmlhbnQgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHBhZ2Ugb24gZW1wdHlcbm1tL21lbWZkX2x1by5jLTEzMS1cdCAqIHNsb3RzLlxubW0vbWVtZmRfbHVvLmMtMTMyLVx0ICovXG5tbS9tZW1mZF9sdW8uYzoxMzM6XHRucl9waW5uZWQgPSBtZW1mZF9waW5fZm9saW9zKGZpbGUsIDAsIHNpemUgLSAxLCBmb2xpb3MsIG1heF9mb2xpb3MsXG5tbS9tZW1mZF9sdW8uYy0xMzQtXHRcdFx0XHQgICAgIFx1MDAyNm9mZnNldCk7XG4tLVxubW0vbWVtZmRfbHVvLmM9MjU4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbi0tXG5tbS9tZW1mZF9sdW8uYy0yOTEtXHQvKlxubW0vbWVtZmRfbHVvLmM6MjkyOlx0ICogbWVtZmRfcGluX2ZvbGlvcygpIGNhcHMgYXQgVUlOVF9NQVggZm9saW9zOyByZWZ1c2UgbGFyZ2VyXG5tbS9tZW1mZF9sdW8uYy0yOTMtXHQgKiBmaWxlcyB0byBhdm9pZCBzaWxlbnRseSBwcmVzZXJ2aW5nIG9ubHkgYSBwcmVmaXguXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg5NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBFdmFsdWF0aW9uOiBtZW1mZCB3aXRoIGh1Z2V0bGIgYW5kIHVkbWFidWYvaW9tbXVmZCoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgYG1lbWZkYC9odWdldGxiL3VkbWFidWYgc2l0dWF0aW9uIGlzIHdvcnRoIGRpZ2dpbmcgaW50byBmb3IgZnV6emluZy4gIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGB1ZG1hYnVmYCBhbmQgYGlvbW11ZmRgIG1pZ2h0IGludGVyYWN0IHdpdGggYSBgbWVtZmRfY3JlYXRlYCBjYWxsIHVzaW5nIGBNRkRfSFVHRVRMQmAuICBDYW4gdXNlcnNwYWNlIGxldmVyYWdlIGBtZW1mZF9jcmVhdGVgIHRvIGNyZWF0ZSBhIGh1Z2UgcGFnZSBiYWNrZWQgbWVtb3J5IHJlZ2lvbiBhbmQgdGhlbiB1c2UgYHVkbWFidWZgICh2aWEgYC9kZXYvdWRtYWJ1ZmAgYW5kIGl0cyBpb2N0bHMsIHNwZWNpZmljYWxseSBgVURNQUJVRl9DUkVBVEVgIG9yIGBVRE1BQlVGX0NSRUFURV9MSVNUYCkgb3IgYGlvbW11ZmRgICh3aXRoIGBJT01NVV9JT0FTX01BUF9GSUxFYCBvciBzaW1pbGFyKSB0byBpbnRlcmZhY2Ugd2l0aCBpdD8gIFRoZSBmYWN0IHRoYXQgYHVkbWFidWZgIGlzIGEgbWlzYyBkZXZpY2UgYW5kIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgYnkgc3l6a2FsbGVyIGlzIGEgZ29vZCBzaWduLgoKQWxyaWdodCwgbm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGtleSBhcmVhIGlzIGNsZWFybHkgYG1tL21lbWZkLmNgLiAgTG9va2luZyBhdCB0aGUgY29tbWl0IGhpc3RvcnksIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYG1lbWZkX2FsbG9jX2ZvbGlvYC4gIFByZXZpb3VzbHksIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAgd2VyZSBjYWxsZWQgKm91dHNpZGUqIHRoZSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAgbXV0ZXguICBUaGUgbXV0ZXggd2FzIG9ubHkgYWNxdWlyZWQgYXJvdW5kIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLiAgTm93LCBwb3N0LXBhdGNoLCB0aGUgbXV0ZXggaXMgYWNxdWlyZWQgKmJlZm9yZSogYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCBhbmQgaGVsZCBhbGwgdGhlIHdheSB0aHJvdWdoIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAsIGBmb2xpb196ZXJvX3VzZXIoKWAsIGBfX2ZvbGlvX21hcmtfdXB0b2RhdGUoKWAsIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLCBhbmQgYGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woKWAuIEl0JiMzOTtzIHVubG9ja2VkIG9uIGVycm9yIG9yIHN1Y2Nlc3MuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBpbXBhY3RpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aCBmb3IgbWVtZmQgd2l0aCBodWdldGxiLgoKVGhpcyBzY3JlYW1zIGZ1enppbmcgdGFyZ2V0IHRvIG1lISAgSXQmIzM5O3MgaW4gdGhlIGBtbS9gIGNvcmUgc3Vic3lzdGVtLCBzbyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgYnVnIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCwgSXQgaW52b2x2ZXMgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBhcmUgYWx3YXlzIHByaW1lIHRhcmdldHMgZm9yIGZpbmRpbmcgcmFjZSBjb25kaXRpb25zLCBhbmQgaXQgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbWVtZmRfY3JlYXRlYCBzeXNjYWxsIHdpdGggYHVkbWFidWZgIGFuZC9vciBgaW9tbXVmZGAgaW9jdGxzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSBuZWVkIHRvIGNoZWNrIGBtbS9tZW1mZC5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyaWVzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3B0aW9ucywgbGlrZSBgSFVHRVRMQl9QQUdFYCwgYFVETUFCVUZgLCBhbmQgdGhlIGNvcmUgYG1lbWZkYCBmdW5jdGlvbmFsaXR5IGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgd2hvbGUgc2hlYmFuZy4gIE9uY2UgSSBrbm93IHRoZSBjb25maWd1cmF0aW9ucywgSSBjYW4gYmUgc3VyZSB0byBpbmNsdWRlIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19IVUdFVExCX1BBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODU9ZW5kaWZcbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG4tLVxubW0vZGFtb24vdmFkZHIuYz0yNTg9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjg0LVxubW0vZGFtb24vdmFkZHIuYzoyODU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtMjg2LXN0YXRpYyB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vZGFtb24vdmFkZHIuYz0zMTM9c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vZGFtb24vdmFkZHIuYy0zMzMtI2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcbm1tL2RhbW9uL3ZhZGRyLmM6MzM0OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTMzNS1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTM3OT1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy00MjQtXG5tbS9kYW1vbi92YWRkci5jOjQyNTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vZGFtb24vdmFkZHIuYy00MjYtc3RhdGljIGludCBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vZGFtb24vdmFkZHIuYy00NTUtI2RlZmluZSBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5IE5VTExcbm1tL2RhbW9uL3ZhZGRyLmM6NDU2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTQ1Ny1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9ODQ0PXN0YXRpYyB2b2lkIF9faW5pdCBzd2FwX21pZ3JhdGlvbl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04ODMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODg0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODg1LXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5OS19XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTAwOiNlbHNlICAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTkwMS1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5MDI6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXG4tLVxubW0vaG1tLmM9NDkxPXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3B1ZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vaG1tLmMtNTQ4LVxubW0vaG1tLmM6NTQ5OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9obW0uYy01NTAtc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbm1tL2htbS5jLTU4OC0jZGVmaW5lIGhtbV92bWFfd2Fsa19odWdldGxiX2VudHJ5IE5VTExcbm1tL2htbS5jOjU4OTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vaG1tLmMtNTkwLVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTM3Mj1zdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtMzg3LVxubW0vaHVnZXRsYl92bWVtbWFwLmM6Mzg4OnN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xubW0vaHVnZXRsYl92bWVtbWFwLmMtMzg5LXN0YXRpYyBpbnQgX19pbml0IGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9wYXJhbShjaGFyICpidWYpXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmgtMTktXG5tbS9odWdldGxiX3ZtZW1tYXAuaDoyMDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5tbS9odWdldGxiX3ZtZW1tYXAuaC0yMS1pbnQgaHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmg9Nzk9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9ib290bWVtX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuaC04MS19XG5tbS9odWdldGxiX3ZtZW1tYXAuaDo4MjojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQICovXG5tbS9odWdldGxiX3ZtZW1tYXAuaC04My1cbi0tXG5tbS9tZW1jb250cm9sLmM9Mzc4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQzMS1cdFBHUkVGSUxMLFxubW0vbWVtY29udHJvbC5jOjQzMjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTQzMy1cdE5SX0hVR0VUTEIsXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYyNC1cdHsgXCYjMzQ7c2xhYl91bnJlY2xhaW1hYmxlXCYjMzQ7LFx0XHROUl9TTEFCX1VOUkVDTEFJTUFCTEVfQlx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE2MjU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNjI2LVx0eyBcJiMzNDtodWdldGxiXCYjMzQ7LFx0XHRcdE5SX0hVR0VUTEJcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzE5PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTcyNS1cbm1tL21lbWNvbnRyb2wuYzoxNzI2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9tZW1jb250cm9sLmMtMTcyNy1zdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19odWdldGxiKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MzAtfVxubW0vbWVtY29udHJvbC5jOjE3MzE6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vbWVtY29udHJvbC5jLTE3MzItc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzM1LX1cbm1tL21lbWNvbnRyb2wuYzoxNzM2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9tZW1jb250cm9sLmMtMTczNy1cbm1tL21lbWNvbnRyb2wuYz0xNzM4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3NTYtXG5tbS9tZW1jb250cm9sLmM6MTc1NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTE3NTgtXHRcdGlmICh1bmxpa2VseShtZW1vcnlfc3RhdHNbaV0uaWR4ID09IE5SX0hVR0VUTEIpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxubW0vbWVtZmQuYy02OS17XG5tbS9tZW1mZC5jOjcwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9tZW1mZC5jLTcxLVx0c3RydWN0IGZvbGlvICpmb2xpbztcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTc0MD1zdGF0aWMgaW50IGh3cG9pc29uX3B0ZV9yYW5nZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtNzcxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzo3NzI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzczLXN0YXRpYyBpbnQgaHdwb2lzb25faHVnZXRsYl9yYW5nZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4NjI9RVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2NC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg2NTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODY2LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjE1OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNjItfVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTYzOiNlbmRpZlx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTY0LVxuLS1cbm1tL21lbXBvbGljeS5jPTc5Mz1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtNzk2LXtcbm1tL21lbXBvbGljeS5jOjc5NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtcG9saWN5LmMtNzk4LVx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbi0tXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQyNS1cbm1tL21pZ3JhdGUuYzo0MjY6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21pZ3JhdGUuYy00MjctXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tLVxubW0vbWlncmF0ZS5jPTQ5Mz12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuLS1cbm1tL21pZ3JhdGUuYy01MjAtXG5tbS9taWdyYXRlLmM6NTIxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9taWdyYXRlLmMtNTIyLS8qXG4tLVxubW0vbWluY29yZS5jPTI3PXN0YXRpYyBpbnQgbWluY29yZV9odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9taW5jb3JlLmMtMjkte1xubW0vbWluY29yZS5jOjMwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9taW5jb3JlLmMtMzEtXHRjb25zdCB1bnNpZ25lZCBsb25nIG5yID0gKGVuZCAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLS1cbm1tL21tX2luaXQuYz0xNDgzPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF91c2VtYXAoc3RydWN0IHpvbmUgKnpvbmUpIHt9XG4tLVxubW0vbW1faW5pdC5jLTE0ODUtXG5tbS9tbV9pbml0LmM6MTQ4NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9tbV9pbml0LmMtMTQ4Ny1cbi0tXG5tbS9tbV9pbml0LmM9MTQ4OT1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X3BhZ2VibG9ja19vcmRlcih2b2lkKVxuLS1cbm1tL21tX2luaXQuYy0xNTA2LX1cbm1tL21tX2luaXQuYzoxNTA3OiNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRSAqL1xubW0vbW1faW5pdC5jLTE1MDgtXG5tbS9tbV9pbml0LmMtMTUwOS0vKlxubW0vbW1faW5pdC5jOjE1MTA6ICogV2hlbiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEUgaXMgbm90IHNldCwgc2V0X3BhZ2VibG9ja19vcmRlcigpXG5tbS9tbV9pbml0LmMtMTUxMS0gKiBpcyB1bnVzZWQgYXMgcGFnZWJsb2NrX29yZGVyIGlzIHNldCBhdCBjb21waWxlLXRpbWUuIFNlZVxuLS1cbm1tL21tX2luaXQuYz0xNTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc2V0X3BhZ2VibG9ja19vcmRlcih2b2lkKVxuLS1cbm1tL21tX2luaXQuYy0xNTE4LVxubW0vbW1faW5pdC5jOjE1MTk6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRSAqL1xubW0vbW1faW5pdC5jLTE1MjAtXG4tLVxubW0vbXByb3RlY3QuYz03MzA9c3RhdGljIGludCBwcm90X25vbmVfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tcHJvdGVjdC5jLTczNy1cbm1tL21wcm90ZWN0LmM6NzM4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9tcHJvdGVjdC5jLTczOS1zdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vcGFnZV9hbGxvYy5jPTIwOT1nZnBfdCBnZnBfYWxsb3dlZF9tYXNrIF9fcmVhZF9tb3N0bHkgPSBHRlBfQk9PVF9NQVNLO1xubW0vcGFnZV9hbGxvYy5jLTIxMC1cbm1tL3BhZ2VfYWxsb2MuYzoyMTE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vcGFnZV9hbGxvYy5jLTIxMi11bnNpZ25lZCBpbnQgcGFnZWJsb2NrX29yZGVyIF9fcmVhZF9tb3N0bHk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTEwNzM9c3RhdGljIGludCBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHN0cnVjdCBwYWdlICpoZWFkX3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMTM5LVx0XHQvKiB0aGUgdGhpcmQgdGFpbCBwYWdlOiBodWdldGxiIHNwZWNpZmljcyBvdmVybGFwIC1cdTAwM2VtYXBwaW5ncyAqL1xubW0vcGFnZV9hbGxvYy5jOjExNDA6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0UpKVxubW0vcGFnZV9hbGxvYy5jLTExNDEtXHRcdFx0YnJlYWs7XG4tLVxubW0vcGFnZXdhbGsuYz0yODY9c3RhdGljIGludCB3YWxrX3BnZF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtMzI2LVxubW0vcGFnZXdhbGsuYzozMjc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL3BhZ2V3YWxrLmMtMzI4LXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZW50cnlfZW5kKHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdld2Fsay5jPTMzNj1zdGF0aWMgaW50IHdhbGtfaHVnZXRsYl9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtMzYzLVxubW0vcGFnZXdhbGsuYzozNjQ6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vcGFnZXdhbGsuYy0zNjUtc3RhdGljIGludCB3YWxrX2h1Z2V0bGJfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTM3MC1cbm1tL3BhZ2V3YWxrLmM6MzcxOiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9wYWdld2Fsay5jLTM3Mi1cbi0tXG5tbS9ybWFwLmM9MzE1OT12b2lkIHJtYXBfd2Fsa19sb2NrZWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHJtYXBfd2Fsa19jb250cm9sICpyd2MpXG4tLVxubW0vcm1hcC5jLTMxNjgtXG5tbS9ybWFwLmM6MzE2OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vcm1hcC5jLTMxNzAtLypcbi0tXG5tbS9ybWFwLmM9MzE4OT12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMzIwMS19XG5tbS9ybWFwLmM6MzIwMjojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9MTc2PXN0YXRpYyB2b2lkICogX19tZW1pbml0IHZtZW1tYXBfYWxsb2NfYmxvY2tfemVybyh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmMtMTg2LVxubW0vc3BhcnNlLXZtZW1tYXAuYzoxODc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxubW0vc3BhcnNlLXZtZW1tYXAuYy0xODgtc3RhdGljIF9fbWVtaW5pdCBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9nZXRfdGFpbCh1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB6b25lICp6b25lKVxuLS1cbm1tL3NwYXJzZS5oLTEyLVxubW0vc3BhcnNlLmg6MTM6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxubW0vc3BhcnNlLmgtMTQtc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2VjdGlvbl9vcmRlcihjb25zdCBzdHJ1Y3QgbWVtX3NlY3Rpb24gKnNlY3Rpb24pXG4tLVxubW0vc3BhcnNlLmg9NzM9c3RhdGljIGlubGluZSBib29sIHZtZW1tYXBfb3B0aW1pemFibGVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxubW0vc3BhcnNlLmgtNzQte1xubW0vc3BhcnNlLmg6NzU6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKSlcbm1tL3NwYXJzZS5oLTc2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz03MDc9c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3BvaXNvbihzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNzQzLVxubW0vdXNlcmZhdWx0ZmQuYzo3NDQ6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL3VzZXJmYXVsdGZkLmMtNzQ1LS8qXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz03NTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtOTA3LX1cbm1tL3VzZXJmYXVsdGZkLmM6OTA4OiNlbHNlIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS91c2VyZmF1bHRmZC5jLTkwOS0vKiBmYWlsIGF0IGJ1aWxkIHRpbWUgaWYgZ2NjIGF0dGVtcHRzIHRvIHVzZSB0aGlzICovXG5tbS91c2VyZmF1bHRmZC5jPTkxMD1leHRlcm4gc3NpemVfdCBtZmlsbF9hdG9taWNfaHVnZXRsYihzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy05MTUtXHRcdFx0XHQgICAgdWZmZF9mbGFnc190IGZsYWdzKTtcbm1tL3VzZXJmYXVsdGZkLmM6OTE2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS91c2VyZmF1bHRmZC5jLTkxNy1cbi0tXG5tbS91c2VyZmF1bHRmZC5jPTI1NTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgdWZmZF9tc2cgdXNlcmZhdWx0X21zZyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yNTg5LVxubW0vdXNlcmZhdWx0ZmQuYzoyNTkwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS91c2VyZmF1bHRmZC5jLTI1OTEtLypcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTI2NDY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfbXVzdF93YWl0KHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTI2NTMtfVxubW0vdXNlcmZhdWx0ZmQuYzoyNjU0OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS91c2VyZmF1bHRmZC5jLTI2NTUtXG4tLVxubW0vdm1hbGxvYy5jPTk2PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTIzLVxubW0vdm1hbGxvYy5jOjEyNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vdm1hbGxvYy5jLTEyNS1cdFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcbi0tXG5tbS92bWFsbG9jLmM9Mzg5PXN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMzk5LVx0ZG8ge1xubW0vdm1hbGxvYy5jOjQwMDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vdm1hbGxvYy5jLTQwMS1cdFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZShhZGRyLCBwdGUpO1xuLS1cbm1tL3Ztc3RhdC5jPTExOTk9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4tLVxubW0vdm1zdGF0LmMtMTMwNi1cdFtJKFBHUkVGSUxMKV1cdFx0XHRcdD0gXCYjMzQ7cGdyZWZpbGxcJiMzNDssXG5tbS92bXN0YXQuYzoxMzA3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS92bXN0YXQuYy0xMzA4LVx0W0koTlJfSFVHRVRMQildXHRcdFx0XHQ9IFwmIzM0O25yX2h1Z2V0bGJcJiMzNDssXG4tLVxubW0vdm1zdGF0LmMtMTM5Ni1cbm1tL3Ztc3RhdC5jOjEzOTc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL3Ztc3RhdC5jLTEzOTgtXHRbSShIVExCX0JVRERZX1BHQUxMT0MpXVx0XHRcdD0gXCYjMzQ7aHRsYl9idWRkeV9hbGxvY19zdWNjZXNzXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZTogYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBLY29uZmlnLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIGVhY2guIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlbS4KCk15IGdvYWwgaXNuJiMzOTt0IGp1c3QgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGJ1dCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVpciBjdXJyZW50IHN0YXRlcy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zOyBpZiBgSFVHRVRMQkZTYCBpcyBlbmFibGVkLCBkb2VzIHRoYXQgbmVjZXNzaXRhdGUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIGBIVUdFVExCX1BBR0VgPyBDb252ZXJzZWx5LCB3aGF0IGhhcHBlbnMgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IGFyY2hpdGVjdHVyZXM/IERvZXMgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUgZGV0ZXJtaW5lIGFueXRoaW5nIGhlcmU/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGNoZWNraW5nIHRoZSBoZWxwIHRleHQsIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgdXNlIGNhc2UgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gQW5kIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBrZWVuIHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcnBsYXkgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgYW5kIGFueSBwb3RlbnRpYWwgdXNlci1zcGFjZSBpbnRlcmZhY2VzLiBJdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIGRpZmZlcmVudCBOVU1BIGNvbmZpZ3VyYXRpb25zIHRvby4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBvZmZlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5mcy9LY29uZmlnLTI4MS1cbmZzL0tjb25maWc6MjgyOmNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbmZzL0tjb25maWctMjgzLVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDYzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVURNQUJVRiBVc2FnZSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIEkmIzM5O3ZlIGFscmVhZHkgZXhwbG9yZWQgdGhlIGltbWVkaWF0ZSBhcmVhcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLiBJIHNob3VsZCB0aG9yb3VnaGx5IHNjcnV0aW5pemUgdGhlIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHBvaW50IGZvciBETUEgYnVmZmVyLXJlbGF0ZWQgZHJpdmVycywgc28gaXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIHJlbGF0aW9uc2hpcHMgd2l0aCBgVURNQUJVRmAuIEkgYWxzbyBuZWVkIHRvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBvdGhlciBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgZGlyZWN0bHkgY2FsbGluZyBvciB1dGlsaXppbmcgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHNhbWUgbmFtZXNwYWNlLiAmIzM0O090aGVyIGNhbGxlcnMmIzM0OyBpcyBrZXkgaGVyZTsgaXQmIzM5O3MgZWFzeSB0byBmb2N1cyBvbiB0aGUgb2J2aW91cyB0YXJnZXQgYW5kIG1pc3MgaW5kaXJlY3QgcmVmZXJlbmNlcy4gVGhpcyBjb3VsZCBtZWFuIGEgbW9kdWxlIHRoYXQmIzM5O3MgaW5kaXJlY3RseSB1dGlsaXppbmcgVURNQUJVRiB0aHJvdWdoIGFub3RoZXIgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IHNlYXJjaCBuZXQgaXMgd2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVETUFCVUYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTMyLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDt1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzk2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtZmQgRm9saW8gQWxsb2NhdGlvbiBhbmQgUGlubmluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYG1lbWZkX2NyZWF0ZWAgYW5kIGl0cyByZWxhdGVkIGZvbGlvIGFsbG9jYXRpb24gZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgbWVtZmRfYWxsb2NfZm9saW9gLiBJIG5lZWQgdG8gY29uZmlybSBpdHMgZGVmaW5pdGlvbiBhbmQgc2NvcGUuIFllcywgaXQmIzM5O3Mgbm9uLXN0YXRpYywgZGVmaW5lZCB3aXRoaW4gYG1tL21lbWZkLmNgLCBhcyBgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KWAuIEFuZCwgY3JpdGljYWxseSwgSSBzZWUgYG1lbWZkX3Bpbl9mb2xpb3MoKWAgaXMgYWxzbyBpbnZvbHZlZCwgcmVzaWRpbmcgaW4gYG1tL2d1cC5jYC4gRnVydGhlciwgYHVkbWFidWZfcGluX2ZvbGlvcygpYCBpbiBgZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuY2AgYWxzbyBzZWVtcyBsaW5rZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMg4oCTIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGBtZW1mZF9waW5fZm9saW9zYCDigJMgd2FycmFudCBiZWluZyBjb3JlIGZvY3VzIHN5bWJvbHMgZm9yIG15IGFuYWx5c2lzLiBBcmUgdGhleSB0cnVseSBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzPyBObywgaXQgbG9va3MgbGlrZSBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIG9ubHkgY2FsbGVkIHdoZW4gd2UmIzM5O3JlIHBpbm5pbmcgZm9saW9zIGZvciBhIG1lbWZkIGZpbGUgZGVzY3JpcHRvciAodmlhIGBtZW1mZF9waW5fZm9saW9zYCkuIEkgYWxzbyBzZWUgYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIG9ubHkgYmVpbmcgY2FsbGVkIGZyb20gY29udGV4dHMgc3VjaCBhcyB1ZG1hYnVmIChgdWRtYWJ1Zl9waW5fZm9saW9zYCksIGlvbW11ZmQgKGBwaW5fbWVtZmRfcGFnZXNgKSwgYW5kIHRoZSBsaWtlLiBUaGlzIHRlbGxzIG1lIHRoZWlyIHVzYWdlIGlzIG1vcmUgdGFyZ2V0ZWQuCgpHaXZlbiB0aGF0LCBJIGNhbiBjb25maXJtIHRoZSBrZXkgZnVuY3Rpb24gbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBpcywgaW4gZmFjdCwgYG1lbWZkX2FsbG9jX2ZvbGlvYC4gQW5kIHRoZXJlZm9yZSwgbXkgZm9jdXMgc3ltYm9scyBzaG91bGQgYWJzb2x1dGVseSBlbmNvbXBhc3MgKmJvdGgqIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGBtZW1mZF9waW5fZm9saW9zYC4KCkZpbmFsbHksIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgRW5hYmxlQ29uZmlncy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBgSFVHRVRMQkZTYCBpcyBlbmFibGVkIChhbmQgdGh1cywgYEhVR0VUTEJfUEFHRWApIGFsb25nIHdpdGggYFVETUFCVUZgLiBJIGFsc28gbmVlZCB0byBjaGVjayBgTUVNRkRfQ1JFQVRFYCwganVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcuKk1FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL0tjb25maWc9NTI9Y29uZmlnIExJVkVVUERBVEVcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTcyLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo3Mzpjb25maWcgTElWRVVQREFURV9NRU1GRFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7TGl2ZSB1cGRhdGUgc3VwcG9ydCBmb3IgbWVtZmRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTEzMzM9Y29uZmlnIEtNQVBfTE9DQUxfTk9OX0xJTkVBUl9QVEVfQVJSQVlcbi0tXG5tbS9LY29uZmlnLTEzMzUtXG5tbS9LY29uZmlnOjEzMzY6Y29uZmlnIE1FTUZEX0NSRUFURVxubW0vS2NvbmZpZy0xMzM3LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtZmRfY3JlYXRlKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDUtXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBNRU1GRF9DUkVBVEVgIGluIGBtbS9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYE1FTUZEX0NSRUFURWAg4oCTIGEgZ29vZCBmaXJzdCBzdGVwLCBvYnZpb3VzbHksIGlzIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXTigJlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBtbS9LY29uZmlnYC4gSSBrbm93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbWApIGlzIHRoZSBsaWtlbHkgYXJlYSwgZ2l2ZW4gdGhlIG5hbWUuIEkmIzM5O20gYWxyZWFkeSBlbnZpc2lvbmluZyB0aGUgS2NvbmZpZyBmaWxlIHN0cnVjdHVyZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGV4cGVjdCB0byBmaW5kLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIHdpbGwgdGVsbCBtZSBpZiBpdOKAmXMgZW5hYmxlZCBieSBkZWZhdWx0LCB1bmRlciB3aGF0IGFyY2hpdGVjdHVyZSBvciBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBwb3NzaWJseSBldmVuIGdpdmUgc29tZSBicmllZiBkb2N1bWVudGF0aW9uLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMzU6XHRcbjEzMzY6XHRjb25maWcgTUVNRkRfQ1JFQVRFXG4xMzM3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1mZF9jcmVhdGUoKSBzeXN0ZW0gY2FsbFwmIzM0OyBpZiBFWFBFUlRcbjEzMzg6XHRcbjEzMzk6XHRjb25maWcgU0VDUkVUTUVNXG4xMzQwOlx0XHRkZWZhdWx0IHlcbjEzNDE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsXCYjMzQ7IGlmIEVYUEVSVFxuMTM0MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxuMTM0MzpcdFx0aGVscFxuMTM0NDpcdFx0ICBFbmFibGUgdGhlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsIHdpdGggdGhlIGFiaWxpdHkgdG8gY3JlYXRlXG4xMzQ1Olx0XHQgIG1lbW9yeSBhcmVhcyB2aXNpYmxlIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG93bmluZyBwcm9jZXNzIGFuZFxuMTM0NjpcdFx0ICBub3QgbWFwcGVkIHRvIG90aGVyIHByb2Nlc3NlcyBhbmQgb3RoZXIga2VybmVsIHBhZ2UgdGFibGVzLlxuMTM0NzpcdFxuMTM0ODpcdGNvbmZpZyBBTk9OX1ZNQV9OQU1FXG4xMzQ5Olx0XHRib29sIFwmIzM0O0Fub255bW91cyBWTUEgbmFtZSBzdXBwb3J0XCYjMzQ7XG4xMzUwOlx0XHRkZXBlbmRzIG9uIFBST0NfRlMgXHUwMDI2XHUwMDI2IEFEVklTRV9TWVNDQUxMUyBcdTAwMjZcdTAwMjYgTU1VXG4xMzUxOlx0XG4xMzUyOlx0XHRoZWxwXG4xMzUzOlx0XHQgIEFsbG93IG5hbWluZyBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXMuXG4xMzU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzM2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBtbS9tZW1mZC5vYCBnZXRzIGJ1aWx0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYC4gSSYjMzk7bGwgc3RhcnQgdGhlcmUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29tcGlsYXRpb24gc3RlcHMgaW52b2x2ZWQgaW4gY3JlYXRpbmcgdGhhdCBzcGVjaWZpYyBvYmplY3QgZmlsZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoaXMgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMuLi4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgc3BlY2lhbCBmbGFncywgaW5jbHVkZSBwYXRocywgb3IgbGlua2VyIGludGVyYWN0aW9ucyByZWxhdGVkIHRvIGBtZW1mZC5vYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTE0MT1vYmotJChDT05GSUdfSE1NX01JUlJPUikgJiM0Mzs9IGhtbS5vXG5tbS9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX01FTUZEX0NSRUFURSkgJiM0Mzs9IG1lbWZkLm9cbm1tL01ha2VmaWxlLTE0My1vYmotJChDT05GSUdfTUFQUElOR19ESVJUWV9IRUxQRVJTKSAmIzQzOz0gbWFwcGluZ19kaXJ0eV9oZWxwZXJzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MDYKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbS9tZW1mZC5jYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYG1tL21lbWZkLmNgLCB3aGljaCBtZWFucyBgQ09ORklHX01FTUZEX0NSRUFURWAgaXMgZ29pbmcgdG8gYnJpbmcgaW4gYG1tL21lbWZkLm9gLiBSaWdodCwgYW5kIGluc2lkZSBgbWVtZmRfYWxsb2NfZm9saW9gLCB0aGF0IGAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRWAgY2xhdXNlIGlzIGdvaW5nIHRvIHB1bGwgaW4gdGhlIGRlcGVuZGVuY2llcyBvbiBgQ09ORklHX0hVR0VUTEJGU2AgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIHBpZWNlcy4gSSBzZWUgdGhhdCBgdWRtYWJ1ZmAgaXMgb25lIG9mIHRoZSBjYWxsZXJzLCBzbyB3ZSBhcmUgYWxzbyBsb29raW5nIGF0IGBDT05GSUdfVURNQUJVRmAuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LgoKMS4gIGBXb3J0aEZ1enppbmdgOiBZZXMsIGFic29sdXRlbHkuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIHdpdGhpbiBgbWVtZmRfYWxsb2NfZm9saW8oKWAgaW4gYSB3YXkgdGhhdCBleHRlbmRzIHRoZSBzY29wZSBvZiB0aGUgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVgIGxvY2tpbmcuIFRoaXMgaGFwcGVucyBhcm91bmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpYC4gVGhlIHJlYWwga2lja2VyIGlzIHRoYXQgdGhpcyBpcyB1c2VyLXNwYWNlIHJlYWNoYWJsZS4gYG1lbWZkX2NyZWF0ZSgpYCB3aXRoIGBNRkRfSFVHRVRMQmAgY2FuIHRyaWdnZXIgaXQgZGlyZWN0bHksIGFuZCBtb3JlIHN1YnRseSwgc28gY2FuIGRyaXZlcnMgdXNpbmcgYG1lbWZkX3Bpbl9mb2xpb3MoKWAuIFNwZWNpZmljYWxseSwgdGhpbmsgYC9kZXYvdWRtYWJ1ZmAgdGhyb3VnaCB0aGUgYFVETUFCVUZfQ1JFQVRFYCBhbmQgYFVETUFCVUZfQ1JFQVRFX0xJU1RgIGlvY3Rscywgb3IgZXZlbiBgaW9tbXVmZGAuIENoYW5nZXMgdG8gY29yZSBNTSBsb2NraW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBhcmUgKmFsd2F5cyogc3VzcGVjdC4gVGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBsb2NrIG9yZGVyaW5nIGlzc3VlcywgZGVhZGxvY2tzLCBhbmQgcmFjZXMuCgoyLiAgYEZvY3VzU3ltYm9sc2A6IEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIG9uIHR3byBrZXkgc3ltYm9scyBoZXJlOiBgbWVtZmRfYWxsb2NfZm9saW9gIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AuIFRoZXNlIGFyZSB3aGVyZSB0aGUgbG9ja2luZyBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcgYW5kIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIG1vc3QgZGlyZWN0LgoKMy4gIGBFbmFibGVDb25maWdzYDogSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZCB0byBhY3R1YWxseSBleGVyY2lzZSB0aGlzIGNvZGU6IGBNRU1GRF9DUkVBVEVgLCBgSFVHRVRMQkZTYCwgYW5kIGBVRE1BQlVGYC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNRkRfQ1JFQVRFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtVRE1BQlVGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtZmRfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbiBsb2NraW5nIGluIG1lbWZkX2FsbG9jX2ZvbGlvKCkgd2l0aGluIG1tL21lbWZkLmMsIGV4cGFuZGluZyB0aGUgaHVnZXRsYl9mYXVsdF9tdXRleCBsb2NrIHNjb3BlIGFjcm9zcyBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBhbmQgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKCkuIFRoaXMgcmVhY2hhYmxlIG1tIHBhdGggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKSBjb21iaW5lZCB3aXRoIHVkbWFidWYgb3IgaW9tbXVmZCBwaW4gb3BlcmF0aW9ucyAobWVtZmRfcGluX2ZvbGlvcyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNRkRfQ1JFQVRFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtVRE1BQlVGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtZmRfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbiBsb2NraW5nIGluIG1lbWZkX2FsbG9jX2ZvbGlvKCkgd2l0aGluIG1tL21lbWZkLmMsIGV4cGFuZGluZyB0aGUgaHVnZXRsYl9mYXVsdF9tdXRleCBsb2NrIHNjb3BlIGFjcm9zcyBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBhbmQgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKCkuIFRoaXMgcmVhY2hhYmxlIG1tIHBhdGggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKSBjb21iaW5lZCB3aXRoIHVkbWFidWYgb3IgaW9tbXVmZCBwaW4gb3BlcmF0aW9ucyAobWVtZmRfcGluX2ZvbGlvcyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gaW4gYG1lbWZkX2FsbG9jX2ZvbGlvKClgIHdoZW4gaGFuZGxpbmcgaHVnZXRsYmZzLWJhY2tlZCBtZW1mZHMgYnkgd2lkZW5pbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5IGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdYC4gVGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBwcmlvciB0byBjYWxsaW5nIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgYmVmb3JlIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLCBlbnN1cmluZyBzZXJpYWxpemVkIHJlc2VydmF0aW9uLCBhbGxvY2F0aW9uLCBhbmQgaW5zZXJ0aW9uIGludG8gdGhlIHBhZ2UgY2FjaGUuXG5cblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGRjYjA3Nzc2YTM1MTlhMjg4ZmM5OTNkMzhiNDc0ZDQ3YTNhNThiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTA6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuYwppbmRleCBjNzA4ZDkyNTMzZjRhLi4wZjZmZmYwMDRmNWU0IDEwMDY0NAotLS0gYS9tbS9tZW1mZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWZkLmMKQEAgLTgyLDIyICYjNDM7ODIsMzEgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KQogCQlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUobWVtZmQpOwogCQlpbnQgZXJyID0gLUVOT01FTTsKIAkJbG9uZyBucl9yZXN2OwomIzQzOwkJdTMyIGhhc2g7CiAKIAkJZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7CiAJCWdmcF9tYXNrICZhbXA7PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTsKIAkJaWR4ICZndDsmZ3Q7PSBodWdlX3BhZ2Vfb3JkZXIoaCk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50CiYjNDM7CQkgKiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMsIGFzIHJlcXVpcmVkIGJ5IGFsbCBvdGhlcgomIzQzOwkJICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2gobWVtZmQtJmd0O2ZfbWFwcGluZywgaWR4KTsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTsKJiM0MzsKIAkJbnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTsKLQkJaWYgKG5yX3Jlc3YgJmx0OyAwKQotCQkJcmV0dXJuIEVSUl9QVFIobnJfcmVzdik7CiYjNDM7CQlpZiAobnJfcmVzdiAmbHQ7IDApIHsKJiM0MzsJCQllcnIgPSBucl9yZXN2OwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KIAogCQlmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLAogCQkJCQkJICAgIG51bWFfbm9kZV9pZCgpLAogCQkJCQkJICAgIE5VTEwsCiAJCQkJCQkgICAgZ2ZwX21hc2spOwogCQlpZiAoZm9saW8pIHsKLQkJCXUzMiBoYXNoOwotCiAJCQkvKgogCQkJICogWmVybyB0aGUgZm9saW8gdG8gcHJldmVudCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuCiAJCQkgKiBVc2UgZm9saW9femVyb191c2VyKCkgd2hpY2ggaXMgb3B0aW1pemVkIGZvciBodWdlL2dpZ2FudGljCkBAIC0xMTIsMjAgJiM0MzsxMjEsOSBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpCiAJCQkgKi8KIAkJCV9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAKLQkJCS8qCi0JCQkgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50Ci0JCQkgKiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMsIGFzIHJlcXVpcmVkIGJ5IGFsbCBvdGhlcgotCQkJICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuCi0JCQkgKi8KLQkJCWhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2gobWVtZmQtJmd0O2ZfbWFwcGluZywgaWR4KTsKLQkJCW11dGV4X2xvY2soJmFtcDtodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTsKLQogCQkJZXJyID0gaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShmb2xpbywKIAkJCQkJCQltZW1mZC0mZ3Q7Zl9tYXBwaW5nLAogCQkJCQkJCWlkeCk7Ci0KLQkJCW11dGV4X3VubG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwotCiAJCQlpZiAoZXJyKSB7CiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCQlnb3RvIGVycl91bnJlc3Y7CkBAIC0xMzMsMTEgJiM0MzsxMzEsMTQgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KQogCiAJCQlodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzdWJwb29sX2lub2RlKGlub2RlKSk7CiAJCQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwogCQkJcmV0dXJuIGZvbGlvOwogCQl9CiBlcnJfdW5yZXN2OgogCQlpZiAobnJfcmVzdiAmZ3Q7IDApCiAJCQlodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgMCk7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaDogS0FTQU4gdnMuIEtNU0FOKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBrZXJuZWwgcGF0Y2ggYW5kIGRldGVybWluZSB3aGV0aGVyIGEgZnVsbCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgd2FycmFudGVkLCBvciBpZiBLQVNBTiBpcyBzdWZmaWNpZW50IGZvciB0aGlzIHBhcnRpY3VsYXIgY29kZSBjaGFuZ2UuIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgY29udGV4dCwgYW5kIHdoYXQmIzM5O3MgYXQgc3Rha2UuIFRoaXMgaXMgYSBjb2RlIHJldmlldzsgYSBzZWN1cml0eS9xdWFsaXR5IGVuZ2luZWVyaW5nIHRhc2ssIHNvIG5vIHJlYWwgcmlzayBoZXJlLiBJdCYjMzk7cyBiZW5pZ24sIGRlZmVuc2l2ZSwgbm8gb2ZmZW5zaXZlIGV4cGxvaXRhdGlvbi4gR29vZC4gU2FmZSB0byBwcm9jZWVkLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gVGhlIHBhdGNoIHRhcmdldHMgYG1tL21lbWZkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtZW1mZF9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSB3aWRlbmluZyBvZiB0aGUgbG9ja2luZyBzY29wZSBmb3IgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF1gLiBCZWZvcmUsIHRoZSBjYWxscyB0byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgaGFwcGVuZWQgKndpdGhvdXQqIGhvbGRpbmcgdGhlIG11dGV4LiBJdCB3YXMgb25seSBhY3F1aXJlZCBhcm91bmQgYGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKWAuIE5vdywgdGhlIG11dGV4IGlzIGFjcXVpcmVkICpiZWZvcmUqIHRob3NlIGNhbGxzIGFuZCBoZWxkIHVudGlsIGFmdGVyIHRoZSBwYWdlIGNhY2hlIGFkZGl0aW9uLCBvciByZWxlYXNlZCBvbiBlcnJvciBwYXRocy4KClRoZSBrZXkgaXMgaWYgdGhpcyBpcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHdoYXQgYG1lbWZkX2FsbG9jX2ZvbGlvYCBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5IGluIHJlbGF0aW9uIHRvIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBpc3N1ZXMuIExldCYjMzk7cyByZWFkIHRoZSBmaWxlIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhhdCBmdW5jdGlvbiwgYW5kIGhvdyBpdCYjMzk7cyBhZmZlY3RlZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbm1tL21lbWZkLmMtNjctICovXG5tbS9tZW1mZC5jOjY4OnN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbm1tL21lbWZkLmMtNjkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgbW0vbWVtZmQuYyYjMzk7cyBDb250ZXh0KioKCk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gYG1tL21lbWZkLmNgIGFnYWluLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgbGluZSA2OC4gSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgcXVlc3Rpb24gb3IgaXNzdWUgaW4gbWluZCwgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgcG9zc2libHkgaG93IG1lbW9yeSByZWdpb25zIGFyZSBiZWluZyBtYW5hZ2VkLCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIG9yIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgZGlzc2VjdGluZyB0aGF0IGNvZGUhIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgYW5kIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWZkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdC8qXG4gIDYzOlx0ICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IG1lbWZkX3Bpbl91c2VyX3BhZ2VzKCkgaW4gR1VQIChndXAuYykuXG4gIDY0Olx0ICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXG4gIDY1Olx0ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXG4gIDY2Olx0ICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4gIDY3Olx0ICovXG4gIDY4Olx0c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuICA2OTpcdHtcbiAgNzA6XHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuICA3MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiAgNzI6XHRcdGdmcF90IGdmcF9tYXNrO1xuICA3MzpcdFxuICA3NDpcdFx0aWYgKGlzX2ZpbGVfaHVnZXBhZ2VzKG1lbWZkKSkge1xuICA3NTpcdFx0XHQvKlxuICA3NjpcdFx0XHQgKiBUaGUgZm9saW8gd291bGQgbW9zdCBsaWtlbHkgYmUgYWNjZXNzZWQgYnkgYSBETUEgZHJpdmVyLFxuICA3NzpcdFx0XHQgKiB0aGVyZWZvcmUsIHdlIGhhdmUgem9uZSBtZW1vcnkgY29uc3RyYWludHMgd2hlcmUgd2UgY2FuXG4gIDc4Olx0XHRcdCAqIGFsbG9jIGZyb20uIEFsc28sIHRoZSBmb2xpbyB3aWxsIGJlIHBpbm5lZCBmb3IgYW4gaW5kZWZpbml0ZVxuICA3OTpcdFx0XHQgKiBhbW91bnQgb2YgdGltZSwgc28gaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG1pZ3JhdGVkIGF3YXkuXG4gIDgwOlx0XHRcdCAqL1xuICA4MTpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShtZW1mZCk7XG4gIDgyOlx0XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XG4gIDgzOlx0XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuICA4NDpcdFx0XHRsb25nIG5yX3Jlc3Y7XG4gIDg1Olx0XHRcdHUzMiBoYXNoO1xuICA4NjpcdFxuICA4NzpcdFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiAgODg6XHRcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTtcbiAgODk6XHRcdFx0aWR4IFx1MDAzZVx1MDAzZT0gaHVnZV9wYWdlX29yZGVyKGgpO1xuICA5MDpcdFxuICA5MTpcdFx0XHQvKlxuICA5MjpcdFx0XHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XG4gIDkzOlx0XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4gIDk0Olx0XHRcdCAqIGNhbGxlcnMgb2YgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpLlxuICA5NTpcdFx0XHQgKi9cbiAgOTY6XHRcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4gIDk3Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gIDk4Olx0XG4gIDk5Olx0XHRcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICYjNDM7IDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XG4gMTAwOlx0XHRcdGlmIChucl9yZXN2IFx1MDAzYyAwKSB7XG4gMTAxOlx0XHRcdFx0ZXJyID0gbnJfcmVzdjtcbiAxMDI6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMTAzOlx0XHRcdH1cbiAxMDQ6XHRcbiAxMDU6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcbiAxMDY6XHRcdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4gMTA3Olx0XHRcdFx0XHRcdFx0ICAgIE5VTEwsXG4gMTA4Olx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrKTtcbiAxMDk6XHRcdFx0aWYgKGZvbGlvKSB7XG4gMTEwOlx0XHRcdFx0LypcbiAxMTE6XHRcdFx0XHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cbiAxMTI6XHRcdFx0XHQgKiBVc2UgZm9saW9femVyb191c2VyKCkgd2hpY2ggaXMgb3B0aW1pemVkIGZvciBodWdlL2dpZ2FudGljXG4gMTEzOlx0XHRcdFx0ICogcGFnZXMuIFBhc3MgMCBhcyBhZGRyX2hpbnQgc2luY2UgdGhpcyBpcyBub3QgYSBmYXVsdGluZyBwYXRoXG4gMTE0Olx0XHRcdFx0ICogIGFuZCB3ZSBkb24mIzM5O3QgaGF2ZSBhIHVzZXIgdmlydHVhbCBhZGRyZXNzIHlldC5cbiAxMTU6XHRcdFx0XHQgKi9cbiAxMTY6XHRcdFx0XHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApO1xuIDExNzpcdFxuIDExODpcdFx0XHRcdC8qXG4gMTE5Olx0XHRcdFx0ICogTWFyayB0aGUgZm9saW8gdXB0b2RhdGUgYmVmb3JlIGFkZGluZyB0byBwYWdlIGNhY2hlLFxuIDEyMDpcdFx0XHRcdCAqIGFzIHJlcXVpcmVkIGJ5IGZpbGVtYXAuYyBhbmQgb3RoZXIgaHVnZXRsYiBwYXRocy5cbiAxMjE6XHRcdFx0XHQgKi9cbiAxMjI6XHRcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIDEyMzpcdFxuIDEyNDpcdFx0XHRcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXG4gMTI1Olx0XHRcdFx0XHRcdFx0XHRtZW1mZC1cdTAwM2VmX21hcHBpbmcsXG4gMTI2Olx0XHRcdFx0XHRcdFx0XHRpZHgpO1xuIDEyNzpcdFx0XHRcdGlmIChlcnIpIHtcbiAxMjg6XHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMTI5Olx0XHRcdFx0XHRnb3RvIGVycl91bnJlc3Y7XG4gMTMwOlx0XHRcdFx0fVxuIDEzMTpcdFxuIDEzMjpcdFx0XHRcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcbiAxMzM6XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDEzNDpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbiAxMzU6XHRcdFx0XHRyZXR1cm4gZm9saW87XG4gMTM2Olx0XHRcdH1cbiAxMzc6XHRlcnJfdW5yZXN2OlxuIDEzODpcdFx0XHRpZiAobnJfcmVzdiBcdTAwM2UgMClcbiAxMzk6XHRcdFx0XHRodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgMCk7XG4gMTQwOlx0b3V0X3VubG9jazpcbiAxNDE6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIDE0MjpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDE0MzpcdFx0fVxuIDE0NDpcdCNlbmRpZlxuIDE0NTpcdFx0cmV0dXJuIHNobWVtX3JlYWRfZm9saW8obWVtZmQtXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHQvKlxuIDE0OTpcdCAqIFNldHRpbmcgU0VBTF9XUklURSByZXF1aXJlcyB1cyB0byB2ZXJpZnkgdGhlcmUmIzM5O3Mgbm8gcGVuZGluZyB3cml0ZXIuIEhvd2V2ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjcKCQkJCQkJCW91dHB1dDogMjYxCgkJCQkJCQl0aG91Z2h0czogNTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1mZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gbG9ja2luZyB3aXRoaW4gYG1lbWZkX2FsbG9jX2ZvbGlvKClgIGZvciBodWdldGxiZnMtYmFja2VkIG1lbWZkcy4gVGhlIGNvcmUgY2hhbmdlIGlzIGFjcXVpcmluZyB0aGUgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF1gIGxvY2sgKmJlZm9yZSogcmVzZXJ2aW5nIGFuZCBhbGxvY2F0aW5nIHRoZSBodWdldGxiIGZvbGlvLCB0aGVuIHJlbGVhc2luZyBpdCBvbiBjb21wbGV0aW9uIG9yIGVycm9yLiBUaGUgZ29hbCBpcyBjbGVhcjogc2VyaWFsaXplIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBodWdldGxiIHBhZ2UgY2FjaGUgYWxsb2NhdGlvbnMuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIHN5bmNocm9uaXphdGlvbiBmaXguCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCBteSBjaGVja2xpc3QuIEFyZSB0aGVyZSAqYW55KiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhbGxvY2F0ZWQ/IE5vLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3RzPyBOb3BlLiBEb2VzIGl0IG1lc3Mgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIC0gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgc2ticywgaW9jdGwgb3V0cHV0LCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnM/IE5vdCBhdCBhbGwuIERvZXMgaXQgdG91Y2ggYW55dGhpbmcgcmVsYXRlZCB0byBib3VuZHMgY2hlY2tzIG9yIGRhdGEgbGVuZ3RocyBpbiBhIHdheSB0aGF0ICpjb3VsZCogYWxsb3cgdGhlIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBkYXRhPyBBYnNvbHV0ZWx5IG5vdC4gRm9saW9zIGFyZSBleHBsaWNpdGx5IHplcm9lZCB1c2luZyBgZm9saW9femVyb191c2VyKGZvbGlvLCAwKWAg4oCTIGJ1c2luZXNzIGFzIHVzdWFsLiBBbmQgY3J1Y2lhbGx5LCBhbGwgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uCgpMZXQmIzM5O3MgdmVyaWZ5IHRoZSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG1pZ2h0IG5lZWQgS01TQU4mIzM5O3MgYXR0ZW50aW9uPyBOby4gVGhpcyBpcyBhbGwgYWJvdXQgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIG9uIGh1Z2V0bGIgZm9saW8gYWxsb2NhdGlvbiBhbmQgcGFnZSBjYWNoZSBpbnNlcnRpb24g4oCTIHJhY2UgY29uZGl0aW9uIC8gbG9ja2luZyBmaXhlcy4gUmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIGFuZCByZWZjb3VudC9wYWdlY2FjaGUgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzL2Fzc2VydGlvbnMsIG5vdCBLTVNBTi4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBydW4gdGhyb3VnaCBteSBjcml0ZXJpYSBhZ2FpbjoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQ/IE5vdCB0aGUgY2FzZSBoZXJlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLiBgbnJfcmVzdmAsIGBlcnJgLCBhbmQgYGhhc2hgIGFyZSBhbGwgYXNzaWduZWQgYmVmb3JlIGFueSB1c2UuCjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHM/IE5vdCBhcHBsaWNhYmxlLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgY2hhbmdlcyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOb3BlLgoKQW5kIGNvbnZlcnNlbHksIHdoeSBgTmVlZHNLTVNBTj1mYWxzZWA/IEJlY2F1c2UgdGhlIGNvZGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFib3V0IGZpeGluZyBsb2NraW5nIGlzc3VlcyDigJMgd2hpY2ggYXJlIGtub3duIHRvIGJlIGRldGVjdGFibGUgYnkgZXhpc3RpbmcgdG9vbHMuIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgKm5vKiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpUaGVyZWZvcmUsIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBoYXNoYCwgYGVycmAsIGBucl9yZXN2YCwgYGZvbGlvYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5ld2x5IGFsbG9jYXRlZCBmb2xpb3MgY29udGludWUgdG8gYmUgY2xlYXJlZCB1c2luZyBgZm9saW9femVyb191c2VyKClgLiBUaGVyZSBhcmUgbm8gbmV3IGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBtb2RpZmllZCBkYXRhIGxlbmd0aHMvYm91bmRzLiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByZWZjb3VudGluZyBpc3N1ZXMpIGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gaW4gYG1lbWZkX2FsbG9jX2ZvbGlvKClgIHdoZW4gaGFuZGxpbmcgaHVnZXRsYmZzLWJhY2tlZCBtZW1mZHMgYnkgd2lkZW5pbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5IGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdYC4gVGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBwcmlvciB0byBjYWxsaW5nIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgYmVmb3JlIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLCBlbnN1cmluZyBzZXJpYWxpemVkIHJlc2VydmF0aW9uLCBhbGxvY2F0aW9uLCBhbmQgaW5zZXJ0aW9uIGludG8gdGhlIHBhZ2UgY2FjaGUuXG5cblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMDoyNC41MTUxOTU3NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTY4MjExODM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1GRF9DUkVBVEVcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiVURNQUJVRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgc3luY2hyb25pemF0aW9uIGxvY2tpbmcgaW4gbWVtZmRfYWxsb2NfZm9saW8oKSB3aXRoaW4gbW0vbWVtZmQuYywgZXhwYW5kaW5nIHRoZSBodWdldGxiX2ZhdWx0X211dGV4IGxvY2sgc2NvcGUgYWNyb3NzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGFuZCBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKS4gVGhpcyByZWFjaGFibGUgbW0gcGF0aCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpIGNvbWJpbmVkIHdpdGggdWRtYWJ1ZiBvciBpb21tdWZkIHBpbiBvcGVyYXRpb25zIChtZW1mZF9waW5fZm9saW9zKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIGxvY2tpbmcsIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMDoyNC41MTUyMDk1OTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTc3NTQ3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZGNiMDc3NzZhMzUxOWEyODhmYzk5M2QzOGI0NzRkNDdhM2E1OGJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTA6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmNcXG5pbmRleCBjNzA4ZDkyNTMzZjRhLi4wZjZmZmYwMDRmNWU0IDEwMDY0NFxcbi0tLSBhL21tL21lbWZkLmNcXG4rKysgYi9tbS9tZW1mZC5jXFxuQEAgLTgyLDIyICs4MiwzMSBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxuIFxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XFxuIFxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRsb25nIG5yX3Jlc3Y7XFxuK1xcdFxcdHUzMiBoYXNoO1xcbiBcXG4gXFx0XFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuIFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUpO1xcbiBcXHRcXHRpZHggXFx1MDAzZVxcdTAwM2U9IGh1Z2VfcGFnZV9vcmRlcihoKTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnRcXG4rXFx0XFx0ICogcmFjZXMgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb25zLCBhcyByZXF1aXJlZCBieSBhbGwgb3RoZXJcXG4rXFx0XFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRoYXNoID0gaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKG1lbWZkLVxcdTAwM2VmX21hcHBpbmcsIGlkeCk7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbitcXG4gXFx0XFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggKyAxLCBOVUxMLCBFTVBUWV9WTUFfRkxBR1MpO1xcbi1cXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKG5yX3Jlc3YpO1xcbitcXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0ZXJyID0gbnJfcmVzdjtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgZ2ZwX21hc2spO1xcbiBcXHRcXHRpZiAoZm9saW8pIHtcXG4tXFx0XFx0XFx0dTMyIGhhc2g7XFxuLVxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4gXFx0XFx0XFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xcbkBAIC0xMTIsMjAgKzEyMSw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIFxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XFxuLVxcdFxcdFxcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXFxuLVxcdFxcdFxcdCAqIGNhbGxlcnMgb2YgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xcbi1cXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG4tXFxuIFxcdFxcdFxcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdG1lbWZkLVxcdTAwM2VmX21hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlkeCk7XFxuLVxcbi1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbi1cXG4gXFx0XFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl91bnJlc3Y7XFxuQEAgLTEzMywxMSArMTMxLDE0IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4gXFxuIFxcdFxcdFxcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcXG4gXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbiBcXHRcXHR9XFxuIGVycl91bnJlc3Y6XFxuIFxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2UgMClcXG4gXFx0XFx0XFx0aHVnZXRsYl91bnJlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgMCk7XFxuK291dF91bmxvY2s6XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdH1cXG4gI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjI2LjAzNjAyNjI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MzQyNjAxMDk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1GRF9DUkVBVEVcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiVURNQUJVRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gbG9ja2luZyBpbiBtZW1mZF9hbGxvY19mb2xpbygpIHdpdGhpbiBtbS9tZW1mZC5jLCBleHBhbmRpbmcgdGhlIGh1Z2V0bGJfZmF1bHRfbXV0ZXggbG9jayBzY29wZSBhY3Jvc3MgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgYW5kIGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpLiBUaGlzIHJlYWNoYWJsZSBtbSBwYXRoIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQikgY29tYmluZWQgd2l0aCB1ZG1hYnVmIG9yIGlvbW11ZmQgcGluIG9wZXJhdGlvbnMgKG1lbWZkX3Bpbl9mb2xpb3MpLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbG9ja2luZywgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGRjYjA3Nzc2YTM1MTlhMjg4ZmM5OTNkMzhiNDc0ZDQ3YTNhNThiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuY1xuaW5kZXggYzcwOGQ5MjUzM2Y0YS4uMGY2ZmZmMDA0ZjVlNCAxMDA2NDRcbi0tLSBhL21tL21lbWZkLmNcbisrKyBiL21tL21lbWZkLmNcbkBAIC04MiwyMiArODIsMzEgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuIFx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUobWVtZmQpO1xuIFx0XHRpbnQgZXJyID0gLUVOT01FTTtcbiBcdFx0bG9uZyBucl9yZXN2O1xuK1x0XHR1MzIgaGFzaDtcbiBcbiBcdFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4gXHRcdGdmcF9tYXNrIFx1MDAyNj0gfihfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSk7XG4gXHRcdGlkeCBcdTAwM2VcdTAwM2U9IGh1Z2VfcGFnZV9vcmRlcihoKTtcbiBcbitcdFx0LypcbitcdFx0ICogU2VyaWFsaXplIGh1Z2VwYWdlIGFsbG9jYXRpb24gYW5kIGluc3RhbnRpYXRpb24gdG8gcHJldmVudFxuK1x0XHQgKiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMsIGFzIHJlcXVpcmVkIGJ5IGFsbCBvdGhlclxuK1x0XHQgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS5cbitcdFx0ICovXG4rXHRcdGhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2gobWVtZmQtXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuK1xuIFx0XHRucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XG4tXHRcdGlmIChucl9yZXN2IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBFUlJfUFRSKG5yX3Jlc3YpO1xuK1x0XHRpZiAobnJfcmVzdiBcdTAwM2MgMCkge1xuK1x0XHRcdGVyciA9IG5yX3Jlc3Y7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHR9XG4gXG4gXHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG4gXHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuIFx0XHRcdFx0XHRcdCAgICBOVUxMLFxuIFx0XHRcdFx0XHRcdCAgICBnZnBfbWFzayk7XG4gXHRcdGlmIChmb2xpbykge1xuLVx0XHRcdHUzMiBoYXNoO1xuLVxuIFx0XHRcdC8qXG4gXHRcdFx0ICogWmVybyB0aGUgZm9saW8gdG8gcHJldmVudCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuXG4gXHRcdFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xuQEAgLTExMiwyMCArMTIxLDkgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuIFx0XHRcdCAqL1xuIFx0XHRcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XG4tXHRcdFx0ICogcmFjZXMgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb25zLCBhcyByZXF1aXJlZCBieSBhbGwgb3RoZXJcbi1cdFx0XHQgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRoYXNoID0gaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKG1lbWZkLVx1MDAzZWZfbWFwcGluZywgaWR4KTtcbi1cdFx0XHRtdXRleF9sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuLVxuIFx0XHRcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXG4gXHRcdFx0XHRcdFx0XHRtZW1mZC1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0XHRcdFx0XHRpZHgpO1xuLVxuLVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbi1cbiBcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdFx0Z290byBlcnJfdW5yZXN2O1xuQEAgLTEzMywxMSArMTMxLDE0IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcbiBcdFx0XHRodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzdWJwb29sX2lub2RlKGlub2RlKSk7XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuIFx0XHR9XG4gZXJyX3VucmVzdjpcbiBcdFx0aWYgKG5yX3Jlc3YgXHUwMDNlIDApXG4gXHRcdFx0aHVnZXRsYl91bnJlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgMCk7XG4rb3V0X3VubG9jazpcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTA6MjYuMDM2MDI4NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjI1NDIzNjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uIGZvciBTeXprYWxsZXIgRnV6emluZzogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggZm9yIHVzZSB3aXRoIHN5emthbGxlci4gRmlyc3QgdGhpbmdzIGZpcnN0OiBzYWZldHkgYW5kIHBvbGljeSBhcmUgcGFyYW1vdW50LiBUaGlzIGlzIHN0YW5kYXJkIHNvZnR3YXJlIG1haW50ZW5hbmNlLCBhIHBhdGNoIGFuYWx5c2lzIGZvciBMaW51eCBrZXJuZWwgZnV6emluZy4gTm8gcmVkIGZsYWdzLCBub3RoaW5nIGV4cGxvaXRhdGl2ZSByZXF1ZXN0ZWQsIHNvIHdlIGNhbiBwcm9jZWVkIHNhZmVseS4gTm8gaW1tZWRpYXRlIGNvbmNlcm5zIHRoZXJlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgdGVjaG5pY2FsIGRldGFpbHMuIEknbGwgbmVlZCB0byBpbnNwZWN0IHRoZSBwYXRjaCBpdHNlbGYgYW5kIGxldmVyYWdlIHRoZSB1c3VhbCB0b29scyBmb3IgY29kZSBhbmFseXNpcy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgZm9jdXNlZCBvbiBgbW0vbWVtZmQuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1lbWZkX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgZXhwYW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF1gIGxvY2sgYWNyb3NzIGNhbGxzIHRvIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCwgdGhlIGZvbGlvIHplcm9pbmcsIGFuZCB0aGUgYWRkaXRpb24gdG8gdGhlIHBhZ2UgY2FjaGUuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NrIGV4cGFuc2lvbi4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCBjYWxsZXJzIG9mIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGV4YW1pbmUgcmVsYXRlZCBjb2RlIHBhdGhzIGFuZCBjb25maWd1cmF0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gY29uY3VycmVuY3ksIHBlcmZvcm1hbmNlLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGZ1enppbmcgZWZmZWN0aXZlbmVzcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbG9jayBzY29wZSBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBib3R0bGVuZWNrcyBvciwgd29yc2UsIHBvdGVudGlhbCBkZWFkbG9ja3MgdGhhdCBjb3VsZCBoaW5kZXIgZnV6emluZy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjQyLjI5MDI2NzU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTQxMDAyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1mZC5oPTEwPWV4dGVybiBsb25nIG1lbWZkX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgYXJnKTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMTItLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yNy19XFxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yOS17XFxuLS1cXG5tbS9ndXAuYz0zNDQ1PWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tLVxcbm1tL2d1cC5jLTM1MjAtXFx0XFx0XFx0aWYgKCFucl9mb3VuZCkge1xcbm1tL2d1cC5jOjM1MjE6XFx0XFx0XFx0XFx0Zm9saW8gPSBtZW1mZF9hbGxvY19mb2xpbyhtZW1mZCwgc3RhcnRfaWR4KTtcXG5tbS9ndXAuYy0zNTIyLVxcdFxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02Ny0gKi9cXG5tbS9tZW1mZC5jOjY4OnN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG5tbS9tZW1mZC5jLTY5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTA6NDQuNTg0Mzc1NDU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4OTA4MDczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uIHdpdGggbWVtZmQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiBgbWVtZmRgIGltcGxlbWVudGF0aW9uLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB3ZSdyZSBtYW5hZ2luZyBtZW1vcnkgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGFuZCBwaW5uZWQsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZTogYG1tL21lbWZkLmNgIGFuZCBgbW0vZ3VwLmNgLiBTcGVjaWZpY2FsbHksIEknbSB6b25pbmcgaW4gb24gYG1lbWZkX2FsbG9jX2ZvbGlvYCBhbmQgYG1lbWZkX3Bpbl9mb2xpb3NgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGFsbG9jYXRpb24gYW5kIHBpbm5pbmcgbWVjaGFuaXNtcywgYW5kIEkgc3VzcGVjdCB0aGV5J2xsIHJldmVhbCB0aGUgY29yZSBsb2dpYyBJJ20gYWZ0ZXIuIEknbSBrZWVuIHRvIHRyYWNlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXRocyDigJMgaG93IHRoZSBrZXJuZWwgY2hvb3NlcyBhbmQgcmVzZXJ2ZXMgcGFnZXMgKG9yIGZvbGlvcykgZm9yIGBtZW1mZGAgb2JqZWN0cywgYW5kIGV4YWN0bHkgKmhvdyogYW5kICp3aGVuKiB0aGVzZSBwYWdlcyBhcmUgcGlubmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucywgcmVmZXJlbmNlIGNvdW50cywgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEknbGwgYmUgbG9va2luZyBmb3Igb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCBhbmQgd2hldGhlciB3ZSdyZSBzZWVpbmcgYW55IHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBgbWVtZmRgIHVzYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjQ2Ljk3MzQ1ODA5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0fVxcbiAgNjE6XFx0XFxuICA2MjpcXHQvKlxcbiAgNjM6XFx0ICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IG1lbWZkX3Bpbl91c2VyX3BhZ2VzKCkgaW4gR1VQIChndXAuYykuXFxuICA2NDpcXHQgKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcXG4gIDY1OlxcdCAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxcbiAgNjY6XFx0ICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXFxuICA2NzpcXHQgKi9cXG4gIDY4OlxcdHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4gIDY5OlxcdHtcXG4gIDcwOlxcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuICA3MTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAgNzI6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2s7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdGlmIChpc19maWxlX2h1Z2VwYWdlcyhtZW1mZCkpIHtcXG4gIDc1OlxcdFxcdFxcdC8qXFxuICA3NjpcXHRcXHRcXHQgKiBUaGUgZm9saW8gd291bGQgbW9zdCBsaWtlbHkgYmUgYWNjZXNzZWQgYnkgYSBETUEgZHJpdmVyLFxcbiAgNzc6XFx0XFx0XFx0ICogdGhlcmVmb3JlLCB3ZSBoYXZlIHpvbmUgbWVtb3J5IGNvbnN0cmFpbnRzIHdoZXJlIHdlIGNhblxcbiAgNzg6XFx0XFx0XFx0ICogYWxsb2MgZnJvbS4gQWxzbywgdGhlIGZvbGlvIHdpbGwgYmUgcGlubmVkIGZvciBhbiBpbmRlZmluaXRlXFxuICA3OTpcXHRcXHRcXHQgKiBhbW91bnQgb2YgdGltZSwgc28gaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG1pZ3JhdGVkIGF3YXkuXFxuICA4MDpcXHRcXHRcXHQgKi9cXG4gIDgxOlxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKG1lbWZkKTtcXG4gIDgyOlxcdFxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XFxuICA4MzpcXHRcXHRcXHRpbnQgZXJyID0gLUVOT01FTTtcXG4gIDg0OlxcdFxcdFxcdGxvbmcgbnJfcmVzdjtcXG4gIDg1OlxcdFxcdFxcdHUzMiBoYXNoO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRcXHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4gIDg4OlxcdFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUpO1xcbiAgODk6XFx0XFx0XFx0aWR4IFxcdTAwM2VcXHUwMDNlPSBodWdlX3BhZ2Vfb3JkZXIoaCk7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdFxcdC8qXFxuICA5MjpcXHRcXHRcXHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XFxuICA5MzpcXHRcXHRcXHQgKiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMsIGFzIHJlcXVpcmVkIGJ5IGFsbCBvdGhlclxcbiAgOTQ6XFx0XFx0XFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXFxuICA5NTpcXHRcXHRcXHQgKi9cXG4gIDk2OlxcdFxcdFxcdGhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2gobWVtZmQtXFx1MDAzZWZfbWFwcGluZywgaWR4KTtcXG4gIDk3OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRcXHRucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XFxuIDEwMDpcXHRcXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNjIDApIHtcXG4gMTAxOlxcdFxcdFxcdFxcdGVyciA9IG5yX3Jlc3Y7XFxuIDEwMjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDEwMzpcXHRcXHRcXHR9XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxuIDEwNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCxcXG4gMTA4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzayk7XFxuIDEwOTpcXHRcXHRcXHRpZiAoZm9saW8pIHtcXG4gMTEwOlxcdFxcdFxcdFxcdC8qXFxuIDExMTpcXHRcXHRcXHRcXHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4gMTEyOlxcdFxcdFxcdFxcdCAqIFVzZSBmb2xpb196ZXJvX3VzZXIoKSB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGh1Z2UvZ2lnYW50aWNcXG4gMTEzOlxcdFxcdFxcdFxcdCAqIHBhZ2VzLiBQYXNzIDAgYXMgYWRkcl9oaW50IHNpbmNlIHRoaXMgaXMgbm90IGEgZmF1bHRpbmcgcGF0aFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICogIGFuZCB3ZSBkb24ndCBoYXZlIGEgdXNlciB2aXJ0dWFsIGFkZHJlc3MgeWV0LlxcbiAxMTU6XFx0XFx0XFx0XFx0ICovXFxuIDExNjpcXHRcXHRcXHRcXHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApO1xcbiAxMTc6XFx0XFxuIDExODpcXHRcXHRcXHRcXHQvKlxcbiAxMTk6XFx0XFx0XFx0XFx0ICogTWFyayB0aGUgZm9saW8gdXB0b2RhdGUgYmVmb3JlIGFkZGluZyB0byBwYWdlIGNhY2hlLFxcbiAxMjA6XFx0XFx0XFx0XFx0ICogYXMgcmVxdWlyZWQgYnkgZmlsZW1hcC5jIGFuZCBvdGhlciBodWdldGxiIHBhdGhzLlxcbiAxMjE6XFx0XFx0XFx0XFx0ICovXFxuIDEyMjpcXHRcXHRcXHRcXHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHRcXHRcXHRlcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLFxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWVtZmQtXFx1MDAzZWZfbWFwcGluZyxcXG4gMTI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlkeCk7XFxuIDEyNzpcXHRcXHRcXHRcXHRpZiAoZXJyKSB7XFxuIDEyODpcXHRcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiAxMjk6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfdW5yZXN2O1xcbiAxMzA6XFx0XFx0XFx0XFx0fVxcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRcXHRcXHRodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzdWJwb29sX2lub2RlKGlub2RlKSk7XFxuIDEzMzpcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiAxMzQ6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG4gMTM1OlxcdFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4gMTM2OlxcdFxcdFxcdH1cXG4gMTM3OlxcdGVycl91bnJlc3Y6XFxuIDEzODpcXHRcXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNlIDApXFxuIDEzOTpcXHRcXHRcXHRcXHRodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggKyAxLCAwKTtcXG4gMTQwOlxcdG91dF91bmxvY2s6XFxuIDE0MTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbiAxNDI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gMTQzOlxcdFxcdH1cXG4gMTQ0OlxcdCNlbmRpZlxcbiAxNDU6XFx0XFx0cmV0dXJuIHNobWVtX3JlYWRfZm9saW8obWVtZmQtXFx1MDAzZWZfbWFwcGluZywgaWR4KTtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0LypcXG4gMTQ5OlxcdCAqIFNldHRpbmcgU0VBTF9XUklURSByZXF1aXJlcyB1cyB0byB2ZXJpZnkgdGhlcmUncyBubyBwZW5kaW5nIHdyaXRlci4gSG93ZXZlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTA6NDYuOTczNTM3Njg3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1MDQyMjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgRm9vdHN0ZXBzIG9mIGBtZW1mZF9waW5fZm9saW9zYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYG1lbWZkX3Bpbl9mb2xpb3NgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZCBmcm9tIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbT8gSXMgaXQgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgb3IgaXMgaXQgdXNlZCBpbiBzb21lIHNwZWNpZmljIHN1YnN5c3RlbT8gSSB3YW50IHRvIHNlZSB3aGF0IGl0cyByb2xlIGlzLCBob3cgaXQncyBiZWluZyB1c2VkLCBhbmQgd2hhdCBjb250ZXh0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGggc2hvdWxkIGdpdmUgbWUgc29tZSBnb29kIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgcmFiYml0IGhvbGUgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjQ4LjgyMzk2MjAzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ5MjE5MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX3Bpbl9mb2xpb3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0zMDQ9c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cXHRlbmQgPSBzdGFydCArIChwZ2NudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSAtIDE7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XFx0bnJfZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyhtZW1mZCwgc3RhcnQsIGVuZCwgZm9saW9zLCBwZ2NudCwgXFx1MDAyNnBnb2ZmKTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cXHRpZiAobnJfZm9saW9zIFxcdTAwM2M9IDApXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzNy1cXHRcXHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzM4OlxcdFxcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM5LVxcdFxcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM0LVxcdC8qXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1OlxcdCAqIHRvZG86IG1lbWZkX3Bpbl9mb2xpb3Mgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBwaW5uZWQgb2Zmc2V0IHNvXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVxcdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4Mzk6XFx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cXHUwMDNldWZvbGlvcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXFx0XFx0XFx0XFx0ICAgbmZvbGlvcywgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzM2MD1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzNjEtXFx0XFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMzYyOmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM2My1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcXG4tLVxcbm1tL2d1cC5jLTE5NS0gKlxcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcXG5tbS9ndXAuYy0xOTctICogbXVzdCBiZSByZWxlYXNlZCBlaXRoZXIgdXNpbmcgdW5waW5fZm9saW8oKSBvciB1bnBpbl9mb2xpb3MoKS5cXG4tLVxcbm1tL2d1cC5jPTM0MTc9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XFxuLS1cXG5tbS9ndXAuYy0zNDE5LS8qKlxcbm1tL2d1cC5jOjM0MjA6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxcbm1tL2d1cC5jLTM0MjEtICogQG1lbWZkOiAgICAgIHRoZSBtZW1mZCB3aG9zZSBmb2xpb3MgYXJlIHRvIGJlIHBpbm5lZFxcbi0tXFxubW0vZ3VwLmMtMzQ0NC0gKi9cXG5tbS9ndXAuYzozNDQ1OmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5tbS9ndXAuYy0zNDQ2LVxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0zNTQxLX1cXG5tbS9ndXAuYzozNTQyOkVYUE9SVF9TWU1CT0xfR1BMKG1lbWZkX3Bpbl9mb2xpb3MpO1xcbm1tL2d1cC5jLTM1NDMtXFxuLS1cXG5tbS9ndXAuYy0zNTUzLSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBvYnRhaW5lZCBhIHBpbiBvbiBhIGxhcmdlIGZvbGlvXFxubW0vZ3VwLmM6MzU1NDogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xcbm1tL2d1cC5jLTM1NTUtICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02NC0gKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxcbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXFxuLS1cXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy0xMjktXFx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcXG5tbS9tZW1mZF9sdW8uYzoxMzA6XFx0ICogbWVtZmRfcGluX2ZvbGlvcygpIHZhcmlhbnQgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHBhZ2Ugb24gZW1wdHlcXG5tbS9tZW1mZF9sdW8uYy0xMzEtXFx0ICogc2xvdHMuXFxubW0vbWVtZmRfbHVvLmMtMTMyLVxcdCAqL1xcbm1tL21lbWZkX2x1by5jOjEzMzpcXHRucl9waW5uZWQgPSBtZW1mZF9waW5fZm9saW9zKGZpbGUsIDAsIHNpemUgLSAxLCBmb2xpb3MsIG1heF9mb2xpb3MsXFxubW0vbWVtZmRfbHVvLmMtMTM0LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMjkxLVxcdC8qXFxubW0vbWVtZmRfbHVvLmM6MjkyOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxcbm1tL21lbWZkX2x1by5jLTI5My1cXHQgKiBmaWxlcyB0byBhdm9pZCBzaWxlbnRseSBwcmVzZXJ2aW5nIG9ubHkgYSBwcmVmaXguXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjUxLjE3MzE4NjMxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NjkzMTA4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgRXZhbHVhdGlvbjogbWVtZmQgd2l0aCBodWdldGxiIGFuZCB1ZG1hYnVmL2lvbW11ZmQqKlxuXG5Pa2F5LCBsZXQncyBzZWUgaWYgdGhpcyBgbWVtZmRgL2h1Z2V0bGIvdWRtYWJ1ZiBzaXR1YXRpb24gaXMgd29ydGggZGlnZ2luZyBpbnRvIGZvciBmdXp6aW5nLiAgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgdWRtYWJ1ZmAgYW5kIGBpb21tdWZkYCBtaWdodCBpbnRlcmFjdCB3aXRoIGEgYG1lbWZkX2NyZWF0ZWAgY2FsbCB1c2luZyBgTUZEX0hVR0VUTEJgLiAgQ2FuIHVzZXJzcGFjZSBsZXZlcmFnZSBgbWVtZmRfY3JlYXRlYCB0byBjcmVhdGUgYSBodWdlIHBhZ2UgYmFja2VkIG1lbW9yeSByZWdpb24gYW5kIHRoZW4gdXNlIGB1ZG1hYnVmYCAodmlhIGAvZGV2L3VkbWFidWZgIGFuZCBpdHMgaW9jdGxzLCBzcGVjaWZpY2FsbHkgYFVETUFCVUZfQ1JFQVRFYCBvciBgVURNQUJVRl9DUkVBVEVfTElTVGApIG9yIGBpb21tdWZkYCAod2l0aCBgSU9NTVVfSU9BU19NQVBfRklMRWAgb3Igc2ltaWxhcikgdG8gaW50ZXJmYWNlIHdpdGggaXQ/ICBUaGUgZmFjdCB0aGF0IGB1ZG1hYnVmYCBpcyBhIG1pc2MgZGV2aWNlIGFuZCBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIGJ5IHN5emthbGxlciBpcyBhIGdvb2Qgc2lnbi5cblxuQWxyaWdodCwgbm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkLiBUaGUga2V5IGFyZWEgaXMgY2xlYXJseSBgbW0vbWVtZmQuY2AuICBMb29raW5nIGF0IHRoZSBjb21taXQgaGlzdG9yeSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbWVtZmRfYWxsb2NfZm9saW9gLiAgUHJldmlvdXNseSwgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpYCB3ZXJlIGNhbGxlZCAqb3V0c2lkZSogdGhlIGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdYCBtdXRleC4gIFRoZSBtdXRleCB3YXMgb25seSBhY3F1aXJlZCBhcm91bmQgYGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKWAuICBOb3csIHBvc3QtcGF0Y2gsIHRoZSBtdXRleCBpcyBhY3F1aXJlZCAqYmVmb3JlKiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBoZWxkIGFsbCB0aGUgd2F5IHRocm91Z2ggYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpYCwgYGZvbGlvX3plcm9fdXNlcigpYCwgYF9fZm9saW9fbWFya191cHRvZGF0ZSgpYCwgYGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKWAsIGFuZCBgaHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbCgpYC4gSXQncyB1bmxvY2tlZCBvbiBlcnJvciBvciBzdWNjZXNzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgaW1wYWN0aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGggZm9yIG1lbWZkIHdpdGggaHVnZXRsYi5cblxuVGhpcyBzY3JlYW1zIGZ1enppbmcgdGFyZ2V0IHRvIG1lISAgSXQncyBpbiB0aGUgYG1tL2AgY29yZSBzdWJzeXN0ZW0sIHNvIGFueSBtZW1vcnkgbWFuYWdlbWVudCBidWcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LCBJdCBpbnZvbHZlcyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcsIHdoaWNoIGFyZSBhbHdheXMgcHJpbWUgdGFyZ2V0cyBmb3IgZmluZGluZyByYWNlIGNvbmRpdGlvbnMsIGFuZCBpdCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBtZW1mZF9jcmVhdGVgIHN5c2NhbGwgd2l0aCBgdWRtYWJ1ZmAgYW5kL29yIGBpb21tdWZkYCBpb2N0bHMuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSBuZWVkIHRvIGNoZWNrIGBtbS9tZW1mZC5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyaWVzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3B0aW9ucywgbGlrZSBgSFVHRVRMQl9QQUdFYCwgYFVETUFCVUZgLCBhbmQgdGhlIGNvcmUgYG1lbWZkYCBmdW5jdGlvbmFsaXR5IGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgd2hvbGUgc2hlYmFuZy4gIE9uY2UgSSBrbm93IHRoZSBjb25maWd1cmF0aW9ucywgSSBjYW4gYmUgc3VyZSB0byBpbmNsdWRlIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4OTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTA6NTYuNjQyNTAxNTk4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDk4MDQ3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0hVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODU9ZW5kaWZcXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXFx0Kz0gaHVnZXRsYl92bWVtbWFwLm9cXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjU4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjg0LVxcbm1tL2RhbW9uL3ZhZGRyLmM6Mjg1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vZGFtb24vdmFkZHIuYy0yODYtc3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MzEzPXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0zMzMtI2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcXG5tbS9kYW1vbi92YWRkci5jOjMzNDojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmMtMzM1LVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0zNzk9c3RhdGljIGludCBkYW1vbl95b3VuZ19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy00MjQtXFxubW0vZGFtb24vdmFkZHIuYzo0MjU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9kYW1vbi92YWRkci5jLTQyNi1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNDU1LSNkZWZpbmUgZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeSBOVUxMXFxubW0vZGFtb24vdmFkZHIuYzo0NTY6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5tbS9kYW1vbi92YWRkci5jLTQ1Ny1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz04NDQ9c3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODgzLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4ODQ6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODg1LXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODk5LX1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTAwOiNlbHNlICAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDEtc3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjkwMjojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXFxuLS1cXG5tbS9obW0uYz00OTE9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcHVkKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2htbS5jLTU0OC1cXG5tbS9obW0uYzo1NDk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9obW0uYy01NTAtc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbi0tXFxubW0vaG1tLmMtNTg4LSNkZWZpbmUgaG1tX3ZtYV93YWxrX2h1Z2V0bGJfZW50cnkgTlVMTFxcbm1tL2htbS5jOjU4OTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2htbS5jLTU5MC1cXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTM3Mj1zdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0zODctXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6Mzg4OnN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTM4OS1zdGF0aWMgaW50IF9faW5pdCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfcGFyYW0oY2hhciAqYnVmKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmgtMTktXFxubW0vaHVnZXRsYl92bWVtbWFwLmg6MjA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5oLTIxLWludCBodWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5oPTc5PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuaC04MS19XFxubW0vaHVnZXRsYl92bWVtbWFwLmg6ODI6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCAqL1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5oLTgzLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQzMS1cXHRQR1JFRklMTCxcXG5tbS9tZW1jb250cm9sLmM6NDMyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTQzMy1cXHROUl9IVUdFVExCLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjI0LVxcdHsgXFxcInNsYWJfdW5yZWNsYWltYWJsZVxcXCIsXFx0XFx0TlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0JcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNjI1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE2MjYtXFx0eyBcXFwiaHVnZXRsYlxcXCIsXFx0XFx0XFx0TlJfSFVHRVRMQlxcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTcxOT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTcyNS1cXG5tbS9tZW1jb250cm9sLmM6MTcyNjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbWNvbnRyb2wuYy0xNzI3LXN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzMwLX1cXG5tbS9tZW1jb250cm9sLmM6MTczMTojZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vbWVtY29udHJvbC5jLTE3MzItc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MzUtfVxcbm1tL21lbWNvbnRyb2wuYzoxNzM2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vbWVtY29udHJvbC5jLTE3MzctXFxubW0vbWVtY29udHJvbC5jPTE3Mzg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzU2LVxcbm1tL21lbWNvbnRyb2wuYzoxNzU3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE3NTgtXFx0XFx0aWYgKHVubGlrZWx5KG1lbW9yeV9zdGF0c1tpXS5pZHggPT0gTlJfSFVHRVRMQikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbm1tL21lbWZkLmMtNjkte1xcbm1tL21lbWZkLmM6NzA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1mZC5jLTcxLVxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTc0MD1zdGF0aWMgaW50IGh3cG9pc29uX3B0ZV9yYW5nZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy03NzEtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo3NzI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc3My1zdGF0aWMgaW50IGh3cG9pc29uX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4NjI9RVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODY0LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg2NTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2Ni1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjE1OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2Mi19XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTYzOiNlbmRpZlxcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNjQtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz03OTM9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNzk2LXtcXG5tbS9tZW1wb2xpY3kuYzo3OTc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1wb2xpY3kuYy03OTgtXFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuLS1cXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtNDI1LVxcbm1tL21pZ3JhdGUuYzo0MjY6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9taWdyYXRlLmMtNDI3LVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLS1cXG5tbS9taWdyYXRlLmM9NDkzPXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9taWdyYXRlLmMtNTIwLVxcbm1tL21pZ3JhdGUuYzo1MjE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9taWdyYXRlLmMtNTIyLS8qXFxuLS1cXG5tbS9taW5jb3JlLmM9Mjc9c3RhdGljIGludCBtaW5jb3JlX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWluY29yZS5jLTI5LXtcXG5tbS9taW5jb3JlLmM6MzA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9taW5jb3JlLmMtMzEtXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBuciA9IChlbmQgLSBhZGRyKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxubW0vbW1faW5pdC5jPTE0ODM9c3RhdGljIGlubGluZSB2b2lkIHNldHVwX3VzZW1hcChzdHJ1Y3Qgem9uZSAqem9uZSkge31cXG4tLVxcbm1tL21tX2luaXQuYy0xNDg1LVxcbm1tL21tX2luaXQuYzoxNDg2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9tbV9pbml0LmMtMTQ4Ny1cXG4tLVxcbm1tL21tX2luaXQuYz0xNDg5PXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfcGFnZWJsb2NrX29yZGVyKHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTUwNi19XFxubW0vbW1faW5pdC5jOjE1MDc6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFICovXFxubW0vbW1faW5pdC5jLTE1MDgtXFxubW0vbW1faW5pdC5jLTE1MDktLypcXG5tbS9tbV9pbml0LmM6MTUxMDogKiBXaGVuIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRSBpcyBub3Qgc2V0LCBzZXRfcGFnZWJsb2NrX29yZGVyKClcXG5tbS9tbV9pbml0LmMtMTUxMS0gKiBpcyB1bnVzZWQgYXMgcGFnZWJsb2NrX29yZGVyIGlzIHNldCBhdCBjb21waWxlLXRpbWUuIFNlZVxcbi0tXFxubW0vbW1faW5pdC5jPTE1MTU9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzZXRfcGFnZWJsb2NrX29yZGVyKHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTUxOC1cXG5tbS9tbV9pbml0LmM6MTUxOTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFICovXFxubW0vbW1faW5pdC5jLTE1MjAtXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTczMD1zdGF0aWMgaW50IHByb3Rfbm9uZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbXByb3RlY3QuYy03MzctXFxubW0vbXByb3RlY3QuYzo3Mzg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tcHJvdGVjdC5jLTczOS1zdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MjA5PWdmcF90IGdmcF9hbGxvd2VkX21hc2sgX19yZWFkX21vc3RseSA9IEdGUF9CT09UX01BU0s7XFxubW0vcGFnZV9hbGxvYy5jLTIxMC1cXG5tbS9wYWdlX2FsbG9jLmM6MjExOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9wYWdlX2FsbG9jLmMtMjEyLXVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMDczPXN0YXRpYyBpbnQgZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqaGVhZF9wYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMTM5LVxcdFxcdC8qIHRoZSB0aGlyZCB0YWlsIHBhZ2U6IGh1Z2V0bGIgc3BlY2lmaWNzIG92ZXJsYXAgLVxcdTAwM2VtYXBwaW5ncyAqL1xcbm1tL3BhZ2VfYWxsb2MuYzoxMTQwOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0UpKVxcbm1tL3BhZ2VfYWxsb2MuYy0xMTQxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcGFnZXdhbGsuYz0yODY9c3RhdGljIGludCB3YWxrX3BnZF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZXdhbGsuYy0zMjYtXFxubW0vcGFnZXdhbGsuYzozMjc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9wYWdld2Fsay5jLTMyOC1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2VudHJ5X2VuZChzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdld2Fsay5jPTMzNj1zdGF0aWMgaW50IHdhbGtfaHVnZXRsYl9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZXdhbGsuYy0zNjMtXFxubW0vcGFnZXdhbGsuYzozNjQ6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL3BhZ2V3YWxrLmMtMzY1LXN0YXRpYyBpbnQgd2Fsa19odWdldGxiX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTM3MC1cXG5tbS9wYWdld2Fsay5jOjM3MTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL3BhZ2V3YWxrLmMtMzcyLVxcbi0tXFxubW0vcm1hcC5jPTMxNTk9dm9pZCBybWFwX3dhbGtfbG9ja2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCAqcndjKVxcbi0tXFxubW0vcm1hcC5jLTMxNjgtXFxubW0vcm1hcC5jOjMxNjk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9ybWFwLmMtMzE3MC0vKlxcbi0tXFxubW0vcm1hcC5jPTMxODk9dm9pZCBodWdldGxiX2FkZF9uZXdfYW5vbl9ybWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtMzIwMS19XFxubW0vcm1hcC5jOjMyMDI6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmM9MTc2PXN0YXRpYyB2b2lkICogX19tZW1pbml0IHZtZW1tYXBfYWxsb2NfYmxvY2tfemVybyh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy0xODYtXFxubW0vc3BhcnNlLXZtZW1tYXAuYzoxODc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbm1tL3NwYXJzZS12bWVtbWFwLmMtMTg4LXN0YXRpYyBfX21lbWluaXQgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3NwYXJzZS5oLTEyLVxcbm1tL3NwYXJzZS5oOjEzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5tbS9zcGFyc2UuaC0xNC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZWN0aW9uX29yZGVyKGNvbnN0IHN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbilcXG4tLVxcbm1tL3NwYXJzZS5oPTczPXN0YXRpYyBpbmxpbmUgYm9vbCB2bWVtbWFwX29wdGltaXphYmxlX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9zcGFyc2UuaC03NC17XFxubW0vc3BhcnNlLmg6NzU6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCkpXFxubW0vc3BhcnNlLmgtNzYtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz03MDc9c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3BvaXNvbihzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy03NDMtXFxubW0vdXNlcmZhdWx0ZmQuYzo3NDQ6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS91c2VyZmF1bHRmZC5jLTc0NS0vKlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz03NTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy05MDctfVxcbm1tL3VzZXJmYXVsdGZkLmM6OTA4OiNlbHNlIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vdXNlcmZhdWx0ZmQuYy05MDktLyogZmFpbCBhdCBidWlsZCB0aW1lIGlmIGdjYyBhdHRlbXB0cyB0byB1c2UgdGhpcyAqL1xcbm1tL3VzZXJmYXVsdGZkLmM9OTEwPWV4dGVybiBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtOTE1LVxcdFxcdFxcdFxcdCAgICB1ZmZkX2ZsYWdzX3QgZmxhZ3MpO1xcbm1tL3VzZXJmYXVsdGZkLmM6OTE2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vdXNlcmZhdWx0ZmQuYy05MTctXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTI1NTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgdWZmZF9tc2cgdXNlcmZhdWx0X21zZyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTI1ODktXFxubW0vdXNlcmZhdWx0ZmQuYzoyNTkwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vdXNlcmZhdWx0ZmQuYy0yNTkxLS8qXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTI2NDY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfbXVzdF93YWl0KHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjY1My19XFxubW0vdXNlcmZhdWx0ZmQuYzoyNjU0OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yNjU1LVxcbi0tXFxubW0vdm1hbGxvYy5jPTk2PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xMjMtXFxubW0vdm1hbGxvYy5jOjEyNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL3ZtYWxsb2MuYy0xMjUtXFx0XFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zODk9c3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM5OS1cXHRkbyB7XFxubW0vdm1hbGxvYy5jOjQwMDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL3ZtYWxsb2MuYy00MDEtXFx0XFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZShhZGRyLCBwdGUpO1xcbi0tXFxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTEzMDYtXFx0W0koUEdSRUZJTEwpXVxcdFxcdFxcdFxcdD0gXFxcInBncmVmaWxsXFxcIixcXG5tbS92bXN0YXQuYzoxMzA3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vdm1zdGF0LmMtMTMwOC1cXHRbSShOUl9IVUdFVExCKV1cXHRcXHRcXHRcXHQ9IFxcXCJucl9odWdldGxiXFxcIixcXG4tLVxcbm1tL3Ztc3RhdC5jLTEzOTYtXFxubW0vdm1zdGF0LmM6MTM5NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL3Ztc3RhdC5jLTEzOTgtXFx0W0koSFRMQl9CVUREWV9QR0FMTE9DKV1cXHRcXHRcXHQ9IFxcXCJodGxiX2J1ZGR5X2FsbG9jX3N1Y2Nlc3NcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMDo1Ny40OTIzMTExNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg3MjI0OTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlOiBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBLY29uZmlnLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgZWFjaC4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3Igc3VidGxlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZW0uXG5cbk15IGdvYWwgaXNuJ3QganVzdCB0byBzZWUgaWYgdGhleSdyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlaXIgY3VycmVudCBzdGF0ZXMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zOyBpZiBgSFVHRVRMQkZTYCBpcyBlbmFibGVkLCBkb2VzIHRoYXQgbmVjZXNzaXRhdGUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIGBIVUdFVExCX1BBR0VgPyBDb252ZXJzZWx5LCB3aGF0IGhhcHBlbnMgd2hlbiBJJ20gZGVhbGluZyB3aXRoIGRpZmZlcmVudCBtZW1vcnkgYXJjaGl0ZWN0dXJlcz8gRG9lcyB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBkZXRlcm1pbmUgYW55dGhpbmcgaGVyZT8gSSdsbCBwcm9iYWJseSBiZSBjaGVja2luZyB0aGUgaGVscCB0ZXh0LCBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHVzZSBjYXNlIEknbSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gQW5kIEknbGwgYmUgcGFydGljdWxhcmx5IGtlZW4gdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGludGVycGxheSB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIGFuZCBhbnkgcG90ZW50aWFsIHVzZXItc3BhY2UgaW50ZXJmYWNlcy4gSXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIGRpZmZlcmVudCBOVU1BIGNvbmZpZ3VyYXRpb25zIHRvby4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIG9mZmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjAwLjM2NDU2NDc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2NTIwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxuZnMvS2NvbmZpZy0yODEtXFxuZnMvS2NvbmZpZzoyODI6Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbmZzL0tjb25maWctMjgzLVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTowMC41MzAyMjIyMzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0Mjg5Njg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVURNQUJVRiBVc2FnZSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gSSd2ZSBhbHJlYWR5IGV4cGxvcmVkIHRoZSBpbW1lZGlhdGUgYXJlYXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLiBJIHNob3VsZCB0aG9yb3VnaGx5IHNjcnV0aW5pemUgdGhlIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHBvaW50IGZvciBETUEgYnVmZmVyLXJlbGF0ZWQgZHJpdmVycywgc28gaXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBmaW5kIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb3IgcmVsYXRpb25zaGlwcyB3aXRoIGBVRE1BQlVGYC4gSSBhbHNvIG5lZWQgdG8gYmUgb24gdGhlIGxvb2tvdXQgZm9yIG90aGVyIGRyaXZlcnMgdGhhdCBtaWdodCBiZSBkaXJlY3RseSBjYWxsaW5nIG9yIHV0aWxpemluZyB0aGUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgc2FtZSBuYW1lc3BhY2UuIFwiT3RoZXIgY2FsbGVyc1wiIGlzIGtleSBoZXJlOyBpdCdzIGVhc3kgdG8gZm9jdXMgb24gdGhlIG9idmlvdXMgdGFyZ2V0IGFuZCBtaXNzIGluZGlyZWN0IHJlZmVyZW5jZXMuIFRoaXMgY291bGQgbWVhbiBhIG1vZHVsZSB0aGF0J3MgaW5kaXJlY3RseSB1dGlsaXppbmcgVURNQUJVRiB0aHJvdWdoIGFub3RoZXIgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IHNlYXJjaCBuZXQgaXMgd2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTowMi44NzMxMjE4NTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MjYzMzM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVURNQUJVRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJ1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTowMy44NDU3NTk3OTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4MDk2MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWZkIEZvbGlvIEFsbG9jYXRpb24gYW5kIFBpbm5pbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgbWVtZmRfY3JlYXRlYCBhbmQgaXRzIHJlbGF0ZWQgZm9saW8gYWxsb2NhdGlvbiBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGBtZW1mZF9hbGxvY19mb2xpb2AuIEkgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uIGFuZCBzY29wZS4gWWVzLCBpdCdzIG5vbi1zdGF0aWMsIGRlZmluZWQgd2l0aGluIGBtbS9tZW1mZC5jYCwgYXMgYHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClgLiBBbmQsIGNyaXRpY2FsbHksIEkgc2VlIGBtZW1mZF9waW5fZm9saW9zKClgIGlzIGFsc28gaW52b2x2ZWQsIHJlc2lkaW5nIGluIGBtbS9ndXAuY2AuIEZ1cnRoZXIsIGB1ZG1hYnVmX3Bpbl9mb2xpb3MoKWAgaW4gYGRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmNgIGFsc28gc2VlbXMgbGlua2VkLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMg4oCTIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGBtZW1mZF9waW5fZm9saW9zYCDigJMgd2FycmFudCBiZWluZyBjb3JlIGZvY3VzIHN5bWJvbHMgZm9yIG15IGFuYWx5c2lzLiBBcmUgdGhleSB0cnVseSBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzPyBObywgaXQgbG9va3MgbGlrZSBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIG9ubHkgY2FsbGVkIHdoZW4gd2UncmUgcGlubmluZyBmb2xpb3MgZm9yIGEgbWVtZmQgZmlsZSBkZXNjcmlwdG9yICh2aWEgYG1lbWZkX3Bpbl9mb2xpb3NgKS4gSSBhbHNvIHNlZSBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgb25seSBiZWluZyBjYWxsZWQgZnJvbSBjb250ZXh0cyBzdWNoIGFzIHVkbWFidWYgKGB1ZG1hYnVmX3Bpbl9mb2xpb3NgKSwgaW9tbXVmZCAoYHBpbl9tZW1mZF9wYWdlc2ApLCBhbmQgdGhlIGxpa2UuIFRoaXMgdGVsbHMgbWUgdGhlaXIgdXNhZ2UgaXMgbW9yZSB0YXJnZXRlZC5cblxuR2l2ZW4gdGhhdCwgSSBjYW4gY29uZmlybSB0aGUga2V5IGZ1bmN0aW9uIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggaXMsIGluIGZhY3QsIGBtZW1mZF9hbGxvY19mb2xpb2AuIEFuZCB0aGVyZWZvcmUsIG15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGFic29sdXRlbHkgZW5jb21wYXNzICpib3RoKiBgbWVtZmRfYWxsb2NfZm9saW9gIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AuXG5cbkZpbmFsbHksIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgRW5hYmxlQ29uZmlncy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBIVUdFVExCRlNgIGlzIGVuYWJsZWQgKGFuZCB0aHVzLCBgSFVHRVRMQl9QQUdFYCkgYWxvbmcgd2l0aCBgVURNQUJVRmAuIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGBNRU1GRF9DUkVBVEVgLCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzk2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjA4LjAyNjcyNjIxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMzQ4NjQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKk1FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9saXZldXBkYXRlL0tjb25maWc9NTI9Y29uZmlnIExJVkVVUERBVEVcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNzItXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo3Mzpjb25maWcgTElWRVVQREFURV9NRU1GRFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNzQtXFx0Ym9vbCBcXFwiTGl2ZSB1cGRhdGUgc3VwcG9ydCBmb3IgbWVtZmRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTEzMzM9Y29uZmlnIEtNQVBfTE9DQUxfTk9OX0xJTkVBUl9QVEVfQVJSQVlcXG4tLVxcbm1tL0tjb25maWctMTMzNS1cXG5tbS9LY29uZmlnOjEzMzY6Y29uZmlnIE1FTUZEX0NSRUFURVxcbm1tL0tjb25maWctMTMzNy1cXHRib29sIFxcXCJFbmFibGUgbWVtZmRfY3JlYXRlKCkgc3lzdGVtIGNhbGxcXFwiIGlmIEVYUEVSVFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTE6MTAuNDMwMjE4ODI1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTMyNjAxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBNRU1GRF9DUkVBVEVgIGluIGBtbS9LY29uZmlnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIGBNRU1GRF9DUkVBVEVgIOKAkyBhIGdvb2QgZmlyc3Qgc3RlcCwgb2J2aW91c2x5LCBpcyB0byBzZWUgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBob3cgaXTigJlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBtbS9LY29uZmlnYC4gSSBrbm93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbWApIGlzIHRoZSBsaWtlbHkgYXJlYSwgZ2l2ZW4gdGhlIG5hbWUuIEknbSBhbHJlYWR5IGVudmlzaW9uaW5nIHRoZSBLY29uZmlnIGZpbGUgc3RydWN0dXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgSSBzaG91bGQgZXhwZWN0IHRvIGZpbmQuIEknbSBhbnRpY2lwYXRpbmcgdGhpcyB3aWxsIHRlbGwgbWUgaWYgaXTigJlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdW5kZXIgd2hhdCBhcmNoaXRlY3R1cmUgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgcG9zc2libHkgZXZlbiBnaXZlIHNvbWUgYnJpZWYgZG9jdW1lbnRhdGlvbi4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMToxMi40ODM0ODE4MzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzM1OlxcdFxcbjEzMzY6XFx0Y29uZmlnIE1FTUZEX0NSRUFURVxcbjEzMzc6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbWZkX2NyZWF0ZSgpIHN5c3RlbSBjYWxsXFxcIiBpZiBFWFBFUlRcXG4xMzM4OlxcdFxcbjEzMzk6XFx0Y29uZmlnIFNFQ1JFVE1FTVxcbjEzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuMTM0MTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtZmRfc2VjcmV0KCkgc3lzdGVtIGNhbGxcXFwiIGlmIEVYUEVSVFxcbjEzNDI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxcbjEzNDM6XFx0XFx0aGVscFxcbjEzNDQ6XFx0XFx0ICBFbmFibGUgdGhlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsIHdpdGggdGhlIGFiaWxpdHkgdG8gY3JlYXRlXFxuMTM0NTpcXHRcXHQgIG1lbW9yeSBhcmVhcyB2aXNpYmxlIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG93bmluZyBwcm9jZXNzIGFuZFxcbjEzNDY6XFx0XFx0ICBub3QgbWFwcGVkIHRvIG90aGVyIHByb2Nlc3NlcyBhbmQgb3RoZXIga2VybmVsIHBhZ2UgdGFibGVzLlxcbjEzNDc6XFx0XFxuMTM0ODpcXHRjb25maWcgQU5PTl9WTUFfTkFNRVxcbjEzNDk6XFx0XFx0Ym9vbCBcXFwiQW5vbnltb3VzIFZNQSBuYW1lIHN1cHBvcnRcXFwiXFxuMTM1MDpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlMgXFx1MDAyNlxcdTAwMjYgQURWSVNFX1NZU0NBTExTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbjEzNTE6XFx0XFxuMTM1MjpcXHRcXHRoZWxwXFxuMTM1MzpcXHRcXHQgIEFsbG93IG5hbWluZyBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXMuXFxuMTM1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTE6MTIuNDgzNTgwMjA0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTMyMzk3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBtbS9tZW1mZC5vYCBnZXRzIGJ1aWx0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYC4gSSdsbCBzdGFydCB0aGVyZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb21waWxhdGlvbiBzdGVwcyBpbnZvbHZlZCBpbiBjcmVhdGluZyB0aGF0IHNwZWNpZmljIG9iamVjdCBmaWxlLiBIb3BlZnVsbHksIGl0J3Mgc3RyYWlnaHRmb3J3YXJkIGFuZCBJIGNhbiBxdWlja2x5IGdyYXNwIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGlzIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMuLi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzcGVjaWFsIGZsYWdzLCBpbmNsdWRlIHBhdGhzLCBvciBsaW5rZXIgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gYG1lbWZkLm9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMzNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTE6MTQuNjM2ODIyODExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE2OTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTQxPW9iai0kKENPTkZJR19ITU1fTUlSUk9SKSArPSBobW0ub1xcbm1tL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfTUVNRkRfQ1JFQVRFKSArPSBtZW1mZC5vXFxubW0vTWFrZWZpbGUtMTQzLW9iai0kKENPTkZJR19NQVBQSU5HX0RJUlRZX0hFTFBFUlMpICs9IG1hcHBpbmdfZGlydHlfaGVscGVycy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjE0LjY5NTk5ODAzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Njk0NTMwMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbS9tZW1mZC5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtZmQuY2AsIHdoaWNoIG1lYW5zIGBDT05GSUdfTUVNRkRfQ1JFQVRFYCBpcyBnb2luZyB0byBicmluZyBpbiBgbW0vbWVtZmQub2AuIFJpZ2h0LCBhbmQgaW5zaWRlIGBtZW1mZF9hbGxvY19mb2xpb2AsIHRoYXQgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBjbGF1c2UgaXMgZ29pbmcgdG8gcHVsbCBpbiB0aGUgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdfSFVHRVRMQkZTYCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBwaWVjZXMuIEkgc2VlIHRoYXQgYHVkbWFidWZgIGlzIG9uZSBvZiB0aGUgY2FsbGVycywgc28gd2UgYXJlIGFsc28gbG9va2luZyBhdCBgQ09ORklHX1VETUFCVUZgLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuXG5cbjEuICBgV29ydGhGdXp6aW5nYDogWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24vbG9ja2luZyB3aXRoaW4gYG1lbWZkX2FsbG9jX2ZvbGlvKClgIGluIGEgd2F5IHRoYXQgZXh0ZW5kcyB0aGUgc2NvcGUgb2YgdGhlIGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlYCBsb2NraW5nLiBUaGlzIGhhcHBlbnMgYXJvdW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAuIFRoZSByZWFsIGtpY2tlciBpcyB0aGF0IHRoaXMgaXMgdXNlci1zcGFjZSByZWFjaGFibGUuIGBtZW1mZF9jcmVhdGUoKWAgd2l0aCBgTUZEX0hVR0VUTEJgIGNhbiB0cmlnZ2VyIGl0IGRpcmVjdGx5LCBhbmQgbW9yZSBzdWJ0bHksIHNvIGNhbiBkcml2ZXJzIHVzaW5nIGBtZW1mZF9waW5fZm9saW9zKClgLiBTcGVjaWZpY2FsbHksIHRoaW5rIGAvZGV2L3VkbWFidWZgIHRocm91Z2ggdGhlIGBVRE1BQlVGX0NSRUFURWAgYW5kIGBVRE1BQlVGX0NSRUFURV9MSVNUYCBpb2N0bHMsIG9yIGV2ZW4gYGlvbW11ZmRgLiBDaGFuZ2VzIHRvIGNvcmUgTU0gbG9ja2luZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYXJlICphbHdheXMqIHN1c3BlY3QuIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgbG9jayBvcmRlcmluZyBpc3N1ZXMsIGRlYWRsb2NrcywgYW5kIHJhY2VzLlxuXG4yLiAgYEZvY3VzU3ltYm9sc2A6IEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIG9uIHR3byBrZXkgc3ltYm9scyBoZXJlOiBgbWVtZmRfYWxsb2NfZm9saW9gIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AuIFRoZXNlIGFyZSB3aGVyZSB0aGUgbG9ja2luZyBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcgYW5kIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIG1vc3QgZGlyZWN0LlxuXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBJJ20gZ29pbmcgdG8gbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZWQgdG8gYWN0dWFsbHkgZXhlcmNpc2UgdGhpcyBjb2RlOiBgTUVNRkRfQ1JFQVRFYCwgYEhVR0VUTEJGU2AsIGFuZCBgVURNQUJVRmAuXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjA2LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMToxOS4zOTA1MzAwMDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTUwMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNRkRfQ1JFQVRFXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlVETUFCVUZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1mZF9hbGxvY19mb2xpb1wiLFxuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgc3luY2hyb25pemF0aW9uIGxvY2tpbmcgaW4gbWVtZmRfYWxsb2NfZm9saW8oKSB3aXRoaW4gbW0vbWVtZmQuYywgZXhwYW5kaW5nIHRoZSBodWdldGxiX2ZhdWx0X211dGV4IGxvY2sgc2NvcGUgYWNyb3NzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGFuZCBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKS4gVGhpcyByZWFjaGFibGUgbW0gcGF0aCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpIGNvbWJpbmVkIHdpdGggdWRtYWJ1ZiBvciBpb21tdWZkIHBpbiBvcGVyYXRpb25zIChtZW1mZF9waW5fZm9saW9zKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIGxvY2tpbmcsIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUZEX0NSRUFURVwiLFxuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJVRE1BQlVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtZmRfYWxsb2NfZm9saW9cIixcbiAgICBcIm1lbWZkX3Bpbl9mb2xpb3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbiBsb2NraW5nIGluIG1lbWZkX2FsbG9jX2ZvbGlvKCkgd2l0aGluIG1tL21lbWZkLmMsIGV4cGFuZGluZyB0aGUgaHVnZXRsYl9mYXVsdF9tdXRleCBsb2NrIHNjb3BlIGFjcm9zcyBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBhbmQgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKCkuIFRoaXMgcmVhY2hhYmxlIG1tIHBhdGggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKSBjb21iaW5lZCB3aXRoIHVkbWFidWYgb3IgaW9tbXVmZCBwaW4gb3BlcmF0aW9ucyAobWVtZmRfcGluX2ZvbGlvcyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTE6MTkuNDYyMDQxMjY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDczNTI1OTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjE5LjQ2MjQ3NDY2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNzM0ODIyNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBkY2IwNzc3NmEzNTE5YTI4OGZjOTkzZDM4YjQ3NGQ0N2EzYTU4YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA0OjEwOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmNcbmluZGV4IGM3MDhkOTI1MzNmNGEuLjBmNmZmZjAwNGY1ZTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1mZC5jXG4rKysgYi9tbS9tZW1mZC5jXG5AQCAtODIsMjIgKzgyLDMxIEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKG1lbWZkKTtcbiBcdFx0aW50IGVyciA9IC1FTk9NRU07XG4gXHRcdGxvbmcgbnJfcmVzdjtcbitcdFx0dTMyIGhhc2g7XG4gXG4gXHRcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuIFx0XHRnZnBfbWFzayBcdTAwMjY9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUpO1xuIFx0XHRpZHggXHUwMDNlXHUwMDNlPSBodWdlX3BhZ2Vfb3JkZXIoaCk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnRcbitcdFx0ICogcmFjZXMgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb25zLCBhcyByZXF1aXJlZCBieSBhbGwgb3RoZXJcbitcdFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXG4rXHRcdCAqL1xuK1x0XHRoYXNoID0gaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKG1lbWZkLVx1MDAzZWZfbWFwcGluZywgaWR4KTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbitcbiBcdFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggKyAxLCBOVUxMLCBFTVBUWV9WTUFfRkxBR1MpO1xuLVx0XHRpZiAobnJfcmVzdiBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gRVJSX1BUUihucl9yZXN2KTtcbitcdFx0aWYgKG5yX3Jlc3YgXHUwMDNjIDApIHtcbitcdFx0XHRlcnIgPSBucl9yZXN2O1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuIFxuIFx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxuIFx0XHRcdFx0XHRcdCAgICBudW1hX25vZGVfaWQoKSxcbiBcdFx0XHRcdFx0XHQgICAgTlVMTCxcbiBcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2spO1xuIFx0XHRpZiAoZm9saW8pIHtcbi1cdFx0XHR1MzIgaGFzaDtcbi1cbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFplcm8gdGhlIGZvbGlvIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLlxuIFx0XHRcdCAqIFVzZSBmb2xpb196ZXJvX3VzZXIoKSB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGh1Z2UvZ2lnYW50aWNcbkBAIC0xMTIsMjAgKzEyMSw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdFx0XHQgKi9cbiBcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogU2VyaWFsaXplIGh1Z2VwYWdlIGFsbG9jYXRpb24gYW5kIGluc3RhbnRpYXRpb24gdG8gcHJldmVudFxuLVx0XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4tXHRcdFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4tXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbi1cbiBcdFx0XHRlcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLFxuIFx0XHRcdFx0XHRcdFx0bWVtZmQtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdFx0XHRcdFx0aWR4KTtcbi1cbi1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4tXG4gXHRcdFx0aWYgKGVycikge1xuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRcdGdvdG8gZXJyX3VucmVzdjtcbkBAIC0xMzMsMTEgKzEzMSwxNCBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG4gXG4gXHRcdFx0aHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbChmb2xpbywgc3VicG9vbF9pbm9kZShpbm9kZSkpO1xuIFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIFx0XHRcdHJldHVybiBmb2xpbztcbiBcdFx0fVxuIGVycl91bnJlc3Y6XG4gXHRcdGlmIChucl9yZXN2IFx1MDAzZSAwKVxuIFx0XHRcdGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIDApO1xuK291dF91bmxvY2s6XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdH1cbiAjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjE5LjQ2MjQ3NTc3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTE2NDUzNTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaDogS0FTQU4gdnMuIEtNU0FOKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIGtlcm5lbCBwYXRjaCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgYSBmdWxsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQsIG9yIGlmIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgcGFydGljdWxhciBjb2RlIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb250ZXh0LCBhbmQgd2hhdCdzIGF0IHN0YWtlLiBUaGlzIGlzIGEgY29kZSByZXZpZXc7IGEgc2VjdXJpdHkvcXVhbGl0eSBlbmdpbmVlcmluZyB0YXNrLCBzbyBubyByZWFsIHJpc2sgaGVyZS4gSXQncyBiZW5pZ24sIGRlZmVuc2l2ZSwgbm8gb2ZmZW5zaXZlIGV4cGxvaXRhdGlvbi4gR29vZC4gU2FmZSB0byBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIFRoZSBwYXRjaCB0YXJnZXRzIGBtbS9tZW1mZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWVtZmRfYWxsb2NfZm9saW9gIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgd2lkZW5pbmcgb2YgdGhlIGxvY2tpbmcgc2NvcGUgZm9yIGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdYC4gQmVmb3JlLCB0aGUgY2FsbHMgdG8gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGhhcHBlbmVkICp3aXRob3V0KiBob2xkaW5nIHRoZSBtdXRleC4gSXQgd2FzIG9ubHkgYWNxdWlyZWQgYXJvdW5kIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLiBOb3csIHRoZSBtdXRleCBpcyBhY3F1aXJlZCAqYmVmb3JlKiB0aG9zZSBjYWxscyBhbmQgaGVsZCB1bnRpbCBhZnRlciB0aGUgcGFnZSBjYWNoZSBhZGRpdGlvbiwgb3IgcmVsZWFzZWQgb24gZXJyb3IgcGF0aHMuXG5cblRoZSBrZXkgaXMgaWYgdGhpcyBpcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBkaWcgZGVlcGVyIGludG8gd2hhdCBgbWVtZmRfYWxsb2NfZm9saW9gIGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgaW4gcmVsYXRpb24gdG8gcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIGlzc3Vlcy4gTGV0J3MgcmVhZCB0aGUgZmlsZSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCBmdW5jdGlvbiwgYW5kIGhvdyBpdCdzIGFmZmVjdGVkLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjgwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjMwLjYyNzAxMzI0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NTAwOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbm1tL21lbWZkLmMtNjctICovXFxubW0vbWVtZmQuYzo2ODpzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxubW0vbWVtZmQuYy02OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjMxLjIxNTUyMDM1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzg0NjIyNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBtbS9tZW1mZC5jJ3MgQ29udGV4dCoqXG5cbk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gYG1tL21lbWZkLmNgIGFnYWluLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgbGluZSA2OC4gSSd2ZSBnb3QgYSBzcGVjaWZpYyBxdWVzdGlvbiBvciBpc3N1ZSBpbiBtaW5kLCBsaWtlbHkgcmVsYXRlZCB0byBtZW1vcnkgZmlsZSBkZXNjcmlwdG9ycy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHBvc3NpYmx5IGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgYmVpbmcgbWFuYWdlZCwgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgZGlzc2VjdGluZyB0aGF0IGNvZGUhIEknbGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTozNC4wMDAxNDU1ODNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdC8qXFxuICA2MzpcXHQgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgbWVtZmRfcGluX3VzZXJfcGFnZXMoKSBpbiBHVVAgKGd1cC5jKS5cXG4gIDY0OlxcdCAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxcbiAgNjU6XFx0ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXFxuICA2NjpcXHQgKiBpbmRleCBpbiB0aGUgbWFwcGluZy5cXG4gIDY3OlxcdCAqL1xcbiAgNjg6XFx0c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbiAgNjk6XFx0e1xcbiAgNzA6XFx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gIDcxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuICA3MjpcXHRcXHRnZnBfdCBnZnBfbWFzaztcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0aWYgKGlzX2ZpbGVfaHVnZXBhZ2VzKG1lbWZkKSkge1xcbiAgNzU6XFx0XFx0XFx0LypcXG4gIDc2OlxcdFxcdFxcdCAqIFRoZSBmb2xpbyB3b3VsZCBtb3N0IGxpa2VseSBiZSBhY2Nlc3NlZCBieSBhIERNQSBkcml2ZXIsXFxuICA3NzpcXHRcXHRcXHQgKiB0aGVyZWZvcmUsIHdlIGhhdmUgem9uZSBtZW1vcnkgY29uc3RyYWludHMgd2hlcmUgd2UgY2FuXFxuICA3ODpcXHRcXHRcXHQgKiBhbGxvYyBmcm9tLiBBbHNvLCB0aGUgZm9saW8gd2lsbCBiZSBwaW5uZWQgZm9yIGFuIGluZGVmaW5pdGVcXG4gIDc5OlxcdFxcdFxcdCAqIGFtb3VudCBvZiB0aW1lLCBzbyBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbWlncmF0ZWQgYXdheS5cXG4gIDgwOlxcdFxcdFxcdCAqL1xcbiAgODE6XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUobWVtZmQpO1xcbiAgODI6XFx0XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKG1lbWZkKTtcXG4gIDgzOlxcdFxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiAgODQ6XFx0XFx0XFx0bG9uZyBucl9yZXN2O1xcbiAgODU6XFx0XFx0XFx0dTMyIGhhc2g7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdFxcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbiAgODg6XFx0XFx0XFx0Z2ZwX21hc2sgXFx1MDAyNj0gfihfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSk7XFxuICA4OTpcXHRcXHRcXHRpZHggXFx1MDAzZVxcdTAwM2U9IGh1Z2VfcGFnZV9vcmRlcihoKTtcXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0XFx0LypcXG4gIDkyOlxcdFxcdFxcdCAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnRcXG4gIDkzOlxcdFxcdFxcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXFxuICA5NDpcXHRcXHRcXHQgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS5cXG4gIDk1OlxcdFxcdFxcdCAqL1xcbiAgOTY6XFx0XFx0XFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xcbiAgOTc6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdFxcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcXG4gMTAwOlxcdFxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2MgMCkge1xcbiAxMDE6XFx0XFx0XFx0XFx0ZXJyID0gbnJfcmVzdjtcXG4gMTAyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gMTAzOlxcdFxcdFxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcXG4gMTA2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBudW1hX25vZGVfaWQoKSxcXG4gMTA3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrKTtcXG4gMTA5OlxcdFxcdFxcdGlmIChmb2xpbykge1xcbiAxMTA6XFx0XFx0XFx0XFx0LypcXG4gMTExOlxcdFxcdFxcdFxcdCAqIFplcm8gdGhlIGZvbGlvIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLlxcbiAxMTI6XFx0XFx0XFx0XFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xcbiAxMTM6XFx0XFx0XFx0XFx0ICogcGFnZXMuIFBhc3MgMCBhcyBhZGRyX2hpbnQgc2luY2UgdGhpcyBpcyBub3QgYSBmYXVsdGluZyBwYXRoXFxuIDExNDpcXHRcXHRcXHRcXHQgKiAgYW5kIHdlIGRvbid0IGhhdmUgYSB1c2VyIHZpcnR1YWwgYWRkcmVzcyB5ZXQuXFxuIDExNTpcXHRcXHRcXHRcXHQgKi9cXG4gMTE2OlxcdFxcdFxcdFxcdGZvbGlvX3plcm9fdXNlcihmb2xpbywgMCk7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdFxcdFxcdC8qXFxuIDExOTpcXHRcXHRcXHRcXHQgKiBNYXJrIHRoZSBmb2xpbyB1cHRvZGF0ZSBiZWZvcmUgYWRkaW5nIHRvIHBhZ2UgY2FjaGUsXFxuIDEyMDpcXHRcXHRcXHRcXHQgKiBhcyByZXF1aXJlZCBieSBmaWxlbWFwLmMgYW5kIG90aGVyIGh1Z2V0bGIgcGF0aHMuXFxuIDEyMTpcXHRcXHRcXHRcXHQgKi9cXG4gMTIyOlxcdFxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdFxcdFxcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRtZW1mZC1cXHUwMDNlZl9tYXBwaW5nLFxcbiAxMjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aWR4KTtcXG4gMTI3OlxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4gMTI4OlxcdFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDEyOTpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl91bnJlc3Y7XFxuIDEzMDpcXHRcXHRcXHRcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdFxcdFxcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcXG4gMTMzOlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIDEzNDpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbiAxMzU6XFx0XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbiAxMzY6XFx0XFx0XFx0fVxcbiAxMzc6XFx0ZXJyX3VucmVzdjpcXG4gMTM4OlxcdFxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2UgMClcXG4gMTM5OlxcdFxcdFxcdFxcdGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIDApO1xcbiAxNDA6XFx0b3V0X3VubG9jazpcXG4gMTQxOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuIDE0MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiAxNDM6XFx0XFx0fVxcbiAxNDQ6XFx0I2VuZGlmXFxuIDE0NTpcXHRcXHRyZXR1cm4gc2htZW1fcmVhZF9mb2xpbyhtZW1mZC1cXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xcbiAxNDY6XFx0fVxcbiAxNDc6XFx0XFxuIDE0ODpcXHQvKlxcbiAxNDk6XFx0ICogU2V0dGluZyBTRUFMX1dSSVRFIHJlcXVpcmVzIHVzIHRvIHZlcmlmeSB0aGVyZSdzIG5vIHBlbmRpbmcgd3JpdGVyLiBIb3dldmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTozNC4wMDAyMzM1MzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE5NzA0MTAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtZmQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBsb2NraW5nIHdpdGhpbiBgbWVtZmRfYWxsb2NfZm9saW8oKWAgZm9yIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzLiBUaGUgY29yZSBjaGFuZ2UgaXMgYWNxdWlyaW5nIHRoZSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAgbG9jayAqYmVmb3JlKiByZXNlcnZpbmcgYW5kIGFsbG9jYXRpbmcgdGhlIGh1Z2V0bGIgZm9saW8sIHRoZW4gcmVsZWFzaW5nIGl0IG9uIGNvbXBsZXRpb24gb3IgZXJyb3IuIFRoZSBnb2FsIGlzIGNsZWFyOiBzZXJpYWxpemUgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGh1Z2V0bGIgcGFnZSBjYWNoZSBhbGxvY2F0aW9ucy4gRXNzZW50aWFsbHksIGl0J3MgYSBzeW5jaHJvbml6YXRpb24gZml4LlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIG15IGNoZWNrbGlzdC4gQXJlIHRoZXJlICphbnkqIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFsbG9jYXRlZD8gTm8uIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHM/IE5vcGUuIERvZXMgaXQgbWVzcyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgLSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2JzLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycz8gTm90IGF0IGFsbC4gRG9lcyBpdCB0b3VjaCBhbnl0aGluZyByZWxhdGVkIHRvIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgKmNvdWxkKiBhbGxvdyB0aGUgcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIGRhdGE/IEFic29sdXRlbHkgbm90LiBGb2xpb3MgYXJlIGV4cGxpY2l0bHkgemVyb2VkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApYCDigJMgYnVzaW5lc3MgYXMgdXN1YWwuIEFuZCBjcnVjaWFsbHksIGFsbCBjb25jdXJyZW5jeS9sb2NraW5nIGlzc3VlcyBzaG91bGQgYmUgaGFuZGxlZCBieSBMT0NLREVQIGFuZCBLQVNBTi5cblxuTGV0J3MgdmVyaWZ5IHRoZSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG1pZ2h0IG5lZWQgS01TQU4ncyBhdHRlbnRpb24/IE5vLiBUaGlzIGlzIGFsbCBhYm91dCBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gb24gaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGFuZCBwYWdlIGNhY2hlIGluc2VydGlvbiDigJMgcmFjZSBjb25kaXRpb24gLyBsb2NraW5nIGZpeGVzLiBSYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIHJlZmNvdW50L3BhZ2VjYWNoZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIHNhbml0aXplcnMvYXNzZXJ0aW9ucywgbm90IEtNU0FOLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBydW4gdGhyb3VnaCBteSBjcml0ZXJpYSBhZ2FpbjpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZD8gTm90IHRoZSBjYXNlIGhlcmUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLiBgbnJfcmVzdmAsIGBlcnJgLCBhbmQgYGhhc2hgIGFyZSBhbGwgYXNzaWduZWQgYmVmb3JlIGFueSB1c2UuXG4zLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyBOb3QgYXBwbGljYWJsZS5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBjaGFuZ2VzIHRoYXQgbWlnaHQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vcGUuXG5cbkFuZCBjb252ZXJzZWx5LCB3aHkgYE5lZWRzS01TQU49ZmFsc2VgPyBCZWNhdXNlIHRoZSBjb2RlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBhYm91dCBmaXhpbmcgbG9ja2luZyBpc3N1ZXMg4oCTIHdoaWNoIGFyZSBrbm93biB0byBiZSBkZXRlY3RhYmxlIGJ5IGV4aXN0aW5nIHRvb2xzLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzICpubyogcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY3LCJPdXRwdXRUb2tlbnMiOjI2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjQwLjE5NzI3NjkzNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBpbiBgbWVtZmRfYWxsb2NfZm9saW8oKWAgd2hlbiBoYW5kbGluZyBodWdldGxiZnMtYmFja2VkIG1lbWZkcyBieSB3aWRlbmluZyB0aGUgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0ZWQgYnkgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF1gLiBUaGUgbXV0ZXggaXMgbm93IGFjcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpYCByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBiZWZvcmUgYGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKWAsIGVuc3VyaW5nIHNlcmlhbGl6ZWQgcmVzZXJ2YXRpb24sIGFsbG9jYXRpb24sIGFuZCBpbnNlcnRpb24gaW50byB0aGUgcGFnZSBjYWNoZS5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBoYXNoYCwgYGVycmAsIGBucl9yZXN2YCwgYGZvbGlvYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5ld2x5IGFsbG9jYXRlZCBmb2xpb3MgY29udGludWUgdG8gYmUgY2xlYXJlZCB1c2luZyBgZm9saW9femVyb191c2VyKClgLiBUaGVyZSBhcmUgbm8gbmV3IGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBtb2RpZmllZCBkYXRhIGxlbmd0aHMvYm91bmRzLiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByZWZjb3VudGluZyBpc3N1ZXMpIGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow9wsj9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 03:25:52 +0000 UTC FinishedAt: 2026-09-04 04:11:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMFD_CREATE", "HUGETLBFS", "UDMABUF" ], "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": "bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMFD_CREATE", "HUGETLBFS", "UDMABUF" ], "series_id": "7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memfd_alloc_folio", "memfd_pin_folios" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUZEX0NSRUFURSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBoYXNoYCwgYGVycmAsIGBucl9yZXN2YCwgYGZvbGlvYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5ld2x5IGFsbG9jYXRlZCBmb2xpb3MgY29udGludWUgdG8gYmUgY2xlYXJlZCB1c2luZyBgZm9saW9femVyb191c2VyKClgLiBUaGVyZSBhcmUgbm8gbmV3IGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBtb2RpZmllZCBkYXRhIGxlbmd0aHMvYm91bmRzLiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByZWZjb3VudGluZyBpc3N1ZXMpIGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gbG9ja2luZyBpbiBtZW1mZF9hbGxvY19mb2xpbygpIHdpdGhpbiBtbS9tZW1mZC5jLCBleHBhbmRpbmcgdGhlIGh1Z2V0bGJfZmF1bHRfbXV0ZXggbG9jayBzY29wZSBhY3Jvc3MgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgYW5kIGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpLiBUaGlzIHJlYWNoYWJsZSBtbSBwYXRoIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQikgY29tYmluZWQgd2l0aCB1ZG1hYnVmIG9yIGlvbW11ZmQgcGluIG9wZXJhdGlvbnMgKG1lbWZkX3Bpbl9mb2xpb3MpLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbG9ja2luZywgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZGNiMDc3NzZhMzUxOWEyODhmYzk5M2QzOGI0NzRkNDdhM2E1OGJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDoxMDoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuY1xuaW5kZXggYzcwOGQ5MjUzM2Y0YS4uMGY2ZmZmMDA0ZjVlNCAxMDA2NDRcbi0tLSBhL21tL21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWZkLmNcbkBAIC04MiwyMiAmIzQzOzgyLDMxIEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKG1lbWZkKTtcbiBcdFx0aW50IGVyciA9IC1FTk9NRU07XG4gXHRcdGxvbmcgbnJfcmVzdjtcbiYjNDM7XHRcdHUzMiBoYXNoO1xuIFxuIFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiBcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTtcbiBcdFx0aWR4IFx1MDAzZVx1MDAzZT0gaHVnZV9wYWdlX29yZGVyKGgpO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnRcbiYjNDM7XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4mIzQzO1x0XHQgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuJiM0MztcbiBcdFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcbi1cdFx0aWYgKG5yX3Jlc3YgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIEVSUl9QVFIobnJfcmVzdik7XG4mIzQzO1x0XHRpZiAobnJfcmVzdiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRlcnIgPSBucl9yZXN2O1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG4gXHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuIFx0XHRcdFx0XHRcdCAgICBOVUxMLFxuIFx0XHRcdFx0XHRcdCAgICBnZnBfbWFzayk7XG4gXHRcdGlmIChmb2xpbykge1xuLVx0XHRcdHUzMiBoYXNoO1xuLVxuIFx0XHRcdC8qXG4gXHRcdFx0ICogWmVybyB0aGUgZm9saW8gdG8gcHJldmVudCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuXG4gXHRcdFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xuQEAgLTExMiwyMCAmIzQzOzEyMSw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdFx0XHQgKi9cbiBcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogU2VyaWFsaXplIGh1Z2VwYWdlIGFsbG9jYXRpb24gYW5kIGluc3RhbnRpYXRpb24gdG8gcHJldmVudFxuLVx0XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4tXHRcdFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4tXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbi1cbiBcdFx0XHRlcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLFxuIFx0XHRcdFx0XHRcdFx0bWVtZmQtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdFx0XHRcdFx0aWR4KTtcbi1cbi1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4tXG4gXHRcdFx0aWYgKGVycikge1xuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRcdGdvdG8gZXJyX3VucmVzdjtcbkBAIC0xMzMsMTEgJiM0MzsxMzEsMTQgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuIFxuIFx0XHRcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcbiBcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuIFx0XHR9XG4gZXJyX3VucmVzdjpcbiBcdFx0aWYgKG5yX3Jlc3YgXHUwMDNlIDApXG4gXHRcdFx0aHVnZXRsYl91bnJlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICYjNDM7IDEsIDApO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuICNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUZEX0NSRUFURSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7VURNQUJVRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gbG9ja2luZyBpbiBtZW1mZF9hbGxvY19mb2xpbygpIHdpdGhpbiBtbS9tZW1mZC5jLCBleHBhbmRpbmcgdGhlIGh1Z2V0bGJfZmF1bHRfbXV0ZXggbG9jayBzY29wZSBhY3Jvc3MgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgYW5kIGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpLiBUaGlzIHJlYWNoYWJsZSBtbSBwYXRoIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQikgY29tYmluZWQgd2l0aCB1ZG1hYnVmIG9yIGlvbW11ZmQgcGluIG9wZXJhdGlvbnMgKG1lbWZkX3Bpbl9mb2xpb3MpLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbG9ja2luZywgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZGNiMDc3NzZhMzUxOWEyODhmYzk5M2QzOGI0NzRkNDdhM2E1OGJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNDoxMDoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWZkLmMgYi9tbS9tZW1mZC5jCmluZGV4IGM3MDhkOTI1MzNmNGEuLjBmNmZmZjAwNGY1ZTQgMTAwNjQ0Ci0tLSBhL21tL21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtZmQuYwpAQCAtODIsMjIgJiM0Mzs4MiwzMSBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpCiAJCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7CiAJCWludCBlcnIgPSAtRU5PTUVNOwogCQlsb25nIG5yX3Jlc3Y7CiYjNDM7CQl1MzIgaGFzaDsKIAogCQlnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTsKIAkJZ2ZwX21hc2sgJmFtcDs9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUpOwogCQlpZHggJmd0OyZndDs9IGh1Z2VfcGFnZV9vcmRlcihoKTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnQKJiM0MzsJCSAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyCiYjNDM7CQkgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS4KJiM0MzsJCSAqLwomIzQzOwkJaGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC0mZ3Q7Zl9tYXBwaW5nLCBpZHgpOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwomIzQzOwogCQlucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCAmIzQzOyAxLCBOVUxMLCBFTVBUWV9WTUFfRkxBR1MpOwotCQlpZiAobnJfcmVzdiAmbHQ7IDApCi0JCQlyZXR1cm4gRVJSX1BUUihucl9yZXN2KTsKJiM0MzsJCWlmIChucl9yZXN2ICZsdDsgMCkgewomIzQzOwkJCWVyciA9IG5yX3Jlc3Y7CiYjNDM7CQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJfQogCiAJCWZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsCiAJCQkJCQkgICAgbnVtYV9ub2RlX2lkKCksCiAJCQkJCQkgICAgTlVMTCwKIAkJCQkJCSAgICBnZnBfbWFzayk7CiAJCWlmIChmb2xpbykgewotCQkJdTMyIGhhc2g7Ci0KIAkJCS8qCiAJCQkgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4KIAkJCSAqIFVzZSBmb2xpb196ZXJvX3VzZXIoKSB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGh1Z2UvZ2lnYW50aWMKQEAgLTExMiwyMCAmIzQzOzEyMSw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCkKIAkJCSAqLwogCQkJX19mb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAotCQkJLyoKLQkJCSAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnQKLQkJCSAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyCi0JCQkgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS4KLQkJCSAqLwotCQkJaGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC0mZ3Q7Zl9tYXBwaW5nLCBpZHgpOwotCQkJbXV0ZXhfbG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwotCiAJCQllcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLAogCQkJCQkJCW1lbWZkLSZndDtmX21hcHBpbmcsCiAJCQkJCQkJaWR4KTsKLQotCQkJbXV0ZXhfdW5sb2NrKCZhbXA7aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7Ci0KIAkJCWlmIChlcnIpIHsKIAkJCQlmb2xpb19wdXQoZm9saW8pOwogCQkJCWdvdG8gZXJyX3VucmVzdjsKQEAgLTEzMywxMSAmIzQzOzEzMSwxNCBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpCiAKIAkJCWh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTsKIAkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7CiAJCQlyZXR1cm4gZm9saW87CiAJCX0KIGVycl91bnJlc3Y6CiAJCWlmIChucl9yZXN2ICZndDsgMCkKIAkJCWh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCAmIzQzOyAxLCAwKTsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7CiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgU3l6a2FsbGVyIEZ1enppbmc6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZXZhbHVhdGUgdGhpcyBwYXRjaCBmb3IgdXNlIHdpdGggc3l6a2FsbGVyLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IHNhZmV0eSBhbmQgcG9saWN5IGFyZSBwYXJhbW91bnQuIFRoaXMgaXMgc3RhbmRhcmQgc29mdHdhcmUgbWFpbnRlbmFuY2UsIGEgcGF0Y2ggYW5hbHlzaXMgZm9yIExpbnV4IGtlcm5lbCBmdXp6aW5nLiBObyByZWQgZmxhZ3MsIG5vdGhpbmcgZXhwbG9pdGF0aXZlIHJlcXVlc3RlZCwgc28gd2UgY2FuIHByb2NlZWQgc2FmZWx5LiBObyBpbW1lZGlhdGUgY29uY2VybnMgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHRlY2huaWNhbCBkZXRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIGluc3BlY3QgdGhlIHBhdGNoIGl0c2VsZiBhbmQgbGV2ZXJhZ2UgdGhlIHVzdWFsIHRvb2xzIGZvciBjb2RlIGFuYWx5c2lzLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBmb2N1c2VkIG9uIGBtbS9tZW1mZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWVtZmRfYWxsb2NfZm9saW9gIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBleHBhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAgbG9jayBhY3Jvc3MgY2FsbHMgdG8gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgLCB0aGUgZm9saW8gemVyb2luZywgYW5kIHRoZSBhZGRpdGlvbiB0byB0aGUgcGFnZSBjYWNoZS4KCk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NrIGV4cGFuc2lvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgY2FsbGVycyBvZiBgbWVtZmRfYWxsb2NfZm9saW9gIGFuZCBleGFtaW5lIHJlbGF0ZWQgY29kZSBwYXRocyBhbmQgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvbmN1cnJlbmN5LCBwZXJmb3JtYW5jZSwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBmdXp6aW5nIGVmZmVjdGl2ZW5lc3MuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGxvY2sgc2NvcGUgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGJvdHRsZW5lY2tzIG9yLCB3b3JzZSwgcG90ZW50aWFsIGRlYWRsb2NrcyB0aGF0IGNvdWxkIGhpbmRlciBmdXp6aW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtZmQuaD0xMD1leHRlcm4gbG9uZyBtZW1mZF9mY250bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IGFyZyk7XG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0xMi0vKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMjctfVxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTI5LXtcbi0tXG5tbS9ndXAuYz0zNDQ1PWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5tbS9ndXAuYy0zNTIwLVx0XHRcdGlmICghbnJfZm91bmQpIHtcbm1tL2d1cC5jOjM1MjE6XHRcdFx0XHRmb2xpbyA9IG1lbWZkX2FsbG9jX2ZvbGlvKG1lbWZkLCBzdGFydF9pZHgpO1xubW0vZ3VwLmMtMzUyMi1cdFx0XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY3LSAqL1xubW0vbWVtZmQuYzo2ODpzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG5tbS9tZW1mZC5jLTY5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uIHdpdGggbWVtZmQqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgYG1lbWZkYCBpbXBsZW1lbnRhdGlvbi4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIG1lbW9yeSB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgZm9saW9zIGFyZSBhbGxvY2F0ZWQgYW5kIHBpbm5lZCwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZTogYG1tL21lbWZkLmNgIGFuZCBgbW0vZ3VwLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gem9uaW5nIGluIG9uIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGBtZW1mZF9waW5fZm9saW9zYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBhbGxvY2F0aW9uIGFuZCBwaW5uaW5nIG1lY2hhbmlzbXMsIGFuZCBJIHN1c3BlY3QgdGhleSYjMzk7bGwgcmV2ZWFsIHRoZSBjb3JlIGxvZ2ljIEkmIzM5O20gYWZ0ZXIuIEkmIzM5O20ga2VlbiB0byB0cmFjZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHMg4oCTIGhvdyB0aGUga2VybmVsIGNob29zZXMgYW5kIHJlc2VydmVzIHBhZ2VzIChvciBmb2xpb3MpIGZvciBgbWVtZmRgIG9iamVjdHMsIGFuZCBleGFjdGx5ICpob3cqIGFuZCAqd2hlbiogdGhlc2UgcGFnZXMgYXJlIHBpbm5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIHJlZmVyZW5jZSBjb3VudHMsIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMsIGFuZCB3aGV0aGVyIHdlJiMzOTtyZSBzZWVpbmcgYW55IHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBgbWVtZmRgIHVzYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWZkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdC8qXG4gIDYzOlx0ICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IG1lbWZkX3Bpbl91c2VyX3BhZ2VzKCkgaW4gR1VQIChndXAuYykuXG4gIDY0Olx0ICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXG4gIDY1Olx0ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXG4gIDY2Olx0ICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4gIDY3Olx0ICovXG4gIDY4Olx0c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuICA2OTpcdHtcbiAgNzA6XHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuICA3MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiAgNzI6XHRcdGdmcF90IGdmcF9tYXNrO1xuICA3MzpcdFxuICA3NDpcdFx0aWYgKGlzX2ZpbGVfaHVnZXBhZ2VzKG1lbWZkKSkge1xuICA3NTpcdFx0XHQvKlxuICA3NjpcdFx0XHQgKiBUaGUgZm9saW8gd291bGQgbW9zdCBsaWtlbHkgYmUgYWNjZXNzZWQgYnkgYSBETUEgZHJpdmVyLFxuICA3NzpcdFx0XHQgKiB0aGVyZWZvcmUsIHdlIGhhdmUgem9uZSBtZW1vcnkgY29uc3RyYWludHMgd2hlcmUgd2UgY2FuXG4gIDc4Olx0XHRcdCAqIGFsbG9jIGZyb20uIEFsc28sIHRoZSBmb2xpbyB3aWxsIGJlIHBpbm5lZCBmb3IgYW4gaW5kZWZpbml0ZVxuICA3OTpcdFx0XHQgKiBhbW91bnQgb2YgdGltZSwgc28gaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG1pZ3JhdGVkIGF3YXkuXG4gIDgwOlx0XHRcdCAqL1xuICA4MTpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShtZW1mZCk7XG4gIDgyOlx0XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XG4gIDgzOlx0XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuICA4NDpcdFx0XHRsb25nIG5yX3Jlc3Y7XG4gIDg1Olx0XHRcdHUzMiBoYXNoO1xuICA4NjpcdFxuICA4NzpcdFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiAgODg6XHRcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTtcbiAgODk6XHRcdFx0aWR4IFx1MDAzZVx1MDAzZT0gaHVnZV9wYWdlX29yZGVyKGgpO1xuICA5MDpcdFxuICA5MTpcdFx0XHQvKlxuICA5MjpcdFx0XHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XG4gIDkzOlx0XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4gIDk0Olx0XHRcdCAqIGNhbGxlcnMgb2YgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpLlxuICA5NTpcdFx0XHQgKi9cbiAgOTY6XHRcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4gIDk3Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gIDk4Olx0XG4gIDk5Olx0XHRcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICYjNDM7IDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XG4gMTAwOlx0XHRcdGlmIChucl9yZXN2IFx1MDAzYyAwKSB7XG4gMTAxOlx0XHRcdFx0ZXJyID0gbnJfcmVzdjtcbiAxMDI6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMTAzOlx0XHRcdH1cbiAxMDQ6XHRcbiAxMDU6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcbiAxMDY6XHRcdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4gMTA3Olx0XHRcdFx0XHRcdFx0ICAgIE5VTEwsXG4gMTA4Olx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrKTtcbiAxMDk6XHRcdFx0aWYgKGZvbGlvKSB7XG4gMTEwOlx0XHRcdFx0LypcbiAxMTE6XHRcdFx0XHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cbiAxMTI6XHRcdFx0XHQgKiBVc2UgZm9saW9femVyb191c2VyKCkgd2hpY2ggaXMgb3B0aW1pemVkIGZvciBodWdlL2dpZ2FudGljXG4gMTEzOlx0XHRcdFx0ICogcGFnZXMuIFBhc3MgMCBhcyBhZGRyX2hpbnQgc2luY2UgdGhpcyBpcyBub3QgYSBmYXVsdGluZyBwYXRoXG4gMTE0Olx0XHRcdFx0ICogIGFuZCB3ZSBkb24mIzM5O3QgaGF2ZSBhIHVzZXIgdmlydHVhbCBhZGRyZXNzIHlldC5cbiAxMTU6XHRcdFx0XHQgKi9cbiAxMTY6XHRcdFx0XHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApO1xuIDExNzpcdFxuIDExODpcdFx0XHRcdC8qXG4gMTE5Olx0XHRcdFx0ICogTWFyayB0aGUgZm9saW8gdXB0b2RhdGUgYmVmb3JlIGFkZGluZyB0byBwYWdlIGNhY2hlLFxuIDEyMDpcdFx0XHRcdCAqIGFzIHJlcXVpcmVkIGJ5IGZpbGVtYXAuYyBhbmQgb3RoZXIgaHVnZXRsYiBwYXRocy5cbiAxMjE6XHRcdFx0XHQgKi9cbiAxMjI6XHRcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIDEyMzpcdFxuIDEyNDpcdFx0XHRcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXG4gMTI1Olx0XHRcdFx0XHRcdFx0XHRtZW1mZC1cdTAwM2VmX21hcHBpbmcsXG4gMTI2Olx0XHRcdFx0XHRcdFx0XHRpZHgpO1xuIDEyNzpcdFx0XHRcdGlmIChlcnIpIHtcbiAxMjg6XHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMTI5Olx0XHRcdFx0XHRnb3RvIGVycl91bnJlc3Y7XG4gMTMwOlx0XHRcdFx0fVxuIDEzMTpcdFxuIDEzMjpcdFx0XHRcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcbiAxMzM6XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDEzNDpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbiAxMzU6XHRcdFx0XHRyZXR1cm4gZm9saW87XG4gMTM2Olx0XHRcdH1cbiAxMzc6XHRlcnJfdW5yZXN2OlxuIDEzODpcdFx0XHRpZiAobnJfcmVzdiBcdTAwM2UgMClcbiAxMzk6XHRcdFx0XHRodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgMCk7XG4gMTQwOlx0b3V0X3VubG9jazpcbiAxNDE6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIDE0MjpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDE0MzpcdFx0fVxuIDE0NDpcdCNlbmRpZlxuIDE0NTpcdFx0cmV0dXJuIHNobWVtX3JlYWRfZm9saW8obWVtZmQtXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHQvKlxuIDE0OTpcdCAqIFNldHRpbmcgU0VBTF9XUklURSByZXF1aXJlcyB1cyB0byB2ZXJpZnkgdGhlcmUmIzM5O3Mgbm8gcGVuZGluZyB3cml0ZXIuIEhvd2V2ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIEZvb3RzdGVwcyBvZiBgbWVtZmRfcGluX2ZvbGlvc2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgbWVtZmRfcGluX2ZvbGlvc2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtPyBJcyBpdCBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBpcyBpdCB1c2VkIGluIHNvbWUgc3BlY2lmaWMgc3Vic3lzdGVtPyBJIHdhbnQgdG8gc2VlIHdoYXQgaXRzIHJvbGUgaXMsIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLCBhbmQgd2hhdCBjb250ZXh0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGggc2hvdWxkIGdpdmUgbWUgc29tZSBnb29kIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGVyZSB0aGlzIHJhYmJpdCBob2xlIGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0zMDQ9c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTUtXHRlbmQgPSBzdGFydCAmIzQzOyAocGdjbnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpIC0gMTtcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzE2Olx0bnJfZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyhtZW1mZCwgc3RhcnQsIGVuZCwgZm9saW9zLCBwZ2NudCwgXHUwMDI2cGdvZmYpO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTctXHRpZiAobnJfZm9saW9zIFx1MDAzYz0gMClcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzNy1cdFx0ICogSW4gYSBnaXZlbiByYW5nZSwgb25seSB0aGUgZmlyc3Qgc3VicGFnZSBvZiB0aGUgZmlyc3QgZm9saW9cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzM4Olx0XHQgKiBoYXMgYW4gb2Zmc2V0LCB0aGF0IGlzIHJldHVybmVkIGJ5IG1lbWZkX3Bpbl9mb2xpb3MoKS5cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM5LVx0XHQgKiBUaGUgZmlyc3Qgc3VicGFnZXMgb2Ygb3RoZXIgZm9saW9zIChpbiB0aGUgcmFuZ2UpIGhhdmUgYW5cbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz04MjQ9c3RhdGljIGxvbmcgcGluX21lbWZkX3BhZ2VzKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM0LVx0LypcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzNTpcdCAqIHRvZG86IG1lbWZkX3Bpbl9mb2xpb3Mgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBwaW5uZWQgb2Zmc2V0IHNvXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzYtXHQgKiB3ZSBjYW4gY29tcHV0ZSBucGFnZXMgcGlubmVkLCBhbmQgYXZvaWQgbG9vcGluZyBvdmVyIGZvbGlvcyBoZXJlXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM4LVx0ICovXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4Mzk6XHRuZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyh1c2VyLVx1MDAzZWZpbGUsIHN0YXJ0LCBlbmQsIHVzZXItXHUwMDNldWZvbGlvcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTg0MC1cdFx0XHRcdCAgIG5mb2xpb3MsIFx1MDAyNm9mZnNldCk7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMzNjA9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tbS5oLTMzNjEtXHRcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbmluY2x1ZGUvbGludXgvbW0uaDozMzYyOmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzYzLVx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxuLS1cbm1tL2d1cC5jPTE5MD1FWFBPUlRfU1lNQk9MKHVucGluX3VzZXJfcGFnZSk7XG4tLVxubW0vZ3VwLmMtMTk1LSAqXG5tbS9ndXAuYzoxOTY6ICogRm9saW9zIHRoYXQgd2VyZSBwaW5uZWQgdmlhIG1lbWZkX3Bpbl9mb2xpb3MoKSBvciBvdGhlciBzaW1pbGFyIHJvdXRpbmVzXG5tbS9ndXAuYy0xOTctICogbXVzdCBiZSByZWxlYXNlZCBlaXRoZXIgdXNpbmcgdW5waW5fZm9saW8oKSBvciB1bnBpbl9mb2xpb3MoKS5cbi0tXG5tbS9ndXAuYz0zNDE3PUVYUE9SVF9TWU1CT0wocGluX3VzZXJfcGFnZXNfdW5sb2NrZWQpO1xuLS1cbm1tL2d1cC5jLTM0MTktLyoqXG5tbS9ndXAuYzozNDIwOiAqIG1lbWZkX3Bpbl9mb2xpb3MoKSAtIHBpbiBmb2xpb3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtZmRcbm1tL2d1cC5jLTM0MjEtICogQG1lbWZkOiAgICAgIHRoZSBtZW1mZCB3aG9zZSBmb2xpb3MgYXJlIHRvIGJlIHBpbm5lZFxuLS1cbm1tL2d1cC5jLTM0NDQtICovXG5tbS9ndXAuYzozNDQ1OmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbm1tL2d1cC5jLTM0NDYtXHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXG4tLVxubW0vZ3VwLmMtMzU0MS19XG5tbS9ndXAuYzozNTQyOkVYUE9SVF9TWU1CT0xfR1BMKG1lbWZkX3Bpbl9mb2xpb3MpO1xubW0vZ3VwLmMtMzU0My1cbi0tXG5tbS9ndXAuYy0zNTUzLSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBvYnRhaW5lZCBhIHBpbiBvbiBhIGxhcmdlIGZvbGlvXG5tbS9ndXAuYzozNTU0OiAqIHVzaW5nIG1lbWZkX3Bpbl9mb2xpb3MoKSwgYnV0IHdhbnRpbmcgdG8gbG9naWNhbGx5IHVucGluIHBhcnRzXG5tbS9ndXAuYy0zNTU1LSAqIChlLmcuLCBpbmRpdmlkdWFsIHBhZ2VzKSBvZiB0aGUgZm9saW8gbGF0ZXIsIGZvciBleGFtcGxlLCB1c2luZ1xuLS1cbm1tL21lbWZkLmM9Mzg9c3RhdGljIHZvaWQgbWVtZmRfdGFnX3BpbnMoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubW0vbWVtZmQuYy02NC0gKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcbm1tL21lbWZkLmM6NjU6ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXG5tbS9tZW1mZC5jLTY2LSAqIGluZGV4IGluIHRoZSBtYXBwaW5nLlxuLS1cbm1tL21lbWZkX2x1by5jPTg3PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5tbS9tZW1mZF9sdW8uYy0xMjktXHQgKiB0aGF0IGlzIHJlYWxseSBhIHByb2JsZW0gaW4gdGhlIGZ1dHVyZSwgd2UgY2FuIGhhdmUgYVxubW0vbWVtZmRfbHVvLmM6MTMwOlx0ICogbWVtZmRfcGluX2ZvbGlvcygpIHZhcmlhbnQgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHBhZ2Ugb24gZW1wdHlcbm1tL21lbWZkX2x1by5jLTEzMS1cdCAqIHNsb3RzLlxubW0vbWVtZmRfbHVvLmMtMTMyLVx0ICovXG5tbS9tZW1mZF9sdW8uYzoxMzM6XHRucl9waW5uZWQgPSBtZW1mZF9waW5fZm9saW9zKGZpbGUsIDAsIHNpemUgLSAxLCBmb2xpb3MsIG1heF9mb2xpb3MsXG5tbS9tZW1mZF9sdW8uYy0xMzQtXHRcdFx0XHQgICAgIFx1MDAyNm9mZnNldCk7XG4tLVxubW0vbWVtZmRfbHVvLmM9MjU4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbi0tXG5tbS9tZW1mZF9sdW8uYy0yOTEtXHQvKlxubW0vbWVtZmRfbHVvLmM6MjkyOlx0ICogbWVtZmRfcGluX2ZvbGlvcygpIGNhcHMgYXQgVUlOVF9NQVggZm9saW9zOyByZWZ1c2UgbGFyZ2VyXG5tbS9tZW1mZF9sdW8uYy0yOTMtXHQgKiBmaWxlcyB0byBhdm9pZCBzaWxlbnRseSBwcmVzZXJ2aW5nIG9ubHkgYSBwcmVmaXguXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg5NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBFdmFsdWF0aW9uOiBtZW1mZCB3aXRoIGh1Z2V0bGIgYW5kIHVkbWFidWYvaW9tbXVmZCoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgYG1lbWZkYC9odWdldGxiL3VkbWFidWYgc2l0dWF0aW9uIGlzIHdvcnRoIGRpZ2dpbmcgaW50byBmb3IgZnV6emluZy4gIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGB1ZG1hYnVmYCBhbmQgYGlvbW11ZmRgIG1pZ2h0IGludGVyYWN0IHdpdGggYSBgbWVtZmRfY3JlYXRlYCBjYWxsIHVzaW5nIGBNRkRfSFVHRVRMQmAuICBDYW4gdXNlcnNwYWNlIGxldmVyYWdlIGBtZW1mZF9jcmVhdGVgIHRvIGNyZWF0ZSBhIGh1Z2UgcGFnZSBiYWNrZWQgbWVtb3J5IHJlZ2lvbiBhbmQgdGhlbiB1c2UgYHVkbWFidWZgICh2aWEgYC9kZXYvdWRtYWJ1ZmAgYW5kIGl0cyBpb2N0bHMsIHNwZWNpZmljYWxseSBgVURNQUJVRl9DUkVBVEVgIG9yIGBVRE1BQlVGX0NSRUFURV9MSVNUYCkgb3IgYGlvbW11ZmRgICh3aXRoIGBJT01NVV9JT0FTX01BUF9GSUxFYCBvciBzaW1pbGFyKSB0byBpbnRlcmZhY2Ugd2l0aCBpdD8gIFRoZSBmYWN0IHRoYXQgYHVkbWFidWZgIGlzIGEgbWlzYyBkZXZpY2UgYW5kIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgYnkgc3l6a2FsbGVyIGlzIGEgZ29vZCBzaWduLgoKQWxyaWdodCwgbm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGtleSBhcmVhIGlzIGNsZWFybHkgYG1tL21lbWZkLmNgLiAgTG9va2luZyBhdCB0aGUgY29tbWl0IGhpc3RvcnksIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYG1lbWZkX2FsbG9jX2ZvbGlvYC4gIFByZXZpb3VzbHksIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAgd2VyZSBjYWxsZWQgKm91dHNpZGUqIHRoZSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAgbXV0ZXguICBUaGUgbXV0ZXggd2FzIG9ubHkgYWNxdWlyZWQgYXJvdW5kIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLiAgTm93LCBwb3N0LXBhdGNoLCB0aGUgbXV0ZXggaXMgYWNxdWlyZWQgKmJlZm9yZSogYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCBhbmQgaGVsZCBhbGwgdGhlIHdheSB0aHJvdWdoIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAsIGBmb2xpb196ZXJvX3VzZXIoKWAsIGBfX2ZvbGlvX21hcmtfdXB0b2RhdGUoKWAsIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLCBhbmQgYGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woKWAuIEl0JiMzOTtzIHVubG9ja2VkIG9uIGVycm9yIG9yIHN1Y2Nlc3MuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBpbXBhY3RpbmcgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aCBmb3IgbWVtZmQgd2l0aCBodWdldGxiLgoKVGhpcyBzY3JlYW1zIGZ1enppbmcgdGFyZ2V0IHRvIG1lISAgSXQmIzM5O3MgaW4gdGhlIGBtbS9gIGNvcmUgc3Vic3lzdGVtLCBzbyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgYnVnIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCwgSXQgaW52b2x2ZXMgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBhcmUgYWx3YXlzIHByaW1lIHRhcmdldHMgZm9yIGZpbmRpbmcgcmFjZSBjb25kaXRpb25zLCBhbmQgaXQgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgbWVtZmRfY3JlYXRlYCBzeXNjYWxsIHdpdGggYHVkbWFidWZgIGFuZC9vciBgaW9tbXVmZGAgaW9jdGxzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSBuZWVkIHRvIGNoZWNrIGBtbS9tZW1mZC5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyaWVzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3B0aW9ucywgbGlrZSBgSFVHRVRMQl9QQUdFYCwgYFVETUFCVUZgLCBhbmQgdGhlIGNvcmUgYG1lbWZkYCBmdW5jdGlvbmFsaXR5IGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgd2hvbGUgc2hlYmFuZy4gIE9uY2UgSSBrbm93IHRoZSBjb25maWd1cmF0aW9ucywgSSBjYW4gYmUgc3VyZSB0byBpbmNsdWRlIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19IVUdFVExCX1BBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODU9ZW5kaWZcbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG4tLVxubW0vZGFtb24vdmFkZHIuYz0yNTg9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjg0LVxubW0vZGFtb24vdmFkZHIuYzoyODU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtMjg2LXN0YXRpYyB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vZGFtb24vdmFkZHIuYz0zMTM9c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vZGFtb24vdmFkZHIuYy0zMzMtI2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcbm1tL2RhbW9uL3ZhZGRyLmM6MzM0OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTMzNS1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTM3OT1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy00MjQtXG5tbS9kYW1vbi92YWRkci5jOjQyNTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vZGFtb24vdmFkZHIuYy00MjYtc3RhdGljIGludCBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vZGFtb24vdmFkZHIuYy00NTUtI2RlZmluZSBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5IE5VTExcbm1tL2RhbW9uL3ZhZGRyLmM6NDU2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTQ1Ny1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9ODQ0PXN0YXRpYyB2b2lkIF9faW5pdCBzd2FwX21pZ3JhdGlvbl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04ODMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODg0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODg1LXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5OS19XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTAwOiNlbHNlICAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTkwMS1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5MDI6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXG4tLVxubW0vaG1tLmM9NDkxPXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3B1ZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vaG1tLmMtNTQ4LVxubW0vaG1tLmM6NTQ5OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9obW0uYy01NTAtc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbm1tL2htbS5jLTU4OC0jZGVmaW5lIGhtbV92bWFfd2Fsa19odWdldGxiX2VudHJ5IE5VTExcbm1tL2htbS5jOjU4OTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vaG1tLmMtNTkwLVxuLS1cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTM3Mj1zdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmMtMzg3LVxubW0vaHVnZXRsYl92bWVtbWFwLmM6Mzg4OnN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xubW0vaHVnZXRsYl92bWVtbWFwLmMtMzg5LXN0YXRpYyBpbnQgX19pbml0IGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9wYXJhbShjaGFyICpidWYpXG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmgtMTktXG5tbS9odWdldGxiX3ZtZW1tYXAuaDoyMDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5tbS9odWdldGxiX3ZtZW1tYXAuaC0yMS1pbnQgaHVnZXRsYl92bWVtbWFwX3Jlc3RvcmVfZm9saW8oY29uc3Qgc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxubW0vaHVnZXRsYl92bWVtbWFwLmg9Nzk9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9ib290bWVtX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuaC04MS19XG5tbS9odWdldGxiX3ZtZW1tYXAuaDo4MjojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQICovXG5tbS9odWdldGxiX3ZtZW1tYXAuaC04My1cbi0tXG5tbS9tZW1jb250cm9sLmM9Mzc4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQzMS1cdFBHUkVGSUxMLFxubW0vbWVtY29udHJvbC5jOjQzMjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTQzMy1cdE5SX0hVR0VUTEIsXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYyNC1cdHsgXCYjMzQ7c2xhYl91bnJlY2xhaW1hYmxlXCYjMzQ7LFx0XHROUl9TTEFCX1VOUkVDTEFJTUFCTEVfQlx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE2MjU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNjI2LVx0eyBcJiMzNDtodWdldGxiXCYjMzQ7LFx0XHRcdE5SX0hVR0VUTEJcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzE5PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTcyNS1cbm1tL21lbWNvbnRyb2wuYzoxNzI2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9tZW1jb250cm9sLmMtMTcyNy1zdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19odWdldGxiKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MzAtfVxubW0vbWVtY29udHJvbC5jOjE3MzE6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vbWVtY29udHJvbC5jLTE3MzItc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzM1LX1cbm1tL21lbWNvbnRyb2wuYzoxNzM2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9tZW1jb250cm9sLmMtMTczNy1cbm1tL21lbWNvbnRyb2wuYz0xNzM4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTE3NTYtXG5tbS9tZW1jb250cm9sLmM6MTc1NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtY29udHJvbC5jLTE3NTgtXHRcdGlmICh1bmxpa2VseShtZW1vcnlfc3RhdHNbaV0uaWR4ID09IE5SX0hVR0VUTEIpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxubW0vbWVtZmQuYy02OS17XG5tbS9tZW1mZC5jOjcwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9tZW1mZC5jLTcxLVx0c3RydWN0IGZvbGlvICpmb2xpbztcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTc0MD1zdGF0aWMgaW50IGh3cG9pc29uX3B0ZV9yYW5nZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtNzcxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzo3NzI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzczLXN0YXRpYyBpbnQgaHdwb2lzb25faHVnZXRsYl9yYW5nZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4NjI9RVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2NC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg2NTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODY2LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjE1OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNjItfVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTYzOiNlbmRpZlx0LyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTY0LVxuLS1cbm1tL21lbXBvbGljeS5jPTc5Mz1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtNzk2LXtcbm1tL21lbXBvbGljeS5jOjc5NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vbWVtcG9saWN5LmMtNzk4LVx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXHUwMDNlcHJpdmF0ZTtcbi0tXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQyNS1cbm1tL21pZ3JhdGUuYzo0MjY6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21pZ3JhdGUuYy00MjctXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tLVxubW0vbWlncmF0ZS5jPTQ5Mz12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuLS1cbm1tL21pZ3JhdGUuYy01MjAtXG5tbS9taWdyYXRlLmM6NTIxOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9taWdyYXRlLmMtNTIyLS8qXG4tLVxubW0vbWluY29yZS5jPTI3PXN0YXRpYyBpbnQgbWluY29yZV9odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9taW5jb3JlLmMtMjkte1xubW0vbWluY29yZS5jOjMwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9taW5jb3JlLmMtMzEtXHRjb25zdCB1bnNpZ25lZCBsb25nIG5yID0gKGVuZCAtIGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLS1cbm1tL21tX2luaXQuYz0xNDgzPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF91c2VtYXAoc3RydWN0IHpvbmUgKnpvbmUpIHt9XG4tLVxubW0vbW1faW5pdC5jLTE0ODUtXG5tbS9tbV9pbml0LmM6MTQ4NjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9tbV9pbml0LmMtMTQ4Ny1cbi0tXG5tbS9tbV9pbml0LmM9MTQ4OT1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X3BhZ2VibG9ja19vcmRlcih2b2lkKVxuLS1cbm1tL21tX2luaXQuYy0xNTA2LX1cbm1tL21tX2luaXQuYzoxNTA3OiNlbHNlIC8qIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRSAqL1xubW0vbW1faW5pdC5jLTE1MDgtXG5tbS9tbV9pbml0LmMtMTUwOS0vKlxubW0vbW1faW5pdC5jOjE1MTA6ICogV2hlbiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEUgaXMgbm90IHNldCwgc2V0X3BhZ2VibG9ja19vcmRlcigpXG5tbS9tbV9pbml0LmMtMTUxMS0gKiBpcyB1bnVzZWQgYXMgcGFnZWJsb2NrX29yZGVyIGlzIHNldCBhdCBjb21waWxlLXRpbWUuIFNlZVxuLS1cbm1tL21tX2luaXQuYz0xNTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc2V0X3BhZ2VibG9ja19vcmRlcih2b2lkKVxuLS1cbm1tL21tX2luaXQuYy0xNTE4LVxubW0vbW1faW5pdC5jOjE1MTk6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRSAqL1xubW0vbW1faW5pdC5jLTE1MjAtXG4tLVxubW0vbXByb3RlY3QuYz03MzA9c3RhdGljIGludCBwcm90X25vbmVfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tcHJvdGVjdC5jLTczNy1cbm1tL21wcm90ZWN0LmM6NzM4OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9tcHJvdGVjdC5jLTczOS1zdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vcGFnZV9hbGxvYy5jPTIwOT1nZnBfdCBnZnBfYWxsb3dlZF9tYXNrIF9fcmVhZF9tb3N0bHkgPSBHRlBfQk9PVF9NQVNLO1xubW0vcGFnZV9hbGxvYy5jLTIxMC1cbm1tL3BhZ2VfYWxsb2MuYzoyMTE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vcGFnZV9hbGxvYy5jLTIxMi11bnNpZ25lZCBpbnQgcGFnZWJsb2NrX29yZGVyIF9fcmVhZF9tb3N0bHk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTEwNzM9c3RhdGljIGludCBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHN0cnVjdCBwYWdlICpoZWFkX3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMTM5LVx0XHQvKiB0aGUgdGhpcmQgdGFpbCBwYWdlOiBodWdldGxiIHNwZWNpZmljcyBvdmVybGFwIC1cdTAwM2VtYXBwaW5ncyAqL1xubW0vcGFnZV9hbGxvYy5jOjExNDA6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0UpKVxubW0vcGFnZV9hbGxvYy5jLTExNDEtXHRcdFx0YnJlYWs7XG4tLVxubW0vcGFnZXdhbGsuYz0yODY9c3RhdGljIGludCB3YWxrX3BnZF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtMzI2LVxubW0vcGFnZXdhbGsuYzozMjc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL3BhZ2V3YWxrLmMtMzI4LXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZW50cnlfZW5kKHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9wYWdld2Fsay5jPTMzNj1zdGF0aWMgaW50IHdhbGtfaHVnZXRsYl9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtMzYzLVxubW0vcGFnZXdhbGsuYzozNjQ6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xubW0vcGFnZXdhbGsuYy0zNjUtc3RhdGljIGludCB3YWxrX2h1Z2V0bGJfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTM3MC1cbm1tL3BhZ2V3YWxrLmM6MzcxOiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS9wYWdld2Fsay5jLTM3Mi1cbi0tXG5tbS9ybWFwLmM9MzE1OT12b2lkIHJtYXBfd2Fsa19sb2NrZWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHJtYXBfd2Fsa19jb250cm9sICpyd2MpXG4tLVxubW0vcm1hcC5jLTMxNjgtXG5tbS9ybWFwLmM6MzE2OTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vcm1hcC5jLTMxNzAtLypcbi0tXG5tbS9ybWFwLmM9MzE4OT12b2lkIGh1Z2V0bGJfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMzIwMS19XG5tbS9ybWFwLmM6MzIwMjojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9MTc2PXN0YXRpYyB2b2lkICogX19tZW1pbml0IHZtZW1tYXBfYWxsb2NfYmxvY2tfemVybyh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmMtMTg2LVxubW0vc3BhcnNlLXZtZW1tYXAuYzoxODc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxubW0vc3BhcnNlLXZtZW1tYXAuYy0xODgtc3RhdGljIF9fbWVtaW5pdCBzdHJ1Y3QgcGFnZSAqdm1lbW1hcF9nZXRfdGFpbCh1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB6b25lICp6b25lKVxuLS1cbm1tL3NwYXJzZS5oLTEyLVxubW0vc3BhcnNlLmg6MTM6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxubW0vc3BhcnNlLmgtMTQtc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2VjdGlvbl9vcmRlcihjb25zdCBzdHJ1Y3QgbWVtX3NlY3Rpb24gKnNlY3Rpb24pXG4tLVxubW0vc3BhcnNlLmg9NzM9c3RhdGljIGlubGluZSBib29sIHZtZW1tYXBfb3B0aW1pemFibGVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxubW0vc3BhcnNlLmgtNzQte1xubW0vc3BhcnNlLmg6NzU6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKSlcbm1tL3NwYXJzZS5oLTc2LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz03MDc9c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3BvaXNvbihzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNzQzLVxubW0vdXNlcmZhdWx0ZmQuYzo3NDQ6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL3VzZXJmYXVsdGZkLmMtNzQ1LS8qXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz03NTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtOTA3LX1cbm1tL3VzZXJmYXVsdGZkLmM6OTA4OiNlbHNlIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS91c2VyZmF1bHRmZC5jLTkwOS0vKiBmYWlsIGF0IGJ1aWxkIHRpbWUgaWYgZ2NjIGF0dGVtcHRzIHRvIHVzZSB0aGlzICovXG5tbS91c2VyZmF1bHRmZC5jPTkxMD1leHRlcm4gc3NpemVfdCBtZmlsbF9hdG9taWNfaHVnZXRsYihzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy05MTUtXHRcdFx0XHQgICAgdWZmZF9mbGFnc190IGZsYWdzKTtcbm1tL3VzZXJmYXVsdGZkLmM6OTE2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS91c2VyZmF1bHRmZC5jLTkxNy1cbi0tXG5tbS91c2VyZmF1bHRmZC5jPTI1NTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgdWZmZF9tc2cgdXNlcmZhdWx0X21zZyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yNTg5LVxubW0vdXNlcmZhdWx0ZmQuYzoyNTkwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS91c2VyZmF1bHRmZC5jLTI1OTEtLypcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTI2NDY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfbXVzdF93YWl0KHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTI2NTMtfVxubW0vdXNlcmZhdWx0ZmQuYzoyNjU0OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXG5tbS91c2VyZmF1bHRmZC5jLTI2NTUtXG4tLVxubW0vdm1hbGxvYy5jPTk2PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTIzLVxubW0vdm1hbGxvYy5jOjEyNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vdm1hbGxvYy5jLTEyNS1cdFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcbi0tXG5tbS92bWFsbG9jLmM9Mzg5PXN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMzk5LVx0ZG8ge1xubW0vdm1hbGxvYy5jOjQwMDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxubW0vdm1hbGxvYy5jLTQwMS1cdFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZShhZGRyLCBwdGUpO1xuLS1cbm1tL3Ztc3RhdC5jPTExOTk9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4tLVxubW0vdm1zdGF0LmMtMTMwNi1cdFtJKFBHUkVGSUxMKV1cdFx0XHRcdD0gXCYjMzQ7cGdyZWZpbGxcJiMzNDssXG5tbS92bXN0YXQuYzoxMzA3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS92bXN0YXQuYy0xMzA4LVx0W0koTlJfSFVHRVRMQildXHRcdFx0XHQ9IFwmIzM0O25yX2h1Z2V0bGJcJiMzNDssXG4tLVxubW0vdm1zdGF0LmMtMTM5Ni1cbm1tL3Ztc3RhdC5jOjEzOTc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL3Ztc3RhdC5jLTEzOTgtXHRbSShIVExCX0JVRERZX1BHQUxMT0MpXVx0XHRcdD0gXCYjMzQ7aHRsYl9idWRkeV9hbGxvY19zdWNjZXNzXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZTogYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBLY29uZmlnLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIGVhY2guIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlbS4KCk15IGdvYWwgaXNuJiMzOTt0IGp1c3QgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGJ1dCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVpciBjdXJyZW50IHN0YXRlcy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zOyBpZiBgSFVHRVRMQkZTYCBpcyBlbmFibGVkLCBkb2VzIHRoYXQgbmVjZXNzaXRhdGUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIGBIVUdFVExCX1BBR0VgPyBDb252ZXJzZWx5LCB3aGF0IGhhcHBlbnMgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IGFyY2hpdGVjdHVyZXM/IERvZXMgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUgZGV0ZXJtaW5lIGFueXRoaW5nIGhlcmU/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGNoZWNraW5nIHRoZSBoZWxwIHRleHQsIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgdXNlIGNhc2UgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gQW5kIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBrZWVuIHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcnBsYXkgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgYW5kIGFueSBwb3RlbnRpYWwgdXNlci1zcGFjZSBpbnRlcmZhY2VzLiBJdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIGRpZmZlcmVudCBOVU1BIGNvbmZpZ3VyYXRpb25zIHRvby4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBvZmZlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5mcy9LY29uZmlnLTI4MS1cbmZzL0tjb25maWc6MjgyOmNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbmZzL0tjb25maWctMjgzLVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDYzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVURNQUJVRiBVc2FnZSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIEkmIzM5O3ZlIGFscmVhZHkgZXhwbG9yZWQgdGhlIGltbWVkaWF0ZSBhcmVhcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLiBJIHNob3VsZCB0aG9yb3VnaGx5IHNjcnV0aW5pemUgdGhlIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHBvaW50IGZvciBETUEgYnVmZmVyLXJlbGF0ZWQgZHJpdmVycywgc28gaXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIHJlbGF0aW9uc2hpcHMgd2l0aCBgVURNQUJVRmAuIEkgYWxzbyBuZWVkIHRvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBvdGhlciBkcml2ZXJzIHRoYXQgbWlnaHQgYmUgZGlyZWN0bHkgY2FsbGluZyBvciB1dGlsaXppbmcgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHNhbWUgbmFtZXNwYWNlLiAmIzM0O090aGVyIGNhbGxlcnMmIzM0OyBpcyBrZXkgaGVyZTsgaXQmIzM5O3MgZWFzeSB0byBmb2N1cyBvbiB0aGUgb2J2aW91cyB0YXJnZXQgYW5kIG1pc3MgaW5kaXJlY3QgcmVmZXJlbmNlcy4gVGhpcyBjb3VsZCBtZWFuIGEgbW9kdWxlIHRoYXQmIzM5O3MgaW5kaXJlY3RseSB1dGlsaXppbmcgVURNQUJVRiB0aHJvdWdoIGFub3RoZXIgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IHNlYXJjaCBuZXQgaXMgd2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVETUFCVUYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTMyLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDt1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzk2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtZmQgRm9saW8gQWxsb2NhdGlvbiBhbmQgUGlubmluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYG1lbWZkX2NyZWF0ZWAgYW5kIGl0cyByZWxhdGVkIGZvbGlvIGFsbG9jYXRpb24gZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgbWVtZmRfYWxsb2NfZm9saW9gLiBJIG5lZWQgdG8gY29uZmlybSBpdHMgZGVmaW5pdGlvbiBhbmQgc2NvcGUuIFllcywgaXQmIzM5O3Mgbm9uLXN0YXRpYywgZGVmaW5lZCB3aXRoaW4gYG1tL21lbWZkLmNgLCBhcyBgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KWAuIEFuZCwgY3JpdGljYWxseSwgSSBzZWUgYG1lbWZkX3Bpbl9mb2xpb3MoKWAgaXMgYWxzbyBpbnZvbHZlZCwgcmVzaWRpbmcgaW4gYG1tL2d1cC5jYC4gRnVydGhlciwgYHVkbWFidWZfcGluX2ZvbGlvcygpYCBpbiBgZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuY2AgYWxzbyBzZWVtcyBsaW5rZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMg4oCTIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGBtZW1mZF9waW5fZm9saW9zYCDigJMgd2FycmFudCBiZWluZyBjb3JlIGZvY3VzIHN5bWJvbHMgZm9yIG15IGFuYWx5c2lzLiBBcmUgdGhleSB0cnVseSBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzPyBObywgaXQgbG9va3MgbGlrZSBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIG9ubHkgY2FsbGVkIHdoZW4gd2UmIzM5O3JlIHBpbm5pbmcgZm9saW9zIGZvciBhIG1lbWZkIGZpbGUgZGVzY3JpcHRvciAodmlhIGBtZW1mZF9waW5fZm9saW9zYCkuIEkgYWxzbyBzZWUgYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIG9ubHkgYmVpbmcgY2FsbGVkIGZyb20gY29udGV4dHMgc3VjaCBhcyB1ZG1hYnVmIChgdWRtYWJ1Zl9waW5fZm9saW9zYCksIGlvbW11ZmQgKGBwaW5fbWVtZmRfcGFnZXNgKSwgYW5kIHRoZSBsaWtlLiBUaGlzIHRlbGxzIG1lIHRoZWlyIHVzYWdlIGlzIG1vcmUgdGFyZ2V0ZWQuCgpHaXZlbiB0aGF0LCBJIGNhbiBjb25maXJtIHRoZSBrZXkgZnVuY3Rpb24gbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBpcywgaW4gZmFjdCwgYG1lbWZkX2FsbG9jX2ZvbGlvYC4gQW5kIHRoZXJlZm9yZSwgbXkgZm9jdXMgc3ltYm9scyBzaG91bGQgYWJzb2x1dGVseSBlbmNvbXBhc3MgKmJvdGgqIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGBtZW1mZF9waW5fZm9saW9zYC4KCkZpbmFsbHksIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgRW5hYmxlQ29uZmlncy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBgSFVHRVRMQkZTYCBpcyBlbmFibGVkIChhbmQgdGh1cywgYEhVR0VUTEJfUEFHRWApIGFsb25nIHdpdGggYFVETUFCVUZgLiBJIGFsc28gbmVlZCB0byBjaGVjayBgTUVNRkRfQ1JFQVRFYCwganVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcuKk1FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL0tjb25maWc9NTI9Y29uZmlnIExJVkVVUERBVEVcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTcyLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo3Mzpjb25maWcgTElWRVVQREFURV9NRU1GRFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7TGl2ZSB1cGRhdGUgc3VwcG9ydCBmb3IgbWVtZmRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTEzMzM9Y29uZmlnIEtNQVBfTE9DQUxfTk9OX0xJTkVBUl9QVEVfQVJSQVlcbi0tXG5tbS9LY29uZmlnLTEzMzUtXG5tbS9LY29uZmlnOjEzMzY6Y29uZmlnIE1FTUZEX0NSRUFURVxubW0vS2NvbmZpZy0xMzM3LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtZmRfY3JlYXRlKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDUtXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBNRU1GRF9DUkVBVEVgIGluIGBtbS9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYE1FTUZEX0NSRUFURWAg4oCTIGEgZ29vZCBmaXJzdCBzdGVwLCBvYnZpb3VzbHksIGlzIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXTigJlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBtbS9LY29uZmlnYC4gSSBrbm93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbWApIGlzIHRoZSBsaWtlbHkgYXJlYSwgZ2l2ZW4gdGhlIG5hbWUuIEkmIzM5O20gYWxyZWFkeSBlbnZpc2lvbmluZyB0aGUgS2NvbmZpZyBmaWxlIHN0cnVjdHVyZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGV4cGVjdCB0byBmaW5kLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIHdpbGwgdGVsbCBtZSBpZiBpdOKAmXMgZW5hYmxlZCBieSBkZWZhdWx0LCB1bmRlciB3aGF0IGFyY2hpdGVjdHVyZSBvciBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBwb3NzaWJseSBldmVuIGdpdmUgc29tZSBicmllZiBkb2N1bWVudGF0aW9uLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMzU6XHRcbjEzMzY6XHRjb25maWcgTUVNRkRfQ1JFQVRFXG4xMzM3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1mZF9jcmVhdGUoKSBzeXN0ZW0gY2FsbFwmIzM0OyBpZiBFWFBFUlRcbjEzMzg6XHRcbjEzMzk6XHRjb25maWcgU0VDUkVUTUVNXG4xMzQwOlx0XHRkZWZhdWx0IHlcbjEzNDE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsXCYjMzQ7IGlmIEVYUEVSVFxuMTM0MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxuMTM0MzpcdFx0aGVscFxuMTM0NDpcdFx0ICBFbmFibGUgdGhlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsIHdpdGggdGhlIGFiaWxpdHkgdG8gY3JlYXRlXG4xMzQ1Olx0XHQgIG1lbW9yeSBhcmVhcyB2aXNpYmxlIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG93bmluZyBwcm9jZXNzIGFuZFxuMTM0NjpcdFx0ICBub3QgbWFwcGVkIHRvIG90aGVyIHByb2Nlc3NlcyBhbmQgb3RoZXIga2VybmVsIHBhZ2UgdGFibGVzLlxuMTM0NzpcdFxuMTM0ODpcdGNvbmZpZyBBTk9OX1ZNQV9OQU1FXG4xMzQ5Olx0XHRib29sIFwmIzM0O0Fub255bW91cyBWTUEgbmFtZSBzdXBwb3J0XCYjMzQ7XG4xMzUwOlx0XHRkZXBlbmRzIG9uIFBST0NfRlMgXHUwMDI2XHUwMDI2IEFEVklTRV9TWVNDQUxMUyBcdTAwMjZcdTAwMjYgTU1VXG4xMzUxOlx0XG4xMzUyOlx0XHRoZWxwXG4xMzUzOlx0XHQgIEFsbG93IG5hbWluZyBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXMuXG4xMzU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzM2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBtbS9tZW1mZC5vYCBnZXRzIGJ1aWx0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYC4gSSYjMzk7bGwgc3RhcnQgdGhlcmUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29tcGlsYXRpb24gc3RlcHMgaW52b2x2ZWQgaW4gY3JlYXRpbmcgdGhhdCBzcGVjaWZpYyBvYmplY3QgZmlsZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoaXMgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMuLi4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgc3BlY2lhbCBmbGFncywgaW5jbHVkZSBwYXRocywgb3IgbGlua2VyIGludGVyYWN0aW9ucyByZWxhdGVkIHRvIGBtZW1mZC5vYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTE0MT1vYmotJChDT05GSUdfSE1NX01JUlJPUikgJiM0Mzs9IGhtbS5vXG5tbS9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX01FTUZEX0NSRUFURSkgJiM0Mzs9IG1lbWZkLm9cbm1tL01ha2VmaWxlLTE0My1vYmotJChDT05GSUdfTUFQUElOR19ESVJUWV9IRUxQRVJTKSAmIzQzOz0gbWFwcGluZ19kaXJ0eV9oZWxwZXJzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MDYKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbS9tZW1mZC5jYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYG1tL21lbWZkLmNgLCB3aGljaCBtZWFucyBgQ09ORklHX01FTUZEX0NSRUFURWAgaXMgZ29pbmcgdG8gYnJpbmcgaW4gYG1tL21lbWZkLm9gLiBSaWdodCwgYW5kIGluc2lkZSBgbWVtZmRfYWxsb2NfZm9saW9gLCB0aGF0IGAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRWAgY2xhdXNlIGlzIGdvaW5nIHRvIHB1bGwgaW4gdGhlIGRlcGVuZGVuY2llcyBvbiBgQ09ORklHX0hVR0VUTEJGU2AgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIHBpZWNlcy4gSSBzZWUgdGhhdCBgdWRtYWJ1ZmAgaXMgb25lIG9mIHRoZSBjYWxsZXJzLCBzbyB3ZSBhcmUgYWxzbyBsb29raW5nIGF0IGBDT05GSUdfVURNQUJVRmAuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LgoKMS4gIGBXb3J0aEZ1enppbmdgOiBZZXMsIGFic29sdXRlbHkuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIHdpdGhpbiBgbWVtZmRfYWxsb2NfZm9saW8oKWAgaW4gYSB3YXkgdGhhdCBleHRlbmRzIHRoZSBzY29wZSBvZiB0aGUgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVgIGxvY2tpbmcuIFRoaXMgaGFwcGVucyBhcm91bmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpYC4gVGhlIHJlYWwga2lja2VyIGlzIHRoYXQgdGhpcyBpcyB1c2VyLXNwYWNlIHJlYWNoYWJsZS4gYG1lbWZkX2NyZWF0ZSgpYCB3aXRoIGBNRkRfSFVHRVRMQmAgY2FuIHRyaWdnZXIgaXQgZGlyZWN0bHksIGFuZCBtb3JlIHN1YnRseSwgc28gY2FuIGRyaXZlcnMgdXNpbmcgYG1lbWZkX3Bpbl9mb2xpb3MoKWAuIFNwZWNpZmljYWxseSwgdGhpbmsgYC9kZXYvdWRtYWJ1ZmAgdGhyb3VnaCB0aGUgYFVETUFCVUZfQ1JFQVRFYCBhbmQgYFVETUFCVUZfQ1JFQVRFX0xJU1RgIGlvY3Rscywgb3IgZXZlbiBgaW9tbXVmZGAuIENoYW5nZXMgdG8gY29yZSBNTSBsb2NraW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBhcmUgKmFsd2F5cyogc3VzcGVjdC4gVGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBsb2NrIG9yZGVyaW5nIGlzc3VlcywgZGVhZGxvY2tzLCBhbmQgcmFjZXMuCgoyLiAgYEZvY3VzU3ltYm9sc2A6IEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIG9uIHR3byBrZXkgc3ltYm9scyBoZXJlOiBgbWVtZmRfYWxsb2NfZm9saW9gIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AuIFRoZXNlIGFyZSB3aGVyZSB0aGUgbG9ja2luZyBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcgYW5kIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIG1vc3QgZGlyZWN0LgoKMy4gIGBFbmFibGVDb25maWdzYDogSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZCB0byBhY3R1YWxseSBleGVyY2lzZSB0aGlzIGNvZGU6IGBNRU1GRF9DUkVBVEVgLCBgSFVHRVRMQkZTYCwgYW5kIGBVRE1BQlVGYC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNRkRfQ1JFQVRFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtVRE1BQlVGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtZmRfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbiBsb2NraW5nIGluIG1lbWZkX2FsbG9jX2ZvbGlvKCkgd2l0aGluIG1tL21lbWZkLmMsIGV4cGFuZGluZyB0aGUgaHVnZXRsYl9mYXVsdF9tdXRleCBsb2NrIHNjb3BlIGFjcm9zcyBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBhbmQgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKCkuIFRoaXMgcmVhY2hhYmxlIG1tIHBhdGggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKSBjb21iaW5lZCB3aXRoIHVkbWFidWYgb3IgaW9tbXVmZCBwaW4gb3BlcmF0aW9ucyAobWVtZmRfcGluX2ZvbGlvcyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNRkRfQ1JFQVRFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtVRE1BQlVGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtZmRfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbiBsb2NraW5nIGluIG1lbWZkX2FsbG9jX2ZvbGlvKCkgd2l0aGluIG1tL21lbWZkLmMsIGV4cGFuZGluZyB0aGUgaHVnZXRsYl9mYXVsdF9tdXRleCBsb2NrIHNjb3BlIGFjcm9zcyBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBhbmQgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKCkuIFRoaXMgcmVhY2hhYmxlIG1tIHBhdGggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKSBjb21iaW5lZCB3aXRoIHVkbWFidWYgb3IgaW9tbXVmZCBwaW4gb3BlcmF0aW9ucyAobWVtZmRfcGluX2ZvbGlvcyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gaW4gYG1lbWZkX2FsbG9jX2ZvbGlvKClgIHdoZW4gaGFuZGxpbmcgaHVnZXRsYmZzLWJhY2tlZCBtZW1mZHMgYnkgd2lkZW5pbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5IGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdYC4gVGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBwcmlvciB0byBjYWxsaW5nIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgYmVmb3JlIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLCBlbnN1cmluZyBzZXJpYWxpemVkIHJlc2VydmF0aW9uLCBhbGxvY2F0aW9uLCBhbmQgaW5zZXJ0aW9uIGludG8gdGhlIHBhZ2UgY2FjaGUuXG5cblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGRjYjA3Nzc2YTM1MTlhMjg4ZmM5OTNkMzhiNDc0ZDQ3YTNhNThiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTA6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuYwppbmRleCBjNzA4ZDkyNTMzZjRhLi4wZjZmZmYwMDRmNWU0IDEwMDY0NAotLS0gYS9tbS9tZW1mZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWZkLmMKQEAgLTgyLDIyICYjNDM7ODIsMzEgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KQogCQlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUobWVtZmQpOwogCQlpbnQgZXJyID0gLUVOT01FTTsKIAkJbG9uZyBucl9yZXN2OwomIzQzOwkJdTMyIGhhc2g7CiAKIAkJZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7CiAJCWdmcF9tYXNrICZhbXA7PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTsKIAkJaWR4ICZndDsmZ3Q7PSBodWdlX3BhZ2Vfb3JkZXIoaCk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50CiYjNDM7CQkgKiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMsIGFzIHJlcXVpcmVkIGJ5IGFsbCBvdGhlcgomIzQzOwkJICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2gobWVtZmQtJmd0O2ZfbWFwcGluZywgaWR4KTsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTsKJiM0MzsKIAkJbnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTsKLQkJaWYgKG5yX3Jlc3YgJmx0OyAwKQotCQkJcmV0dXJuIEVSUl9QVFIobnJfcmVzdik7CiYjNDM7CQlpZiAobnJfcmVzdiAmbHQ7IDApIHsKJiM0MzsJCQllcnIgPSBucl9yZXN2OwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KIAogCQlmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLAogCQkJCQkJICAgIG51bWFfbm9kZV9pZCgpLAogCQkJCQkJICAgIE5VTEwsCiAJCQkJCQkgICAgZ2ZwX21hc2spOwogCQlpZiAoZm9saW8pIHsKLQkJCXUzMiBoYXNoOwotCiAJCQkvKgogCQkJICogWmVybyB0aGUgZm9saW8gdG8gcHJldmVudCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuCiAJCQkgKiBVc2UgZm9saW9femVyb191c2VyKCkgd2hpY2ggaXMgb3B0aW1pemVkIGZvciBodWdlL2dpZ2FudGljCkBAIC0xMTIsMjAgJiM0MzsxMjEsOSBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpCiAJCQkgKi8KIAkJCV9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAKLQkJCS8qCi0JCQkgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50Ci0JCQkgKiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMsIGFzIHJlcXVpcmVkIGJ5IGFsbCBvdGhlcgotCQkJICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuCi0JCQkgKi8KLQkJCWhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2gobWVtZmQtJmd0O2ZfbWFwcGluZywgaWR4KTsKLQkJCW11dGV4X2xvY2soJmFtcDtodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTsKLQogCQkJZXJyID0gaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZShmb2xpbywKIAkJCQkJCQltZW1mZC0mZ3Q7Zl9tYXBwaW5nLAogCQkJCQkJCWlkeCk7Ci0KLQkJCW11dGV4X3VubG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwotCiAJCQlpZiAoZXJyKSB7CiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJCQlnb3RvIGVycl91bnJlc3Y7CkBAIC0xMzMsMTEgJiM0MzsxMzEsMTQgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KQogCiAJCQlodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzdWJwb29sX2lub2RlKGlub2RlKSk7CiAJCQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwogCQkJcmV0dXJuIGZvbGlvOwogCQl9CiBlcnJfdW5yZXN2OgogCQlpZiAobnJfcmVzdiAmZ3Q7IDApCiAJCQlodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgMCk7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2h1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaDogS0FTQU4gdnMuIEtNU0FOKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBrZXJuZWwgcGF0Y2ggYW5kIGRldGVybWluZSB3aGV0aGVyIGEgZnVsbCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgd2FycmFudGVkLCBvciBpZiBLQVNBTiBpcyBzdWZmaWNpZW50IGZvciB0aGlzIHBhcnRpY3VsYXIgY29kZSBjaGFuZ2UuIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgY29udGV4dCwgYW5kIHdoYXQmIzM5O3MgYXQgc3Rha2UuIFRoaXMgaXMgYSBjb2RlIHJldmlldzsgYSBzZWN1cml0eS9xdWFsaXR5IGVuZ2luZWVyaW5nIHRhc2ssIHNvIG5vIHJlYWwgcmlzayBoZXJlLiBJdCYjMzk7cyBiZW5pZ24sIGRlZmVuc2l2ZSwgbm8gb2ZmZW5zaXZlIGV4cGxvaXRhdGlvbi4gR29vZC4gU2FmZSB0byBwcm9jZWVkLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gVGhlIHBhdGNoIHRhcmdldHMgYG1tL21lbWZkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtZW1mZF9hbGxvY19mb2xpb2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSB3aWRlbmluZyBvZiB0aGUgbG9ja2luZyBzY29wZSBmb3IgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF1gLiBCZWZvcmUsIHRoZSBjYWxscyB0byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZWAgaGFwcGVuZWQgKndpdGhvdXQqIGhvbGRpbmcgdGhlIG11dGV4LiBJdCB3YXMgb25seSBhY3F1aXJlZCBhcm91bmQgYGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKWAuIE5vdywgdGhlIG11dGV4IGlzIGFjcXVpcmVkICpiZWZvcmUqIHRob3NlIGNhbGxzIGFuZCBoZWxkIHVudGlsIGFmdGVyIHRoZSBwYWdlIGNhY2hlIGFkZGl0aW9uLCBvciByZWxlYXNlZCBvbiBlcnJvciBwYXRocy4KClRoZSBrZXkgaXMgaWYgdGhpcyBpcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHdoYXQgYG1lbWZkX2FsbG9jX2ZvbGlvYCBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5IGluIHJlbGF0aW9uIHRvIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBpc3N1ZXMuIExldCYjMzk7cyByZWFkIHRoZSBmaWxlIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhhdCBmdW5jdGlvbiwgYW5kIGhvdyBpdCYjMzk7cyBhZmZlY3RlZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2FsbG9jX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbm1tL21lbWZkLmMtNjctICovXG5tbS9tZW1mZC5jOjY4OnN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbm1tL21lbWZkLmMtNjkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgbW0vbWVtZmQuYyYjMzk7cyBDb250ZXh0KioKCk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gYG1tL21lbWZkLmNgIGFnYWluLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgbGluZSA2OC4gSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgcXVlc3Rpb24gb3IgaXNzdWUgaW4gbWluZCwgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgcG9zc2libHkgaG93IG1lbW9yeSByZWdpb25zIGFyZSBiZWluZyBtYW5hZ2VkLCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIG9yIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgZGlzc2VjdGluZyB0aGF0IGNvZGUhIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgYW5kIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWZkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdC8qXG4gIDYzOlx0ICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IG1lbWZkX3Bpbl91c2VyX3BhZ2VzKCkgaW4gR1VQIChndXAuYykuXG4gIDY0Olx0ICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXG4gIDY1Olx0ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXG4gIDY2Olx0ICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4gIDY3Olx0ICovXG4gIDY4Olx0c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuICA2OTpcdHtcbiAgNzA6XHQjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuICA3MTpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiAgNzI6XHRcdGdmcF90IGdmcF9tYXNrO1xuICA3MzpcdFxuICA3NDpcdFx0aWYgKGlzX2ZpbGVfaHVnZXBhZ2VzKG1lbWZkKSkge1xuICA3NTpcdFx0XHQvKlxuICA3NjpcdFx0XHQgKiBUaGUgZm9saW8gd291bGQgbW9zdCBsaWtlbHkgYmUgYWNjZXNzZWQgYnkgYSBETUEgZHJpdmVyLFxuICA3NzpcdFx0XHQgKiB0aGVyZWZvcmUsIHdlIGhhdmUgem9uZSBtZW1vcnkgY29uc3RyYWludHMgd2hlcmUgd2UgY2FuXG4gIDc4Olx0XHRcdCAqIGFsbG9jIGZyb20uIEFsc28sIHRoZSBmb2xpbyB3aWxsIGJlIHBpbm5lZCBmb3IgYW4gaW5kZWZpbml0ZVxuICA3OTpcdFx0XHQgKiBhbW91bnQgb2YgdGltZSwgc28gaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG1pZ3JhdGVkIGF3YXkuXG4gIDgwOlx0XHRcdCAqL1xuICA4MTpcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShtZW1mZCk7XG4gIDgyOlx0XHRcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XG4gIDgzOlx0XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuICA4NDpcdFx0XHRsb25nIG5yX3Jlc3Y7XG4gIDg1Olx0XHRcdHUzMiBoYXNoO1xuICA4NjpcdFxuICA4NzpcdFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiAgODg6XHRcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+KF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFKTtcbiAgODk6XHRcdFx0aWR4IFx1MDAzZVx1MDAzZT0gaHVnZV9wYWdlX29yZGVyKGgpO1xuICA5MDpcdFxuICA5MTpcdFx0XHQvKlxuICA5MjpcdFx0XHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XG4gIDkzOlx0XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4gIDk0Olx0XHRcdCAqIGNhbGxlcnMgb2YgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpLlxuICA5NTpcdFx0XHQgKi9cbiAgOTY6XHRcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4gIDk3Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gIDk4Olx0XG4gIDk5Olx0XHRcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICYjNDM7IDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XG4gMTAwOlx0XHRcdGlmIChucl9yZXN2IFx1MDAzYyAwKSB7XG4gMTAxOlx0XHRcdFx0ZXJyID0gbnJfcmVzdjtcbiAxMDI6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gMTAzOlx0XHRcdH1cbiAxMDQ6XHRcbiAxMDU6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcbiAxMDY6XHRcdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4gMTA3Olx0XHRcdFx0XHRcdFx0ICAgIE5VTEwsXG4gMTA4Olx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrKTtcbiAxMDk6XHRcdFx0aWYgKGZvbGlvKSB7XG4gMTEwOlx0XHRcdFx0LypcbiAxMTE6XHRcdFx0XHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cbiAxMTI6XHRcdFx0XHQgKiBVc2UgZm9saW9femVyb191c2VyKCkgd2hpY2ggaXMgb3B0aW1pemVkIGZvciBodWdlL2dpZ2FudGljXG4gMTEzOlx0XHRcdFx0ICogcGFnZXMuIFBhc3MgMCBhcyBhZGRyX2hpbnQgc2luY2UgdGhpcyBpcyBub3QgYSBmYXVsdGluZyBwYXRoXG4gMTE0Olx0XHRcdFx0ICogIGFuZCB3ZSBkb24mIzM5O3QgaGF2ZSBhIHVzZXIgdmlydHVhbCBhZGRyZXNzIHlldC5cbiAxMTU6XHRcdFx0XHQgKi9cbiAxMTY6XHRcdFx0XHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApO1xuIDExNzpcdFxuIDExODpcdFx0XHRcdC8qXG4gMTE5Olx0XHRcdFx0ICogTWFyayB0aGUgZm9saW8gdXB0b2RhdGUgYmVmb3JlIGFkZGluZyB0byBwYWdlIGNhY2hlLFxuIDEyMDpcdFx0XHRcdCAqIGFzIHJlcXVpcmVkIGJ5IGZpbGVtYXAuYyBhbmQgb3RoZXIgaHVnZXRsYiBwYXRocy5cbiAxMjE6XHRcdFx0XHQgKi9cbiAxMjI6XHRcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIDEyMzpcdFxuIDEyNDpcdFx0XHRcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXG4gMTI1Olx0XHRcdFx0XHRcdFx0XHRtZW1mZC1cdTAwM2VmX21hcHBpbmcsXG4gMTI2Olx0XHRcdFx0XHRcdFx0XHRpZHgpO1xuIDEyNzpcdFx0XHRcdGlmIChlcnIpIHtcbiAxMjg6XHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMTI5Olx0XHRcdFx0XHRnb3RvIGVycl91bnJlc3Y7XG4gMTMwOlx0XHRcdFx0fVxuIDEzMTpcdFxuIDEzMjpcdFx0XHRcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcbiAxMzM6XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDEzNDpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbiAxMzU6XHRcdFx0XHRyZXR1cm4gZm9saW87XG4gMTM2Olx0XHRcdH1cbiAxMzc6XHRlcnJfdW5yZXN2OlxuIDEzODpcdFx0XHRpZiAobnJfcmVzdiBcdTAwM2UgMClcbiAxMzk6XHRcdFx0XHRodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggJiM0MzsgMSwgMCk7XG4gMTQwOlx0b3V0X3VubG9jazpcbiAxNDE6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIDE0MjpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDE0MzpcdFx0fVxuIDE0NDpcdCNlbmRpZlxuIDE0NTpcdFx0cmV0dXJuIHNobWVtX3JlYWRfZm9saW8obWVtZmQtXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xuIDE0NjpcdH1cbiAxNDc6XHRcbiAxNDg6XHQvKlxuIDE0OTpcdCAqIFNldHRpbmcgU0VBTF9XUklURSByZXF1aXJlcyB1cyB0byB2ZXJpZnkgdGhlcmUmIzM5O3Mgbm8gcGVuZGluZyB3cml0ZXIuIEhvd2V2ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjcKCQkJCQkJCW91dHB1dDogMjYxCgkJCQkJCQl0aG91Z2h0czogNTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1mZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gbG9ja2luZyB3aXRoaW4gYG1lbWZkX2FsbG9jX2ZvbGlvKClgIGZvciBodWdldGxiZnMtYmFja2VkIG1lbWZkcy4gVGhlIGNvcmUgY2hhbmdlIGlzIGFjcXVpcmluZyB0aGUgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF1gIGxvY2sgKmJlZm9yZSogcmVzZXJ2aW5nIGFuZCBhbGxvY2F0aW5nIHRoZSBodWdldGxiIGZvbGlvLCB0aGVuIHJlbGVhc2luZyBpdCBvbiBjb21wbGV0aW9uIG9yIGVycm9yLiBUaGUgZ29hbCBpcyBjbGVhcjogc2VyaWFsaXplIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBodWdldGxiIHBhZ2UgY2FjaGUgYWxsb2NhdGlvbnMuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIHN5bmNocm9uaXphdGlvbiBmaXguCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCBteSBjaGVja2xpc3QuIEFyZSB0aGVyZSAqYW55KiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBhbGxvY2F0ZWQ/IE5vLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3RzPyBOb3BlLiBEb2VzIGl0IG1lc3Mgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIC0gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgc2ticywgaW9jdGwgb3V0cHV0LCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnM/IE5vdCBhdCBhbGwuIERvZXMgaXQgdG91Y2ggYW55dGhpbmcgcmVsYXRlZCB0byBib3VuZHMgY2hlY2tzIG9yIGRhdGEgbGVuZ3RocyBpbiBhIHdheSB0aGF0ICpjb3VsZCogYWxsb3cgdGhlIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBkYXRhPyBBYnNvbHV0ZWx5IG5vdC4gRm9saW9zIGFyZSBleHBsaWNpdGx5IHplcm9lZCB1c2luZyBgZm9saW9femVyb191c2VyKGZvbGlvLCAwKWAg4oCTIGJ1c2luZXNzIGFzIHVzdWFsLiBBbmQgY3J1Y2lhbGx5LCBhbGwgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uCgpMZXQmIzM5O3MgdmVyaWZ5IHRoZSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG1pZ2h0IG5lZWQgS01TQU4mIzM5O3MgYXR0ZW50aW9uPyBOby4gVGhpcyBpcyBhbGwgYWJvdXQgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIG9uIGh1Z2V0bGIgZm9saW8gYWxsb2NhdGlvbiBhbmQgcGFnZSBjYWNoZSBpbnNlcnRpb24g4oCTIHJhY2UgY29uZGl0aW9uIC8gbG9ja2luZyBmaXhlcy4gUmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIGFuZCByZWZjb3VudC9wYWdlY2FjaGUgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzL2Fzc2VydGlvbnMsIG5vdCBLTVNBTi4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBydW4gdGhyb3VnaCBteSBjcml0ZXJpYSBhZ2FpbjoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQ/IE5vdCB0aGUgY2FzZSBoZXJlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLiBgbnJfcmVzdmAsIGBlcnJgLCBhbmQgYGhhc2hgIGFyZSBhbGwgYXNzaWduZWQgYmVmb3JlIGFueSB1c2UuCjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHM/IE5vdCBhcHBsaWNhYmxlLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgY2hhbmdlcyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOb3BlLgoKQW5kIGNvbnZlcnNlbHksIHdoeSBgTmVlZHNLTVNBTj1mYWxzZWA/IEJlY2F1c2UgdGhlIGNvZGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFib3V0IGZpeGluZyBsb2NraW5nIGlzc3VlcyDigJMgd2hpY2ggYXJlIGtub3duIHRvIGJlIGRldGVjdGFibGUgYnkgZXhpc3RpbmcgdG9vbHMuIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgKm5vKiByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpUaGVyZWZvcmUsIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBoYXNoYCwgYGVycmAsIGBucl9yZXN2YCwgYGZvbGlvYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5ld2x5IGFsbG9jYXRlZCBmb2xpb3MgY29udGludWUgdG8gYmUgY2xlYXJlZCB1c2luZyBgZm9saW9femVyb191c2VyKClgLiBUaGVyZSBhcmUgbm8gbmV3IGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBtb2RpZmllZCBkYXRhIGxlbmd0aHMvYm91bmRzLiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByZWZjb3VudGluZyBpc3N1ZXMpIGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gaW4gYG1lbWZkX2FsbG9jX2ZvbGlvKClgIHdoZW4gaGFuZGxpbmcgaHVnZXRsYmZzLWJhY2tlZCBtZW1mZHMgYnkgd2lkZW5pbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5IGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdYC4gVGhlIG11dGV4IGlzIG5vdyBhY3F1aXJlZCBwcmlvciB0byBjYWxsaW5nIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgYmVmb3JlIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLCBlbnN1cmluZyBzZXJpYWxpemVkIHJlc2VydmF0aW9uLCBhbGxvY2F0aW9uLCBhbmQgaW5zZXJ0aW9uIGludG8gdGhlIHBhZ2UgY2FjaGUuXG5cblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMDoyNC41MTUxOTU3NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTY4MjExODM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1GRF9DUkVBVEVcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiVURNQUJVRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgc3luY2hyb25pemF0aW9uIGxvY2tpbmcgaW4gbWVtZmRfYWxsb2NfZm9saW8oKSB3aXRoaW4gbW0vbWVtZmQuYywgZXhwYW5kaW5nIHRoZSBodWdldGxiX2ZhdWx0X211dGV4IGxvY2sgc2NvcGUgYWNyb3NzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGFuZCBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKS4gVGhpcyByZWFjaGFibGUgbW0gcGF0aCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpIGNvbWJpbmVkIHdpdGggdWRtYWJ1ZiBvciBpb21tdWZkIHBpbiBvcGVyYXRpb25zIChtZW1mZF9waW5fZm9saW9zKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIGxvY2tpbmcsIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMDoyNC41MTUyMDk1OTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTc3NTQ3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZGNiMDc3NzZhMzUxOWEyODhmYzk5M2QzOGI0NzRkNDdhM2E1OGJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTA6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmNcXG5pbmRleCBjNzA4ZDkyNTMzZjRhLi4wZjZmZmYwMDRmNWU0IDEwMDY0NFxcbi0tLSBhL21tL21lbWZkLmNcXG4rKysgYi9tbS9tZW1mZC5jXFxuQEAgLTgyLDIyICs4MiwzMSBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxuIFxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XFxuIFxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRsb25nIG5yX3Jlc3Y7XFxuK1xcdFxcdHUzMiBoYXNoO1xcbiBcXG4gXFx0XFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuIFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUpO1xcbiBcXHRcXHRpZHggXFx1MDAzZVxcdTAwM2U9IGh1Z2VfcGFnZV9vcmRlcihoKTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnRcXG4rXFx0XFx0ICogcmFjZXMgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb25zLCBhcyByZXF1aXJlZCBieSBhbGwgb3RoZXJcXG4rXFx0XFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRoYXNoID0gaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKG1lbWZkLVxcdTAwM2VmX21hcHBpbmcsIGlkeCk7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbitcXG4gXFx0XFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggKyAxLCBOVUxMLCBFTVBUWV9WTUFfRkxBR1MpO1xcbi1cXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKG5yX3Jlc3YpO1xcbitcXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0ZXJyID0gbnJfcmVzdjtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgZ2ZwX21hc2spO1xcbiBcXHRcXHRpZiAoZm9saW8pIHtcXG4tXFx0XFx0XFx0dTMyIGhhc2g7XFxuLVxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4gXFx0XFx0XFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xcbkBAIC0xMTIsMjAgKzEyMSw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIFxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XFxuLVxcdFxcdFxcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXFxuLVxcdFxcdFxcdCAqIGNhbGxlcnMgb2YgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xcbi1cXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG4tXFxuIFxcdFxcdFxcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdG1lbWZkLVxcdTAwM2VmX21hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlkeCk7XFxuLVxcbi1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbi1cXG4gXFx0XFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl91bnJlc3Y7XFxuQEAgLTEzMywxMSArMTMxLDE0IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4gXFxuIFxcdFxcdFxcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcXG4gXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbiBcXHRcXHR9XFxuIGVycl91bnJlc3Y6XFxuIFxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2UgMClcXG4gXFx0XFx0XFx0aHVnZXRsYl91bnJlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgMCk7XFxuK291dF91bmxvY2s6XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdH1cXG4gI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjI2LjAzNjAyNjI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MzQyNjAxMDk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1GRF9DUkVBVEVcIixcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiVURNQUJVRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gbG9ja2luZyBpbiBtZW1mZF9hbGxvY19mb2xpbygpIHdpdGhpbiBtbS9tZW1mZC5jLCBleHBhbmRpbmcgdGhlIGh1Z2V0bGJfZmF1bHRfbXV0ZXggbG9jayBzY29wZSBhY3Jvc3MgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKCkgYW5kIGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpLiBUaGlzIHJlYWNoYWJsZSBtbSBwYXRoIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQikgY29tYmluZWQgd2l0aCB1ZG1hYnVmIG9yIGlvbW11ZmQgcGluIG9wZXJhdGlvbnMgKG1lbWZkX3Bpbl9mb2xpb3MpLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbG9ja2luZywgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGRjYjA3Nzc2YTM1MTlhMjg4ZmM5OTNkMzhiNDc0ZDQ3YTNhNThiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuY1xuaW5kZXggYzcwOGQ5MjUzM2Y0YS4uMGY2ZmZmMDA0ZjVlNCAxMDA2NDRcbi0tLSBhL21tL21lbWZkLmNcbisrKyBiL21tL21lbWZkLmNcbkBAIC04MiwyMiArODIsMzEgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuIFx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUobWVtZmQpO1xuIFx0XHRpbnQgZXJyID0gLUVOT01FTTtcbiBcdFx0bG9uZyBucl9yZXN2O1xuK1x0XHR1MzIgaGFzaDtcbiBcbiBcdFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4gXHRcdGdmcF9tYXNrIFx1MDAyNj0gfihfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSk7XG4gXHRcdGlkeCBcdTAwM2VcdTAwM2U9IGh1Z2VfcGFnZV9vcmRlcihoKTtcbiBcbitcdFx0LypcbitcdFx0ICogU2VyaWFsaXplIGh1Z2VwYWdlIGFsbG9jYXRpb24gYW5kIGluc3RhbnRpYXRpb24gdG8gcHJldmVudFxuK1x0XHQgKiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMsIGFzIHJlcXVpcmVkIGJ5IGFsbCBvdGhlclxuK1x0XHQgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS5cbitcdFx0ICovXG4rXHRcdGhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2gobWVtZmQtXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuK1xuIFx0XHRucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XG4tXHRcdGlmIChucl9yZXN2IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBFUlJfUFRSKG5yX3Jlc3YpO1xuK1x0XHRpZiAobnJfcmVzdiBcdTAwM2MgMCkge1xuK1x0XHRcdGVyciA9IG5yX3Jlc3Y7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHR9XG4gXG4gXHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG4gXHRcdFx0XHRcdFx0ICAgIG51bWFfbm9kZV9pZCgpLFxuIFx0XHRcdFx0XHRcdCAgICBOVUxMLFxuIFx0XHRcdFx0XHRcdCAgICBnZnBfbWFzayk7XG4gXHRcdGlmIChmb2xpbykge1xuLVx0XHRcdHUzMiBoYXNoO1xuLVxuIFx0XHRcdC8qXG4gXHRcdFx0ICogWmVybyB0aGUgZm9saW8gdG8gcHJldmVudCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuXG4gXHRcdFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xuQEAgLTExMiwyMCArMTIxLDkgQEAgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuIFx0XHRcdCAqL1xuIFx0XHRcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XG4tXHRcdFx0ICogcmFjZXMgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb25zLCBhcyByZXF1aXJlZCBieSBhbGwgb3RoZXJcbi1cdFx0XHQgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRoYXNoID0gaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKG1lbWZkLVx1MDAzZWZfbWFwcGluZywgaWR4KTtcbi1cdFx0XHRtdXRleF9sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuLVxuIFx0XHRcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXG4gXHRcdFx0XHRcdFx0XHRtZW1mZC1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0XHRcdFx0XHRpZHgpO1xuLVxuLVx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbi1cbiBcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdFx0Z290byBlcnJfdW5yZXN2O1xuQEAgLTEzMywxMSArMTMxLDE0IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcbiBcdFx0XHRodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzdWJwb29sX2lub2RlKGlub2RlKSk7XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuIFx0XHR9XG4gZXJyX3VucmVzdjpcbiBcdFx0aWYgKG5yX3Jlc3YgXHUwMDNlIDApXG4gXHRcdFx0aHVnZXRsYl91bnJlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgMCk7XG4rb3V0X3VubG9jazpcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTA6MjYuMDM2MDI4NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjI1NDIzNjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uIGZvciBTeXprYWxsZXIgRnV6emluZzogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggZm9yIHVzZSB3aXRoIHN5emthbGxlci4gRmlyc3QgdGhpbmdzIGZpcnN0OiBzYWZldHkgYW5kIHBvbGljeSBhcmUgcGFyYW1vdW50LiBUaGlzIGlzIHN0YW5kYXJkIHNvZnR3YXJlIG1haW50ZW5hbmNlLCBhIHBhdGNoIGFuYWx5c2lzIGZvciBMaW51eCBrZXJuZWwgZnV6emluZy4gTm8gcmVkIGZsYWdzLCBub3RoaW5nIGV4cGxvaXRhdGl2ZSByZXF1ZXN0ZWQsIHNvIHdlIGNhbiBwcm9jZWVkIHNhZmVseS4gTm8gaW1tZWRpYXRlIGNvbmNlcm5zIHRoZXJlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgdGVjaG5pY2FsIGRldGFpbHMuIEknbGwgbmVlZCB0byBpbnNwZWN0IHRoZSBwYXRjaCBpdHNlbGYgYW5kIGxldmVyYWdlIHRoZSB1c3VhbCB0b29scyBmb3IgY29kZSBhbmFseXNpcy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgZm9jdXNlZCBvbiBgbW0vbWVtZmQuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1lbWZkX2FsbG9jX2ZvbGlvYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgZXhwYW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF1gIGxvY2sgYWNyb3NzIGNhbGxzIHRvIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlYCwgdGhlIGZvbGlvIHplcm9pbmcsIGFuZCB0aGUgYWRkaXRpb24gdG8gdGhlIHBhZ2UgY2FjaGUuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NrIGV4cGFuc2lvbi4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCBjYWxsZXJzIG9mIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGV4YW1pbmUgcmVsYXRlZCBjb2RlIHBhdGhzIGFuZCBjb25maWd1cmF0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gY29uY3VycmVuY3ksIHBlcmZvcm1hbmNlLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGZ1enppbmcgZWZmZWN0aXZlbmVzcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbG9jayBzY29wZSBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBib3R0bGVuZWNrcyBvciwgd29yc2UsIHBvdGVudGlhbCBkZWFkbG9ja3MgdGhhdCBjb3VsZCBoaW5kZXIgZnV6emluZy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjQyLjI5MDI2NzU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTQxMDAyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1mZC5oPTEwPWV4dGVybiBsb25nIG1lbWZkX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgYXJnKTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MTE6c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KTtcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMTItLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaD0yND1zdGF0aWMgaW5saW5lIGxvbmcgbWVtZmRfZmNudGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjLCB1bnNpZ25lZCBpbnQgYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yNy19XFxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjI4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0yOS17XFxuLS1cXG5tbS9ndXAuYz0zNDQ1PWxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tLVxcbm1tL2d1cC5jLTM1MjAtXFx0XFx0XFx0aWYgKCFucl9mb3VuZCkge1xcbm1tL2d1cC5jOjM1MjE6XFx0XFx0XFx0XFx0Zm9saW8gPSBtZW1mZF9hbGxvY19mb2xpbyhtZW1mZCwgc3RhcnRfaWR4KTtcXG5tbS9ndXAuYy0zNTIyLVxcdFxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02Ny0gKi9cXG5tbS9tZW1mZC5jOjY4OnN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG5tbS9tZW1mZC5jLTY5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTA6NDQuNTg0Mzc1NDU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4OTA4MDczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uIHdpdGggbWVtZmQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiBgbWVtZmRgIGltcGxlbWVudGF0aW9uLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB3ZSdyZSBtYW5hZ2luZyBtZW1vcnkgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGFuZCBwaW5uZWQsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZTogYG1tL21lbWZkLmNgIGFuZCBgbW0vZ3VwLmNgLiBTcGVjaWZpY2FsbHksIEknbSB6b25pbmcgaW4gb24gYG1lbWZkX2FsbG9jX2ZvbGlvYCBhbmQgYG1lbWZkX3Bpbl9mb2xpb3NgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGFsbG9jYXRpb24gYW5kIHBpbm5pbmcgbWVjaGFuaXNtcywgYW5kIEkgc3VzcGVjdCB0aGV5J2xsIHJldmVhbCB0aGUgY29yZSBsb2dpYyBJJ20gYWZ0ZXIuIEknbSBrZWVuIHRvIHRyYWNlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXRocyDigJMgaG93IHRoZSBrZXJuZWwgY2hvb3NlcyBhbmQgcmVzZXJ2ZXMgcGFnZXMgKG9yIGZvbGlvcykgZm9yIGBtZW1mZGAgb2JqZWN0cywgYW5kIGV4YWN0bHkgKmhvdyogYW5kICp3aGVuKiB0aGVzZSBwYWdlcyBhcmUgcGlubmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucywgcmVmZXJlbmNlIGNvdW50cywgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEknbGwgYmUgbG9va2luZyBmb3Igb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLCBhbmQgd2hldGhlciB3ZSdyZSBzZWVpbmcgYW55IHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBgbWVtZmRgIHVzYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjQ2Ljk3MzQ1ODA5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWZkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0fVxcbiAgNjE6XFx0XFxuICA2MjpcXHQvKlxcbiAgNjM6XFx0ICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IG1lbWZkX3Bpbl91c2VyX3BhZ2VzKCkgaW4gR1VQIChndXAuYykuXFxuICA2NDpcXHQgKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcXG4gIDY1OlxcdCAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxcbiAgNjY6XFx0ICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXFxuICA2NzpcXHQgKi9cXG4gIDY4OlxcdHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcXG4gIDY5OlxcdHtcXG4gIDcwOlxcdCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuICA3MTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAgNzI6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2s7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdGlmIChpc19maWxlX2h1Z2VwYWdlcyhtZW1mZCkpIHtcXG4gIDc1OlxcdFxcdFxcdC8qXFxuICA3NjpcXHRcXHRcXHQgKiBUaGUgZm9saW8gd291bGQgbW9zdCBsaWtlbHkgYmUgYWNjZXNzZWQgYnkgYSBETUEgZHJpdmVyLFxcbiAgNzc6XFx0XFx0XFx0ICogdGhlcmVmb3JlLCB3ZSBoYXZlIHpvbmUgbWVtb3J5IGNvbnN0cmFpbnRzIHdoZXJlIHdlIGNhblxcbiAgNzg6XFx0XFx0XFx0ICogYWxsb2MgZnJvbS4gQWxzbywgdGhlIGZvbGlvIHdpbGwgYmUgcGlubmVkIGZvciBhbiBpbmRlZmluaXRlXFxuICA3OTpcXHRcXHRcXHQgKiBhbW91bnQgb2YgdGltZSwgc28gaXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG1pZ3JhdGVkIGF3YXkuXFxuICA4MDpcXHRcXHRcXHQgKi9cXG4gIDgxOlxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKG1lbWZkKTtcXG4gIDgyOlxcdFxcdFxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShtZW1mZCk7XFxuICA4MzpcXHRcXHRcXHRpbnQgZXJyID0gLUVOT01FTTtcXG4gIDg0OlxcdFxcdFxcdGxvbmcgbnJfcmVzdjtcXG4gIDg1OlxcdFxcdFxcdHUzMiBoYXNoO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRcXHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4gIDg4OlxcdFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUpO1xcbiAgODk6XFx0XFx0XFx0aWR4IFxcdTAwM2VcXHUwMDNlPSBodWdlX3BhZ2Vfb3JkZXIoaCk7XFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdFxcdC8qXFxuICA5MjpcXHRcXHRcXHQgKiBTZXJpYWxpemUgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiB0byBwcmV2ZW50XFxuICA5MzpcXHRcXHRcXHQgKiByYWNlcyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMsIGFzIHJlcXVpcmVkIGJ5IGFsbCBvdGhlclxcbiAgOTQ6XFx0XFx0XFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXFxuICA5NTpcXHRcXHRcXHQgKi9cXG4gIDk2OlxcdFxcdFxcdGhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2gobWVtZmQtXFx1MDAzZWZfbWFwcGluZywgaWR4KTtcXG4gIDk3OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRcXHRucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIE5VTEwsIEVNUFRZX1ZNQV9GTEFHUyk7XFxuIDEwMDpcXHRcXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNjIDApIHtcXG4gMTAxOlxcdFxcdFxcdFxcdGVyciA9IG5yX3Jlc3Y7XFxuIDEwMjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDEwMzpcXHRcXHRcXHR9XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxuIDEwNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCxcXG4gMTA4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzayk7XFxuIDEwOTpcXHRcXHRcXHRpZiAoZm9saW8pIHtcXG4gMTEwOlxcdFxcdFxcdFxcdC8qXFxuIDExMTpcXHRcXHRcXHRcXHQgKiBaZXJvIHRoZSBmb2xpbyB0byBwcmV2ZW50IGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cXG4gMTEyOlxcdFxcdFxcdFxcdCAqIFVzZSBmb2xpb196ZXJvX3VzZXIoKSB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGh1Z2UvZ2lnYW50aWNcXG4gMTEzOlxcdFxcdFxcdFxcdCAqIHBhZ2VzLiBQYXNzIDAgYXMgYWRkcl9oaW50IHNpbmNlIHRoaXMgaXMgbm90IGEgZmF1bHRpbmcgcGF0aFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICogIGFuZCB3ZSBkb24ndCBoYXZlIGEgdXNlciB2aXJ0dWFsIGFkZHJlc3MgeWV0LlxcbiAxMTU6XFx0XFx0XFx0XFx0ICovXFxuIDExNjpcXHRcXHRcXHRcXHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApO1xcbiAxMTc6XFx0XFxuIDExODpcXHRcXHRcXHRcXHQvKlxcbiAxMTk6XFx0XFx0XFx0XFx0ICogTWFyayB0aGUgZm9saW8gdXB0b2RhdGUgYmVmb3JlIGFkZGluZyB0byBwYWdlIGNhY2hlLFxcbiAxMjA6XFx0XFx0XFx0XFx0ICogYXMgcmVxdWlyZWQgYnkgZmlsZW1hcC5jIGFuZCBvdGhlciBodWdldGxiIHBhdGhzLlxcbiAxMjE6XFx0XFx0XFx0XFx0ICovXFxuIDEyMjpcXHRcXHRcXHRcXHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHRcXHRcXHRlcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLFxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWVtZmQtXFx1MDAzZWZfbWFwcGluZyxcXG4gMTI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlkeCk7XFxuIDEyNzpcXHRcXHRcXHRcXHRpZiAoZXJyKSB7XFxuIDEyODpcXHRcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiAxMjk6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfdW5yZXN2O1xcbiAxMzA6XFx0XFx0XFx0XFx0fVxcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRcXHRcXHRodWdldGxiX3NldF9mb2xpb19zdWJwb29sKGZvbGlvLCBzdWJwb29sX2lub2RlKGlub2RlKSk7XFxuIDEzMzpcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiAxMzQ6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG4gMTM1OlxcdFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4gMTM2OlxcdFxcdFxcdH1cXG4gMTM3OlxcdGVycl91bnJlc3Y6XFxuIDEzODpcXHRcXHRcXHRpZiAobnJfcmVzdiBcXHUwMDNlIDApXFxuIDEzOTpcXHRcXHRcXHRcXHRodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggKyAxLCAwKTtcXG4gMTQwOlxcdG91dF91bmxvY2s6XFxuIDE0MTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbiAxNDI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gMTQzOlxcdFxcdH1cXG4gMTQ0OlxcdCNlbmRpZlxcbiAxNDU6XFx0XFx0cmV0dXJuIHNobWVtX3JlYWRfZm9saW8obWVtZmQtXFx1MDAzZWZfbWFwcGluZywgaWR4KTtcXG4gMTQ2OlxcdH1cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0LypcXG4gMTQ5OlxcdCAqIFNldHRpbmcgU0VBTF9XUklURSByZXF1aXJlcyB1cyB0byB2ZXJpZnkgdGhlcmUncyBubyBwZW5kaW5nIHdyaXRlci4gSG93ZXZlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTA6NDYuOTczNTM3Njg3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1MDQyMjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgRm9vdHN0ZXBzIG9mIGBtZW1mZF9waW5fZm9saW9zYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYG1lbWZkX3Bpbl9mb2xpb3NgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZCBmcm9tIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbT8gSXMgaXQgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgb3IgaXMgaXQgdXNlZCBpbiBzb21lIHNwZWNpZmljIHN1YnN5c3RlbT8gSSB3YW50IHRvIHNlZSB3aGF0IGl0cyByb2xlIGlzLCBob3cgaXQncyBiZWluZyB1c2VkLCBhbmQgd2hhdCBjb250ZXh0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGggc2hvdWxkIGdpdmUgbWUgc29tZSBnb29kIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgcmFiYml0IGhvbGUgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjQ4LjgyMzk2MjAzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ5MjE5MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX3Bpbl9mb2xpb3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0zMDQ9c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cXHRlbmQgPSBzdGFydCArIChwZ2NudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSAtIDE7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XFx0bnJfZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyhtZW1mZCwgc3RhcnQsIGVuZCwgZm9saW9zLCBwZ2NudCwgXFx1MDAyNnBnb2ZmKTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cXHRpZiAobnJfZm9saW9zIFxcdTAwM2M9IDApXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzNy1cXHRcXHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzM4OlxcdFxcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM5LVxcdFxcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM0LVxcdC8qXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1OlxcdCAqIHRvZG86IG1lbWZkX3Bpbl9mb2xpb3Mgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBwaW5uZWQgb2Zmc2V0IHNvXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVxcdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4Mzk6XFx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cXHUwMDNldWZvbGlvcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXFx0XFx0XFx0XFx0ICAgbmZvbGlvcywgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzM2MD1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzNjEtXFx0XFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMzYyOmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzM2My1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcXG4tLVxcbm1tL2d1cC5jLTE5NS0gKlxcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcXG5tbS9ndXAuYy0xOTctICogbXVzdCBiZSByZWxlYXNlZCBlaXRoZXIgdXNpbmcgdW5waW5fZm9saW8oKSBvciB1bnBpbl9mb2xpb3MoKS5cXG4tLVxcbm1tL2d1cC5jPTM0MTc9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XFxuLS1cXG5tbS9ndXAuYy0zNDE5LS8qKlxcbm1tL2d1cC5jOjM0MjA6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxcbm1tL2d1cC5jLTM0MjEtICogQG1lbWZkOiAgICAgIHRoZSBtZW1mZCB3aG9zZSBmb2xpb3MgYXJlIHRvIGJlIHBpbm5lZFxcbi0tXFxubW0vZ3VwLmMtMzQ0NC0gKi9cXG5tbS9ndXAuYzozNDQ1OmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5tbS9ndXAuYy0zNDQ2LVxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0zNTQxLX1cXG5tbS9ndXAuYzozNTQyOkVYUE9SVF9TWU1CT0xfR1BMKG1lbWZkX3Bpbl9mb2xpb3MpO1xcbm1tL2d1cC5jLTM1NDMtXFxuLS1cXG5tbS9ndXAuYy0zNTUzLSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBvYnRhaW5lZCBhIHBpbiBvbiBhIGxhcmdlIGZvbGlvXFxubW0vZ3VwLmM6MzU1NDogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xcbm1tL2d1cC5jLTM1NTUtICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02NC0gKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxcbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXFxuLS1cXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy0xMjktXFx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcXG5tbS9tZW1mZF9sdW8uYzoxMzA6XFx0ICogbWVtZmRfcGluX2ZvbGlvcygpIHZhcmlhbnQgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHBhZ2Ugb24gZW1wdHlcXG5tbS9tZW1mZF9sdW8uYy0xMzEtXFx0ICogc2xvdHMuXFxubW0vbWVtZmRfbHVvLmMtMTMyLVxcdCAqL1xcbm1tL21lbWZkX2x1by5jOjEzMzpcXHRucl9waW5uZWQgPSBtZW1mZF9waW5fZm9saW9zKGZpbGUsIDAsIHNpemUgLSAxLCBmb2xpb3MsIG1heF9mb2xpb3MsXFxubW0vbWVtZmRfbHVvLmMtMTM0LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMjkxLVxcdC8qXFxubW0vbWVtZmRfbHVvLmM6MjkyOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxcbm1tL21lbWZkX2x1by5jLTI5My1cXHQgKiBmaWxlcyB0byBhdm9pZCBzaWxlbnRseSBwcmVzZXJ2aW5nIG9ubHkgYSBwcmVmaXguXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjEwOjUxLjE3MzE4NjMxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NjkzMTA4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgRXZhbHVhdGlvbjogbWVtZmQgd2l0aCBodWdldGxiIGFuZCB1ZG1hYnVmL2lvbW11ZmQqKlxuXG5Pa2F5LCBsZXQncyBzZWUgaWYgdGhpcyBgbWVtZmRgL2h1Z2V0bGIvdWRtYWJ1ZiBzaXR1YXRpb24gaXMgd29ydGggZGlnZ2luZyBpbnRvIGZvciBmdXp6aW5nLiAgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgdWRtYWJ1ZmAgYW5kIGBpb21tdWZkYCBtaWdodCBpbnRlcmFjdCB3aXRoIGEgYG1lbWZkX2NyZWF0ZWAgY2FsbCB1c2luZyBgTUZEX0hVR0VUTEJgLiAgQ2FuIHVzZXJzcGFjZSBsZXZlcmFnZSBgbWVtZmRfY3JlYXRlYCB0byBjcmVhdGUgYSBodWdlIHBhZ2UgYmFja2VkIG1lbW9yeSByZWdpb24gYW5kIHRoZW4gdXNlIGB1ZG1hYnVmYCAodmlhIGAvZGV2L3VkbWFidWZgIGFuZCBpdHMgaW9jdGxzLCBzcGVjaWZpY2FsbHkgYFVETUFCVUZfQ1JFQVRFYCBvciBgVURNQUJVRl9DUkVBVEVfTElTVGApIG9yIGBpb21tdWZkYCAod2l0aCBgSU9NTVVfSU9BU19NQVBfRklMRWAgb3Igc2ltaWxhcikgdG8gaW50ZXJmYWNlIHdpdGggaXQ/ICBUaGUgZmFjdCB0aGF0IGB1ZG1hYnVmYCBpcyBhIG1pc2MgZGV2aWNlIGFuZCBhbHJlYWR5IGhlYXZpbHkgZnV6emVkIGJ5IHN5emthbGxlciBpcyBhIGdvb2Qgc2lnbi5cblxuQWxyaWdodCwgbm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkLiBUaGUga2V5IGFyZWEgaXMgY2xlYXJseSBgbW0vbWVtZmQuY2AuICBMb29raW5nIGF0IHRoZSBjb21taXQgaGlzdG9yeSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbWVtZmRfYWxsb2NfZm9saW9gLiAgUHJldmlvdXNseSwgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpYCB3ZXJlIGNhbGxlZCAqb3V0c2lkZSogdGhlIGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdYCBtdXRleC4gIFRoZSBtdXRleCB3YXMgb25seSBhY3F1aXJlZCBhcm91bmQgYGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKWAuICBOb3csIHBvc3QtcGF0Y2gsIHRoZSBtdXRleCBpcyBhY3F1aXJlZCAqYmVmb3JlKiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBoZWxkIGFsbCB0aGUgd2F5IHRocm91Z2ggYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpYCwgYGZvbGlvX3plcm9fdXNlcigpYCwgYF9fZm9saW9fbWFya191cHRvZGF0ZSgpYCwgYGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKWAsIGFuZCBgaHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbCgpYC4gSXQncyB1bmxvY2tlZCBvbiBlcnJvciBvciBzdWNjZXNzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgaW1wYWN0aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGggZm9yIG1lbWZkIHdpdGggaHVnZXRsYi5cblxuVGhpcyBzY3JlYW1zIGZ1enppbmcgdGFyZ2V0IHRvIG1lISAgSXQncyBpbiB0aGUgYG1tL2AgY29yZSBzdWJzeXN0ZW0sIHNvIGFueSBtZW1vcnkgbWFuYWdlbWVudCBidWcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LCBJdCBpbnZvbHZlcyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcsIHdoaWNoIGFyZSBhbHdheXMgcHJpbWUgdGFyZ2V0cyBmb3IgZmluZGluZyByYWNlIGNvbmRpdGlvbnMsIGFuZCBpdCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBtZW1mZF9jcmVhdGVgIHN5c2NhbGwgd2l0aCBgdWRtYWJ1ZmAgYW5kL29yIGBpb21tdWZkYCBpb2N0bHMuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSBuZWVkIHRvIGNoZWNrIGBtbS9tZW1mZC5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyaWVzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb3B0aW9ucywgbGlrZSBgSFVHRVRMQl9QQUdFYCwgYFVETUFCVUZgLCBhbmQgdGhlIGNvcmUgYG1lbWZkYCBmdW5jdGlvbmFsaXR5IGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgd2hvbGUgc2hlYmFuZy4gIE9uY2UgSSBrbm93IHRoZSBjb25maWd1cmF0aW9ucywgSSBjYW4gYmUgc3VyZSB0byBpbmNsdWRlIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4OTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTA6NTYuNjQyNTAxNTk4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDk4MDQ3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0hVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODU9ZW5kaWZcXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXFx0Kz0gaHVnZXRsYl92bWVtbWFwLm9cXG5tbS9NYWtlZmlsZS04Ny1vYmotJChDT05GSUdfTlVNQSkgXFx0Kz0gbWVtcG9saWN5Lm9cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjU4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjg0LVxcbm1tL2RhbW9uL3ZhZGRyLmM6Mjg1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vZGFtb24vdmFkZHIuYy0yODYtc3RhdGljIHZvaWQgZGFtb25faHVnZXRsYl9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MzEzPXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0zMzMtI2RlZmluZSBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5IE5VTExcXG5tbS9kYW1vbi92YWRkci5jOjMzNDojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmMtMzM1LVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0zNzk9c3RhdGljIGludCBkYW1vbl95b3VuZ19wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy00MjQtXFxubW0vZGFtb24vdmFkZHIuYzo0MjU6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9kYW1vbi92YWRkci5jLTQyNi1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNDU1LSNkZWZpbmUgZGFtb25feW91bmdfaHVnZXRsYl9lbnRyeSBOVUxMXFxubW0vZGFtb24vdmFkZHIuYzo0NTY6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5tbS9kYW1vbi92YWRkci5jLTQ1Ny1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz04NDQ9c3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODgzLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4ODQ6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODg1LXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODk5LX1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTAwOiNlbHNlICAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDEtc3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjkwMjojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXFxuLS1cXG5tbS9obW0uYz00OTE9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcHVkKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL2htbS5jLTU0OC1cXG5tbS9obW0uYzo1NDk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9obW0uYy01NTAtc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbi0tXFxubW0vaG1tLmMtNTg4LSNkZWZpbmUgaG1tX3ZtYV93YWxrX2h1Z2V0bGJfZW50cnkgTlVMTFxcbm1tL2htbS5jOjU4OTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL2htbS5jLTU5MC1cXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTM3Mj1zdGF0aWMgaW50IHZtZW1tYXBfcmVtYXBfYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0zODctXFxubW0vaHVnZXRsYl92bWVtbWFwLmM6Mzg4OnN0YXRpYyBib29sIHZtZW1tYXBfb3B0aW1pemVfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT04pO1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jLTM4OS1zdGF0aWMgaW50IF9faW5pdCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfcGFyYW0oY2hhciAqYnVmKVxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmgtMTktXFxubW0vaHVnZXRsYl92bWVtbWFwLmg6MjA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5oLTIxLWludCBodWdldGxiX3ZtZW1tYXBfcmVzdG9yZV9mb2xpbyhjb25zdCBzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5oPTc5PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfYm9vdG1lbV9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9odWdldGxiX3ZtZW1tYXAuaC04MS19XFxubW0vaHVnZXRsYl92bWVtbWFwLmg6ODI6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCAqL1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5oLTgzLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQzMS1cXHRQR1JFRklMTCxcXG5tbS9tZW1jb250cm9sLmM6NDMyOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTQzMy1cXHROUl9IVUdFVExCLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjI0LVxcdHsgXFxcInNsYWJfdW5yZWNsYWltYWJsZVxcXCIsXFx0XFx0TlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0JcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNjI1OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE2MjYtXFx0eyBcXFwiaHVnZXRsYlxcXCIsXFx0XFx0XFx0TlJfSFVHRVRMQlxcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTcxOT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTcyNS1cXG5tbS9tZW1jb250cm9sLmM6MTcyNjojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbWNvbnRyb2wuYy0xNzI3LXN0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2h1Z2V0bGIodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzMwLX1cXG5tbS9tZW1jb250cm9sLmM6MTczMTojZWxzZSAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vbWVtY29udHJvbC5jLTE3MzItc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfaHVnZXRsYih2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MzUtfVxcbm1tL21lbWNvbnRyb2wuYzoxNzM2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vbWVtY29udHJvbC5jLTE3MzctXFxubW0vbWVtY29udHJvbC5jPTE3Mzg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzU2LVxcbm1tL21lbWNvbnRyb2wuYzoxNzU3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWVtY29udHJvbC5jLTE3NTgtXFx0XFx0aWYgKHVubGlrZWx5KG1lbW9yeV9zdGF0c1tpXS5pZHggPT0gTlJfSFVHRVRMQikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbm1tL21lbWZkLmMtNjkte1xcbm1tL21lbWZkLmM6NzA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1mZC5jLTcxLVxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTc0MD1zdGF0aWMgaW50IGh3cG9pc29uX3B0ZV9yYW5nZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy03NzEtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo3NzI6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc3My1zdGF0aWMgaW50IGh3cG9pc29uX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4NjI9RVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODY0LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg2NTojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg2Ni1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjE1OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZmxhZylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2Mi19XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTYzOiNlbmRpZlxcdC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNjQtXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz03OTM9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNzk2LXtcXG5tbS9tZW1wb2xpY3kuYzo3OTc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tZW1wb2xpY3kuYy03OTgtXFx0c3RydWN0IHF1ZXVlX3BhZ2VzICpxcCA9IHdhbGstXFx1MDAzZXByaXZhdGU7XFxuLS1cXG5tbS9taWdyYXRlLmM9MzUxPXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtNDI1LVxcbm1tL21pZ3JhdGUuYzo0MjY6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9taWdyYXRlLmMtNDI3LVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuLS1cXG5tbS9taWdyYXRlLmM9NDkzPXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9taWdyYXRlLmMtNTIwLVxcbm1tL21pZ3JhdGUuYzo1MjE6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9taWdyYXRlLmMtNTIyLS8qXFxuLS1cXG5tbS9taW5jb3JlLmM9Mjc9c3RhdGljIGludCBtaW5jb3JlX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWluY29yZS5jLTI5LXtcXG5tbS9taW5jb3JlLmM6MzA6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9taW5jb3JlLmMtMzEtXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBuciA9IChlbmQgLSBhZGRyKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxubW0vbW1faW5pdC5jPTE0ODM9c3RhdGljIGlubGluZSB2b2lkIHNldHVwX3VzZW1hcChzdHJ1Y3Qgem9uZSAqem9uZSkge31cXG4tLVxcbm1tL21tX2luaXQuYy0xNDg1LVxcbm1tL21tX2luaXQuYzoxNDg2OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9tbV9pbml0LmMtMTQ4Ny1cXG4tLVxcbm1tL21tX2luaXQuYz0xNDg5PXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfcGFnZWJsb2NrX29yZGVyKHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTUwNi19XFxubW0vbW1faW5pdC5jOjE1MDc6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFICovXFxubW0vbW1faW5pdC5jLTE1MDgtXFxubW0vbW1faW5pdC5jLTE1MDktLypcXG5tbS9tbV9pbml0LmM6MTUxMDogKiBXaGVuIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRSBpcyBub3Qgc2V0LCBzZXRfcGFnZWJsb2NrX29yZGVyKClcXG5tbS9tbV9pbml0LmMtMTUxMS0gKiBpcyB1bnVzZWQgYXMgcGFnZWJsb2NrX29yZGVyIGlzIHNldCBhdCBjb21waWxlLXRpbWUuIFNlZVxcbi0tXFxubW0vbW1faW5pdC5jPTE1MTU9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzZXRfcGFnZWJsb2NrX29yZGVyKHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTUxOC1cXG5tbS9tbV9pbml0LmM6MTUxOTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFICovXFxubW0vbW1faW5pdC5jLTE1MjAtXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTczMD1zdGF0aWMgaW50IHByb3Rfbm9uZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbXByb3RlY3QuYy03MzctXFxubW0vbXByb3RlY3QuYzo3Mzg6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9tcHJvdGVjdC5jLTczOS1zdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MjA5PWdmcF90IGdmcF9hbGxvd2VkX21hc2sgX19yZWFkX21vc3RseSA9IEdGUF9CT09UX01BU0s7XFxubW0vcGFnZV9hbGxvYy5jLTIxMC1cXG5tbS9wYWdlX2FsbG9jLmM6MjExOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9wYWdlX2FsbG9jLmMtMjEyLXVuc2lnbmVkIGludCBwYWdlYmxvY2tfb3JkZXIgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMDczPXN0YXRpYyBpbnQgZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqaGVhZF9wYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMTM5LVxcdFxcdC8qIHRoZSB0aGlyZCB0YWlsIHBhZ2U6IGh1Z2V0bGIgc3BlY2lmaWNzIG92ZXJsYXAgLVxcdTAwM2VtYXBwaW5ncyAqL1xcbm1tL3BhZ2VfYWxsb2MuYzoxMTQwOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0UpKVxcbm1tL3BhZ2VfYWxsb2MuYy0xMTQxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcGFnZXdhbGsuYz0yODY9c3RhdGljIGludCB3YWxrX3BnZF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZXdhbGsuYy0zMjYtXFxubW0vcGFnZXdhbGsuYzozMjc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9wYWdld2Fsay5jLTMyOC1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2VudHJ5X2VuZChzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9wYWdld2Fsay5jPTMzNj1zdGF0aWMgaW50IHdhbGtfaHVnZXRsYl9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZXdhbGsuYy0zNjMtXFxubW0vcGFnZXdhbGsuYzozNjQ6I2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL3BhZ2V3YWxrLmMtMzY1LXN0YXRpYyBpbnQgd2Fsa19odWdldGxiX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTM3MC1cXG5tbS9wYWdld2Fsay5jOjM3MTojZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqL1xcbm1tL3BhZ2V3YWxrLmMtMzcyLVxcbi0tXFxubW0vcm1hcC5jPTMxNTk9dm9pZCBybWFwX3dhbGtfbG9ja2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCAqcndjKVxcbi0tXFxubW0vcm1hcC5jLTMxNjgtXFxubW0vcm1hcC5jOjMxNjk6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS9ybWFwLmMtMzE3MC0vKlxcbi0tXFxubW0vcm1hcC5jPTMxODk9dm9pZCBodWdldGxiX2FkZF9uZXdfYW5vbl9ybWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtMzIwMS19XFxubW0vcm1hcC5jOjMyMDI6I2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi9cXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmM9MTc2PXN0YXRpYyB2b2lkICogX19tZW1pbml0IHZtZW1tYXBfYWxsb2NfYmxvY2tfemVybyh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy0xODYtXFxubW0vc3BhcnNlLXZtZW1tYXAuYzoxODc6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbm1tL3NwYXJzZS12bWVtbWFwLmMtMTg4LXN0YXRpYyBfX21lbWluaXQgc3RydWN0IHBhZ2UgKnZtZW1tYXBfZ2V0X3RhaWwodW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3NwYXJzZS5oLTEyLVxcbm1tL3NwYXJzZS5oOjEzOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5tbS9zcGFyc2UuaC0xNC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZWN0aW9uX29yZGVyKGNvbnN0IHN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbilcXG4tLVxcbm1tL3NwYXJzZS5oPTczPXN0YXRpYyBpbmxpbmUgYm9vbCB2bWVtbWFwX29wdGltaXphYmxlX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9zcGFyc2UuaC03NC17XFxubW0vc3BhcnNlLmg6NzU6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUCkpXFxubW0vc3BhcnNlLmgtNzYtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz03MDc9c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3BvaXNvbihzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy03NDMtXFxubW0vdXNlcmZhdWx0ZmQuYzo3NDQ6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG5tbS91c2VyZmF1bHRmZC5jLTc0NS0vKlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz03NTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy05MDctfVxcbm1tL3VzZXJmYXVsdGZkLmM6OTA4OiNlbHNlIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vdXNlcmZhdWx0ZmQuYy05MDktLyogZmFpbCBhdCBidWlsZCB0aW1lIGlmIGdjYyBhdHRlbXB0cyB0byB1c2UgdGhpcyAqL1xcbm1tL3VzZXJmYXVsdGZkLmM9OTEwPWV4dGVybiBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtOTE1LVxcdFxcdFxcdFxcdCAgICB1ZmZkX2ZsYWdzX3QgZmxhZ3MpO1xcbm1tL3VzZXJmYXVsdGZkLmM6OTE2OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vdXNlcmZhdWx0ZmQuYy05MTctXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTI1NTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgdWZmZF9tc2cgdXNlcmZhdWx0X21zZyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTI1ODktXFxubW0vdXNlcmZhdWx0ZmQuYzoyNTkwOiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vdXNlcmZhdWx0ZmQuYy0yNTkxLS8qXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTI2NDY9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX2h1Z2VfbXVzdF93YWl0KHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjY1My19XFxubW0vdXNlcmZhdWx0ZmQuYzoyNjU0OiNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yNjU1LVxcbi0tXFxubW0vdm1hbGxvYy5jPTk2PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xMjMtXFxubW0vdm1hbGxvYy5jOjEyNDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL3ZtYWxsb2MuYy0xMjUtXFx0XFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zODk9c3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM5OS1cXHRkbyB7XFxubW0vdm1hbGxvYy5jOjQwMDojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL3ZtYWxsb2MuYy00MDEtXFx0XFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZShhZGRyLCBwdGUpO1xcbi0tXFxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTEzMDYtXFx0W0koUEdSRUZJTEwpXVxcdFxcdFxcdFxcdD0gXFxcInBncmVmaWxsXFxcIixcXG5tbS92bXN0YXQuYzoxMzA3OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vdm1zdGF0LmMtMTMwOC1cXHRbSShOUl9IVUdFVExCKV1cXHRcXHRcXHRcXHQ9IFxcXCJucl9odWdldGxiXFxcIixcXG4tLVxcbm1tL3Ztc3RhdC5jLTEzOTYtXFxubW0vdm1zdGF0LmM6MTM5NzojaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbm1tL3Ztc3RhdC5jLTEzOTgtXFx0W0koSFRMQl9CVUREWV9QR0FMTE9DKV1cXHRcXHRcXHQ9IFxcXCJodGxiX2J1ZGR5X2FsbG9jX3N1Y2Nlc3NcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMDo1Ny40OTIzMTExNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg3MjI0OTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlOiBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBLY29uZmlnLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgZWFjaC4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3Igc3VidGxlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZW0uXG5cbk15IGdvYWwgaXNuJ3QganVzdCB0byBzZWUgaWYgdGhleSdyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlaXIgY3VycmVudCBzdGF0ZXMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zOyBpZiBgSFVHRVRMQkZTYCBpcyBlbmFibGVkLCBkb2VzIHRoYXQgbmVjZXNzaXRhdGUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIGBIVUdFVExCX1BBR0VgPyBDb252ZXJzZWx5LCB3aGF0IGhhcHBlbnMgd2hlbiBJJ20gZGVhbGluZyB3aXRoIGRpZmZlcmVudCBtZW1vcnkgYXJjaGl0ZWN0dXJlcz8gRG9lcyB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBkZXRlcm1pbmUgYW55dGhpbmcgaGVyZT8gSSdsbCBwcm9iYWJseSBiZSBjaGVja2luZyB0aGUgaGVscCB0ZXh0LCBsb29raW5nIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHVzZSBjYXNlIEknbSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gQW5kIEknbGwgYmUgcGFydGljdWxhcmx5IGtlZW4gdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGludGVycGxheSB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIGFuZCBhbnkgcG90ZW50aWFsIHVzZXItc3BhY2UgaW50ZXJmYWNlcy4gSXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIGRpZmZlcmVudCBOVU1BIGNvbmZpZ3VyYXRpb25zIHRvby4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIG9mZmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjAwLjM2NDU2NDc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2NTIwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxuZnMvS2NvbmZpZy0yODEtXFxuZnMvS2NvbmZpZzoyODI6Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbmZzL0tjb25maWctMjgzLVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTowMC41MzAyMjIyMzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0Mjg5Njg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVURNQUJVRiBVc2FnZSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gSSd2ZSBhbHJlYWR5IGV4cGxvcmVkIHRoZSBpbW1lZGlhdGUgYXJlYXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLiBJIHNob3VsZCB0aG9yb3VnaGx5IHNjcnV0aW5pemUgdGhlIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHBvaW50IGZvciBETUEgYnVmZmVyLXJlbGF0ZWQgZHJpdmVycywgc28gaXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBmaW5kIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb3IgcmVsYXRpb25zaGlwcyB3aXRoIGBVRE1BQlVGYC4gSSBhbHNvIG5lZWQgdG8gYmUgb24gdGhlIGxvb2tvdXQgZm9yIG90aGVyIGRyaXZlcnMgdGhhdCBtaWdodCBiZSBkaXJlY3RseSBjYWxsaW5nIG9yIHV0aWxpemluZyB0aGUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgc2FtZSBuYW1lc3BhY2UuIFwiT3RoZXIgY2FsbGVyc1wiIGlzIGtleSBoZXJlOyBpdCdzIGVhc3kgdG8gZm9jdXMgb24gdGhlIG9idmlvdXMgdGFyZ2V0IGFuZCBtaXNzIGluZGlyZWN0IHJlZmVyZW5jZXMuIFRoaXMgY291bGQgbWVhbiBhIG1vZHVsZSB0aGF0J3MgaW5kaXJlY3RseSB1dGlsaXppbmcgVURNQUJVRiB0aHJvdWdoIGFub3RoZXIgaW50ZXJmYWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IHNlYXJjaCBuZXQgaXMgd2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTowMi44NzMxMjE4NTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MjYzMzM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVURNQUJVRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJ1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTowMy44NDU3NTk3OTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE4MDk2MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWZkIEZvbGlvIEFsbG9jYXRpb24gYW5kIFBpbm5pbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgbWVtZmRfY3JlYXRlYCBhbmQgaXRzIHJlbGF0ZWQgZm9saW8gYWxsb2NhdGlvbiBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGBtZW1mZF9hbGxvY19mb2xpb2AuIEkgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uIGFuZCBzY29wZS4gWWVzLCBpdCdzIG5vbi1zdGF0aWMsIGRlZmluZWQgd2l0aGluIGBtbS9tZW1mZC5jYCwgYXMgYHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClgLiBBbmQsIGNyaXRpY2FsbHksIEkgc2VlIGBtZW1mZF9waW5fZm9saW9zKClgIGlzIGFsc28gaW52b2x2ZWQsIHJlc2lkaW5nIGluIGBtbS9ndXAuY2AuIEZ1cnRoZXIsIGB1ZG1hYnVmX3Bpbl9mb2xpb3MoKWAgaW4gYGRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmNgIGFsc28gc2VlbXMgbGlua2VkLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMg4oCTIGBtZW1mZF9hbGxvY19mb2xpb2AgYW5kIGBtZW1mZF9waW5fZm9saW9zYCDigJMgd2FycmFudCBiZWluZyBjb3JlIGZvY3VzIHN5bWJvbHMgZm9yIG15IGFuYWx5c2lzLiBBcmUgdGhleSB0cnVseSBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzPyBObywgaXQgbG9va3MgbGlrZSBgbWVtZmRfYWxsb2NfZm9saW9gIGlzIG9ubHkgY2FsbGVkIHdoZW4gd2UncmUgcGlubmluZyBmb2xpb3MgZm9yIGEgbWVtZmQgZmlsZSBkZXNjcmlwdG9yICh2aWEgYG1lbWZkX3Bpbl9mb2xpb3NgKS4gSSBhbHNvIHNlZSBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgb25seSBiZWluZyBjYWxsZWQgZnJvbSBjb250ZXh0cyBzdWNoIGFzIHVkbWFidWYgKGB1ZG1hYnVmX3Bpbl9mb2xpb3NgKSwgaW9tbXVmZCAoYHBpbl9tZW1mZF9wYWdlc2ApLCBhbmQgdGhlIGxpa2UuIFRoaXMgdGVsbHMgbWUgdGhlaXIgdXNhZ2UgaXMgbW9yZSB0YXJnZXRlZC5cblxuR2l2ZW4gdGhhdCwgSSBjYW4gY29uZmlybSB0aGUga2V5IGZ1bmN0aW9uIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggaXMsIGluIGZhY3QsIGBtZW1mZF9hbGxvY19mb2xpb2AuIEFuZCB0aGVyZWZvcmUsIG15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGFic29sdXRlbHkgZW5jb21wYXNzICpib3RoKiBgbWVtZmRfYWxsb2NfZm9saW9gIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AuXG5cbkZpbmFsbHksIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgRW5hYmxlQ29uZmlncy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBIVUdFVExCRlNgIGlzIGVuYWJsZWQgKGFuZCB0aHVzLCBgSFVHRVRMQl9QQUdFYCkgYWxvbmcgd2l0aCBgVURNQUJVRmAuIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGBNRU1GRF9DUkVBVEVgLCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Nzk2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjA4LjAyNjcyNjIxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMzQ4NjQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKk1FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9saXZldXBkYXRlL0tjb25maWc9NTI9Y29uZmlnIExJVkVVUERBVEVcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNzItXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo3Mzpjb25maWcgTElWRVVQREFURV9NRU1GRFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNzQtXFx0Ym9vbCBcXFwiTGl2ZSB1cGRhdGUgc3VwcG9ydCBmb3IgbWVtZmRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTEzMzM9Y29uZmlnIEtNQVBfTE9DQUxfTk9OX0xJTkVBUl9QVEVfQVJSQVlcXG4tLVxcbm1tL0tjb25maWctMTMzNS1cXG5tbS9LY29uZmlnOjEzMzY6Y29uZmlnIE1FTUZEX0NSRUFURVxcbm1tL0tjb25maWctMTMzNy1cXHRib29sIFxcXCJFbmFibGUgbWVtZmRfY3JlYXRlKCkgc3lzdGVtIGNhbGxcXFwiIGlmIEVYUEVSVFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTE6MTAuNDMwMjE4ODI1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTMyNjAxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBNRU1GRF9DUkVBVEVgIGluIGBtbS9LY29uZmlnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIGBNRU1GRF9DUkVBVEVgIOKAkyBhIGdvb2QgZmlyc3Qgc3RlcCwgb2J2aW91c2x5LCBpcyB0byBzZWUgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBob3cgaXTigJlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBtbS9LY29uZmlnYC4gSSBrbm93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbWApIGlzIHRoZSBsaWtlbHkgYXJlYSwgZ2l2ZW4gdGhlIG5hbWUuIEknbSBhbHJlYWR5IGVudmlzaW9uaW5nIHRoZSBLY29uZmlnIGZpbGUgc3RydWN0dXJlIGFuZCB0aGUgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgSSBzaG91bGQgZXhwZWN0IHRvIGZpbmQuIEknbSBhbnRpY2lwYXRpbmcgdGhpcyB3aWxsIHRlbGwgbWUgaWYgaXTigJlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdW5kZXIgd2hhdCBhcmNoaXRlY3R1cmUgb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgcG9zc2libHkgZXZlbiBnaXZlIHNvbWUgYnJpZWYgZG9jdW1lbnRhdGlvbi4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMToxMi40ODM0ODE4MzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzM1OlxcdFxcbjEzMzY6XFx0Y29uZmlnIE1FTUZEX0NSRUFURVxcbjEzMzc6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbWZkX2NyZWF0ZSgpIHN5c3RlbSBjYWxsXFxcIiBpZiBFWFBFUlRcXG4xMzM4OlxcdFxcbjEzMzk6XFx0Y29uZmlnIFNFQ1JFVE1FTVxcbjEzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuMTM0MTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtZmRfc2VjcmV0KCkgc3lzdGVtIGNhbGxcXFwiIGlmIEVYUEVSVFxcbjEzNDI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxcbjEzNDM6XFx0XFx0aGVscFxcbjEzNDQ6XFx0XFx0ICBFbmFibGUgdGhlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsIHdpdGggdGhlIGFiaWxpdHkgdG8gY3JlYXRlXFxuMTM0NTpcXHRcXHQgIG1lbW9yeSBhcmVhcyB2aXNpYmxlIG9ubHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG93bmluZyBwcm9jZXNzIGFuZFxcbjEzNDY6XFx0XFx0ICBub3QgbWFwcGVkIHRvIG90aGVyIHByb2Nlc3NlcyBhbmQgb3RoZXIga2VybmVsIHBhZ2UgdGFibGVzLlxcbjEzNDc6XFx0XFxuMTM0ODpcXHRjb25maWcgQU5PTl9WTUFfTkFNRVxcbjEzNDk6XFx0XFx0Ym9vbCBcXFwiQW5vbnltb3VzIFZNQSBuYW1lIHN1cHBvcnRcXFwiXFxuMTM1MDpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlMgXFx1MDAyNlxcdTAwMjYgQURWSVNFX1NZU0NBTExTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbjEzNTE6XFx0XFxuMTM1MjpcXHRcXHRoZWxwXFxuMTM1MzpcXHRcXHQgIEFsbG93IG5hbWluZyBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXMuXFxuMTM1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTE6MTIuNDgzNTgwMjA0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTMyMzk3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBtbS9tZW1mZC5vYCBnZXRzIGJ1aWx0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYG1tL01ha2VmaWxlYC4gSSdsbCBzdGFydCB0aGVyZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb21waWxhdGlvbiBzdGVwcyBpbnZvbHZlZCBpbiBjcmVhdGluZyB0aGF0IHNwZWNpZmljIG9iamVjdCBmaWxlLiBIb3BlZnVsbHksIGl0J3Mgc3RyYWlnaHRmb3J3YXJkIGFuZCBJIGNhbiBxdWlja2x5IGdyYXNwIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGlzIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudC4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMuLi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzcGVjaWFsIGZsYWdzLCBpbmNsdWRlIHBhdGhzLCBvciBsaW5rZXIgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gYG1lbWZkLm9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMzNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTE6MTQuNjM2ODIyODExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTE2OTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTQxPW9iai0kKENPTkZJR19ITU1fTUlSUk9SKSArPSBobW0ub1xcbm1tL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfTUVNRkRfQ1JFQVRFKSArPSBtZW1mZC5vXFxubW0vTWFrZWZpbGUtMTQzLW9iai0kKENPTkZJR19NQVBQSU5HX0RJUlRZX0hFTFBFUlMpICs9IG1hcHBpbmdfZGlydHlfaGVscGVycy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjE0LjY5NTk5ODAzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Njk0NTMwMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtbS9tZW1mZC5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtZmQuY2AsIHdoaWNoIG1lYW5zIGBDT05GSUdfTUVNRkRfQ1JFQVRFYCBpcyBnb2luZyB0byBicmluZyBpbiBgbW0vbWVtZmQub2AuIFJpZ2h0LCBhbmQgaW5zaWRlIGBtZW1mZF9hbGxvY19mb2xpb2AsIHRoYXQgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBjbGF1c2UgaXMgZ29pbmcgdG8gcHVsbCBpbiB0aGUgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdfSFVHRVRMQkZTYCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBwaWVjZXMuIEkgc2VlIHRoYXQgYHVkbWFidWZgIGlzIG9uZSBvZiB0aGUgY2FsbGVycywgc28gd2UgYXJlIGFsc28gbG9va2luZyBhdCBgQ09ORklHX1VETUFCVUZgLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuXG5cbjEuICBgV29ydGhGdXp6aW5nYDogWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24vbG9ja2luZyB3aXRoaW4gYG1lbWZkX2FsbG9jX2ZvbGlvKClgIGluIGEgd2F5IHRoYXQgZXh0ZW5kcyB0aGUgc2NvcGUgb2YgdGhlIGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlYCBsb2NraW5nLiBUaGlzIGhhcHBlbnMgYXJvdW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKWAuIFRoZSByZWFsIGtpY2tlciBpcyB0aGF0IHRoaXMgaXMgdXNlci1zcGFjZSByZWFjaGFibGUuIGBtZW1mZF9jcmVhdGUoKWAgd2l0aCBgTUZEX0hVR0VUTEJgIGNhbiB0cmlnZ2VyIGl0IGRpcmVjdGx5LCBhbmQgbW9yZSBzdWJ0bHksIHNvIGNhbiBkcml2ZXJzIHVzaW5nIGBtZW1mZF9waW5fZm9saW9zKClgLiBTcGVjaWZpY2FsbHksIHRoaW5rIGAvZGV2L3VkbWFidWZgIHRocm91Z2ggdGhlIGBVRE1BQlVGX0NSRUFURWAgYW5kIGBVRE1BQlVGX0NSRUFURV9MSVNUYCBpb2N0bHMsIG9yIGV2ZW4gYGlvbW11ZmRgLiBDaGFuZ2VzIHRvIGNvcmUgTU0gbG9ja2luZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gYXJlICphbHdheXMqIHN1c3BlY3QuIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgbG9jayBvcmRlcmluZyBpc3N1ZXMsIGRlYWRsb2NrcywgYW5kIHJhY2VzLlxuXG4yLiAgYEZvY3VzU3ltYm9sc2A6IEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIG9uIHR3byBrZXkgc3ltYm9scyBoZXJlOiBgbWVtZmRfYWxsb2NfZm9saW9gIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AuIFRoZXNlIGFyZSB3aGVyZSB0aGUgbG9ja2luZyBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcgYW5kIHdoZXJlIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIG1vc3QgZGlyZWN0LlxuXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBJJ20gZ29pbmcgdG8gbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZWQgdG8gYWN0dWFsbHkgZXhlcmNpc2UgdGhpcyBjb2RlOiBgTUVNRkRfQ1JFQVRFYCwgYEhVR0VUTEJGU2AsIGFuZCBgVURNQUJVRmAuXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjA2LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMToxOS4zOTA1MzAwMDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTUwMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNRkRfQ1JFQVRFXCIsXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlVETUFCVUZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1mZF9hbGxvY19mb2xpb1wiLFxuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgc3luY2hyb25pemF0aW9uIGxvY2tpbmcgaW4gbWVtZmRfYWxsb2NfZm9saW8oKSB3aXRoaW4gbW0vbWVtZmQuYywgZXhwYW5kaW5nIHRoZSBodWdldGxiX2ZhdWx0X211dGV4IGxvY2sgc2NvcGUgYWNyb3NzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpIGFuZCBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoKS4gVGhpcyByZWFjaGFibGUgbW0gcGF0aCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpIGNvbWJpbmVkIHdpdGggdWRtYWJ1ZiBvciBpb21tdWZkIHBpbiBvcGVyYXRpb25zIChtZW1mZF9waW5fZm9saW9zKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIGxvY2tpbmcsIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUZEX0NSRUFURVwiLFxuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJVRE1BQlVGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtZmRfYWxsb2NfZm9saW9cIixcbiAgICBcIm1lbWZkX3Bpbl9mb2xpb3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbiBsb2NraW5nIGluIG1lbWZkX2FsbG9jX2ZvbGlvKCkgd2l0aGluIG1tL21lbWZkLmMsIGV4cGFuZGluZyB0aGUgaHVnZXRsYl9mYXVsdF9tdXRleCBsb2NrIHNjb3BlIGFjcm9zcyBodWdldGxiX3Jlc2VydmVfcGFnZXMoKSBhbmQgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKCkuIFRoaXMgcmVhY2hhYmxlIG1tIHBhdGggY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgbWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKSBjb21iaW5lZCB3aXRoIHVkbWFidWYgb3IgaW9tbXVmZCBwaW4gb3BlcmF0aW9ucyAobWVtZmRfcGluX2ZvbGlvcyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBsb2NraW5nLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTE6MTkuNDYyMDQxMjY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDczNTI1OTk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjE5LjQ2MjQ3NDY2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNzM0ODIyNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBkY2IwNzc3NmEzNTE5YTI4OGZjOTkzZDM4YjQ3NGQ0N2EzYTU4YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA0OjEwOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmNcbmluZGV4IGM3MDhkOTI1MzNmNGEuLjBmNmZmZjAwNGY1ZTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1mZC5jXG4rKysgYi9tbS9tZW1mZC5jXG5AQCAtODIsMjIgKzgyLDMxIEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKG1lbWZkKTtcbiBcdFx0aW50IGVyciA9IC1FTk9NRU07XG4gXHRcdGxvbmcgbnJfcmVzdjtcbitcdFx0dTMyIGhhc2g7XG4gXG4gXHRcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuIFx0XHRnZnBfbWFzayBcdTAwMjY9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEUpO1xuIFx0XHRpZHggXHUwMDNlXHUwMDNlPSBodWdlX3BhZ2Vfb3JkZXIoaCk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnRcbitcdFx0ICogcmFjZXMgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb25zLCBhcyByZXF1aXJlZCBieSBhbGwgb3RoZXJcbitcdFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXG4rXHRcdCAqL1xuK1x0XHRoYXNoID0gaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKG1lbWZkLVx1MDAzZWZfbWFwcGluZywgaWR4KTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbitcbiBcdFx0bnJfcmVzdiA9IGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgaWR4LCBpZHggKyAxLCBOVUxMLCBFTVBUWV9WTUFfRkxBR1MpO1xuLVx0XHRpZiAobnJfcmVzdiBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gRVJSX1BUUihucl9yZXN2KTtcbitcdFx0aWYgKG5yX3Jlc3YgXHUwMDNjIDApIHtcbitcdFx0XHRlcnIgPSBucl9yZXN2O1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuIFxuIFx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxuIFx0XHRcdFx0XHRcdCAgICBudW1hX25vZGVfaWQoKSxcbiBcdFx0XHRcdFx0XHQgICAgTlVMTCxcbiBcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2spO1xuIFx0XHRpZiAoZm9saW8pIHtcbi1cdFx0XHR1MzIgaGFzaDtcbi1cbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFplcm8gdGhlIGZvbGlvIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLlxuIFx0XHRcdCAqIFVzZSBmb2xpb196ZXJvX3VzZXIoKSB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGh1Z2UvZ2lnYW50aWNcbkBAIC0xMTIsMjAgKzEyMSw5IEBAIHN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeClcbiBcdFx0XHQgKi9cbiBcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogU2VyaWFsaXplIGh1Z2VwYWdlIGFsbG9jYXRpb24gYW5kIGluc3RhbnRpYXRpb24gdG8gcHJldmVudFxuLVx0XHRcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXG4tXHRcdFx0ICogY2FsbGVycyBvZiBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKCkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cdTAwM2VmX21hcHBpbmcsIGlkeCk7XG4tXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbi1cbiBcdFx0XHRlcnIgPSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKGZvbGlvLFxuIFx0XHRcdFx0XHRcdFx0bWVtZmQtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdFx0XHRcdFx0aWR4KTtcbi1cbi1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4tXG4gXHRcdFx0aWYgKGVycikge1xuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRcdGdvdG8gZXJyX3VucmVzdjtcbkBAIC0xMzMsMTEgKzEzMSwxNCBAQCBzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG4gXG4gXHRcdFx0aHVnZXRsYl9zZXRfZm9saW9fc3VicG9vbChmb2xpbywgc3VicG9vbF9pbm9kZShpbm9kZSkpO1xuIFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuIFx0XHRcdHJldHVybiBmb2xpbztcbiBcdFx0fVxuIGVycl91bnJlc3Y6XG4gXHRcdGlmIChucl9yZXN2IFx1MDAzZSAwKVxuIFx0XHRcdGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIDApO1xuK291dF91bmxvY2s6XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdH1cbiAjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjE5LjQ2MjQ3NTc3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTE2NDUzNTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaDogS0FTQU4gdnMuIEtNU0FOKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIGtlcm5lbCBwYXRjaCBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgYSBmdWxsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyB3YXJyYW50ZWQsIG9yIGlmIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgcGFydGljdWxhciBjb2RlIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBjb250ZXh0LCBhbmQgd2hhdCdzIGF0IHN0YWtlLiBUaGlzIGlzIGEgY29kZSByZXZpZXc7IGEgc2VjdXJpdHkvcXVhbGl0eSBlbmdpbmVlcmluZyB0YXNrLCBzbyBubyByZWFsIHJpc2sgaGVyZS4gSXQncyBiZW5pZ24sIGRlZmVuc2l2ZSwgbm8gb2ZmZW5zaXZlIGV4cGxvaXRhdGlvbi4gR29vZC4gU2FmZSB0byBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIFRoZSBwYXRjaCB0YXJnZXRzIGBtbS9tZW1mZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWVtZmRfYWxsb2NfZm9saW9gIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgd2lkZW5pbmcgb2YgdGhlIGxvY2tpbmcgc2NvcGUgZm9yIGBodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdYC4gQmVmb3JlLCB0aGUgY2FsbHMgdG8gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmVgIGhhcHBlbmVkICp3aXRob3V0KiBob2xkaW5nIHRoZSBtdXRleC4gSXQgd2FzIG9ubHkgYWNxdWlyZWQgYXJvdW5kIGBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClgLiBOb3csIHRoZSBtdXRleCBpcyBhY3F1aXJlZCAqYmVmb3JlKiB0aG9zZSBjYWxscyBhbmQgaGVsZCB1bnRpbCBhZnRlciB0aGUgcGFnZSBjYWNoZSBhZGRpdGlvbiwgb3IgcmVsZWFzZWQgb24gZXJyb3IgcGF0aHMuXG5cblRoZSBrZXkgaXMgaWYgdGhpcyBpcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBkaWcgZGVlcGVyIGludG8gd2hhdCBgbWVtZmRfYWxsb2NfZm9saW9gIGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgaW4gcmVsYXRpb24gdG8gcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIGlzc3Vlcy4gTGV0J3MgcmVhZCB0aGUgZmlsZSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCBmdW5jdGlvbiwgYW5kIGhvdyBpdCdzIGFmZmVjdGVkLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjgwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjMwLjYyNzAxMzI0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NTAwOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX2FsbG9jX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbm1tL21lbWZkLmMtNjctICovXFxubW0vbWVtZmQuYzo2ODpzdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXFxubW0vbWVtZmQuYy02OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjMxLjIxNTUyMDM1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzg0NjIyNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBtbS9tZW1mZC5jJ3MgQ29udGV4dCoqXG5cbk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gYG1tL21lbWZkLmNgIGFnYWluLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgbGluZSA2OC4gSSd2ZSBnb3QgYSBzcGVjaWZpYyBxdWVzdGlvbiBvciBpc3N1ZSBpbiBtaW5kLCBsaWtlbHkgcmVsYXRlZCB0byBtZW1vcnkgZmlsZSBkZXNjcmlwdG9ycy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24sIHBvc3NpYmx5IGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgYmVpbmcgbWFuYWdlZCwgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgZGlzc2VjdGluZyB0aGF0IGNvZGUhIEknbGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTozNC4wMDAxNDU1ODNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtZmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdC8qXFxuICA2MzpcXHQgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgbWVtZmRfcGluX3VzZXJfcGFnZXMoKSBpbiBHVVAgKGd1cC5jKS5cXG4gIDY0OlxcdCAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxcbiAgNjU6XFx0ICogKG1lbWZkX3Bpbl9mb2xpb3MoKSkgY2Fubm90IGZpbmQgYSBmb2xpbyBpbiB0aGUgcGFnZSBjYWNoZSBhdCBhIGdpdmVuXFxuICA2NjpcXHQgKiBpbmRleCBpbiB0aGUgbWFwcGluZy5cXG4gIDY3OlxcdCAqL1xcbiAgNjg6XFx0c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbiAgNjk6XFx0e1xcbiAgNzA6XFx0I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gIDcxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuICA3MjpcXHRcXHRnZnBfdCBnZnBfbWFzaztcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0aWYgKGlzX2ZpbGVfaHVnZXBhZ2VzKG1lbWZkKSkge1xcbiAgNzU6XFx0XFx0XFx0LypcXG4gIDc2OlxcdFxcdFxcdCAqIFRoZSBmb2xpbyB3b3VsZCBtb3N0IGxpa2VseSBiZSBhY2Nlc3NlZCBieSBhIERNQSBkcml2ZXIsXFxuICA3NzpcXHRcXHRcXHQgKiB0aGVyZWZvcmUsIHdlIGhhdmUgem9uZSBtZW1vcnkgY29uc3RyYWludHMgd2hlcmUgd2UgY2FuXFxuICA3ODpcXHRcXHRcXHQgKiBhbGxvYyBmcm9tLiBBbHNvLCB0aGUgZm9saW8gd2lsbCBiZSBwaW5uZWQgZm9yIGFuIGluZGVmaW5pdGVcXG4gIDc5OlxcdFxcdFxcdCAqIGFtb3VudCBvZiB0aW1lLCBzbyBpdCBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgbWlncmF0ZWQgYXdheS5cXG4gIDgwOlxcdFxcdFxcdCAqL1xcbiAgODE6XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUobWVtZmQpO1xcbiAgODI6XFx0XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKG1lbWZkKTtcXG4gIDgzOlxcdFxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiAgODQ6XFx0XFx0XFx0bG9uZyBucl9yZXN2O1xcbiAgODU6XFx0XFx0XFx0dTMyIGhhc2g7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdFxcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbiAgODg6XFx0XFx0XFx0Z2ZwX21hc2sgXFx1MDAyNj0gfihfX0dGUF9ISUdITUVNIHwgX19HRlBfTU9WQUJMRSk7XFxuICA4OTpcXHRcXHRcXHRpZHggXFx1MDAzZVxcdTAwM2U9IGh1Z2VfcGFnZV9vcmRlcihoKTtcXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0XFx0LypcXG4gIDkyOlxcdFxcdFxcdCAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnRcXG4gIDkzOlxcdFxcdFxcdCAqIHJhY2VzIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucywgYXMgcmVxdWlyZWQgYnkgYWxsIG90aGVyXFxuICA5NDpcXHRcXHRcXHQgKiBjYWxsZXJzIG9mIGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKS5cXG4gIDk1OlxcdFxcdFxcdCAqL1xcbiAgOTY6XFx0XFx0XFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtZW1mZC1cXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xcbiAgOTc6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdFxcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcXG4gMTAwOlxcdFxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2MgMCkge1xcbiAxMDE6XFx0XFx0XFx0XFx0ZXJyID0gbnJfcmVzdjtcXG4gMTAyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gMTAzOlxcdFxcdFxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0XFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoaCxcXG4gMTA2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBudW1hX25vZGVfaWQoKSxcXG4gMTA3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrKTtcXG4gMTA5OlxcdFxcdFxcdGlmIChmb2xpbykge1xcbiAxMTA6XFx0XFx0XFx0XFx0LypcXG4gMTExOlxcdFxcdFxcdFxcdCAqIFplcm8gdGhlIGZvbGlvIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLlxcbiAxMTI6XFx0XFx0XFx0XFx0ICogVXNlIGZvbGlvX3plcm9fdXNlcigpIHdoaWNoIGlzIG9wdGltaXplZCBmb3IgaHVnZS9naWdhbnRpY1xcbiAxMTM6XFx0XFx0XFx0XFx0ICogcGFnZXMuIFBhc3MgMCBhcyBhZGRyX2hpbnQgc2luY2UgdGhpcyBpcyBub3QgYSBmYXVsdGluZyBwYXRoXFxuIDExNDpcXHRcXHRcXHRcXHQgKiAgYW5kIHdlIGRvbid0IGhhdmUgYSB1c2VyIHZpcnR1YWwgYWRkcmVzcyB5ZXQuXFxuIDExNTpcXHRcXHRcXHRcXHQgKi9cXG4gMTE2OlxcdFxcdFxcdFxcdGZvbGlvX3plcm9fdXNlcihmb2xpbywgMCk7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdFxcdFxcdC8qXFxuIDExOTpcXHRcXHRcXHRcXHQgKiBNYXJrIHRoZSBmb2xpbyB1cHRvZGF0ZSBiZWZvcmUgYWRkaW5nIHRvIHBhZ2UgY2FjaGUsXFxuIDEyMDpcXHRcXHRcXHRcXHQgKiBhcyByZXF1aXJlZCBieSBmaWxlbWFwLmMgYW5kIG90aGVyIGh1Z2V0bGIgcGF0aHMuXFxuIDEyMTpcXHRcXHRcXHRcXHQgKi9cXG4gMTIyOlxcdFxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdFxcdFxcdGVyciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRtZW1mZC1cXHUwMDNlZl9tYXBwaW5nLFxcbiAxMjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aWR4KTtcXG4gMTI3OlxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4gMTI4OlxcdFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDEyOTpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl91bnJlc3Y7XFxuIDEzMDpcXHRcXHRcXHRcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdFxcdFxcdGh1Z2V0bGJfc2V0X2ZvbGlvX3N1YnBvb2woZm9saW8sIHN1YnBvb2xfaW5vZGUoaW5vZGUpKTtcXG4gMTMzOlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIDEzNDpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbiAxMzU6XFx0XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbiAxMzY6XFx0XFx0XFx0fVxcbiAxMzc6XFx0ZXJyX3VucmVzdjpcXG4gMTM4OlxcdFxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2UgMClcXG4gMTM5OlxcdFxcdFxcdFxcdGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCArIDEsIDApO1xcbiAxNDA6XFx0b3V0X3VubG9jazpcXG4gMTQxOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuIDE0MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiAxNDM6XFx0XFx0fVxcbiAxNDQ6XFx0I2VuZGlmXFxuIDE0NTpcXHRcXHRyZXR1cm4gc2htZW1fcmVhZF9mb2xpbyhtZW1mZC1cXHUwMDNlZl9tYXBwaW5nLCBpZHgpO1xcbiAxNDY6XFx0fVxcbiAxNDc6XFx0XFxuIDE0ODpcXHQvKlxcbiAxNDk6XFx0ICogU2V0dGluZyBTRUFMX1dSSVRFIHJlcXVpcmVzIHVzIHRvIHZlcmlmeSB0aGVyZSdzIG5vIHBlbmRpbmcgd3JpdGVyLiBIb3dldmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxMTozNC4wMDAyMzM1MzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE5NzA0MTAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtZmQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBsb2NraW5nIHdpdGhpbiBgbWVtZmRfYWxsb2NfZm9saW8oKWAgZm9yIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzLiBUaGUgY29yZSBjaGFuZ2UgaXMgYWNxdWlyaW5nIHRoZSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAgbG9jayAqYmVmb3JlKiByZXNlcnZpbmcgYW5kIGFsbG9jYXRpbmcgdGhlIGh1Z2V0bGIgZm9saW8sIHRoZW4gcmVsZWFzaW5nIGl0IG9uIGNvbXBsZXRpb24gb3IgZXJyb3IuIFRoZSBnb2FsIGlzIGNsZWFyOiBzZXJpYWxpemUgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGh1Z2V0bGIgcGFnZSBjYWNoZSBhbGxvY2F0aW9ucy4gRXNzZW50aWFsbHksIGl0J3MgYSBzeW5jaHJvbml6YXRpb24gZml4LlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIG15IGNoZWNrbGlzdC4gQXJlIHRoZXJlICphbnkqIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgZmllbGRzIGFsbG9jYXRlZD8gTm8uIFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHM/IE5vcGUuIERvZXMgaXQgbWVzcyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgLSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2JzLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycz8gTm90IGF0IGFsbC4gRG9lcyBpdCB0b3VjaCBhbnl0aGluZyByZWxhdGVkIHRvIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgKmNvdWxkKiBhbGxvdyB0aGUgcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIGRhdGE/IEFic29sdXRlbHkgbm90LiBGb2xpb3MgYXJlIGV4cGxpY2l0bHkgemVyb2VkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoZm9saW8sIDApYCDigJMgYnVzaW5lc3MgYXMgdXN1YWwuIEFuZCBjcnVjaWFsbHksIGFsbCBjb25jdXJyZW5jeS9sb2NraW5nIGlzc3VlcyBzaG91bGQgYmUgaGFuZGxlZCBieSBMT0NLREVQIGFuZCBLQVNBTi5cblxuTGV0J3MgdmVyaWZ5IHRoZSBpbXBsaWNhdGlvbnMuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IG1pZ2h0IG5lZWQgS01TQU4ncyBhdHRlbnRpb24/IE5vLiBUaGlzIGlzIGFsbCBhYm91dCBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gb24gaHVnZXRsYiBmb2xpbyBhbGxvY2F0aW9uIGFuZCBwYWdlIGNhY2hlIGluc2VydGlvbiDigJMgcmFjZSBjb25kaXRpb24gLyBsb2NraW5nIGZpeGVzLiBSYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2NrcywgYW5kIHJlZmNvdW50L3BhZ2VjYWNoZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIHNhbml0aXplcnMvYXNzZXJ0aW9ucywgbm90IEtNU0FOLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBydW4gdGhyb3VnaCBteSBjcml0ZXJpYSBhZ2FpbjpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZD8gTm90IHRoZSBjYXNlIGhlcmUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLiBgbnJfcmVzdmAsIGBlcnJgLCBhbmQgYGhhc2hgIGFyZSBhbGwgYXNzaWduZWQgYmVmb3JlIGFueSB1c2UuXG4zLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyBOb3QgYXBwbGljYWJsZS5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBjaGFuZ2VzIHRoYXQgbWlnaHQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vcGUuXG5cbkFuZCBjb252ZXJzZWx5LCB3aHkgYE5lZWRzS01TQU49ZmFsc2VgPyBCZWNhdXNlIHRoZSBjb2RlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBhYm91dCBmaXhpbmcgbG9ja2luZyBpc3N1ZXMg4oCTIHdoaWNoIGFyZSBrbm93biB0byBiZSBkZXRlY3RhYmxlIGJ5IGV4aXN0aW5nIHRvb2xzLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzICpubyogcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY3LCJPdXRwdXRUb2tlbnMiOjI2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjExOjQwLjE5NzI3NjkzNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBpbiBgbWVtZmRfYWxsb2NfZm9saW8oKWAgd2hlbiBoYW5kbGluZyBodWdldGxiZnMtYmFja2VkIG1lbWZkcyBieSB3aWRlbmluZyB0aGUgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0ZWQgYnkgYGh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF1gLiBUaGUgbXV0ZXggaXMgbm93IGFjcXVpcmVkIHByaW9yIHRvIGNhbGxpbmcgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZSgpYCByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBiZWZvcmUgYGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKWAsIGVuc3VyaW5nIHNlcmlhbGl6ZWQgcmVzZXJ2YXRpb24sIGFsbG9jYXRpb24sIGFuZCBpbnNlcnRpb24gaW50byB0aGUgcGFnZSBjYWNoZS5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWx0ZXJzIGxvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGNvbnRyb2wuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBoYXNoYCwgYGVycmAsIGBucl9yZXN2YCwgYGZvbGlvYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5ld2x5IGFsbG9jYXRlZCBmb2xpb3MgY29udGludWUgdG8gYmUgY2xlYXJlZCB1c2luZyBgZm9saW9femVyb191c2VyKClgLiBUaGVyZSBhcmUgbm8gbmV3IGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBtb2RpZmllZCBkYXRhIGxlbmd0aHMvYm91bmRzLiBQb3RlbnRpYWwgYnVncyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2NrcywgbG9ja2luZyBvcmRlciB2aW9sYXRpb25zLCByZWZjb3VudGluZyBpc3N1ZXMpIGFyZSBoYW5kbGVkIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGluIGBtZW1mZF9hbGxvY19mb2xpbygpYCB3aGVuIGhhbmRsaW5nIGh1Z2V0bGJmcy1iYWNrZWQgbWVtZmRzIGJ5IHdpZGVuaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RlZCBieSBgaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXWAuIFRoZSBtdXRleCBpcyBub3cgYWNxdWlyZWQgcHJpb3IgdG8gY2FsbGluZyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKClgIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IGJlZm9yZSBgaHVnZXRsYl9hZGRfdG9fcGFnZV9jYWNoZSgpYCwgZW5zdXJpbmcgc2VyaWFsaXplZCByZXNlcnZhdGlvbiwgYWxsb2NhdGlvbiwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSBwYWdlIGNhY2hlLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhbHRlcnMgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGhhc2hgLCBgZXJyYCwgYG5yX3Jlc3ZgLCBgZm9saW9gKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGZvbGlvcyBjb250aW51ZSB0byBiZSBjbGVhcmVkIHVzaW5nIGBmb2xpb196ZXJvX3VzZXIoKWAuIFRoZXJlIGFyZSBubyBuZXcga2VybmVsLXRvLXVzZXIgY29waWVzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIG1vZGlmaWVkIGRhdGEgbGVuZ3Rocy9ib3VuZHMuIFBvdGVudGlhbCBidWdzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBsb2NraW5nIG9yZGVyIHZpb2xhdGlvbnMsIHJlZmNvdW50aW5nIGlzc3VlcykgYXJlIGhhbmRsZWQgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow9wsj9[1] Phase: Succeeded StartedAt: 2026-09-04 04:12:03 +0000 UTC FinishedAt: 2026-09-04 04:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 04:12:03 +0000 UTC FinishedAt: 2026-09-04 04:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2] Phase: Succeeded StartedAt: 2026-09-04 04:12:03 +0000 UTC FinishedAt: 2026-09-04 07:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 04:12:03 +0000 UTC FinishedAt: 2026-09-04 07:52:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","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-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 04:12:03 +0000 UTC FinishedAt: 2026-09-04 04:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 04:12:03 +0000 UTC FinishedAt: 2026-09-04 04:12:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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-workflow9wsj9/series-workflow9wsj9-convert-artifact-4085540457/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 04:12:13 +0000 UTC FinishedAt: 2026-09-04 04:28:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 04:12:13 +0000 UTC FinishedAt: 2026-09-04 04:28:40 +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:*3fecc0d3-abad-4917-a1c2-2ef592218ee7,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-workflow9wsj9/series-workflow9wsj9-convert-artifact-4085540457/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": "95a93638-2379-4321-b7ea-1b387506f86b", "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-workflow9wsj9/series-workflow9wsj9-build-action-2489858503/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 04:12:13 +0000 UTC FinishedAt: 2026-09-04 04:28:30 +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:*3fecc0d3-abad-4917-a1c2-2ef592218ee7,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-workflow9wsj9/series-workflow9wsj9-convert-artifact-4085540457/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": "95a93638-2379-4321-b7ea-1b387506f86b", "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-workflow9wsj9/series-workflow9wsj9-build-action-2489858503/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 04:28:40 +0000 UTC FinishedAt: 2026-09-04 04:28:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 04:28:40 +0000 UTC FinishedAt: 2026-09-04 04:28:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 04:28:40 +0000 UTC FinishedAt: 2026-09-04 04:28:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 04:28:40 +0000 UTC FinishedAt: 2026-09-04 04:28:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","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-workflow9wsj9/series-workflow9wsj9-convert-artifact-3641747452/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 04:28:50 +0000 UTC FinishedAt: 2026-09-04 04:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 04:28:50 +0000 UTC FinishedAt: 2026-09-04 04:30:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*95a93638-2379-4321-b7ea-1b387506f86b,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-workflow9wsj9/series-workflow9wsj9-build-action-2489858503/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-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 04:30:40 +0000 UTC FinishedAt: 2026-09-04 04:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 04:30:40 +0000 UTC FinishedAt: 2026-09-04 04:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 04:30:40 +0000 UTC FinishedAt: 2026-09-04 04:47:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 04:30:40 +0000 UTC FinishedAt: 2026-09-04 04:47:31 +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:*3fecc0d3-abad-4917-a1c2-2ef592218ee7,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-workflow9wsj9/series-workflow9wsj9-convert-artifact-3641747452/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": "3bcbd3f6-f16e-41d5-83d2-141d7261347b", "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-workflow9wsj9/series-workflow9wsj9-build-action-655828056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 04:30:40 +0000 UTC FinishedAt: 2026-09-04 04:47:21 +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:*3fecc0d3-abad-4917-a1c2-2ef592218ee7,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-workflow9wsj9/series-workflow9wsj9-convert-artifact-3641747452/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": "3bcbd3f6-f16e-41d5-83d2-141d7261347b", "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-workflow9wsj9/series-workflow9wsj9-build-action-655828056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 04:47:31 +0000 UTC FinishedAt: 2026-09-04 04:47:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 04:47:31 +0000 UTC FinishedAt: 2026-09-04 04:47:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 04:47:31 +0000 UTC FinishedAt: 2026-09-04 04:49:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 04:47:31 +0000 UTC FinishedAt: 2026-09-04 04:49:17 +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:*3bcbd3f6-f16e-41d5-83d2-141d7261347b,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-workflow9wsj9/series-workflow9wsj9-build-action-655828056/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-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 04:49:27 +0000 UTC FinishedAt: 2026-09-04 07:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 04:49:27 +0000 UTC FinishedAt: 2026-09-04 07:52:19 +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":["memfd_alloc_folio","memfd_pin_folios"],"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:*95a93638-2379-4321-b7ea-1b387506f86b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3bcbd3f6-f16e-41d5-83d2-141d7261347b,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-workflow9wsj9/series-workflow9wsj9-build-action-2489858503/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-workflow9wsj9/series-workflow9wsj9-build-action-655828056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 04:49:27 +0000 UTC FinishedAt: 2026-09-04 04:49:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 04:49:27 +0000 UTC FinishedAt: 2026-09-04 04:49:32 +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":["memfd_alloc_folio","memfd_pin_folios"],"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-workflow9wsj9/series-workflow9wsj9-convert-artifact-1468674757/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 04:49:27 +0000 UTC FinishedAt: 2026-09-04 04:49:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 04:49:27 +0000 UTC FinishedAt: 2026-09-04 04:49:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 04:49:27 +0000 UTC FinishedAt: 2026-09-04 04:49:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 04:49:37 +0000 UTC FinishedAt: 2026-09-04 07:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9wsj9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"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":["memfd_alloc_folio","memfd_pin_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMFD_CREATE","HUGETLBFS","UDMABUF"],"series_id":"7b6207f0-0f7a-44d5-9f82-c5a95c73bc3e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 04:49:37 +0000 UTC FinishedAt: 2026-09-04 07:52:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*95a93638-2379-4321-b7ea-1b387506f86b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3bcbd3f6-f16e-41d5-83d2-141d7261347b,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-workflow9wsj9/series-workflow9wsj9-build-action-2489858503/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-workflow9wsj9/series-workflow9wsj9-build-action-655828056/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-workflow9wsj9/series-workflow9wsj9-convert-artifact-1468674757/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,}