Name: series-workflowwxwd2 Phase: Succeeded StartedAt: 2026-09-04 16:00:22 +0000 UTC FinishedAt: 2026-09-04 20:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[0] Phase: Succeeded StartedAt: 2026-09-04 16:00:22 +0000 UTC FinishedAt: 2026-09-04 16:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 16:00:22 +0000 UTC FinishedAt: 2026-09-04 16:23:30 +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": "ef6a1dca8de41a408019310649e6d1b7b21ac4bc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM", "TRANSPARENT_HUGEPAGE" ], "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": "ef6a1dca8de41a408019310649e6d1b7b21ac4bc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM", "TRANSPARENT_HUGEPAGE" ], "series_id": "a02ecab0-6b5d-44e6-86cf-e6abc167b6a4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "truncate_inode_partial_folio", "shmem_undo_range", "truncate_inode_pages_range", "shmem_truncate_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyYjMzQ7LAogICAgJiMzNDtzaG1lbV91bmRvX3JhbmdlJiMzNDssCiAgICAmIzM0O3RydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlJiMzNDssCiAgICAmIzM0O3NobWVtX3RydW5jYXRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGludHJvZHVjZWQgb3IgcmVhZCwgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBib3VuZHMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHBhZ2UgY2FjaGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSBjYWNoZSBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIGNhY2hlIHRydW5jYXRpb24gbG9naWMgKGluIG1tL3RydW5jYXRlLmMgYW5kIG1tL3NobWVtLmMpIGZvciBwYXJ0aWFsIGZvbGlvcywgYWx0ZXJpbmcgYm91bmRhcnkgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZSBzZW1hbnRpY3Mgb2YgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyB0byBwcmV2ZW50IGltcHJvcGVyIGRpc2NhcmQgZHVyaW5nIGZvbGlvIHNwbGl0dGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gYWN0aXZlbHkgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGV4ZXJjaXNlZCBieSBmaWxlIHRydW5jYXRpb24sIGZ0cnVuY2F0ZSwgYW5kIGZhbGxvY2F0ZSBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZmZlMTgyMGRmYjA3YjY5ZDE0YjM0MTVhNWU1MmRmNDZmNDU2ZGIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggNjhkYjVhYmQwYTRjZS4uZGI3ZDlkOWZiNWM5ZSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC02MjcsOCAmIzQzOzYyNyw4IEBAIHVuc2lnbmVkIGZpbmRfbG9ja19lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcbiB1bnNpZ25lZCBmaW5kX2dldF9lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcbiBcdFx0cGdvZmZfdCBlbmQsIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoLCBwZ29mZl90ICppbmRpY2VzKTtcbiBpbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsXG4tXHRcdGxvZmZfdCBlbmQpO1xuJiM0Mztib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbiYjNDM7XHRcdGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpO1xuIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gdW5zaWduZWQgbG9uZyBtYXBwaW5nX3RyeV9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCwgdW5zaWduZWQgbG9uZyAqbnJfZmFpbGVkKTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggODlhMTQ5NWU1NWY3ZS4uY2MxNTQ4ZmY1MDlhZSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0xMTc1LDExICYjNDM7MTE3NSw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXG4gXHRpZiAoZm9saW8pIHtcbiBcdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4tXHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkge1xuJiM0MztcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4tXHRcdFx0aWYgKHNhbWVfZm9saW8pXG4tXHRcdFx0XHRlbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbi1cdFx0fVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG5AQCAtMTE4OSw4ICYjNDM7MTE4Nyw3IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXG4gXHRcdGZvbGlvID0gc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oaW5vZGUsIGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIFx0aWYgKGZvbGlvKSB7XG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLVx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpXG4tXHRcdFx0ZW5kID0gZm9saW8tXHUwMDNlaW5kZXg7XG4mIzQzO1x0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG5AQCAtMTI1OCw3ICYjNDM7MTI1NSw4IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXG4gXG4gXHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4gXHRcdFx0XHRcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbi1cdFx0XHRcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkge1xuJiM0MztcdFx0XHRcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbiBcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jXG5pbmRleCBiNThiYTk0MGJlNDc0Li4yZWJiMDBmNmMzNzkzIDEwMDY0NFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdHJ1bmNhdGUuY1xuQEAgLTIwNiwxNSAmIzQzOzIwNiwxOCBAQCBzdGF0aWMgaW50IGZvbGlvX3NwbGl0X29yX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzcGxpdF9hdCxcbiAvKlxuICAqIEhhbmRsZSBwYXJ0aWFsIGZvbGlvcy4gIFRoZSBmb2xpbyBtYXkgYmUgZW50aXJlbHkgd2l0aGluIHRoZVxuICAqIHJhbmdlIGlmIGEgc3BsaXQgaGFzIHJhY2VkIHdpdGggdXMuICBJZiBub3QsIHdlIHplcm8gdGhlIHBhcnQgb2YgdGhlXG4tICogZm9saW8gdGhhdCYjMzk7cyB3aXRoaW4gdGhlIFtzdGFydCwgZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmXG4mIzQzOyAqIGZvbGlvIHRoYXQmIzM5O3Mgd2l0aGluIHRoZSBbbHN0YXJ0LCBsZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmXG4gICogaXQmIzM5O3MgbGFyZ2UuICBzcGxpdF9wYWdlX3JhbmdlKCkgd2lsbCBkaXNjYXJkIHBhZ2VzIHdoaWNoIG5vdyBsaWUgYmV5b25kXG4gICogaV9zaXplLCBhbmQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGRpc2NhcmQgcGFnZXMgd2hpY2ggbGllIHdpdGhpbiBhXG4gICogbmV3bHkgY3JlYXRlZCBob2xlLlxuICAqXG4tICogUmV0dXJucyBmYWxzZSBpZiBzcGxpdHRpbmcgZmFpbGVkIHNvIHRoZSBjYWxsZXIgY2FuIGF2b2lkXG4tICogZGlzY2FyZGluZyB0aGUgZW50aXJlIGZvbGlvIHdoaWNoIGlzIHN0dWJib3JubHkgdW5zcGxpdC5cbiYjNDM7ICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXG4mIzQzOyAqIGFuZCBtdXN0IGJlIGtlcHQgYnkgdGhlIGNhbGxlciYjMzk7cyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZVxuJiM0MzsgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3JcbiYjNDM7ICogbWF5IHN0aWxsIHN0cmFkZGxlIHRoZSByYW5nZSwgc28gdGhlIGNhbGxlciBtdXN0IG5vdCBkaXNjYXJkIGl0LlxuICAqL1xuLWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4mIzQzO2Jvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxuJiM0MztcdFx0XHRcdCAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZClcbiB7XG4gXHRsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiBcdHNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7XG5AQCAtMjIyLDE5ICYjNDM7MjI1LDIyIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4gXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsICpzcGxpdF9hdDI7XG4gXHR1bnNpZ25lZCBpbnQgbWluX29yZGVyO1xuIFxuLVx0aWYgKHBvcyBcdTAwM2Mgc3RhcnQpXG4tXHRcdG9mZnNldCA9IHN0YXJ0IC0gcG9zO1xuJiM0MztcdGlmIChlbmQgXHUwMDI2XHUwMDI2IHBvcyAmIzQzOyBzaXplIFx1MDAzZSAodTY0KWxlbmQpXG4mIzQzO1x0XHQqZW5kID0gZm9saW8tXHUwMDNlaW5kZXg7XG4mIzQzO1xuJiM0MztcdGlmIChwb3MgXHUwMDNjIGxzdGFydClcbiYjNDM7XHRcdG9mZnNldCA9IGxzdGFydCAtIHBvcztcbiBcdGVsc2VcbiBcdFx0b2Zmc2V0ID0gMDtcbi1cdGlmIChwb3MgJiM0Mzsgc2l6ZSBcdTAwM2M9ICh1NjQpZW5kKVxuJiM0MztcdGlmIChwb3MgJiM0Mzsgc2l6ZSBcdTAwM2M9ICh1NjQpbGVuZClcbiBcdFx0bGVuZ3RoID0gc2l6ZSAtIG9mZnNldDtcbiBcdGVsc2Vcbi1cdFx0bGVuZ3RoID0gZW5kICYjNDM7IDEgLSBwb3MgLSBvZmZzZXQ7XG4mIzQzO1x0XHRsZW5ndGggPSBsZW5kICYjNDM7IDEgLSBwb3MgLSBvZmZzZXQ7XG4gXG4gXHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG4gXHRpZiAobGVuZ3RoID09IHNpemUpIHtcbiBcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXHUwMDNlbWFwcGluZywgZm9saW8pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMjQ4LDcgJiM0MzsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxuIFx0XHRmb2xpb19pbnZhbGlkYXRlKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdG1pbl9vcmRlciA9IG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuIFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XG5AQCAtMjU5LDYgJiM0MzsyNjUsMTAgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiBcdFx0ICogZm9yIHNobWVtIHRydW5jYXRlXG4gXHRcdCAqL1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcbiYjNDM7XHRcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVuZClcbiYjNDM7XHRcdFx0KmVuZCA9IChwb3MgJiM0Mzsgb2Zmc2V0ICYjNDM7IGxlbmd0aCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRcdGlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoID09IHNpemUpXG4gXHRcdFx0Z290byBub19zcGxpdDtcbkBAIC0yNzMsMjQgJiM0MzsyODMsMjggQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiBcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKVxuJiM0MztcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpIHtcbiYjNDM7XHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBtYWtlIHN1cmUgZm9saW8yIGlzIGxhcmdlIGFuZCBkb2VzIG5vdCBjaGFuZ2UgaXRzIG1hcHBpbmcgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGZvbGlvMi1cdTAwM2VtYXBwaW5nID09IGZvbGlvLVx1MDAzZW1hcHBpbmcpXG4tXHRcdFx0Zm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7XG4mIzQzO1x0XHQgICAgZm9saW8yLVx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXHUwMDNlbWFwcGluZyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKSlcbiYjNDM7XHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIFxuIFx0XHRmb2xpb191bmxvY2soZm9saW8yKTtcbiBvdXQ6XG4mIzQzO1x0XHRpZiAoIXRhaWxfaXNvbGF0ZWQgXHUwMDI2XHUwMDI2IGVuZClcbiYjNDM7XHRcdFx0KmVuZCA9IGZvbGlvMi1cdTAwM2VpbmRleDtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvMik7XG4gbm9fc3BsaXQ6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuLVx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuJiM0MztcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXHUwMDNlbWFwcGluZywgZm9saW8pO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLypcbkBAIC00MTMsMTEgJiM0Mzs0MjcsOSBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgRkdQX0xPQ0ssIDApO1xuIFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4gXHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG4tXHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkge1xuJiM0MztcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4tXHRcdFx0aWYgKHNhbWVfZm9saW8pXG4tXHRcdFx0XHRlbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbi1cdFx0fVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG5AQCAtNDI3LDggJiM0Mzs0MzksNyBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiBcdFx0XHRcdFx0XHRGR1BfTE9DSywgMCk7XG4gXHRcdGlmICghSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSlcbi1cdFx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuJiM0MztcdFx0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0hNRU0mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3NobWVtX3VuZG9fcmFuZ2UmIzM0OywKICAgICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UmIzM0OywKICAgICYjMzQ7c2htZW1fdHJ1bmNhdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBjYWNoZSB0cnVuY2F0aW9uIGxvZ2ljIChpbiBtbS90cnVuY2F0ZS5jIGFuZCBtbS9zaG1lbS5jKSBmb3IgcGFydGlhbCBmb2xpb3MsIGFsdGVyaW5nIGJvdW5kYXJ5IHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgc2VtYW50aWNzIG9mIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8gdG8gcHJldmVudCBpbXByb3BlciBkaXNjYXJkIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGFjdGl2ZWx5IHJlYWNoYWJsZSBrZXJuZWwgY29kZSBleGVyY2lzZWQgYnkgZmlsZSB0cnVuY2F0aW9uLCBmdHJ1bmNhdGUsIGFuZCBmYWxsb2NhdGUgaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWZmZTE4MjBkZmIwN2I2OWQxNGIzNDE1YTVlNTJkZjQ2ZjQ1NmRiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTY6MjA6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA2OGRiNWFiZDBhNGNlLi5kYjdkOWQ5ZmI1YzllIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTYyNyw4ICYjNDM7NjI3LDggQEAgdW5zaWduZWQgZmluZF9sb2NrX2VudHJpZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgKnN0YXJ0LAogdW5zaWduZWQgZmluZF9nZXRfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsCiAJCXBnb2ZmX3QgZW5kLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgcGdvZmZfdCAqaW5kaWNlcyk7CiBpbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwotYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwKLQkJbG9mZl90IGVuZCk7CiYjNDM7Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsCiYjNDM7CQlsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKTsKIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7CiB1bnNpZ25lZCBsb25nIG1hcHBpbmdfdHJ5X2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLCB1bnNpZ25lZCBsb25nICpucl9mYWlsZWQpOwpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggODlhMTQ5NWU1NWY3ZS4uY2MxNTQ4ZmY1MDlhZSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0xMTc1LDExICYjNDM7MTE3NSw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsCiAJaWYgKGZvbGlvKSB7CiAJCXNhbWVfZm9saW8gPSBsZW5kICZsdDsgZm9saW9fbmV4dF9wb3MoZm9saW8pOwogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKLQkJaWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7CiYjNDM7CQlpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwKJiM0MzsJCQkJCQkgIHNhbWVfZm9saW8gPyAmYW1wO2VuZCA6IE5VTEwpKQogCQkJc3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTsKLQkJCWlmIChzYW1lX2ZvbGlvKQotCQkJCWVuZCA9IGZvbGlvLSZndDtpbmRleDsKLQkJfQogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCQlmb2xpbyA9IE5VTEw7CkBAIC0xMTg5LDggJiM0MzsxMTg3LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCwKIAkJZm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbGVuZCAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIAlpZiAoZm9saW8pIHsKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7Ci0JCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkKLQkJCWVuZCA9IGZvbGlvLSZndDtpbmRleDsKJiM0MzsJCXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgJmFtcDtlbmQpOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KQEAgLTEyNTgsNyAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLAogCiAJCQkJaWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkgewogCQkJCQl0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7Ci0JCQkJfSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7CiYjNDM7CQkJCX0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywKJiM0MzsJCQkJCQkJbHN0YXJ0LCBsZW5kLCBOVUxMKSkgewogCQkJCQkvKgogCQkJCQkgKiBJZiB3ZSBzcGxpdCBhIHBhZ2UsIHJlc2V0IHRoZSBsb29wIHNvCiAJCQkJCSAqIHRoYXQgd2UgcGljayB1cCB0aGUgbmV3IHN1YiBwYWdlcy4KZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IGI1OGJhOTQwYmU0NzQuLjJlYmIwMGY2YzM3OTMgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdHJ1bmNhdGUuYwpAQCAtMjA2LDE1ICYjNDM7MjA2LDE4IEBAIHN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LAogLyoKICAqIEhhbmRsZSBwYXJ0aWFsIGZvbGlvcy4gIFRoZSBmb2xpbyBtYXkgYmUgZW50aXJlbHkgd2l0aGluIHRoZQogICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGUKLSAqIGZvbGlvIHRoYXQmIzM5O3Mgd2l0aGluIHRoZSBbc3RhcnQsIGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZgomIzQzOyAqIGZvbGlvIHRoYXQmIzM5O3Mgd2l0aGluIHRoZSBbbHN0YXJ0LCBsZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmCiAgKiBpdCYjMzk7cyBsYXJnZS4gIHNwbGl0X3BhZ2VfcmFuZ2UoKSB3aWxsIGRpc2NhcmQgcGFnZXMgd2hpY2ggbm93IGxpZSBiZXlvbmQKICAqIGlfc2l6ZSwgYW5kIHdlIHJlbHkgb24gdGhlIGNhbGxlciB0byBkaXNjYXJkIHBhZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYQogICogbmV3bHkgY3JlYXRlZCBob2xlLgogICoKLSAqIFJldHVybnMgZmFsc2UgaWYgc3BsaXR0aW5nIGZhaWxlZCBzbyB0aGUgY2FsbGVyIGNhbiBhdm9pZAotICogZGlzY2FyZGluZyB0aGUgZW50aXJlIGZvbGlvIHdoaWNoIGlzIHN0dWJib3JubHkgdW5zcGxpdC4KJiM0MzsgKiBXaGVuIEBlbmQgbm9uLU5VTEwsIHNldCB0byB0aGUgaW5kZXggb2YgdGhlIGZvbGlvIHRoYXQgY29udGFpbnMgQGxlbmQKJiM0MzsgKiBhbmQgbXVzdCBiZSBrZXB0IGJ5IHRoZSBjYWxsZXImIzM5O3MgdHJ1bmNhdGUgbG9vcC4gIFJldHVybiAldHJ1ZSBpZiB0aGUKJiM0MzsgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3IKJiM0MzsgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuCiAgKi8KLWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiYjNDM7Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsCiYjNDM7CQkJCSAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCkKIHsKIAlsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTsKIAlzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pOwpAQCAtMjIyLDE5ICYjNDM7MjI1LDIyIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiAJc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCAqc3BsaXRfYXQyOwogCXVuc2lnbmVkIGludCBtaW5fb3JkZXI7CiAKLQlpZiAocG9zICZsdDsgc3RhcnQpCi0JCW9mZnNldCA9IHN0YXJ0IC0gcG9zOwomIzQzOwlpZiAoZW5kICZhbXA7JmFtcDsgcG9zICYjNDM7IHNpemUgJmd0OyAodTY0KWxlbmQpCiYjNDM7CQkqZW5kID0gZm9saW8tJmd0O2luZGV4OwomIzQzOwomIzQzOwlpZiAocG9zICZsdDsgbHN0YXJ0KQomIzQzOwkJb2Zmc2V0ID0gbHN0YXJ0IC0gcG9zOwogCWVsc2UKIAkJb2Zmc2V0ID0gMDsKLQlpZiAocG9zICYjNDM7IHNpemUgJmx0Oz0gKHU2NCllbmQpCiYjNDM7CWlmIChwb3MgJiM0Mzsgc2l6ZSAmbHQ7PSAodTY0KWxlbmQpCiAJCWxlbmd0aCA9IHNpemUgLSBvZmZzZXQ7CiAJZWxzZQotCQlsZW5ndGggPSBlbmQgJiM0MzsgMSAtIHBvcyAtIG9mZnNldDsKJiM0MzsJCWxlbmd0aCA9IGxlbmQgJiM0MzsgMSAtIHBvcyAtIG9mZnNldDsKIAogCWZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTsKIAlpZiAobGVuZ3RoID09IHNpemUpIHsKIAkJdHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tJmd0O21hcHBpbmcsIGZvbGlvKTsKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTI0OCw3ICYjNDM7MjU0LDcgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKIAlpZiAoZm9saW9fbmVlZHNfcmVsZWFzZShmb2xpbykpCiAJCWZvbGlvX2ludmFsaWRhdGUoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTsKIAlpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAogCW1pbl9vcmRlciA9IG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGZvbGlvLSZndDttYXBwaW5nKTsKIAlzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTsKQEAgLTI1OSw2ICYjNDM7MjY1LDEwIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiAJCSAqIGZvciBzaG1lbSB0cnVuY2F0ZQogCQkgKi8KIAkJc3RydWN0IGZvbGlvICpmb2xpbzI7CiYjNDM7CQlib29sIHRhaWxfaXNvbGF0ZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJaWYgKGVuZCkKJiM0MzsJCQkqZW5kID0gKHBvcyAmIzQzOyBvZmZzZXQgJiM0MzsgbGVuZ3RoKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCiAJCWlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoID09IHNpemUpCiAJCQlnb3RvIG5vX3NwbGl0OwpAQCAtMjczLDI0ICYjNDM7MjgzLDI4IEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiAJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpKQogCQkJZ290byBvdXQ7CiAKLQkJaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpCiYjNDM7CQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSkgewomIzQzOwkJCXRhaWxfaXNvbGF0ZWQgPSBmYWxzZTsKIAkJCWdvdG8gb3V0OwomIzQzOwkJfQogCiAJCS8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqLwogCQlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpICZhbXA7JmFtcDsKLQkJICAgIGZvbGlvMi0mZ3Q7bWFwcGluZyA9PSBmb2xpby0mZ3Q7bWFwcGluZykKLQkJCWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpOwomIzQzOwkJICAgIGZvbGlvMi0mZ3Q7bWFwcGluZyA9PSBmb2xpby0mZ3Q7bWFwcGluZyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcikpCiYjNDM7CQkJdGFpbF9pc29sYXRlZCA9IGZhbHNlOwogCiAJCWZvbGlvX3VubG9jayhmb2xpbzIpOwogb3V0OgomIzQzOwkJaWYgKCF0YWlsX2lzb2xhdGVkICZhbXA7JmFtcDsgZW5kKQomIzQzOwkJCSplbmQgPSBmb2xpbzItJmd0O2luZGV4OwogCQlmb2xpb19wdXQoZm9saW8yKTsKIG5vX3NwbGl0OgogCQlyZXR1cm4gdHJ1ZTsKIAl9Ci0JaWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKQotCQlyZXR1cm4gZmFsc2U7Ci0JdHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tJmd0O21hcHBpbmcsIGZvbGlvKTsKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkKJiM0MzsJCXRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLSZndDttYXBwaW5nLCBmb2xpbyk7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogLyoKQEAgLTQxMywxMSAmIzQzOzQyNyw5IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxzdGFydCAmZ3Q7Jmd0OyBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7CiAJaWYgKCFJU19FUlIoZm9saW8pKSB7CiAJCXNhbWVfZm9saW8gPSBsZW5kICZsdDsgZm9saW9fbmV4dF9wb3MoZm9saW8pOwotCQlpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHsKJiM0MzsJCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLAomIzQzOwkJCQkJCSAgc2FtZV9mb2xpbyA/ICZhbXA7ZW5kIDogTlVMTCkpCiAJCQlzdGFydCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pOwotCQkJaWYgKHNhbWVfZm9saW8pCi0JCQkJZW5kID0gZm9saW8tJmd0O2luZGV4OwotCQl9CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKQEAgLTQyNyw4ICYjNDM7NDM5LDcgQEAgdm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxlbmQgJmd0OyZndDsgUEFHRV9TSElGVCwKIAkJCQkJCUZHUF9MT0NLLCAwKTsKIAkJaWYgKCFJU19FUlIoZm9saW8pKSB7Ci0JCQlpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpCi0JCQkJZW5kID0gZm9saW8tJmd0O2luZGV4OwomIzQzOwkJCXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgJmFtcDtlbmQpOwogCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBGb2N1cyBvbiBUcnVuY2F0aW9uIGFuZCBTaGFyZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBzcGVjaWZpYyBmaWxlcyBhbmQgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEl0JiMzOTtzIG1vZGlmeWluZyBgbW0vaW50ZXJuYWwuaGAsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS90cnVuY2F0ZS5jYC4gVGhhdCYjMzk7cyBhIGNsZWFyIHNpZ25hbCDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBhbmQgdGhlIHRydW5jYXRpb24gb2YgaW5vZGVzLgoKVGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbXkgYXR0ZW50aW9uIGFyZTogYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VgIGluIGBtbS90cnVuY2F0ZS5jYCwgYW5kIGBzaG1lbV91bmRvX3JhbmdlYCBpbiBgbW0vc2htZW0uY2AuIFRoZSBmYWN0IHRoYXQgYHRydW5jYXRlYCBpcyBpbnZvbHZlZCBzdHJvbmdseSBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyBmaWxlcyBhcmUgc2hvcnRlbmVkIG9yIGNsZWFyZWQsIGFuZCBgc2htZW1gIGluZGljYXRlcyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLiBUaGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIHR3byBjb25jZXB0cyBpbW1lZGlhdGVseSBicmluZ3MgdXAgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHJlbGF0aW5nIHRvIGRhdGEgY29uc2lzdGVuY3kuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgYG1tL3RydW5jYXRlLmNgIGFuZCBgbW0vc2htZW0uY2AuIFRoYXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdHJ1bmNhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHRcdFdBUk5fT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XG4gMjAxOlx0XHR9XG4gMjAyOlx0XG4gMjAzOlx0XHRyZXR1cm4gcmV0O1xuIDIwNDpcdH1cbiAyMDU6XHRcbiAyMDY6XHQvKlxuIDIwNzpcdCAqIEhhbmRsZSBwYXJ0aWFsIGZvbGlvcy4gIFRoZSBmb2xpbyBtYXkgYmUgZW50aXJlbHkgd2l0aGluIHRoZVxuIDIwODpcdCAqIHJhbmdlIGlmIGEgc3BsaXQgaGFzIHJhY2VkIHdpdGggdXMuICBJZiBub3QsIHdlIHplcm8gdGhlIHBhcnQgb2YgdGhlXG4gMjA5Olx0ICogZm9saW8gdGhhdCYjMzk7cyB3aXRoaW4gdGhlIFtsc3RhcnQsIGxlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWZcbiAyMTA6XHQgKiBpdCYjMzk7cyBsYXJnZS4gIHNwbGl0X3BhZ2VfcmFuZ2UoKSB3aWxsIGRpc2NhcmQgcGFnZXMgd2hpY2ggbm93IGxpZSBiZXlvbmRcbiAyMTE6XHQgKiBpX3NpemUsIGFuZCB3ZSByZWx5IG9uIHRoZSBjYWxsZXIgdG8gZGlzY2FyZCBwYWdlcyB3aGljaCBsaWUgd2l0aGluIGFcbiAyMTI6XHQgKiBuZXdseSBjcmVhdGVkIGhvbGUuXG4gMjEzOlx0ICpcbiAyMTQ6XHQgKiBXaGVuIEBlbmQgbm9uLU5VTEwsIHNldCB0byB0aGUgaW5kZXggb2YgdGhlIGZvbGlvIHRoYXQgY29udGFpbnMgQGxlbmRcbiAyMTU6XHQgKiBhbmQgbXVzdCBiZSBrZXB0IGJ5IHRoZSBjYWxsZXImIzM5O3MgdHJ1bmNhdGUgbG9vcC4gIFJldHVybiAldHJ1ZSBpZiB0aGVcbiAyMTY6XHQgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3JcbiAyMTc6XHQgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXG4gMjE4Olx0ICovXG4gMjE5Olx0Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsXG4gMjIwOlx0XHRcdFx0XHQgIGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpXG4gMjIxOlx0e1xuIDIyMjpcdFx0bG9mZl90IHBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XG4gMjIzOlx0XHRzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pO1xuIDIyNDpcdFx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuZ3RoO1xuIDIyNTpcdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCAqc3BsaXRfYXQyO1xuIDIyNjpcdFx0dW5zaWduZWQgaW50IG1pbl9vcmRlcjtcbiAyMjc6XHRcbiAyMjg6XHRcdGlmIChlbmQgXHUwMDI2XHUwMDI2IHBvcyAmIzQzOyBzaXplIFx1MDAzZSAodTY0KWxlbmQpXG4gMjI5Olx0XHRcdCplbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbiAyMzA6XHRcbiAyMzE6XHRcdGlmIChwb3MgXHUwMDNjIGxzdGFydClcbiAyMzI6XHRcdFx0b2Zmc2V0ID0gbHN0YXJ0IC0gcG9zO1xuIDIzMzpcdFx0ZWxzZVxuIDIzNDpcdFx0XHRvZmZzZXQgPSAwO1xuIDIzNTpcdFx0aWYgKHBvcyAmIzQzOyBzaXplIFx1MDAzYz0gKHU2NClsZW5kKVxuIDIzNjpcdFx0XHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xuIDIzNzpcdFx0ZWxzZVxuIDIzODpcdFx0XHRsZW5ndGggPSBsZW5kICYjNDM7IDEgLSBwb3MgLSBvZmZzZXQ7XG4gMjM5Olx0XG4gMjQwOlx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG4gMjQxOlx0XHRpZiAobGVuZ3RoID09IHNpemUpIHtcbiAyNDI6XHRcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXHUwMDNlbWFwcGluZywgZm9saW8pO1xuIDI0MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjQ0Olx0XHR9XG4gMjQ1Olx0XG4gMjQ2Olx0XHQvKlxuIDI0NzpcdFx0ICogV2UgbWF5IGJlIHplcm9pbmcgcGFnZXMgd2UmIzM5O3JlIGFib3V0IHRvIGRpc2NhcmQsIGJ1dCBpdCBhdm9pZHNcbiAyNDg6XHRcdCAqIGRvaW5nIGEgY29tcGxleCBjYWxjdWxhdGlvbiBoZXJlLCBhbmQgdGhlbiBkb2luZyB0aGUgemVyb2luZ1xuIDI0OTpcdFx0ICogYW55d2F5IGlmIHRoZSBwYWdlIHNwbGl0IGZhaWxzLlxuIDI1MDpcdFx0ICovXG4gMjUxOlx0XHRpZiAoIW1hcHBpbmdfaW5hY2Nlc3NpYmxlKGZvbGlvLVx1MDAzZW1hcHBpbmcpKVxuIDI1MjpcdFx0XHRmb2xpb196ZXJvX3JhbmdlKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4gMjUzOlx0XG4gMjU0Olx0XHRpZiAoZm9saW9fbmVlZHNfcmVsZWFzZShmb2xpbykpXG4gMjU1Olx0XHRcdGZvbGlvX2ludmFsaWRhdGUoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbiAyNTY6XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gMjU3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyNTg6XHRcbiAyNTk6XHRcdG1pbl9vcmRlciA9IG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuIDI2MDpcdFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XG4gMjYxOlx0XHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xuIDI2MjpcdFx0XHQvKlxuIDI2MzpcdFx0XHQgKiB0cnkgdG8gc3BsaXQgYXQgb2Zmc2V0ICYjNDM7IGxlbmd0aCB0byBtYWtlIHN1cmUgZm9saW9zIHdpdGhpblxuIDI2NDpcdFx0XHQgKiB0aGUgcmFuZ2UgY2FuIGJlIGRyb3BwZWQsIGVzcGVjaWFsbHkgdG8gYXZvaWQgbWVtb3J5IHdhc3RlXG4gMjY1Olx0XHRcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxuIDI2NjpcdFx0XHQgKi9cbiAyNjc6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbzI7XG4gMjY4Olx0XHRcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XG4gMjY5Olx0XG4gMjcwOlx0XHRcdGlmIChlbmQpXG4gMjcxOlx0XHRcdFx0KmVuZCA9IChwb3MgJiM0Mzsgb2Zmc2V0ICYjNDM7IGxlbmd0aCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gMjcyOlx0XG4gMjczOlx0XHRcdGlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoID09IHNpemUpXG4gMjc0Olx0XHRcdFx0Z290byBub19zcGxpdDtcbiAyNzU6XHRcbiAyNzY6XHRcdFx0c3BsaXRfYXQyID0gZm9saW9fcGFnZShmb2xpbyxcbiAyNzc6XHRcdFx0XHRcdFBBR0VfQUxJR05fRE9XTihvZmZzZXQgJiM0MzsgbGVuZ3RoKSAvIFBBR0VfU0laRSk7XG4gMjc4Olx0XHRcdGZvbGlvMiA9IHBhZ2VfZm9saW8oc3BsaXRfYXQyKTtcbiAyNzk6XHRcbiAyODA6XHRcdFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvMikpXG4gMjgxOlx0XHRcdFx0Z290byBub19zcGxpdDtcbiAyODI6XHRcbiAyODM6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikpXG4gMjg0Olx0XHRcdFx0Z290byBvdXQ7XG4gMjg1Olx0XG4gMjg2Olx0XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKSB7XG4gMjg3Olx0XHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIDI4ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDI4OTpcdFx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xuIDI5MjpcdFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpIFx1MDAyNlx1MDAyNlxuIDI5MzpcdFx0XHQgICAgZm9saW8yLVx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXHUwMDNlbWFwcGluZyBcdTAwMjZcdTAwMjZcbiAyOTQ6XHRcdFx0ICAgIGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRha2UgYSBsb29rIGF0IGBtbS9zaG1lbS5jYCBhcm91bmQgbGluZSAxMTc1IGFuZCBgbW0vdHJ1bmNhdGUuY2AgYXJvdW5kIGxpbmUgNDEzLiBUaGlzIHN1Z2dlc3RzIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnZlc3RpZ2F0aW9uLiBgc2htZW1gIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHNoYXJlZCBtZW1vcnksIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdG1wZnMgb3Igc2ltaWxhciBtZW1vcnktYmFzZWQgZmlsZSBzeXN0ZW1zLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYXQgdGhhdCBwYXJ0aWN1bGFyIHBvaW50LCBwZXJoYXBzIHJlZ2FyZGluZyBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIHN5bmNocm9uaXphdGlvbi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVyLCBJJiMzOTtkIGV4cGVjdCB0byBiZSBsb29raW5nIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBwYWdlIGNhY2hlIGFuZCBzaGFyZWQgbWVtb3J5IGluIHRob3NlIGxpbmVzLgoKVGhlbiwgdHVybmluZyB0byBgbW0vdHJ1bmNhdGUuY2AsIGxpbmUgNDEzIGxpa2VseSByZWxhdGVzIHRvIHRoZSB0cnVuY2F0aW9uIG9mIGEgZmlsZSBvciBzaGFyZWQgbWVtb3J5IHJlZ2lvbi4gVGhpcyBmdW5jdGlvbiB1c3VhbGx5IGludm9sdmVzIHJlbGVhc2luZyByZXNvdXJjZXMsIHVwZGF0aW5nIG1ldGFkYXRhLCBhbmQgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIGNhY2hlZCBkYXRhLiBJJiMzOTttIGJldHRpbmcgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIGVmZmVjdHMgb2YgdGhlIHRydW5jYXRpb24gb24gc2hhcmVkIG1lbW9yeSByZWdpb25zLCB3aGljaCBjYW4gYmUgYSBwYXJ0aWN1bGFybHkgdHJpY2t5IGFyZWEuIFRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgdHdvIGZpbGVzIGFyZSBhIGxpa2VseSBzb3VyY2Ugb2YgcG90ZW50aWFsIGZvciBkYXRhIGNvcnJ1cHRpb24gYW5kIGVycm9ycy4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gYmUsIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzA6XHRcdGlmICh1bmZhbGxvYylcbjExNzE6XHRcdFx0Z290byB3aG9sZV9mb2xpb3M7XG4xMTcyOlx0XG4xMTczOlx0XHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuMTE3NDpcdFx0Zm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExNzU6XHRcdGlmIChmb2xpbykge1xuMTE3NjpcdFx0XHRzYW1lX2ZvbGlvID0gbGVuZCBcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xuMTE3NzpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExNzg6XHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4xMTc5Olx0XHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4xMTgwOlx0XHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbjExODE6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjExODI6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjExODM6XHRcdFx0Zm9saW8gPSBOVUxMO1xuMTE4NDpcdFx0fVxuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKCFzYW1lX2ZvbGlvKVxuMTE4NzpcdFx0XHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExODg6XHRcdGlmIChmb2xpbykge1xuMTE4OTpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExOTA6XHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuMTE5MTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMTE5MjpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTE5MzpcdFx0fVxuMTE5NDpcdFxuMTE5NTpcdHdob2xlX2ZvbGlvczpcbjExOTY6XHRcbjExOTc6XHRcdGluZGV4ID0gc3RhcnQ7XG4xMTk4Olx0XHR3aGlsZSAoaW5kZXggXHUwMDNjIGVuZCkge1xuMTE5OTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjEyMDA6XHRcbjEyMDE6XHRcdFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFx1MDAyNmluZGV4LCBlbmQgLSAxLCBcdTAwMjZmYmF0Y2gsXG4xMjAyOlx0XHRcdFx0XHRpbmRpY2VzKSkge1xuMTIwMzpcdFx0XHRcdC8qIElmIGFsbCBnb25lIG9yIGhvbGUtcHVuY2ggb3IgdW5mYWxsb2MsIHdlJiMzOTtyZSBkb25lICovXG4xMjA0Olx0XHRcdFx0aWYgKGluZGV4ID09IHN0YXJ0IHx8IGVuZCAhPSAtMSlcbjEyMDU6XHRcdFx0XHRcdGJyZWFrO1xuMTIwNjpcdFx0XHRcdC8qIEJ1dCBpZiB0cnVuY2F0aW5nLCByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xuMTIwNzpcdFx0XHRcdGluZGV4ID0gc3RhcnQ7XG4xMjA4Olx0XHRcdFx0Y29udGludWU7XG4xMjA5Olx0XHRcdH1cbjEyMTA6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKTsgaSYjNDM7JiM0MzspIHtcbjEyMTE6XHRcdFx0XHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XG4xMjEyOlx0XG4xMjEzOlx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuMTIxNDpcdFx0XHRcdFx0aW50IG9yZGVyO1xuMTIxNTpcdFx0XHRcdFx0bG9uZyBzd2Fwc19mcmVlZDtcbjEyMTY6XHRcbjEyMTc6XHRcdFx0XHRcdGlmICh1bmZhbGxvYylcbjEyMTg6XHRcdFx0XHRcdFx0Y29udGludWU7XG4xMjE5Olx0XHRcdFx0XHRzd2Fwc19mcmVlZCA9IHNobWVtX2ZyZWVfc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxuMTIyMDpcdFx0XHRcdFx0XHRcdFx0ICAgICAgZW5kIC0gMSwgZm9saW8pO1xuMTIyMTpcdFx0XHRcdFx0aWYgKCFzd2Fwc19mcmVlZCkge1xuMTIyMjpcdFx0XHRcdFx0XHRwZ29mZl90IGJhc2UgPSBpbmRpY2VzW2ldO1xuMTIyMzpcdFxuMTIyNDpcdFx0XHRcdFx0XHRvcmRlciA9IHNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxuMTIyNTpcdFx0XHRcdFx0XHRcdFx0XHQgICByYWRpeF90b19zd3BfZW50cnkoZm9saW8pKTtcbjEyMjY6XHRcdFx0XHRcdFx0LypcbjEyMjc6XHRcdFx0XHRcdFx0ICogSWYgZm91bmQgYSBsYXJnZSBzd2FwIGVudHJ5IGNyb3NzIHRoZSBlbmQgb3Igc3RhcnRcbjEyMjg6XHRcdFx0XHRcdFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXG4xMjI5Olx0XHRcdFx0XHRcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXG4xMjMwOlx0XHRcdFx0XHRcdCAqL1xuMTIzMTpcdFx0XHRcdFx0XHRpZiAob3JkZXIgXHUwMDNlIDApIHtcbjEyMzI6XHRcdFx0XHRcdFx0XHRiYXNlID0gcm91bmRfZG93bihiYXNlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4xMjMzOlx0XHRcdFx0XHRcdFx0aWYgKGJhc2UgXHUwMDNjIHN0YXJ0IHx8IGJhc2UgJiM0MzsgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2UgZW5kKVxuMTIzNDpcdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XG4xMjM1Olx0XHRcdFx0XHRcdH1cbjEyMzY6XHRcdFx0XHRcdFx0LyogU3dhcCB3YXMgcmVwbGFjZWQgYnkgcGFnZSBvciBleHRlbmRlZCwgcmV0cnkgKi9cbjEyMzc6XHRcdFx0XHRcdFx0aW5kZXggPSBiYXNlO1xuMTIzODpcdFx0XHRcdFx0XHRicmVhaztcbjEyMzk6XHRcdFx0XHRcdH1cbjEyNDA6XHRcdFx0XHRcdG5yX3N3YXBzX2ZyZWVkICYjNDM7PSBzd2Fwc19mcmVlZDtcbjEyNDE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMTI0MjpcdFx0XHRcdH1cbjEyNDM6XHRcbjEyNDQ6XHRcdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbjEyNDU6XHRcbjEyNDY6XHRcdFx0XHRpZiAoIXVuZmFsbG9jIHx8ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuMTI0NzpcdFx0XHRcdFx0aWYgKGZvbGlvX21hcHBpbmcoZm9saW8pICE9IG1hcHBpbmcpIHtcbjEyNDg6XHRcdFx0XHRcdFx0LyogUGFnZSB3YXMgcmVwbGFjZWQgYnkgc3dhcDogcmV0cnkgKi9cbjEyNDk6XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjEyNTA6XHRcdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzW2ldO1xuMTI1MTpcdFx0XHRcdFx0XHRicmVhaztcbjEyNTI6XHRcdFx0XHRcdH1cbjEyNTM6XHRcdFx0XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXG4xMjU0Olx0XHRcdFx0XHRcdFx0Zm9saW8pO1xuMTI1NTpcdFxuMTI1NjpcdFx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuMTI1NzpcdFx0XHRcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4xMjU4Olx0XHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG4xMjU5Olx0XHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4xMjYwOlx0XHRcdFx0XHRcdC8qXG4xMjYxOlx0XHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbjEyNjI6XHRcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuMTI2MzpcdFx0XHRcdFx0XHQgKiBPdGhlcndpc2UgdGhlIFRIUCB3YXMgZW50aXJlbHlcbjEyNjQ6XHRcdFx0XHRcdFx0ICogZHJvcHBlZCBvciB0aGUgdGFyZ2V0IHJhbmdlIHdhc1xuMTI2NTpcdFx0XHRcdFx0XHQgKiB6ZXJvZWQsIHNvIGp1c3QgY29udGludWUgdGhlIGxvb3AgYXNcbjEyNjY6XHRcdFx0XHRcdFx0ICogaXMuXG4xMjY3Olx0XHRcdFx0XHRcdCAqL1xuMTI2ODpcdFx0XHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4xMjY5Olx0XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBgbW0vdHJ1bmNhdGUuY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGB0cnVuY2F0ZWAgZnVuY3Rpb25hbGl0eS4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIHRoZSBhcmVhIG9mIGludGVyZXN0IHNlZW1zIHRvIGJlIGFyb3VuZCBsaW5lcyA0MTAgdG8gNDUwIGluIGBtbS90cnVuY2F0ZS5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSBsb2dpYyB0aGVyZSByZWxhdGVkIHRvIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3RzIHdpdGggdGhlIHRydW5jYXRpb24gcHJvY2Vzcy4gUHJvYmFibHkgc29tZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBpbm9kZSwgcGFnZSBjYWNoZSwgYW5kIGJsb2NrIGFsbG9jYXRpb24uIEtub3dpbmcgd2hlcmUgdGhlIHJlbGV2YW50IGNvZGUgbGllcyBhbGxvd3MgbWUgdG8gZm9jdXMgbXkgZWZmb3J0cy4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgbGllIHdpdGhpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3RydW5jYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMDpcdFx0XHRlbmQgPSAobGVuZCAmIzQzOyAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA0MTE6XHRcbiA0MTI6XHRcdGZvbGlvX2JhdGNoX2luaXQoXHUwMDI2ZmJhdGNoKTtcbiA0MTM6XHRcdGluZGV4ID0gc3RhcnQ7XG4gNDE0Olx0XHR3aGlsZSAoaW5kZXggXHUwMDNjIGVuZCBcdTAwMjZcdTAwMjYgZmluZF9sb2NrX2VudHJpZXMobWFwcGluZywgXHUwMDI2aW5kZXgsIGVuZCAtIDEsXG4gNDE1Olx0XHRcdFx0XHUwMDI2ZmJhdGNoLCBpbmRpY2VzKSkge1xuIDQxNjpcdFx0XHR0cnVuY2F0ZV9mb2xpb19iYXRjaF9leGNlcHRpb25hbHMobWFwcGluZywgXHUwMDI2ZmJhdGNoLCBpbmRpY2VzKTtcbiA0MTc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKTsgaSYjNDM7JiM0MzspXG4gNDE4Olx0XHRcdFx0dHJ1bmNhdGVfY2xlYW51cF9mb2xpbyhmYmF0Y2guZm9saW9zW2ldKTtcbiA0MTk6XHRcdFx0ZGVsZXRlX2Zyb21fcGFnZV9jYWNoZV9iYXRjaChtYXBwaW5nLCBcdTAwMjZmYmF0Y2gpO1xuIDQyMDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcdTAwMjZmYmF0Y2gpOyBpJiM0MzsmIzQzOylcbiA0MjE6XHRcdFx0XHRmb2xpb191bmxvY2soZmJhdGNoLmZvbGlvc1tpXSk7XG4gNDIyOlx0XHRcdGZvbGlvX2JhdGNoX3JlbGVhc2UoXHUwMDI2ZmJhdGNoKTtcbiA0MjM6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gNDI0Olx0XHR9XG4gNDI1Olx0XG4gNDI2Olx0XHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIDQyNzpcdFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgRkdQX0xPQ0ssIDApO1xuIDQyODpcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4gNDI5Olx0XHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG4gNDMwOlx0XHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxuIDQzMTpcdFx0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIDQzMjpcdFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4gNDMzOlx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gNDM0Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gNDM1Olx0XHRcdGZvbGlvID0gTlVMTDtcbiA0MzY6XHRcdH1cbiA0Mzc6XHRcbiA0Mzg6XHRcdGlmICghc2FtZV9mb2xpbykge1xuIDQzOTpcdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiA0NDA6XHRcdFx0XHRcdFx0XHRGR1BfTE9DSywgMCk7XG4gNDQxOlx0XHRcdGlmICghSVNfRVJSKGZvbGlvKSkge1xuIDQ0MjpcdFx0XHRcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXHUwMDI2ZW5kKTtcbiA0NDM6XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDQ0NDpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gNDQ1Olx0XHRcdH1cbiA0NDY6XHRcdH1cbiA0NDc6XHRcbiA0NDg6XHRcdGluZGV4ID0gc3RhcnQ7XG4gNDQ5Olx0XHR3aGlsZSAoaW5kZXggXHUwMDNjIGVuZCkge1xuIDQ1MDpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA0NTE6XHRcdFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFx1MDAyNmluZGV4LCBlbmQgLSAxLCBcdTAwMjZmYmF0Y2gsXG4gNDUyOlx0XHRcdFx0XHRpbmRpY2VzKSkge1xuIDQ1MzpcdFx0XHRcdC8qIElmIGFsbCBnb25lIGZyb20gc3RhcnQgb253YXJkcywgd2UmIzM5O3JlIGRvbmUgKi9cbiA0NTQ6XHRcdFx0XHRpZiAoaW5kZXggPT0gc3RhcnQpXG4gNDU1Olx0XHRcdFx0XHRicmVhaztcbiA0NTY6XHRcdFx0XHQvKiBPdGhlcndpc2UgcmVzdGFydCB0byBtYWtlIHN1cmUgYWxsIGdvbmUgKi9cbiA0NTc6XHRcdFx0XHRpbmRleCA9IHN0YXJ0O1xuIDQ1ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ1OTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBQYXRjaCBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB0b3VjaGluZyBzb21lIGNyaXRpY2FsIGFyZWFzLiBJdCYjMzk7cyBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBtbS90cnVuY2F0ZS5jYCBhbmQgYG1tL3NobWVtLmNgIGZpbGVzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAuIFRoZXNlIGFyZSBpbnRpbWF0ZWx5IGludm9sdmVkIGluIHRydW5jYXRpb24gb3BlcmF0aW9ucywgaG9sZSBwdW5jaGluZyAodmlhIGBmYWxsb2NhdGVgKSwgYGZ0cnVuY2F0ZWAsIGFuZCBwYWdlIGNhY2hlIG1hbmFnZW1lbnQuIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGNvcmUgdG8gZmlsZSBzeXN0ZW0gYmVoYXZpb3IgYW5kIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KClRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBwYWdlIGNhY2hlLCBmb2xpbyBoYW5kbGluZywgYW5kIGV2ZW4gZGVhbHMgd2l0aCBsYXJnZSBmb2xpb3Mgb3IgVEhQIHNwbGl0dGluZyBhbmQgdHJ1bmNhdGlvbiwgbWVhbnMgaXQmIzM5O3MgYSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGFmZmVjdGVkIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHM6IGB0cnVuY2F0ZWAsIGBmdHJ1bmNhdGVgLCBhbmQgYGZhbGxvY2F0ZWAsIHdoaWNoIGFyZSBjb21tb25seSB1c2VkIG9uIHJlZ3VsYXIgZmlsZXMsIGFzIHdlbGwgYXMgYHNobWVtYCwgYHRtcGZzYCwgYW5kIGBtZW1mZGAuIFRoYXQgbWFrZXMgaXQgZXZlbiBtb3JlIGltcG9ydGFudC4KCk15IGluaXRpYWwgYXNzZXNzbWVudD8gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgYSBkZWVwIGRpdmUuIEkgbmVlZCB0byBub3cgZXhhbWluZSB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB0byBzZWUgd2hhdCBhZGRpdGlvbmFsIGRldGFpbHMgSSBjYW4gZ2xlYW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBhbmQgYW55IG90aGVyIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMuIEkmIzM5O2xsIHJ1biBhIGdyZXAgdG8gY29uZmlybSB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTYyOT1pbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaDo2MzA6Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsXG5tbS9pbnRlcm5hbC5oLTYzMS1cdFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XG4tLVxubW0vc2htZW0uYz0xMTE5PXN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXG4tLVxubW0vc2htZW0uYy0xMTc3LVx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbm1tL3NobWVtLmM6MTE3ODpcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG5tbS9zaG1lbS5jLTExNzktXHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4tLVxubW0vc2htZW0uYy0xMTg5LVx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbm1tL3NobWVtLmM6MTE5MDpcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xubW0vc2htZW0uYy0xMTkxLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL3NobWVtLmMtMTIyNy1cdFx0XHRcdFx0ICogSWYgZm91bmQgYSBsYXJnZSBzd2FwIGVudHJ5IGNyb3NzIHRoZSBlbmQgb3Igc3RhcnRcbm1tL3NobWVtLmM6MTIyODpcdFx0XHRcdFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXG5tbS9zaG1lbS5jLTEyMjktXHRcdFx0XHRcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXG4tLVxubW0vc2htZW0uYy0xMjU3LVx0XHRcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG5tbS9zaG1lbS5jOjEyNTg6XHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG5tbS9zaG1lbS5jLTEyNTktXHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4tLVxubW0vdHJ1bmNhdGUuYz0xODA9c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXG4tLVxubW0vdHJ1bmNhdGUuYy0yMTgtICovXG5tbS90cnVuY2F0ZS5jOjIxOTpib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbm1tL3RydW5jYXRlLmMtMjIwLVx0XHRcdFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxuLS1cbm1tL3RydW5jYXRlLmM9MzgwPXZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vdHJ1bmNhdGUuYy00MjktXHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG5tbS90cnVuY2F0ZS5jOjQzMDpcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG5tbS90cnVuY2F0ZS5jLTQzMS1cdFx0XHRcdFx0XHQgIHNhbWVfZm9saW8gPyBcdTAwMjZlbmQgOiBOVUxMKSlcbi0tXG5tbS90cnVuY2F0ZS5jLTQ0MS1cdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG5tbS90cnVuY2F0ZS5jOjQ0MjpcdFx0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG5tbS90cnVuY2F0ZS5jLTQ0My1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBwaWVjZWQgdG9nZXRoZXIgZnJvbSB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBzb21lIHNoYXJlZCBtZW1vcnkgYW5kIHRydW5jYXRpb24gZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdG9wIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBgbW0vc2htZW0uY2AgYW5kIGBtbS90cnVuY2F0ZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQsIGlmIGFueSwgZmxleGliaWxpdHkgaXMgb2ZmZXJlZCBhdCBjb21waWxlIHRpbWUuIEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBvcHRpb25hbCBmZWF0dXJlcyBJIHNob3VsZCBrbm93IGFib3V0PyBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4KClRoZW4sIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIHByb2Nlc3MsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lIGhvdyBgc2htZW0ub2AgYW5kIGB0cnVuY2F0ZS5vYCBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIFdoYXQgb3RoZXIgc291cmNlIGZpbGVzIGFyZSBidWlsdCBhbG9uZ3NpZGUgdGhlc2U/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgZmxhZ3Mgb3Igc3BlY2lmaWMgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGtub3cgYWJvdXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlc2UgZmlsZXMgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlIE1ha2VmaWxlIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2Ygc2VlaW5nIHRoZSBvdmVyYWxsIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0IGFsbCB3b3JrcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHRydW5jYXRlfHNobWVtKVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NTE9b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG5tbS9NYWtlZmlsZS01Mi1cdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxubW0vTWFrZWZpbGU6NTM6XHRcdFx0ICAgcmVhZGFoZWFkLm8gZm9saW8ubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbm1tL01ha2VmaWxlOjU0Olx0XHRcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcbm1tL01ha2VmaWxlLTU1LVx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG4tLVxubW0vc2htZW0uYz01MjA9c3RhdGljIGludCBzaG1lbV9jb25maXJtX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy01NjktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYzo1NzA6LyogaWZkZWYgaGVyZSB0byBhdm9pZCBibG9hdGluZyBzaG1lbS5vIHdoZW4gbm90IG5lY2Vzc2FyeSAqL1xubW0vc2htZW0uYy01NzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDAyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXM6IE1lbW9yeSBGaWxlc3lzdGVtcyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgbWVtb3J5LWJhc2VkIGZpbGVzeXN0ZW1zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBjdXJyZW50bHkgZW5hYmxlZCBpbiB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHJlZ2FyZGluZyBzaGFyZWQgbWVtb3J5LCB0ZW1wb3JhcnkgZmlsZXN5c3RlbXMsIGFuZCB0cmFuc3BhcmVudCBodWdlcGFnZXMuIEl0JiMzOTtzIGEgY29tbW9uIGRlcGVuZGVuY3kgYW5hbHlzaXMsIG5vdGhpbmcgbmV3LgoKTXkgZmlyc3QgY2hlY2sgd2lsbCBiZSBmb3IgYENPTkZJR19TSE1FTWAsIGBDT05GSUdfVE1QRlNgLCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25vdyB0aGVzZSBhcmUgaW1wb3J0YW50LiBTcGVjaWZpY2FsbHkgZm9yIGBDT05GSUdfU0hNRU1gLCBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBkaWdnaW5nIGludG8gYG1tL3NobWVtLmNgIG9yIG1heWJlIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGVzZSBmaWxlcyB0ZW5kIHRvIGJlIG15IGdvLXRvJiMzOTtzIHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCBmb3IgdGhhdCBzcGVjaWZpYyBzdWJzeXN0ZW0gYW5kIGhvdyBpdCBob29rcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgc2hhcmVkIG1lbW9yeSBpcywgd2VsbCwgc2hhcmVkIG1lbW9yeSBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU0hNRU18Q09ORklHX1RNUEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTE0Nj1vYmotJChDT05GSUdfRVhFQ01FTSkgJiM0Mzs9IGV4ZWNtZW0ub1xubW0vTWFrZWZpbGU6MTQ3Om9iai0kKENPTkZJR19UTVBGU19RVU9UQSkgJiM0Mzs9IHNobWVtX3F1b3RhLm9cbm1tL01ha2VmaWxlLTE0OC1vYmotJChDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUKSAmIzQzOz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXG4tLVxubW0vaHVnZV9tZW1vcnkuYz02MTk9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmh1Z2VwYWdlX2F0dHJbXSA9IHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTYyMy1cdFx1MDAyNmhwYWdlX3BtZF9zaXplX2F0dHIuYXR0cixcbm1tL2h1Z2VfbWVtb3J5LmM6NjI0OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtNjI1LVx0XHUwMDI2c2htZW1fZW5hYmxlZF9hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz03MjA9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfY3RybF9hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo3MjE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy03MjItXHRcdTAwMjZ0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NzgwPURFRklORV9NVEhQX1NUQVRfQVRUUihzd3BvdXRfZmFsbGJhY2ssIE1USFBfU1RBVF9TV1BPVVRfRkFMTEJBQ0spO1xubW0vaHVnZV9tZW1vcnkuYzo3ODE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy03ODItREVGSU5FX01USFBfU1RBVF9BVFRSKHNobWVtX2FsbG9jLCBNVEhQX1NUQVRfU0hNRU1fQUxMT0MpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Nzk2PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbm9uX3N0YXRzX2F0dHJzW10gPSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy03OTktXHRcdTAwMjZhbm9uX2ZhdWx0X2ZhbGxiYWNrX2NoYXJnZV9hdHRyLmF0dHIsXG5tbS9odWdlX21lbW9yeS5jOjgwMDojaWZuZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MDEtXHRcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgyMj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZmlsZV9zdGF0c19hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo4MjM6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MjQtXHRcdTAwMjZzaG1lbV9hbGxvY19hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz04MzY9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFueV9zdGF0c19hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo4Mzc6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MzgtXHRcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNDAzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9saWN5X21vZGVzW10gPVxuLS1cbm1tL21lbXBvbGljeS5jLTM0MTMtXG5tbS9tZW1wb2xpY3kuYzozNDE0OiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL21lbXBvbGljeS5jLTM0MTUtLyoqXG4tLVxubW0vbWVtcG9saWN5LmM9MzQyNT1pbnQgbXBvbF9wYXJzZV9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbClcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNTQ3LX1cbm1tL21lbXBvbGljeS5jOjM1NDg6I2VuZGlmIC8qIENPTkZJR19UTVBGUyAqL1xubW0vbWVtcG9saWN5LmMtMzU0OS1cbi0tXG5tbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00Ny1cbm1tL3NobWVtLmM6NDg6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy00OS0vKlxuLS1cbm1tL3NobWVtLmM9MTQyPXN0YXRpYyBib29sIHNobWVtX29yZGVyc19jb25maWd1cmVkIF9faW5pdGRhdGE7XG4tLVxubW0vc2htZW0uYy0xNDQtXG5tbS9zaG1lbS5jOjE0NTojaWZkZWYgQ09ORklHX1RNUEZTXG5tbS9zaG1lbS5jLTE0Ni1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9ibG9ja3Modm9pZClcbi0tXG5tbS9zaG1lbS5jPTI5ND1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNobWVtX3N3YXBsaXN0X2xvY2spO1xubW0vc2htZW0uYy0yOTUtXG5tbS9zaG1lbS5jOjI5NjojaWZkZWYgQ09ORklHX1RNUEZTX1FVT1RBXG5tbS9zaG1lbS5jLTI5Ny1cbi0tXG5tbS9zaG1lbS5jPTMzMT1zdGF0aWMgc3RydWN0IGRxdW90IF9fcmN1ICoqc2htZW1fZ2V0X2RxdW90cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL3NobWVtLmMtMzM0LX1cbm1tL3NobWVtLmM6MzM1OiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cbm1tL3NobWVtLmMtMzM2LVxuLS1cbm1tL3NobWVtLmM9NjcwPXN0YXRpYyBpbnQgc2htZW1fcGFyc2VfaHVnZShjb25zdCBjaGFyICpzdHIpXG4tLVxubW0vc2htZW0uYy03MDMtXG5tbS9zaG1lbS5jOjcwNDojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIHx8IGRlZmluZWQoQ09ORklHX1RNUEZTKVxubW0vc2htZW0uYy03MDUtc3RhdGljIGNvbnN0IGNoYXIgKnNobWVtX2Zvcm1hdF9odWdlKGludCBodWdlKVxuLS1cbm1tL3NobWVtLmM9MTQwNz1zdGF0aWMgdm9pZCBzaG1lbV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL3NobWVtLmMtMTQ0NS1cdGNsZWFyX2lub2RlKGlub2RlKTtcbm1tL3NobWVtLmM6MTQ0NjojaWZkZWYgQ09ORklHX1RNUEZTX1FVT1RBXG5tbS9zaG1lbS5jLTE0NDctXHRkcXVvdF9mcmVlX2lub2RlKGlub2RlKTtcbi0tXG5tbS9zaG1lbS5jPTE3NTI9RVhQT1JUX1NZTUJPTF9HUEwoc2htZW1fd3JpdGVvdXQpO1xubW0vc2htZW0uYy0xNzUzLVxubW0vc2htZW0uYzoxNzU0OiNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVE1QRlMpXG5tbS9zaG1lbS5jLTE3NTUtc3RhdGljIHZvaWQgc2htZW1fc2hvd19tcG9sKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sKVxuLS1cbm1tL3NobWVtLmM9MTc2Nz1zdGF0aWMgc3RydWN0IG1lbXBvbGljeSAqc2htZW1fZ2V0X3NibXBvbChzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvKVxuLS1cbm1tL3NobWVtLmMtMTc3Ny19XG5tbS9zaG1lbS5jOjE3Nzg6I2Vsc2UgLyogIUNPTkZJR19OVU1BIHx8ICFDT05GSUdfVE1QRlMgKi9cbm1tL3NobWVtLmMtMTc3OS1zdGF0aWMgaW5saW5lIHZvaWQgc2htZW1fc2hvd19tcG9sKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sKVxuLS1cbm1tL3NobWVtLmM9MTc4Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1wb2xpY3kgKnNobWVtX2dldF9zYm1wb2woc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbylcbi0tXG5tbS9zaG1lbS5jLTE3ODUtfVxubW0vc2htZW0uYzoxNzg2OiNlbmRpZiAvKiBDT05GSUdfTlVNQSBcdTAwMjZcdTAwMjYgQ09ORklHX1RNUEZTICovXG5tbS9zaG1lbS5jLTE3ODctXG4tLVxubW0vc2htZW0uYz0yOTIxPXN0YXRpYyBpbnQgc2htZW1fZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbm1tL3NobWVtLmMtMjkyNi1cbm1tL3NobWVtLmM6MjkyNzojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG5tbS9zaG1lbS5jLTI5Mjgtc3RhdGljIGludCBzaG1lbV9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKiwgdm9pZCAqKTtcbi0tXG5tbS9zaG1lbS5jPTMwMTI9c3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxubW0vc2htZW0uYy0zMDkwLVxubW0vc2htZW0uYzozMDkxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbm1tL3NobWVtLmMtMzA5Mi1zdGF0aWMgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxubW0vc2htZW0uYz0zMTIwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTMxMjUtfVxubW0vc2htZW0uYzozMTI2OiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cbm1tL3NobWVtLmMtMzEyNy1cbi0tXG5tbS9zaG1lbS5jPTMyMTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyBzaG1lbV91ZmZkX29wcyA9IHtcbi0tXG5tbS9zaG1lbS5jLTMyMjMtXG5tbS9zaG1lbS5jOjMyMjQ6I2lmZGVmIENPTkZJR19UTVBGU1xubW0vc2htZW0uYy0zMjI1LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4tLVxubW0vc2htZW0uYz00MDk4PXN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy00MTI5LVxubW0vc2htZW0uYzo0MTMwOiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbm1tL3NobWVtLmMtNDEzMS1cbi0tXG5tbS9zaG1lbS5jPTQzMTQ9c3RhdGljIHNzaXplX3Qgc2htZW1fbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9zaG1lbS5jLTQzMTktfVxubW0vc2htZW0uYzo0MzIwOiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfWEFUVFIgKi9cbm1tL3NobWVtLmMtNDMyMS1cbm1tL3NobWVtLmM9NDMyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc2hvcnRfc3ltbGlua19vcGVyYXRpb25zID0ge1xuLS1cbm1tL3NobWVtLmMtNDMyNS1cdC5nZXRfbGlua1x0PSBzaW1wbGVfZ2V0X2xpbmssXG5tbS9zaG1lbS5jOjQzMjY6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxubW0vc2htZW0uYy00MzI3LVx0Lmxpc3R4YXR0clx0PSBzaG1lbV9saXN0eGF0dHIsXG4tLVxubW0vc2htZW0uYz00MzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxubW0vc2htZW0uYy00MzM0LVx0LmdldF9saW5rXHQ9IHNobWVtX2dldF9saW5rLFxubW0vc2htZW0uYzo0MzM1OiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbm1tL3NobWVtLmMtNDMzNi1cdC5saXN0eGF0dHJcdD0gc2htZW1fbGlzdHhhdHRyLFxuLS1cbm1tL3NobWVtLmM9NDQ1Mj1jb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgc2htZW1fZnNfcGFyYW1ldGVyc1tdID0ge1xuLS1cbm1tL3NobWVtLmMtNDQ2My1cdGZzcGFyYW1fZmxhZyAgKFwmIzM0O25vc3dhcFwmIzM0OyxcdE9wdF9ub3N3YXApLFxubW0vc2htZW0uYzo0NDY0OiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbm1tL3NobWVtLmMtNDQ2NS1cdGZzcGFyYW1fZmxhZyAgKFwmIzM0O3F1b3RhXCYjMzQ7LFx0XHRPcHRfcXVvdGEpLFxuLS1cbm1tL3NobWVtLmM9NDczND1zdGF0aWMgaW50IHNobWVtX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5tbS9zaG1lbS5jLTQ3ODctXG5tbS9zaG1lbS5jOjQ3ODg6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxubW0vc2htZW0uYy00Nzg5LSNkZWZpbmUgQ0hBTkdFRF9MSU1JVChuYW1lKVx0XHRcdFx0XHRcdFxcXG4tLVxubW0vc2htZW0uYy00Nzk3LVx0fVxubW0vc2htZW0uYzo0Nzk4OiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cbm1tL3NobWVtLmMtNDc5OS1cbi0tXG5tbS9zaG1lbS5jPTQ4MzE9c3RhdGljIGludCBzaG1lbV9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxubW0vc2htZW0uYy00ODY4LVx0ICovXG5tbS9zaG1lbS5jOjQ4Njk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVE1QRlNfSU5PREU2NCkgfHwgc2JpbmZvLVx1MDAzZWZ1bGxfaW51bXMpXG5tbS9zaG1lbS5jLTQ4NzAtXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDssaW5vZGUlZFwmIzM0OywgKHNiaW5mby1cdTAwM2VmdWxsX2ludW1zID8gNjQgOiAzMikpO1xuLS1cbm1tL3NobWVtLmMtNDg4MC1cdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0Oyxub3N3YXBcJiMzNDspO1xubW0vc2htZW0uYzo0ODgxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbm1tL3NobWVtLmMtNDg4Mi1cdGlmIChzYl9oYXNfcXVvdGFfYWN0aXZlKHJvb3QtXHUwMDNlZF9zYiwgVVNSUVVPVEEpKVxuLS1cbm1tL3NobWVtLmMtNDkwMS1cbm1tL3NobWVtLmM6NDkwMjojZW5kaWYgLyogQ09ORklHX1RNUEZTICovXG5tbS9zaG1lbS5jLTQ5MDMtXG5tbS9zaG1lbS5jPTQ5MDQ9c3RhdGljIHZvaWQgc2htZW1fcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxubW0vc2htZW0uYy00OTEyLVxubW0vc2htZW0uYzo0OTEzOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbm1tL3NobWVtLmMtNDkxNC1cdHNobWVtX2Rpc2FibGVfcXVvdGFzKHNiKTtcbi0tXG5tbS9zaG1lbS5jLTQ5MTgtXHRtcG9sX3B1dChzYmluZm8tXHUwMDNlbXBvbCk7XG5tbS9zaG1lbS5jOjQ5MTk6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxubW0vc2htZW0uYy00OTIwLVx0c2ltcGxlX3hhdHRyX2NhY2hlX2NsZWFudXAoXHUwMDI2c2JpbmZvLVx1MDAzZXhhX2NhY2hlKTtcbi0tXG5tbS9zaG1lbS5jLTQ5MjUtXG5tbS9zaG1lbS5jOjQ5MjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19UTVBGUylcbm1tL3NobWVtLmMtNDkyNy1zdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHNobWVtX2NpX2RlbnRyeV9vcHMgPSB7XG4tLVxubW0vc2htZW0uYz00OTMzPXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubW0vc2htZW0uYy00OTQ3LVxubW0vc2htZW0uYzo0OTQ4OiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL3NobWVtLmMtNDk0OS1cdC8qXG4tLVxubW0vc2htZW0uYy00OTU5LVx0XHRpZiAoIShjdHgtXHUwMDNlc2VlbiBcdTAwMjYgU0hNRU1fU0VFTl9JTlVNUykpXG5tbS9zaG1lbS5jOjQ5NjA6XHRcdFx0Y3R4LVx1MDAzZWZ1bGxfaW51bXMgPSBJU19FTkFCTEVEKENPTkZJR19UTVBGU19JTk9ERTY0KTtcbm1tL3NobWVtLmMtNDk2MS1cdFx0c2JpbmZvLVx1MDAzZW5vc3dhcCA9IGN0eC1cdTAwM2Vub3N3YXA7XG4tLVxubW0vc2htZW0uYy00OTg0LVx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9OT1VTRVI7XG5tbS9zaG1lbS5jOjQ5ODU6I2VuZGlmIC8qIENPTkZJR19UTVBGUyAqL1xubW0vc2htZW0uYy00OTg2LVx0c2ItXHUwMDNlc19kX2ZsYWdzIHw9IERDQUNIRV9ET05UQ0FDSEU7XG4tLVxubW0vc2htZW0uYy01MDE5LVx0c2ItXHUwMDNlc190aW1lX2dyYW4gPSAxO1xubW0vc2htZW0uYzo1MDIwOiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbm1tL3NobWVtLmMtNTAyMS1cdHNiLVx1MDAzZXNfeGF0dHIgPSBzaG1lbV94YXR0cl9oYW5kbGVycztcbm1tL3NobWVtLmMtNTAyMi0jZW5kaWZcbm1tL3NobWVtLmM6NTAyMzojaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTFxubW0vc2htZW0uYy01MDI0LVx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9QT1NJWEFDTDtcbi0tXG5tbS9zaG1lbS5jLTUwMjktXG5tbS9zaG1lbS5jOjUwMzA6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxubW0vc2htZW0uYy01MDMxLVx0aWYgKGN0eC1cdTAwM2VzZWVuIFx1MDAyNiBTSE1FTV9TRUVOX1FVT1RBKSB7XG4tLVxubW0vc2htZW0uYy01MDQyLVx0fVxubW0vc2htZW0uYzo1MDQzOiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cbm1tL3NobWVtLmMtNTA0NC1cbi0tXG5tbS9zaG1lbS5jPTUwNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgc2htZW1fZnNfY29udGV4dF9vcHMgPSB7XG4tLVxubW0vc2htZW0uYy01MDgxLVx0LmdldF90cmVlXHRcdD0gc2htZW1fZ2V0X3RyZWUsXG5tbS9zaG1lbS5jOjUwODI6I2lmZGVmIENPTkZJR19UTVBGU1xubW0vc2htZW0uYy01MDgzLVx0LnBhcnNlX21vbm9saXRoaWNcdD0gc2htZW1fcGFyc2VfbW9ub2xpdGhpYyxcbi0tXG5tbS9zaG1lbS5jPTUxNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHtcbm1tL3NobWVtLmMtNTE0MS1cdC5kaXJ0eV9mb2xpb1x0PSBub29wX2RpcnR5X2ZvbGlvLFxubW0vc2htZW0uYzo1MTQyOiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL3NobWVtLmMtNTE0My1cdC53cml0ZV9iZWdpblx0PSBzaG1lbV93cml0ZV9iZWdpbixcbi0tXG5tbS9zaG1lbS5jPTUxNTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htZW1fZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbm1tL3NobWVtLmMtNTE1NS1cdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHNobWVtX2dldF91bm1hcHBlZF9hcmVhLFxubW0vc2htZW0uYzo1MTU2OiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL3NobWVtLmMtNTE1Ny1cdC5sbHNlZWtcdFx0PSBzaG1lbV9maWxlX2xsc2Vlayxcbi0tXG5tbS9zaG1lbS5jPTUxNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxubW0vc2htZW0uYy01MTcwLVx0LnNldGF0dHJcdD0gc2htZW1fc2V0YXR0cixcbm1tL3NobWVtLmM6NTE3MTojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG5tbS9zaG1lbS5jLTUxNzItXHQubGlzdHhhdHRyXHQ9IHNobWVtX2xpc3R4YXR0cixcbi0tXG5tbS9zaG1lbS5jPTUxNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xubW0vc2htZW0uYzo1MTgwOiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL3NobWVtLmMtNTE4MS1cdC5nZXRhdHRyXHQ9IHNobWVtX2dldGF0dHIsXG4tLVxubW0vc2htZW0uYy01MTkzLSNlbmRpZlxubW0vc2htZW0uYzo1MTk0OiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbm1tL3NobWVtLmMtNTE5NS1cdC5saXN0eGF0dHJcdD0gc2htZW1fbGlzdHhhdHRyLFxuLS1cbm1tL3NobWVtLmMtNTE5OC0jZW5kaWZcbm1tL3NobWVtLmM6NTE5OTojaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTFxubW0vc2htZW0uYy01MjAwLVx0LnNldGF0dHJcdD0gc2htZW1fc2V0YXR0cixcbi0tXG5tbS9zaG1lbS5jPTUyMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbm1tL3NobWVtLmMtNTIwNi1cdC5nZXRhdHRyXHQ9IHNobWVtX2dldGF0dHIsXG5tbS9zaG1lbS5jOjUyMDc6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxubW0vc2htZW0uYy01MjA4LVx0Lmxpc3R4YXR0clx0PSBzaG1lbV9saXN0eGF0dHIsXG5tbS9zaG1lbS5jLTUyMDktI2VuZGlmXG5tbS9zaG1lbS5jOjUyMTA6I2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0xcbm1tL3NobWVtLmMtNTIxMS1cdC5zZXRhdHRyXHQ9IHNobWVtX3NldGF0dHIsXG4tLVxubW0vc2htZW0uYz01MjE2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHMgPSB7XG4tLVxubW0vc2htZW0uYy01MjE5LVx0LmRlc3Ryb3lfaW5vZGVcdD0gc2htZW1fZGVzdHJveV9pbm9kZSxcbm1tL3NobWVtLmM6NTIyMDojaWZkZWYgQ09ORklHX1RNUEZTXG5tbS9zaG1lbS5jLTUyMjEtXHQuc3RhdGZzXHRcdD0gc2htZW1fc3RhdGZzLFxuLS1cbm1tL3NobWVtLmMtNTIyMy0jZW5kaWZcbm1tL3NobWVtLmM6NTIyNDojaWZkZWYgQ09ORklHX1RNUEZTX1FVT1RBXG5tbS9zaG1lbS5jLTUyMjUtXHQuZ2V0X2RxdW90c1x0PSBzaG1lbV9nZXRfZHF1b3RzLFxuLS1cbm1tL3NobWVtLmM9NTI2MD1pbnQgc2htZW1faW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5tbS9zaG1lbS5jLTUyNzctXHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZzaG1lbV9mc19jb250ZXh0X29wcztcbm1tL3NobWVtLmM6NTI3ODojaWZkZWYgQ09ORklHX1RNUEZTXG5tbS9zaG1lbS5jLTUyNzktXHRmYy1cdTAwM2VzYl9mbGFncyB8PSBTQl9JX1ZFUlNJT047XG4tLVxubW0vc2htZW0uYz01Mjg0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBzaG1lbV9mc190eXBlID0ge1xuLS1cbm1tL3NobWVtLmMtNTI4Ny1cdC5pbml0X2ZzX2NvbnRleHQgPSBzaG1lbV9pbml0X2ZzX2NvbnRleHQsXG5tbS9zaG1lbS5jOjUyODg6I2lmZGVmIENPTkZJR19UTVBGU1xubW0vc2htZW0uYy01Mjg5LVx0LnBhcmFtZXRlcnNcdD0gc2htZW1fZnNfcGFyYW1ldGVycyxcbi0tXG5tbS9zaG1lbS5jLTUyOTQtXG5tbS9zaG1lbS5jOjUyOTU6I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVE1QRlMpXG5tbS9zaG1lbS5jLTUyOTYtXG4tLVxubW0vc2htZW0uYz01MzM5PXN0YXRpYyBpbnQgX19pbml0IHRtcGZzX3N5c2ZzX2luaXQodm9pZClcbi0tXG5tbS9zaG1lbS5jLTUzNTItfVxubW0vc2htZW0uYzo1MzUzOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR19UTVBGUyAqL1xubW0vc2htZW0uYy01MzU0LVxubW0vc2htZW0uYz01MzU1PXZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZClcbi0tXG5tbS9zaG1lbS5jLTUzNjAtXG5tbS9zaG1lbS5jOjUzNjE6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxubW0vc2htZW0uYy01MzYyLVx0cmVnaXN0ZXJfcXVvdGFfZm9ybWF0KFx1MDAyNnNobWVtX3F1b3RhX2Zvcm1hdCk7XG4tLVxubW0vc2htZW0uYy01Mzc3LVxubW0vc2htZW0uYzo1Mzc4OiNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RNUEZTKVxubW0vc2htZW0uYy01Mzc5LVx0ZXJyb3IgPSB0bXBmc19zeXNmc19pbml0KCk7XG4tLVxubW0vc2htZW0uYy01NDAzLW91dDI6XG5tbS9zaG1lbS5jOjU0MDQ6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxubW0vc2htZW0uYy01NDA1LVx0dW5yZWdpc3Rlcl9xdW90YV9mb3JtYXQoXHUwMDI2c2htZW1fcXVvdGFfZm9ybWF0KTtcbi0tXG5tbS9zaG1lbS5jPTU3MDE9X19zZXR1cChcJiMzNDt0aHBfc2htZW09XCYjMzQ7LCBzZXR1cF90aHBfc2htZW0pO1xuLS1cbm1tL3NobWVtLmMtNTcwNC1cbm1tL3NobWVtLmM6NTcwNTojZWxzZSAvKiAhQ09ORklHX1NITUVNICovXG5tbS9zaG1lbS5jLTU3MDYtXG4tLVxubW0vc2htZW0uYz01Nzc0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxubW0vc2htZW0uYy01NzgxLVxubW0vc2htZW0uYzo1NzgyOiNlbmRpZiAvKiBDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTc4My1cbi0tXG5tbS9zaG1lbS5jPTU5MzY9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9zaG1lbS5jLTU5Mzgte1xubW0vc2htZW0uYzo1OTM5OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL3NobWVtLmMtNTk0MC1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzM5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc2htZW1fdW5kb19yYW5nZWAgRnVuY3Rpb24qKgoKT2theSwgc28gYHNobWVtX3VuZG9fcmFuZ2VgIGluIGBtbS9zaG1lbS5jYCBpcyBjbGVhcmx5IGNvbmRpdGlvbmFsLCBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfU0hNRU1gIGF0IGxpbmUgNDguIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBuZWVkIHRvIGtlZXAgYENPTkZJR19TSE1FTWAgaW4gbWluZC4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBUaGlua2luZyBhYm91dCBpdCwgYENPTkZJR19TSE1FTWAgd2lsbCBiZSB0aWVkIHRvIG90aGVyIGNvbmZpZ3MsIHByb2JhYmx5IGBDT05GSUdfVE1QRlNgLCBtYXliZSBldmVuIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNoYXJlZCBtZW1vcnkuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcyB0byBjb25maXJtIHRoZXNlIGxpbmthZ2VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgYGluaXQvS2NvbmZpZ2Agb3IgYSBzaW1pbGFyIGZpbGUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg5Nj1jb25maWcgRVZFTlRGRFxuLS1cbmluaXQvS2NvbmZpZy0xOTA0LVxuaW5pdC9LY29uZmlnOjE5MDU6Y29uZmlnIFNITUVNXG5pbml0L0tjb25maWctMTkwNi1cdGJvb2wgXCYjMzQ7VXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG1tL0tjb25maWdgLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gemVybyBpbiBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoYXQgZmlsZSB0byBjb25maXJtIGl0cyBwcmVzZW5jZSwgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgb3B0aW9uIGlzIGNvbnRyb2xsZWQgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaXQgbWlnaHQgcmVsYXRlIHRvLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbmluZyBtYWNybywgaXRzIHBvc3NpYmxlIHN0YXRlcyAoYGJvb2xgLCBgdHJpc3RhdGVgKSwgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaW1wbGljYXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IG9mIHRoZSBrZXJuZWwuIFVuZGVyc3RhbmRpbmcgdGhpcyBLY29uZmlnIG9wdGlvbiBpcyBmdW5kYW1lbnRhbCB0byBhbmFseXppbmcgdGhlIHN5c3RlbSYjMzk7cyBUSFAgYmVoYXZpb3IhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgzNT1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzNy1cbm1tL0tjb25maWc6ODM4Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM5LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTY9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjEtXG5tbS9LY29uZmlnOjg2MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODYzLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODY4LVxubW0vS2NvbmZpZzo4Njk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzAtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODc3LVxubW0vS2NvbmZpZzo4Nzg6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODc5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODU9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTQtXG5tbS9LY29uZmlnOjg5NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTA0LVxubW0vS2NvbmZpZzo5MDU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTA2LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTQtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyMC1cbm1tL0tjb25maWc6OTIxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkyMi1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzMD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzOS1cbm1tL0tjb25maWc6OTQwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQxLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDgtXG5tbS9LY29uZmlnOjk0OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1OC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTY0LVxubW0vS2NvbmZpZzo5NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTY2LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA4MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBTeW1ib2wgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayBgRm9jdXNTeW1ib2xzYCDigJMgd2hhdCBmdW5jdGlvbnMgYXJlIGZsYWdnZWQgYXMgbW9kaWZpZWQ/IEFoLCBoZXJlIHdlIGdvOiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiBpZiBhbnkgb2YgdGhlc2UgYXJlIHN0YXRpYyBvciB3aWRlbHkgdXNlZC4gVGhhdCYjMzk7bGwgaW5mbHVlbmNlIGhvdyBtdWNoIHNjcnV0aW55IHRoZXkgbmVlZC4KCkxldCYjMzk7cyBicmVhayB0aGVtIGRvd246IGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBpcyBkZWZpbmVkIGluIGBtbS90cnVuY2F0ZS5jYC4gRnJvbSBtZW1vcnksIGl0JiMzOTtzIG5vdCBzdGF0aWMgYW5kIGlzIGV4cG9ydGVkIGludGVybmFsbHksIGF0IGxlYXN0IGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHZpYSBgbW0vaW50ZXJuYWwuaGAuIEl0IHNlZW1zIHNwZWNpZmljIHRvIHBhcnRpYWwgZm9saW8gdHJ1bmNhdGlvbiwgZGVmaW5pdGVseSBub3Qgc29tZXRoaW5nIHRoYXQmIzM5O3MgdWJpcXVpdG91cyBhY3Jvc3MgdGhlIGtlcm5lbC4KCk5leHQsIGBzaG1lbV91bmRvX3JhbmdlYC4gVGhpcyBpcyBzdGF0aWMgYW5kIHdpdGhpbiBgbW0vc2htZW0uY2AuIEl0JiMzOTtzIGNhbGxlZCBieSBhIGZldyBvdGhlciBzaG1lbS1zcGVjaWZpYyBmdW5jdGlvbnM6IGBzaG1lbV90cnVuY2F0ZV9yYW5nZWAsIGBzaG1lbV9mYWxsb2NhdGVgLCBgc2htZW1fZXZpY3RfaW5vZGVgLCBhbmQgYHNobWVtX2ZyZWVfaW5fbWVtb3J5X3BhZ2VzYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGJlaW5nIHN0YXRpYyBtaWdodCBtZWFuIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkIGluIHRoZSB2bWxpbnV4IHN5bWJvbCB0YWJsZSwgb3IgYXQgbGVhc3Qgbm90IGluIGEgd2F5IHRoYXQgaXMgZWFzaWx5IHZpc2libGUuIFRoYXQgbWFrZXMgbWUgdGhpbmsgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBpdHMgY2FsbGVycy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgd2hldGhlciBgc2htZW1fdHJ1bmNhdGVfcmFuZ2VgIG9yIGBzaG1lbV9mYWxsb2NhdGVgIGFyZSBhbHNvIHRhcmdldHMuCgpGaW5hbGx5LCBgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VgIHdoaWNoIGlzIGRlZmluZWQgaW4gYG1tL3RydW5jYXRlLmNgLiBUaGlzIGlzIG5vbi1zdGF0aWMsIGFuZCBzZWVtcyB0byBiZSBpbnZvbHZlZCBpbiBob2xlIHB1bmNoaW5nIGFuZCB0cnVuY2F0aW9uIG9wZXJhdGlvbnMsIHNvIG5vdCB1YmlxdWl0b3VzIGJ1dCBub3QgYXMgdGFyZ2V0ZWQgYXMgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGlzIGBzaG1lbV91bmRvX3JhbmdlYCBidXNpbmVzcyBtb3JlIHByZWNpc2VseS4gSXQmIzM5O3Mgc3RhdGljLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgYW5kIHNlZSBpZiBpdCYjMzk7cyB2aXNpYmxlLiBJZiBub3QsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBpdHMgY2FsbGVycywgZXNwZWNpYWxseSBgc2htZW1fdHJ1bmNhdGVfcmFuZ2VgIGFuZCBgc2htZW1fZmFsbG9jYXRlYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHNobWVtX3VuZG9fcmFuZ2VgIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3NobWVtLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1fdW5kb19yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTEwODc9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleClcbi0tXG5tbS9zaG1lbS5jLTExMTgtICovXG5tbS9zaG1lbS5jOjExMTk6c3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcbm1tL3NobWVtLmMtMTEyMC1cdFx0XHRcdFx0XHRcdFx0IGJvb2wgdW5mYWxsb2MpXG4tLVxubW0vc2htZW0uYz0xMjg0PXZvaWQgc2htZW1fdHJ1bmNhdGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQpXG5tbS9zaG1lbS5jLTEyODUte1xubW0vc2htZW0uYzoxMjg2Olx0c2htZW1fdW5kb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5kLCBmYWxzZSk7XG5tbS9zaG1lbS5jLTEyODctXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XG4tLVxubW0vc2htZW0uYz0yNjMxPXN0YXRpYyBpbnQgc3luY2hyb25vdXNfd2FrZV9mdW5jdGlvbih3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsXG4tLVxubW0vc2htZW0uYy0yNjQzLSAqIGZhdWx0aW5nIHBhZ2VzIGludG8gdGhlIGhvbGUgd2hpbGUgaXQmIzM5O3MgYmVpbmcgcHVuY2hlZC4gIEFsdGhvdWdoXG5tbS9zaG1lbS5jOjI2NDQ6ICogc2htZW1fdW5kb19yYW5nZSgpIGRvZXMgcmVtb3ZlIHRoZSBhZGRpdGlvbnMsIGl0IG1heSBiZSB1bmFibGUgdG9cbm1tL3NobWVtLmMtMjY0NS0gKiBrZWVwIHVwLCBhcyBlYWNoIG5ldyBwYWdlIG5lZWRzIGl0cyBvd24gdW5tYXBfbWFwcGluZ19yYW5nZSgpIGNhbGwsXG4tLVxubW0vc2htZW0uYz0zNjEwPXN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxubW0vc2htZW0uYy0zNzIwLVx0XHRcdGlmIChpbmRleCBcdTAwM2Ugc3RhcnQpIHtcbm1tL3NobWVtLmM6MzcyMTpcdFx0XHRcdHNobWVtX3VuZG9fcmFuZ2UoaW5vZGUsXG5tbS9zaG1lbS5jLTM3MjItXHRcdFx0XHQgICAgKGxvZmZfdClzdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCBDYWxsZXJzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCBpcyBiZWluZyB1c2VkLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgaW50byBgbW0vdHJ1bmNhdGUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGludm9raW5nIHRoaXMgZnVuY3Rpb24uIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyB3aWxsIGludm9sdmUgdHJhY2luZyBleGVjdXRpb24gcGF0aHMsIHNpbmNlIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2Ygd2hlcmUgdGhlIHRydW5jYXRpb24gaXMgdGFraW5nIHBsYWNlIGlzIGtleS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBqdXN0IGxvb2tpbmcgZm9yIGRpcmVjdCBjYWxscyB3aXRoaW4gdGhlIGNvZGUsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYXNzdW1lIHRoYXQmIzM5O3MgdGhlIHdob2xlIHN0b3J5LiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciBtYWNyb3MgdG9vLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVucmF2ZWxpbmcgd2hhdGV2ZXIgaXNzdWUgb3Igb3B0aW1pemF0aW9uIEkmIzM5O20gbG9va2luZyBhdCwgYnV0IGl0JiMzOTtzIGEgY3JpdGljYWwgb25lLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYW5kc2NhcGUgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgc29sdXRpb25zIG9yIGltcHJvdmVtZW50cy4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCByZWFsbHkgZ3VpZGUgdGhlIHJlc3Qgb2YgbXkgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9sb2NraW5nLnJzdD01Mjc9cGFnZSBjYWNoZSBjb250ZW50cy4gVXN1YWxseSB0aGUgZmlsZXN5c3RlbSBuZWVkcyB0byBjYWxsXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2xvY2tpbmcucnN0OjUyODp0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSgpIHRvIGludmFsaWRhdGUgcmVsZXZhbnQgcmFuZ2Ugb2YgdGhlIHBhZ2UgY2FjaGUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2xvY2tpbmcucnN0LTUyOS1Ib3dldmVyIHRoZSBmaWxlc3lzdGVtIHVzdWFsbHkgYWxzbyBuZWVkcyB0byB1cGRhdGUgaXRzIGludGVybmFsIChhbmQgb24gZGlzaylcbi0tXG5ibG9jay9iZGV2LmM9MTEwPWludCB0cnVuY2F0ZV9iZGV2X3JhbmdlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5ibG9jay9iZGV2LmMtMTIzLVxuYmxvY2svYmRldi5jOjEyNDpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGJkZXYtXHUwMDNlYmRfbWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcbmJsb2NrL2JkZXYuYy0xMjUtXHRpZiAoIShtb2RlIFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcbi0tXG5mcy9idHJmcy9zZW5kLmM9NTYwMD1zdGF0aWMgaW50IHNlbmRfZXh0ZW50X2RhdGEoc3RydWN0IHNlbmRfY3R4ICpzY3R4LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCxcbi0tXG5mcy9idHJmcy9zZW5kLmMtNTcwNS1cdFx0ICovXG5mcy9idHJmcy9zZW5kLmM6NTcwNjpcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXHUwMDI2c2N0eC1cdTAwM2VjdXJfaW5vZGUtXHUwMDNlaV9kYXRhLFxuZnMvYnRyZnMvc2VuZC5jLTU3MDctXHRcdFx0XHRcdCAgIHNjdHgtXHUwMDNlcGFnZV9jYWNoZV9jbGVhcl9zdGFydCxcbi0tXG5mcy9idHJmcy9zZW5kLmM9NjcwOD1zdGF0aWMgdm9pZCBjbG9zZV9jdXJyZW50X2lub2RlKHN0cnVjdCBzZW5kX2N0eCAqc2N0eClcbi0tXG5mcy9idHJmcy9zZW5kLmMtNjcyMy1cdGlmIChzY3R4LVx1MDAzZWNsZWFuX3BhZ2VfY2FjaGUgXHUwMDI2XHUwMDI2IHNjdHgtXHUwMDNlcGFnZV9jYWNoZV9jbGVhcl9zdGFydCBcdTAwM2MgaV9zaXplKVxuZnMvYnRyZnMvc2VuZC5jOjY3MjQ6XHRcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKFx1MDAyNnNjdHgtXHUwMDNlY3VyX2lub2RlLVx1MDAzZWlfZGF0YSxcbmZzL2J0cmZzL3NlbmQuYy02NzI1LVx0XHRcdFx0XHQgICBzY3R4LVx1MDAzZXBhZ2VfY2FjaGVfY2xlYXJfc3RhcnQsXG4tLVxuZnMvY2VwaC9maWxlLmM9MTUxOT1jZXBoX2RpcmVjdF9yZWFkX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2NlcGgvZmlsZS5jLTE2MzgtXHRcdFx0ICovXG5mcy9jZXBoL2ZpbGUuYzoxNjM5Olx0XHRcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgcG9zLFxuZnMvY2VwaC9maWxlLmMtMTY0MC1cdFx0XHRcdFx0XHQgICBQQUdFX0FMSUdOKHBvcyAmIzQzOyBsZW4pIC0gMSk7XG4tLVxuZnMvZjJmcy9mMmZzLmg9NTEyNz1zdGF0aWMgaW5saW5lIHZvaWQgZjJmc190cnVuY2F0ZV9tZXRhX2lub2RlX3BhZ2VzKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSxcbi0tXG5mcy9mMmZzL2YyZnMuaC01MTQ3LVxuZnMvZjJmcy9mMmZzLmg6NTE0ODpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKE1FVEFfTUFQUElORyhzYmkpLFxuZnMvZjJmcy9mMmZzLmgtNTE0OS1cdFx0XHRGMkZTX0JMS19UT19CWVRFUygobG9mZl90KWJsa2FkZHIpLFxuLS1cbmZzL2YyZnMvZmlsZS5jPTM5PXN0YXRpYyB2b2lkIGYyZnNfemVyb19wb3N0X2VvZl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZjJmcy9maWxlLmMtNTItXHQvKiB6ZXJvIG9yIGRyb3AgcGFnZXMgb25seSBpbiByYW5nZSBvZiBbb2xkX3NpemUsIG5ld19zaXplXSAqL1xuZnMvZjJmcy9maWxlLmM6NTM6XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIG9sZF9zaXplLCBuZXdfc2l6ZSk7XG5mcy9mMmZzL2ZpbGUuYy01NC1cdGlmIChsb2NrKVxuLS1cbmZzL2YyZnMvZmlsZS5jPTkwNT1pbnQgZjJmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTkzMi1cdFx0XHQgKi9cbmZzL2YyZnMvZmlsZS5jOjkzMzpcdFx0XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsXG5mcy9mMmZzL2ZpbGUuYy05MzQtXHRcdFx0XHRcdEYyRlNfQkxLX1RPX0JZVEVTKDApLFxuLS1cbmZzL2YyZnMvZmlsZS5jPTQxOTE9c3RhdGljIGludCBmMmZzX3NlY190cmltX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQyNjMtXG5mcy9mMmZzL2ZpbGUuYzo0MjY0Olx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgcmFuZ2Uuc3RhcnQsXG5mcy9mMmZzL2ZpbGUuYy00MjY1LVx0XHRcdHRvX2VuZCA/IC0xIDogZW5kX2FkZHIgLSAxKTtcbi0tXG5mcy9mMmZzL3JlY292ZXJ5LmM9ODc1PWludCBmMmZzX3JlY292ZXJfZnN5bmNfZGF0YShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIGJvb2wgY2hlY2tfb25seSlcbi0tXG5mcy9mMmZzL3JlY292ZXJ5LmMtOTE4LVx0LyogdHJ1bmNhdGUgbWV0YSBwYWdlcyB0byBiZSB1c2VkIGJ5IHRoZSByZWNvdmVyeSAqL1xuZnMvZjJmcy9yZWNvdmVyeS5jOjkxOTpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKE1FVEFfTUFQUElORyhzYmkpLFxuZnMvZjJmcy9yZWNvdmVyeS5jLTkyMC1cdFx0XHQobG9mZl90KU1BSU5fQkxLQUREUihzYmkpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCAtMSk7XG4tLVxuZnMvZnVzZS9maWxlLmM9MjkyMD1zdGF0aWMgc3NpemVfdCBfX2Z1c2VfY29weV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuLS1cbmZzL2Z1c2UvZmlsZS5jLTMwMjktXG5mcy9mdXNlL2ZpbGUuYzozMDMwOlx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGVfb3V0LVx1MDAzZWlfbWFwcGluZyxcbmZzL2Z1c2UvZmlsZS5jLTMwMzEtXHRcdFx0XHQgICBBTElHTl9ET1dOKHBvc19vdXQsIFBBR0VfU0laRSksXG4tLVxuZnMvZ2ZzMi9nbG9wcy5jPTIyMT1zdGF0aWMgdm9pZCByZ3JwX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKVxuLS1cbmZzL2dmczIvZ2xvcHMuYy0yMzUtXHRnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFhdG9taWNfcmVhZChcdTAwMjZnbC1cdTAwM2VnbF9haWxfY291bnQpKTtcbmZzL2dmczIvZ2xvcHMuYzoyMzY6XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShtYXBwaW5nLCBzdGFydCwgZW5kKTtcbmZzL2dmczIvZ2xvcHMuYy0yMzctfVxuLS1cbmZzL2piZDIvam91cm5hbC5jPTE5NDM9c3RhdGljIGludCBfX2piZDJfam91cm5hbF9lcmFzZShqb3VybmFsX3QgKmpvdXJuYWwsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDAxLVxuZnMvamJkMi9qb3VybmFsLmM6MjAwMjpcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoam91cm5hbC1cdTAwM2VqX2Rldi1cdTAwM2ViZF9tYXBwaW5nLFxuZnMvamJkMi9qb3VybmFsLmMtMjAwMy1cdFx0XHRcdGJ5dGVfc3RhcnQsIGJ5dGVfc3RvcCAtIDEpO1xuLS1cbmZzL25mcy9uZnM0ZmlsZS5jPTI0Nz1zdGF0aWMgbG9mZl90IG5mczQyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX29mZixcbi0tXG5mcy9uZnMvbmZzNGZpbGUuYy0yOTMtXHRpZiAoIXJldClcbmZzL25mcy9uZnM0ZmlsZS5jOjI5NDpcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXHUwMDI2ZHN0X2lub2RlLVx1MDAzZWlfZGF0YSwgZHN0X29mZiwgZHN0X29mZiAmIzQzOyBjb3VudCAtIDEpO1xuZnMvbmZzL25mczRmaWxlLmMtMjk1LVxuLS1cbmZzL29jZnMyL2ZpbGUuYz0xNTMxPXN0YXRpYyB2b2lkIG9jZnMyX3RydW5jYXRlX2NsdXN0ZXJfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJ5dGVfc3RhcnQsXG4tLVxuZnMvb2NmczIvZmlsZS5jLTE1NDMtXHRcdHVubWFwX21hcHBpbmdfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCAtIHN0YXJ0LCAwKTtcbmZzL29jZnMyL2ZpbGUuYzoxNTQ0Olx0XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShtYXBwaW5nLCBzdGFydCwgZW5kIC0gMSk7XG5mcy9vY2ZzMi9maWxlLmMtMTU0NS1cdH1cbi0tXG5mcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4tLVxuZnMvb2NmczIvZmlsZS5jLTI3NDctXHQvKiBaYXAgYW55IHBhZ2UgY2FjaGUgZm9yIHRoZSBkZXN0aW5hdGlvbiBmaWxlJiMzOTtzIHJhbmdlLiAqL1xuZnMvb2NmczIvZmlsZS5jOjI3NDg6XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShcdTAwMjZpbm9kZV9vdXQtXHUwMDNlaV9kYXRhLFxuZnMvb2NmczIvZmlsZS5jLTI3NDktXHRcdFx0XHQgICByb3VuZF9kb3duKHBvc19vdXQsIFBBR0VfU0laRSksXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYz0xMzc1PXN0YXRpYyBsb2ZmX3QgY2lmc19yZW1hcF9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IG9mZixcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE0NjAtXHRjaWZzX2RiZyhGWUksIFwmIzM0O2Fib3V0IHRvIGRpc2NhcmQgcGFnZXMgJWxseC0lbGx4XFxuXCYjMzQ7LCBmc3RhcnQsIGZlbmQpO1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxNDYxOlx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXHUwMDI2dGFyZ2V0X2lub2RlLVx1MDAzZWlfZGF0YSwgZnN0YXJ0LCBmZW5kKTtcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTQ2Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NDI1OD12b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0KTtcbmluY2x1ZGUvbGludXgvbW0uaDo0MjU5OnZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBsc3RhcnQsXG5pbmNsdWRlL2xpbnV4L21tLmgtNDI2MC1cdFx0dW9mZl90IGxlbmQpO1xuLS1cbm1tL3NobWVtLmM9NTc1NT12b2lkIHNobWVtX3RydW5jYXRlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kKVxubW0vc2htZW0uYy01NzU2LXtcbm1tL3NobWVtLmM6NTc1NzpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcbm1tL3NobWVtLmMtNTc1OC19XG4tLVxubW0vdHJ1bmNhdGUuYz0zMzk9bG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3RydW5jYXRlLmMtMzU2LS8qKlxubW0vdHJ1bmNhdGUuYzozNTc6ICogdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UgLSB0cnVuY2F0ZSByYW5nZSBvZiBwYWdlcyBzcGVjaWZpZWQgYnkgc3RhcnQgXHUwMDI2IGVuZCBieXRlIG9mZnNldHNcbm1tL3RydW5jYXRlLmMtMzU4LSAqIEBtYXBwaW5nOiBtYXBwaW5nIHRvIHRydW5jYXRlXG4tLVxubW0vdHJ1bmNhdGUuYy0zNzYtICogTm90ZSB0aGF0IHNpbmNlIC1cdTAwM2VpbnZhbGlkYXRlX2ZvbGlvKCkgYWNjZXB0cyByYW5nZSB0byBpbnZhbGlkYXRlXG5tbS90cnVuY2F0ZS5jOjM3NzogKiB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSBpcyBhYmxlIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBsZW5kICYjNDM7IDEgaXMgbm90XG5tbS90cnVuY2F0ZS5jLTM3OC0gKiBwYWdlIGFsaWduZWQgcHJvcGVybHkuXG5tbS90cnVuY2F0ZS5jLTM3OS0gKi9cbm1tL3RydW5jYXRlLmM6MzgwOnZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5tbS90cnVuY2F0ZS5jLTM4MS1cdFx0XHRcdGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kKVxuLS1cbm1tL3RydW5jYXRlLmMtNDc4LX1cbm1tL3RydW5jYXRlLmM6NDc5OkVYUE9SVF9TWU1CT0wodHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UpO1xubW0vdHJ1bmNhdGUuYy00ODAtXG4tLVxubW0vdHJ1bmNhdGUuYz00OTQ9dm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGxzdGFydClcbm1tL3RydW5jYXRlLmMtNDk1LXtcbm1tL3RydW5jYXRlLmM6NDk2Olx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgbHN0YXJ0LCAobG9mZl90KS0xKTtcbm1tL3RydW5jYXRlLmMtNDk3LX1cbi0tXG5tbS90cnVuY2F0ZS5jPTkxNT12b2lkIHRydW5jYXRlX3BhZ2VjYWNoZV9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCBsb2ZmX3QgbGVuZClcbi0tXG5tbS90cnVuY2F0ZS5jLTkzNS1cdFx0XHRcdCAgICAxICYjNDM7IHVubWFwX2VuZCAtIHVubWFwX3N0YXJ0LCAwKTtcbm1tL3RydW5jYXRlLmM6OTM2Olx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcbm1tL3RydW5jYXRlLmMtOTM3LX1cbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTIzMD1zdGF0aWMgbG9uZyBrdm1fZ21lbV9wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0yNDItXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjI0MzpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgb2Zmc2V0LCBvZmZzZXQgJiM0MzsgbGVuIC0gMSk7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTI0NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1ODEKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUcnVuY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgdGhhdCBhcmUga2V5OiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCwgYW5kIGBzaG1lbV90cnVuY2F0ZV9yYW5nZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0YXJnZXRpbmcsIGFuZCB0aGV5JiMzOTtyZSBhbGwgcmVsYXRlZCB0byB0cnVuY2F0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHBhcnRpYWwgZm9saW9zIGFuZCBzaGFyZWQgbWVtb3J5IChzaG1lbSkuCgpOZXh0LCBJJiMzOTttIG5vdGluZyB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgU0hNRU1gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGlzIGdpdmVzIG1lIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIEkga25vdyBgU0hNRU1gIGVuYWJsZXMgc2hhcmVkIG1lbW9yeSBmdW5jdGlvbmFsaXR5LCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCByZWxhdGVzIHRvIHVzaW5nIGxhcmdlIHBhZ2VzIChodWdlIHBhZ2VzKSBmb3IgaW1wcm92ZWQgbWVtb3J5IHBlcmZvcm1hbmNlLiBUaGUgY29kZSBpbmRpY2F0ZXMgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWN0aXZlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2Ugc2htZW0gc2V0dXBzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IG90aGVyIGNvbmZpZ3MgYXJlIHJlcXVpcmVkLCBidXQgZnJvbSBpbml0aWFsIHJldmlldywgYG1tL3RydW5jYXRlLmNgIGFuZCBgbW0vc2htZW0uY2AgYXJlIGJ1aWx0IHVuY29uZGl0aW9uYWxseS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGBzaG1lbV91bmRvX3JhbmdlYCByZXF1aXJlcyBgQ09ORklHX1NITUVNYCB3aXRoaW4gYHNobWVtLmNgLgoKVGhlICYjMzQ7UmVhc29uaW5nJiMzNDsgcHJvdmlkZWQgaXMgYWxzbyBjcnVjaWFsLiBJdCBoaWdobGlnaHRzIHRoYXQgdGhlIHBhdGNoIGlzIGFib3V0IGNvcnJlY3RseSBoYW5kbGluZyBib3VuZGFyaWVzIGFuZCBpc29sYXRpb24gd2hlbiAqc3BsaXR0aW5nKiBmb2xpb3MsIHdoaWNoIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgZHVyaW5nIGZpbGUgdHJ1bmNhdGlvbiBhbmQgaG9sZSBwdW5jaGluZy4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBhZ2UgY2FjaGUgYW5kIHNobWVtIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYXJ0aWFsIGZvbGlvcyBhbmQgcG90ZW50aWFsbHkgVEhQLgoKVGhpcyBpcyBhbGwgY29uc2lzdGVudCB3aXRoIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGJlaW5nIHNldCB0byBgdHJ1ZWAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBmdXp6aW5nIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgd2lsbCBiZSBiZW5lZmljaWFsLCBhcyB0aGV5IGFyZSBub3cgc2VlbiBhcyBiZWluZyBtb3JlIHN1c2NlcHRpYmxlIHRvIGVkZ2UtY2FzZSBidWdzIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxpbmcgY29tcGxpY2F0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuCgpBbHJpZ2h0LCBpdCYjMzk7cyB0aW1lIHRvIHZlcmlmeSBldmVyeXRoaW5nIGFzIHJlcXVlc3RlZCBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkgZmVlbCBjb25maWRlbnQgYWJvdXQgdGhlIGluZm9ybWF0aW9uIEkmIzM5O3ZlIGdhdGhlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0hNRU0mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3NobWVtX3VuZG9fcmFuZ2UmIzM0OywKICAgICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UmIzM0OywKICAgICYjMzQ7c2htZW1fdHJ1bmNhdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBjYWNoZSB0cnVuY2F0aW9uIGxvZ2ljIChpbiBtbS90cnVuY2F0ZS5jIGFuZCBtbS9zaG1lbS5jKSBmb3IgcGFydGlhbCBmb2xpb3MsIGFsdGVyaW5nIGJvdW5kYXJ5IHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgc2VtYW50aWNzIG9mIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8gdG8gcHJldmVudCBpbXByb3BlciBkaXNjYXJkIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGFjdGl2ZWx5IHJlYWNoYWJsZSBrZXJuZWwgY29kZSBleGVyY2lzZWQgYnkgZmlsZSB0cnVuY2F0aW9uLCBmdHJ1bmNhdGUsIGFuZCBmYWxsb2NhdGUgaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSE1FTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8mIzM0OywKICAgICYjMzQ7c2htZW1fdW5kb19yYW5nZSYjMzQ7LAogICAgJiMzNDt0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSYjMzQ7LAogICAgJiMzNDtzaG1lbV90cnVuY2F0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIGNhY2hlIHRydW5jYXRpb24gbG9naWMgKGluIG1tL3RydW5jYXRlLmMgYW5kIG1tL3NobWVtLmMpIGZvciBwYXJ0aWFsIGZvbGlvcywgYWx0ZXJpbmcgYm91bmRhcnkgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZSBzZW1hbnRpY3Mgb2YgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyB0byBwcmV2ZW50IGltcHJvcGVyIGRpc2NhcmQgZHVyaW5nIGZvbGlvIHNwbGl0dGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gYWN0aXZlbHkgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGV4ZXJjaXNlZCBieSBmaWxlIHRydW5jYXRpb24sIGZ0cnVuY2F0ZSwgYW5kIGZhbGxvY2F0ZSBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBmb2xpbyB0cnVuY2F0aW9uIGFuZCBzcGxpdHRpbmcgbG9naWMgaW4gYG1tL3RydW5jYXRlLmNgLCBgbW0vc2htZW0uY2AsIGFuZCBgbW0vaW50ZXJuYWwuaGAgKGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBhbmQgaXRzIGNhbGxlcnMpLiBJdCByZWZhY3RvcnMgaG93IHRoZSBwYXJ0aWFsIGZvbGlvIHRydW5jYXRpb24gcmV0dXJuIHZhbHVlIGFuZCB0aGUgYGVuZGAgcGFnZSBvZmZzZXQgYXJlIGhhbmRsZWQgYW5kIHVwZGF0ZWQgd2hlbiBzcGxpdHRpbmcgb3Iga2VlcGluZyBzdHJhZGRsaW5nIGZvbGlvcy5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgaW50cm9kdWNlZCBvciByZWFkLCBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBhbHRlcmF0aW9ucyB0byBkYXRhIGJvdW5kcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgcGFnZSBjYWNoZSBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIGNhY2hlIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZmZlMTgyMGRmYjA3YjY5ZDE0YjM0MTVhNWU1MmRmNDZmNDU2ZGIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDY4ZGI1YWJkMGE0Y2UuLmRiN2Q5ZDlmYjVjOWUgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtNjI3LDggJiM0Mzs2MjcsOCBAQCB1bnNpZ25lZCBmaW5kX2xvY2tfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsCiB1bnNpZ25lZCBmaW5kX2dldF9lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCwKIAkJcGdvZmZfdCBlbmQsIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoLCBwZ29mZl90ICppbmRpY2VzKTsKIGludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LAotCQlsb2ZmX3QgZW5kKTsKJiM0Mztib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCwKJiM0MzsJCWxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpOwogbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIHVuc2lnbmVkIGxvbmcgbWFwcGluZ190cnlfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsIHVuc2lnbmVkIGxvbmcgKm5yX2ZhaWxlZCk7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4OWExNDk1ZTU1ZjdlLi5jYzE1NDhmZjUwOWFlIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTExNzUsMTEgJiM0MzsxMTc1LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCwKIAlpZiAoZm9saW8pIHsKIAkJc2FtZV9mb2xpbyA9IGxlbmQgJmx0OyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7CiAJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwotCQlpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHsKJiM0MzsJCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLAomIzQzOwkJCQkJCSAgc2FtZV9mb2xpbyA/ICZhbXA7ZW5kIDogTlVMTCkpCiAJCQlzdGFydCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pOwotCQkJaWYgKHNhbWVfZm9saW8pCi0JCQkJZW5kID0gZm9saW8tJmd0O2luZGV4OwotCQl9CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKQEAgLTExODksOCAmIzQzOzExODcsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLAogCQlmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwogCWlmIChmb2xpbykgewogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKLQkJaWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKQotCQkJZW5kID0gZm9saW8tJmd0O2luZGV4OwomIzQzOwkJdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCAmYW1wO2VuZCk7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQpAQCAtMTI1OCw3ICYjNDM7MTI1NSw4IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsCiAKIAkJCQlpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7CiAJCQkJCXRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKLQkJCQl9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHsKJiM0MzsJCQkJfSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLAomIzQzOwkJCQkJCQlsc3RhcnQsIGxlbmQsIE5VTEwpKSB7CiAJCQkJCS8qCiAJCQkJCSAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc28KIAkJCQkJICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLgpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggYjU4YmE5NDBiZTQ3NC4uMmViYjAwZjZjMzc5MyAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS90cnVuY2F0ZS5jCkBAIC0yMDYsMTUgJiM0MzsyMDYsMTggQEAgc3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsCiAvKgogICogSGFuZGxlIHBhcnRpYWwgZm9saW9zLiAgVGhlIGZvbGlvIG1heSBiZSBlbnRpcmVseSB3aXRoaW4gdGhlCiAgKiByYW5nZSBpZiBhIHNwbGl0IGhhcyByYWNlZCB3aXRoIHVzLiAgSWYgbm90LCB3ZSB6ZXJvIHRoZSBwYXJ0IG9mIHRoZQotICogZm9saW8gdGhhdCYjMzk7cyB3aXRoaW4gdGhlIFtzdGFydCwgZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmCiYjNDM7ICogZm9saW8gdGhhdCYjMzk7cyB3aXRoaW4gdGhlIFtsc3RhcnQsIGxlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWYKICAqIGl0JiMzOTtzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZAogICogaV9zaXplLCBhbmQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGRpc2NhcmQgcGFnZXMgd2hpY2ggbGllIHdpdGhpbiBhCiAgKiBuZXdseSBjcmVhdGVkIGhvbGUuCiAgKgotICogUmV0dXJucyBmYWxzZSBpZiBzcGxpdHRpbmcgZmFpbGVkIHNvIHRoZSBjYWxsZXIgY2FuIGF2b2lkCi0gKiBkaXNjYXJkaW5nIHRoZSBlbnRpcmUgZm9saW8gd2hpY2ggaXMgc3R1YmJvcm5seSB1bnNwbGl0LgomIzQzOyAqIFdoZW4gQGVuZCBub24tTlVMTCwgc2V0IHRvIHRoZSBpbmRleCBvZiB0aGUgZm9saW8gdGhhdCBjb250YWlucyBAbGVuZAomIzQzOyAqIGFuZCBtdXN0IGJlIGtlcHQgYnkgdGhlIGNhbGxlciYjMzk7cyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZQomIzQzOyAqIGZvbGlvIHdhcyBzcGxpdCwgJWZhbHNlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgZm9saW8gaXMgZHJvcHBlZCBvcgomIzQzOyAqIG1heSBzdGlsbCBzdHJhZGRsZSB0aGUgcmFuZ2UsIHNvIHRoZSBjYWxsZXIgbXVzdCBub3QgZGlzY2FyZCBpdC4KICAqLwotYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKJiM0Mztib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCwKJiM0MzsJCQkJICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKQogewogCWxvZmZfdCBwb3MgPSBmb2xpb19wb3MoZm9saW8pOwogCXNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7CkBAIC0yMjIsMTkgJiM0MzsyMjUsMjIgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKIAlzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsICpzcGxpdF9hdDI7CiAJdW5zaWduZWQgaW50IG1pbl9vcmRlcjsKIAotCWlmIChwb3MgJmx0OyBzdGFydCkKLQkJb2Zmc2V0ID0gc3RhcnQgLSBwb3M7CiYjNDM7CWlmIChlbmQgJmFtcDsmYW1wOyBwb3MgJiM0Mzsgc2l6ZSAmZ3Q7ICh1NjQpbGVuZCkKJiM0MzsJCSplbmQgPSBmb2xpby0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CWlmIChwb3MgJmx0OyBsc3RhcnQpCiYjNDM7CQlvZmZzZXQgPSBsc3RhcnQgLSBwb3M7CiAJZWxzZQogCQlvZmZzZXQgPSAwOwotCWlmIChwb3MgJiM0Mzsgc2l6ZSAmbHQ7PSAodTY0KWVuZCkKJiM0MzsJaWYgKHBvcyAmIzQzOyBzaXplICZsdDs9ICh1NjQpbGVuZCkKIAkJbGVuZ3RoID0gc2l6ZSAtIG9mZnNldDsKIAllbHNlCi0JCWxlbmd0aCA9IGVuZCAmIzQzOyAxIC0gcG9zIC0gb2Zmc2V0OwomIzQzOwkJbGVuZ3RoID0gbGVuZCAmIzQzOyAxIC0gcG9zIC0gb2Zmc2V0OwogCiAJZm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pOwogCWlmIChsZW5ndGggPT0gc2l6ZSkgewogCQl0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby0mZ3Q7bWFwcGluZywgZm9saW8pOwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKgpAQCAtMjQ4LDcgJiM0MzsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKQogCWlmIChmb2xpb19uZWVkc19yZWxlYXNlKGZvbGlvKSkKIAkJZm9saW9faW52YWxpZGF0ZShmb2xpbywgb2Zmc2V0LCBsZW5ndGgpOwogCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJbWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tJmd0O21hcHBpbmcpOwogCXNwbGl0X2F0ID0gZm9saW9fcGFnZShmb2xpbywgUEFHRV9BTElHTl9ET1dOKG9mZnNldCkgLyBQQUdFX1NJWkUpOwpAQCAtMjU5LDYgJiM0MzsyNjUsMTAgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKIAkJICogZm9yIHNobWVtIHRydW5jYXRlCiAJCSAqLwogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvMjsKJiM0MzsJCWJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQlpZiAoZW5kKQomIzQzOwkJCSplbmQgPSAocG9zICYjNDM7IG9mZnNldCAmIzQzOyBsZW5ndGgpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAKIAkJaWYgKG9mZnNldCAmIzQzOyBsZW5ndGggPT0gc2l6ZSkKIAkJCWdvdG8gbm9fc3BsaXQ7CkBAIC0yNzMsMjQgJiM0MzsyODMsMjggQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKIAkJaWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikpCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSkKJiM0MzsJCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKSB7CiYjNDM7CQkJdGFpbF9pc29sYXRlZCA9IGZhbHNlOwogCQkJZ290byBvdXQ7CiYjNDM7CQl9CiAKIAkJLyogbWFrZSBzdXJlIGZvbGlvMiBpcyBsYXJnZSBhbmQgZG9lcyBub3QgY2hhbmdlIGl0cyBtYXBwaW5nICovCiAJCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikgJmFtcDsmYW1wOwotCQkgICAgZm9saW8yLSZndDttYXBwaW5nID09IGZvbGlvLSZndDttYXBwaW5nKQotCQkJZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7CiYjNDM7CQkgICAgZm9saW8yLSZndDttYXBwaW5nID09IGZvbGlvLSZndDttYXBwaW5nICZhbXA7JmFtcDsKJiM0MzsJCSAgICBmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKSkKJiM0MzsJCQl0YWlsX2lzb2xhdGVkID0gZmFsc2U7CiAKIAkJZm9saW9fdW5sb2NrKGZvbGlvMik7CiBvdXQ6CiYjNDM7CQlpZiAoIXRhaWxfaXNvbGF0ZWQgJmFtcDsmYW1wOyBlbmQpCiYjNDM7CQkJKmVuZCA9IGZvbGlvMi0mZ3Q7aW5kZXg7CiAJCWZvbGlvX3B1dChmb2xpbzIpOwogbm9fc3BsaXQ6CiAJCXJldHVybiB0cnVlOwogCX0KLQlpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpCi0JCXJldHVybiBmYWxzZTsKLQl0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby0mZ3Q7bWFwcGluZywgZm9saW8pOwotCXJldHVybiB0cnVlOwomIzQzOwlpZiAoIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKQomIzQzOwkJdHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tJmd0O21hcHBpbmcsIGZvbGlvKTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtNDEzLDExICYjNDM7NDI3LDkgQEAgdm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0ICZndDsmZ3Q7IFBBR0VfU0hJRlQsIEZHUF9MT0NLLCAwKTsKIAlpZiAoIUlTX0VSUihmb2xpbykpIHsKIAkJc2FtZV9mb2xpbyA9IGxlbmQgJmx0OyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7Ci0JCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkgewomIzQzOwkJaWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsCiYjNDM7CQkJCQkJICBzYW1lX2ZvbGlvID8gJmFtcDtlbmQgOiBOVUxMKSkKIAkJCXN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7Ci0JCQlpZiAoc2FtZV9mb2xpbykKLQkJCQllbmQgPSBmb2xpby0mZ3Q7aW5kZXg7Ci0JCX0KIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAkJZm9saW8gPSBOVUxMOwpAQCAtNDI3LDggJiM0Mzs0MzksNyBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCAmZ3Q7Jmd0OyBQQUdFX1NISUZULAogCQkJCQkJRkdQX0xPQ0ssIDApOwogCQlpZiAoIUlTX0VSUihmb2xpbykpIHsKLQkJCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkKLQkJCQllbmQgPSBmb2xpby0mZ3Q7aW5kZXg7CiYjNDM7CQkJdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCAmYW1wO2VuZCk7CiAJCQlmb2xpb191bmxvY2soZm9saW8pOwogCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGaWxlIFRydW5jYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gcGlucG9pbnQgaWYgdGhpcyBjb2RlIGludHJvZHVjZXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChLTVNBTiBpcyB0aGUgcHJpbWFyeSB3b3JyeSBoZXJlKSBvciBpZiBpdCBtZXNzZXMgdXAgbWVtb3J5IG1hbmFnZW1lbnQgb3IgdHJ1bmNhdGlvbiBsb2dpYyBpbiBhbnkgd2F5IChLQVNBTiBhbmQgb3RoZXIgc2FuaXRpemVycyB3aWxsIGJlIG15IGZyaWVuZHMgZm9yIHRoYXQpLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBpdHMgc3Vycm91bmRpbmcgY2FsbGVycyB3aXRoaW4gYG1tL3NobWVtLmNgIGFuZCBgbW0vdHJ1bmNhdGUuY2AuCgpNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIGEgY2xvc2UgcmVhZGluZyBvZiB0aG9zZSBzcGVjaWZpYyBmaWxlcyDigJMgYG1tL3RydW5jYXRlLmNgIGFuZCBgbW0vc2htZW0uY2Ag4oCTIHBheWluZyBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgdGhvc2UgZnVuY3Rpb24gY2FsbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgcGljdHVyZSwgc2VlIGhvdyB0aGlzIHBhcnRpYWwgZm9saW8gdHJ1bmNhdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lIG9mIGZpbGUgdHJ1bmNhdGlvbiBhbmQgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBlZGdlIGNhc2VzLCBhbmQgb2YgY291cnNlLCBhbnkgcG90ZW50aWFsIGZvciB0aGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NjI5PWludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oOjYzMDpib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbm1tL2ludGVybmFsLmgtNjMxLVx0XHRsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKTtcbi0tXG5tbS9zaG1lbS5jPTExMTk9c3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcbi0tXG5tbS9zaG1lbS5jLTExNzctXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xubW0vc2htZW0uYzoxMTc4Olx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCxcbm1tL3NobWVtLmMtMTE3OS1cdFx0XHRcdFx0XHQgIHNhbWVfZm9saW8gPyBcdTAwMjZlbmQgOiBOVUxMKSlcbi0tXG5tbS9zaG1lbS5jLTExODktXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xubW0vc2htZW0uYzoxMTkwOlx0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG5tbS9zaG1lbS5jLTExOTEtXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tLVxubW0vc2htZW0uYy0xMjI3LVx0XHRcdFx0XHQgKiBJZiBmb3VuZCBhIGxhcmdlIHN3YXAgZW50cnkgY3Jvc3MgdGhlIGVuZCBvciBzdGFydFxubW0vc2htZW0uYzoxMjI4Olx0XHRcdFx0XHQgKiBib3JkZXIsIHNraXAgaXQgYXMgdGhlIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cbm1tL3NobWVtLmMtMTIyOS1cdFx0XHRcdFx0ICogYWJvdmUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgemVyb2QgaXRzIGNvbnRlbnQgb25jZS5cbi0tXG5tbS9zaG1lbS5jLTEyNTctXHRcdFx0XHRcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbm1tL3NobWVtLmM6MTI1ODpcdFx0XHRcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcbm1tL3NobWVtLmMtMTI1OS1cdFx0XHRcdFx0XHRcdGxzdGFydCwgbGVuZCwgTlVMTCkpIHtcbi0tXG5tbS90cnVuY2F0ZS5jPTE4MD1zdGF0aWMgaW50IGZvbGlvX3NwbGl0X29yX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzcGxpdF9hdCxcbi0tXG5tbS90cnVuY2F0ZS5jLTIxOC0gKi9cbm1tL3RydW5jYXRlLmM6MjE5OmJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxubW0vdHJ1bmNhdGUuYy0yMjAtXHRcdFx0XHQgIGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpXG4tLVxubW0vdHJ1bmNhdGUuYz0zODA9dm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS90cnVuY2F0ZS5jLTQyOS1cdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbm1tL3RydW5jYXRlLmM6NDMwOlx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCxcbm1tL3RydW5jYXRlLmMtNDMxLVx0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuLS1cbm1tL3RydW5jYXRlLmMtNDQxLVx0XHRpZiAoIUlTX0VSUihmb2xpbykpIHtcbm1tL3RydW5jYXRlLmM6NDQyOlx0XHRcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXHUwMDI2ZW5kKTtcbm1tL3RydW5jYXRlLmMtNDQzLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS90cnVuY2F0ZS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdHJ1bmNhdGlvbiB3b3JrcyBpbiB0aGUgbWVtb3J5IG1hbmFnZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3RydW5jYXRlLmNgLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcm91bmQgbGluZXMgMjAwIHRocm91Z2ggMzA1IGFuZCB0aGVuIGFnYWluIG9uIGxpbmVzIDQxMCB0aHJvdWdoIDQ2MC4gSSBzdXNwZWN0IHRoZXNlIHNlY3Rpb25zIGRlYWwgd2l0aCB0aGUgY29yZSBsb2dpYyBvZiByZWR1Y2luZyB0aGUgc2l6ZSBvZiBhIG1hcHBlZCBtZW1vcnkgcmVnaW9uIG9yIHBlcmhhcHMgdGhlIGhhbmRsaW5nIG9mIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSBtZW1vcnkgb3BlcmF0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9ucyBpcyBlc3NlbnRpYWwgaW4gZGV0ZXJtaW5pbmcgdGhlIGJlaGF2aW9yLiBUaGlzIGFsc28gaGVscHMgbWUgZGV0ZXJtaW5lIGlmIHRoZSBiZWhhdmlvciBvZiB0aGUgdHJ1bmNhdGlvbiBmdW5jdGlvbnMgaGFzIGJlZW4gYWx0ZXJlZCBvciBtb2RpZmllZCBpbiBhbnkgd2F5IGFuZCBpZiB0aGlzIGlzIHRoZSBjYXVzZSBvZiBhbnkgZXJyb3JzIEkgbWlnaHQgaGF2ZSBlbmNvdW50ZXJlZCBvciBvYnNlcnZlZC4gV2l0aCB0aGlzIHJldmlldyBJJiMzOTtsbCBjb25maXJtIG9yIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IGR1cmluZyBhIHRydW5jYXRpb24gb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3RydW5jYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdFx0V0FSTl9PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcbiAyMDE6XHRcdH1cbiAyMDI6XHRcbiAyMDM6XHRcdHJldHVybiByZXQ7XG4gMjA0Olx0fVxuIDIwNTpcdFxuIDIwNjpcdC8qXG4gMjA3Olx0ICogSGFuZGxlIHBhcnRpYWwgZm9saW9zLiAgVGhlIGZvbGlvIG1heSBiZSBlbnRpcmVseSB3aXRoaW4gdGhlXG4gMjA4Olx0ICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGVcbiAyMDk6XHQgKiBmb2xpbyB0aGF0JiMzOTtzIHdpdGhpbiB0aGUgW2xzdGFydCwgbGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZlxuIDIxMDpcdCAqIGl0JiMzOTtzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxuIDIxMTpcdCAqIGlfc2l6ZSwgYW5kIHdlIHJlbHkgb24gdGhlIGNhbGxlciB0byBkaXNjYXJkIHBhZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYVxuIDIxMjpcdCAqIG5ld2x5IGNyZWF0ZWQgaG9sZS5cbiAyMTM6XHQgKlxuIDIxNDpcdCAqIFdoZW4gQGVuZCBub24tTlVMTCwgc2V0IHRvIHRoZSBpbmRleCBvZiB0aGUgZm9saW8gdGhhdCBjb250YWlucyBAbGVuZFxuIDIxNTpcdCAqIGFuZCBtdXN0IGJlIGtlcHQgYnkgdGhlIGNhbGxlciYjMzk7cyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZVxuIDIxNjpcdCAqIGZvbGlvIHdhcyBzcGxpdCwgJWZhbHNlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgZm9saW8gaXMgZHJvcHBlZCBvclxuIDIxNzpcdCAqIG1heSBzdGlsbCBzdHJhZGRsZSB0aGUgcmFuZ2UsIHNvIHRoZSBjYWxsZXIgbXVzdCBub3QgZGlzY2FyZCBpdC5cbiAyMTg6XHQgKi9cbiAyMTk6XHRib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbiAyMjA6XHRcdFx0XHRcdCAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZClcbiAyMjE6XHR7XG4gMjIyOlx0XHRsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiAyMjM6XHRcdHNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7XG4gMjI0Olx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW5ndGg7XG4gMjI1Olx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsICpzcGxpdF9hdDI7XG4gMjI2Olx0XHR1bnNpZ25lZCBpbnQgbWluX29yZGVyO1xuIDIyNzpcdFxuIDIyODpcdFx0aWYgKGVuZCBcdTAwMjZcdTAwMjYgcG9zICYjNDM7IHNpemUgXHUwMDNlICh1NjQpbGVuZClcbiAyMjk6XHRcdFx0KmVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuIDIzMDpcdFxuIDIzMTpcdFx0aWYgKHBvcyBcdTAwM2MgbHN0YXJ0KVxuIDIzMjpcdFx0XHRvZmZzZXQgPSBsc3RhcnQgLSBwb3M7XG4gMjMzOlx0XHRlbHNlXG4gMjM0Olx0XHRcdG9mZnNldCA9IDA7XG4gMjM1Olx0XHRpZiAocG9zICYjNDM7IHNpemUgXHUwMDNjPSAodTY0KWxlbmQpXG4gMjM2Olx0XHRcdGxlbmd0aCA9IHNpemUgLSBvZmZzZXQ7XG4gMjM3Olx0XHRlbHNlXG4gMjM4Olx0XHRcdGxlbmd0aCA9IGxlbmQgJiM0MzsgMSAtIHBvcyAtIG9mZnNldDtcbiAyMzk6XHRcbiAyNDA6XHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbiAyNDE6XHRcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xuIDI0MjpcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4gMjQzOlx0XHRcdHJldHVybiBmYWxzZTtcbiAyNDQ6XHRcdH1cbiAyNDU6XHRcbiAyNDY6XHRcdC8qXG4gMjQ3Olx0XHQgKiBXZSBtYXkgYmUgemVyb2luZyBwYWdlcyB3ZSYjMzk7cmUgYWJvdXQgdG8gZGlzY2FyZCwgYnV0IGl0IGF2b2lkc1xuIDI0ODpcdFx0ICogZG9pbmcgYSBjb21wbGV4IGNhbGN1bGF0aW9uIGhlcmUsIGFuZCB0aGVuIGRvaW5nIHRoZSB6ZXJvaW5nXG4gMjQ5Olx0XHQgKiBhbnl3YXkgaWYgdGhlIHBhZ2Ugc3BsaXQgZmFpbHMuXG4gMjUwOlx0XHQgKi9cbiAyNTE6XHRcdGlmICghbWFwcGluZ19pbmFjY2Vzc2libGUoZm9saW8tXHUwMDNlbWFwcGluZykpXG4gMjUyOlx0XHRcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdGlmIChmb2xpb19uZWVkc19yZWxlYXNlKGZvbGlvKSlcbiAyNTU6XHRcdFx0Zm9saW9faW52YWxpZGF0ZShmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuIDI1NjpcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiAyNTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI1ODpcdFxuIDI1OTpcdFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4gMjYwOlx0XHRzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTtcbiAyNjE6XHRcdGlmICghZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8sIHNwbGl0X2F0LCBtaW5fb3JkZXIpKSB7XG4gMjYyOlx0XHRcdC8qXG4gMjYzOlx0XHRcdCAqIHRyeSB0byBzcGxpdCBhdCBvZmZzZXQgJiM0MzsgbGVuZ3RoIHRvIG1ha2Ugc3VyZSBmb2xpb3Mgd2l0aGluXG4gMjY0Olx0XHRcdCAqIHRoZSByYW5nZSBjYW4gYmUgZHJvcHBlZCwgZXNwZWNpYWxseSB0byBhdm9pZCBtZW1vcnkgd2FzdGVcbiAyNjU6XHRcdFx0ICogZm9yIHNobWVtIHRydW5jYXRlXG4gMjY2Olx0XHRcdCAqL1xuIDI2NzpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcbiAyNjg6XHRcdFx0Ym9vbCB0YWlsX2lzb2xhdGVkID0gdHJ1ZTtcbiAyNjk6XHRcbiAyNzA6XHRcdFx0aWYgKGVuZClcbiAyNzE6XHRcdFx0XHQqZW5kID0gKHBvcyAmIzQzOyBvZmZzZXQgJiM0MzsgbGVuZ3RoKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiAyNzI6XHRcbiAyNzM6XHRcdFx0aWYgKG9mZnNldCAmIzQzOyBsZW5ndGggPT0gc2l6ZSlcbiAyNzQ6XHRcdFx0XHRnb3RvIG5vX3NwbGl0O1xuIDI3NTpcdFxuIDI3NjpcdFx0XHRzcGxpdF9hdDIgPSBmb2xpb19wYWdlKGZvbGlvLFxuIDI3NzpcdFx0XHRcdFx0UEFHRV9BTElHTl9ET1dOKG9mZnNldCAmIzQzOyBsZW5ndGgpIC8gUEFHRV9TSVpFKTtcbiAyNzg6XHRcdFx0Zm9saW8yID0gcGFnZV9mb2xpbyhzcGxpdF9hdDIpO1xuIDI3OTpcdFxuIDI4MDpcdFx0XHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8yKSlcbiAyODE6XHRcdFx0XHRnb3RvIG5vX3NwbGl0O1xuIDI4MjpcdFxuIDI4MzpcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcbiAyODQ6XHRcdFx0XHRnb3RvIG91dDtcbiAyODU6XHRcbiAyODY6XHRcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpIHtcbiAyODc6XHRcdFx0XHR0YWlsX2lzb2xhdGVkID0gZmFsc2U7XG4gMjg4Olx0XHRcdFx0Z290byBvdXQ7XG4gMjg5Olx0XHRcdH1cbiAyOTA6XHRcbiAyOTE6XHRcdFx0LyogbWFrZSBzdXJlIGZvbGlvMiBpcyBsYXJnZSBhbmQgZG9lcyBub3QgY2hhbmdlIGl0cyBtYXBwaW5nICovXG4gMjkyOlx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikgXHUwMDI2XHUwMDI2XG4gMjkzOlx0XHRcdCAgICBmb2xpbzItXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cdTAwM2VtYXBwaW5nIFx1MDAyNlx1MDAyNlxuIDI5NDpcdFx0XHQgICAgZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcikpXG4gMjk1Olx0XHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIDI5NjpcdFxuIDI5NzpcdFx0XHRmb2xpb191bmxvY2soZm9saW8yKTtcbiAyOTg6XHRvdXQ6XG4gMjk5Olx0XHRcdGlmICghdGFpbF9pc29sYXRlZCBcdTAwMjZcdTAwMjYgZW5kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIGBtbS90cnVuY2F0ZS5jYCBDb2RlKioKCk9rYXksIGJlZm9yZSB3ZSBtb3ZlIG9uLCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgc29tZXRoaW5nIHNwZWNpZmljLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS90cnVuY2F0ZS5jYCBhbmQgemVybyBpbiBvbiBsaW5lcyA0MDAgdGhyb3VnaCA0NjAuIEkga25vdyB3ZSYjMzk7dmUgYmVlbiB3b3JraW5nIG9uIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaWRlLCBhbmQgdHJ1bmNhdGlvbiBvcGVyYXRpb25zIGNhbiBiZSB0cmlja3ksIGVzcGVjaWFsbHkgd2l0aCBjb25jdXJyZW50IGFjY2VzcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzZWN0aW9uJiMzOTtzIGxpa2VseSBoYW5kbGluZyB0aGUgbWVjaGFuaWNzIG9mIGZyZWVpbmcgcGFnZXMgb3IgdXBkYXRpbmcgaW5vZGUgbWV0YWRhdGEgYWZ0ZXIgYSBmaWxlIHRydW5jYXRpb24uIEkgd2FudCB0byBxdWlja2x5IHJldmlldyBob3cgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGFuZCBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5LiBHaXZlbiBvdXIgd29yaywgaXTigJlzIGJlc3QgcHJhY3RpY2UgdG8gdmVyaWZ5IHdlIGFyZSBub3QgZXhwb3NpbmcgYW55IHJhY2UgY29uZGl0aW9ucy4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgdHJ1bmNhdGlvbiBsb2dpYyBpcyBhdG9taWMgd2l0aCByZXNwZWN0IHRvIG90aGVyIG9wZXJhdGlvbnMsIHN1Y2ggYXMgd3JpdGVzIG9yIHJlYWRzLiBMZXQmIzM5O3Mgc2VlIHdoYXTigJlzIGdvaW5nIG9uIGluIHRoYXQgYmxvY2sgb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS90cnVuY2F0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDA6XHRcdCAqL1xuIDQwMTpcdFx0c3RhcnQgPSAobHN0YXJ0ICYjNDM7IFBBR0VfU0laRSAtIDEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDQwMjpcdFx0aWYgKGxlbmQgPT0gLTEpXG4gNDAzOlx0XHRcdC8qXG4gNDA0Olx0XHRcdCAqIGxlbmQgPT0gLTEgaW5kaWNhdGVzIGVuZC1vZi1maWxlIHNvIHdlIGhhdmUgdG8gc2V0ICYjMzk7ZW5kJiMzOTtcbiA0MDU6XHRcdFx0ICogdG8gdGhlIGhpZ2hlc3QgcG9zc2libGUgcGdvZmZfdCBhbmQgc2luY2UgdGhlIHR5cGUgaXNcbiA0MDY6XHRcdFx0ICogdW5zaWduZWQgd2UmIzM5O3JlIHVzaW5nIC0xLlxuIDQwNzpcdFx0XHQgKi9cbiA0MDg6XHRcdFx0ZW5kID0gLTE7XG4gNDA5Olx0XHRlbHNlXG4gNDEwOlx0XHRcdGVuZCA9IChsZW5kICYjNDM7IDEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDQxMTpcdFxuIDQxMjpcdFx0Zm9saW9fYmF0Y2hfaW5pdChcdTAwMjZmYmF0Y2gpO1xuIDQxMzpcdFx0aW5kZXggPSBzdGFydDtcbiA0MTQ6XHRcdHdoaWxlIChpbmRleCBcdTAwM2MgZW5kIFx1MDAyNlx1MDAyNiBmaW5kX2xvY2tfZW50cmllcyhtYXBwaW5nLCBcdTAwMjZpbmRleCwgZW5kIC0gMSxcbiA0MTU6XHRcdFx0XHRcdTAwMjZmYmF0Y2gsIGluZGljZXMpKSB7XG4gNDE2Olx0XHRcdHRydW5jYXRlX2ZvbGlvX2JhdGNoX2V4Y2VwdGlvbmFscyhtYXBwaW5nLCBcdTAwMjZmYmF0Y2gsIGluZGljZXMpO1xuIDQxNzpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcdTAwMjZmYmF0Y2gpOyBpJiM0MzsmIzQzOylcbiA0MTg6XHRcdFx0XHR0cnVuY2F0ZV9jbGVhbnVwX2ZvbGlvKGZiYXRjaC5mb2xpb3NbaV0pO1xuIDQxOTpcdFx0XHRkZWxldGVfZnJvbV9wYWdlX2NhY2hlX2JhdGNoKG1hcHBpbmcsIFx1MDAyNmZiYXRjaCk7XG4gNDIwOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCk7IGkmIzQzOyYjNDM7KVxuIDQyMTpcdFx0XHRcdGZvbGlvX3VubG9jayhmYmF0Y2guZm9saW9zW2ldKTtcbiA0MjI6XHRcdFx0Zm9saW9fYmF0Y2hfcmVsZWFzZShcdTAwMjZmYmF0Y2gpO1xuIDQyMzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA0MjQ6XHRcdH1cbiA0MjU6XHRcbiA0MjY6XHRcdHNhbWVfZm9saW8gPSAobHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKSA9PSAobGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gNDI3Olx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7XG4gNDI4Olx0XHRpZiAoIUlTX0VSUihmb2xpbykpIHtcbiA0Mjk6XHRcdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbiA0MzA6XHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4gNDMxOlx0XHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4gNDMyOlx0XHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbiA0MzM6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiA0MzQ6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0MzU6XHRcdFx0Zm9saW8gPSBOVUxMO1xuIDQzNjpcdFx0fVxuIDQzNzpcdFxuIDQzODpcdFx0aWYgKCFzYW1lX2ZvbGlvKSB7XG4gNDM5Olx0XHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuIDQ0MDpcdFx0XHRcdFx0XHRcdEZHUF9MT0NLLCAwKTtcbiA0NDE6XHRcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4gNDQyOlx0XHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuIDQ0MzpcdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gNDQ0Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0NDU6XHRcdFx0fVxuIDQ0NjpcdFx0fVxuIDQ0NzpcdFxuIDQ0ODpcdFx0aW5kZXggPSBzdGFydDtcbiA0NDk6XHRcdHdoaWxlIChpbmRleCBcdTAwM2MgZW5kKSB7XG4gNDUwOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDQ1MTpcdFx0XHRpZiAoIWZpbmRfZ2V0X2VudHJpZXMobWFwcGluZywgXHUwMDI2aW5kZXgsIGVuZCAtIDEsIFx1MDAyNmZiYXRjaCxcbiA0NTI6XHRcdFx0XHRcdGluZGljZXMpKSB7XG4gNDUzOlx0XHRcdFx0LyogSWYgYWxsIGdvbmUgZnJvbSBzdGFydCBvbndhcmRzLCB3ZSYjMzk7cmUgZG9uZSAqL1xuIDQ1NDpcdFx0XHRcdGlmIChpbmRleCA9PSBzdGFydClcbiA0NTU6XHRcdFx0XHRcdGJyZWFrO1xuIDQ1NjpcdFx0XHRcdC8qIE90aGVyd2lzZSByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xuIDQ1NzpcdFx0XHRcdGluZGV4ID0gc3RhcnQ7XG4gNDU4Olx0XHRcdFx0Y29udGludWU7XG4gNDU5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkV4YW1pbmluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBTaGFyZWQgTWVtb3J5KioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhpcyBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vc2htZW0uY2AgYW5kIGZvY3VzIG9uIHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lcyAxMTUwIHRvIDEyNzAuIFRoYXQgdXN1YWxseSBjb3ZlcnMgdGhlIGNvcmUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMsIG9yIHBvdGVudGlhbGx5IHNvbWUgY3JpdGljYWwgcGFnZS10YWJsZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc2hhcmVkIG1lbW9yeSBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgaW4gdGhpcyByZWdpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBjb25jdXJyZW5jeSBhcm91bmQgdGhpcyBzZWN0aW9uLiBOZWVkIHRvIGJlIHN1cmUgYWxsIHRoZSBwcm9wZXIgbG9ja3MgYXJlIGJlaW5nIHRha2VuLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbWVtb3J5IGxlYWtzIGJlaW5nIGludHJvZHVjZWQgYnkgdGhpcyByb3V0aW5lLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgc2luY2Ugc2hhcmVkIG1lbW9yeSBpcyBhbGwgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHRvby4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzA6XHRcdGlmICh1bmZhbGxvYylcbjExNzE6XHRcdFx0Z290byB3aG9sZV9mb2xpb3M7XG4xMTcyOlx0XG4xMTczOlx0XHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuMTE3NDpcdFx0Zm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExNzU6XHRcdGlmIChmb2xpbykge1xuMTE3NjpcdFx0XHRzYW1lX2ZvbGlvID0gbGVuZCBcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xuMTE3NzpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExNzg6XHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4xMTc5Olx0XHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4xMTgwOlx0XHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbjExODE6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjExODI6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjExODM6XHRcdFx0Zm9saW8gPSBOVUxMO1xuMTE4NDpcdFx0fVxuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKCFzYW1lX2ZvbGlvKVxuMTE4NzpcdFx0XHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExODg6XHRcdGlmIChmb2xpbykge1xuMTE4OTpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExOTA6XHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuMTE5MTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMTE5MjpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTE5MzpcdFx0fVxuMTE5NDpcdFxuMTE5NTpcdHdob2xlX2ZvbGlvczpcbjExOTY6XHRcbjExOTc6XHRcdGluZGV4ID0gc3RhcnQ7XG4xMTk4Olx0XHR3aGlsZSAoaW5kZXggXHUwMDNjIGVuZCkge1xuMTE5OTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjEyMDA6XHRcbjEyMDE6XHRcdFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFx1MDAyNmluZGV4LCBlbmQgLSAxLCBcdTAwMjZmYmF0Y2gsXG4xMjAyOlx0XHRcdFx0XHRpbmRpY2VzKSkge1xuMTIwMzpcdFx0XHRcdC8qIElmIGFsbCBnb25lIG9yIGhvbGUtcHVuY2ggb3IgdW5mYWxsb2MsIHdlJiMzOTtyZSBkb25lICovXG4xMjA0Olx0XHRcdFx0aWYgKGluZGV4ID09IHN0YXJ0IHx8IGVuZCAhPSAtMSlcbjEyMDU6XHRcdFx0XHRcdGJyZWFrO1xuMTIwNjpcdFx0XHRcdC8qIEJ1dCBpZiB0cnVuY2F0aW5nLCByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xuMTIwNzpcdFx0XHRcdGluZGV4ID0gc3RhcnQ7XG4xMjA4Olx0XHRcdFx0Y29udGludWU7XG4xMjA5Olx0XHRcdH1cbjEyMTA6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKTsgaSYjNDM7JiM0MzspIHtcbjEyMTE6XHRcdFx0XHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XG4xMjEyOlx0XG4xMjEzOlx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuMTIxNDpcdFx0XHRcdFx0aW50IG9yZGVyO1xuMTIxNTpcdFx0XHRcdFx0bG9uZyBzd2Fwc19mcmVlZDtcbjEyMTY6XHRcbjEyMTc6XHRcdFx0XHRcdGlmICh1bmZhbGxvYylcbjEyMTg6XHRcdFx0XHRcdFx0Y29udGludWU7XG4xMjE5Olx0XHRcdFx0XHRzd2Fwc19mcmVlZCA9IHNobWVtX2ZyZWVfc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxuMTIyMDpcdFx0XHRcdFx0XHRcdFx0ICAgICAgZW5kIC0gMSwgZm9saW8pO1xuMTIyMTpcdFx0XHRcdFx0aWYgKCFzd2Fwc19mcmVlZCkge1xuMTIyMjpcdFx0XHRcdFx0XHRwZ29mZl90IGJhc2UgPSBpbmRpY2VzW2ldO1xuMTIyMzpcdFxuMTIyNDpcdFx0XHRcdFx0XHRvcmRlciA9IHNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxuMTIyNTpcdFx0XHRcdFx0XHRcdFx0XHQgICByYWRpeF90b19zd3BfZW50cnkoZm9saW8pKTtcbjEyMjY6XHRcdFx0XHRcdFx0LypcbjEyMjc6XHRcdFx0XHRcdFx0ICogSWYgZm91bmQgYSBsYXJnZSBzd2FwIGVudHJ5IGNyb3NzIHRoZSBlbmQgb3Igc3RhcnRcbjEyMjg6XHRcdFx0XHRcdFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXG4xMjI5Olx0XHRcdFx0XHRcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXG4xMjMwOlx0XHRcdFx0XHRcdCAqL1xuMTIzMTpcdFx0XHRcdFx0XHRpZiAob3JkZXIgXHUwMDNlIDApIHtcbjEyMzI6XHRcdFx0XHRcdFx0XHRiYXNlID0gcm91bmRfZG93bihiYXNlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4xMjMzOlx0XHRcdFx0XHRcdFx0aWYgKGJhc2UgXHUwMDNjIHN0YXJ0IHx8IGJhc2UgJiM0MzsgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2UgZW5kKVxuMTIzNDpcdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XG4xMjM1Olx0XHRcdFx0XHRcdH1cbjEyMzY6XHRcdFx0XHRcdFx0LyogU3dhcCB3YXMgcmVwbGFjZWQgYnkgcGFnZSBvciBleHRlbmRlZCwgcmV0cnkgKi9cbjEyMzc6XHRcdFx0XHRcdFx0aW5kZXggPSBiYXNlO1xuMTIzODpcdFx0XHRcdFx0XHRicmVhaztcbjEyMzk6XHRcdFx0XHRcdH1cbjEyNDA6XHRcdFx0XHRcdG5yX3N3YXBzX2ZyZWVkICYjNDM7PSBzd2Fwc19mcmVlZDtcbjEyNDE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMTI0MjpcdFx0XHRcdH1cbjEyNDM6XHRcbjEyNDQ6XHRcdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbjEyNDU6XHRcbjEyNDY6XHRcdFx0XHRpZiAoIXVuZmFsbG9jIHx8ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuMTI0NzpcdFx0XHRcdFx0aWYgKGZvbGlvX21hcHBpbmcoZm9saW8pICE9IG1hcHBpbmcpIHtcbjEyNDg6XHRcdFx0XHRcdFx0LyogUGFnZSB3YXMgcmVwbGFjZWQgYnkgc3dhcDogcmV0cnkgKi9cbjEyNDk6XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjEyNTA6XHRcdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzW2ldO1xuMTI1MTpcdFx0XHRcdFx0XHRicmVhaztcbjEyNTI6XHRcdFx0XHRcdH1cbjEyNTM6XHRcdFx0XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXG4xMjU0Olx0XHRcdFx0XHRcdFx0Zm9saW8pO1xuMTI1NTpcdFxuMTI1NjpcdFx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuMTI1NzpcdFx0XHRcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4xMjU4Olx0XHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG4xMjU5Olx0XHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4xMjYwOlx0XHRcdFx0XHRcdC8qXG4xMjYxOlx0XHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbjEyNjI6XHRcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuMTI2MzpcdFx0XHRcdFx0XHQgKiBPdGhlcndpc2UgdGhlIFRIUCB3YXMgZW50aXJlbHlcbjEyNjQ6XHRcdFx0XHRcdFx0ICogZHJvcHBlZCBvciB0aGUgdGFyZ2V0IHJhbmdlIHdhc1xuMTI2NTpcdFx0XHRcdFx0XHQgKiB6ZXJvZWQsIHNvIGp1c3QgY29udGludWUgdGhlIGxvb3AgYXNcbjEyNjY6XHRcdFx0XHRcdFx0ICogaXMuXG4xMjY3Olx0XHRcdFx0XHRcdCAqL1xuMTI2ODpcdFx0XHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4xMjY5Olx0XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUcnVuY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgdHJ1bmNhdGlvbiBhbmQgaG9sZS1wdW5jaGluZyBvZiBwYXJ0aWFsIGZvbGlvcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGZ1bmN0aW9uLgoKUHJldmlvdXNseSwgSSBoYWQgYSBzcGVjaWZpYyBwYXR0ZXJuIGZvciBoYW5kbGluZyB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgYWRqdXN0aW5nIHRoZSBgZW5kYCBpbmRleCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoYXQuIE5vdywgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGRpcmVjdGx5IHVwZGF0ZXMgdGhlIGAqZW5kYCBwb2ludGVyIHRoYXQgdGhlIGNhbGxlciBwYXNzZXMsICpkZXBlbmRpbmcqIG9uIHdoZXRoZXIgdGhlIGZvbGlvIHdhcyBzcGxpdCBvciBpZiBpdCBuZWVkcyB0byBiZSByZXRhaW5lZC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiByZXNwb25zaWJpbGl0eS4KClRoZSByZXR1cm4gdmFsdWUgaXRzZWxmIGhhcyBhbHNvIGNoYW5nZWQgc2VtYW50aWNzLiBJdCBub3cgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZvbGlvIHdhcyBzcGxpdCAobWVhbmluZyB3ZSBuZWVkZWQgdG8gZG8gc29tZXRoaW5nIGxpa2UgemVyby1yYW5nZXMpLCBhbmQgYGZhbHNlYCBvdGhlcndpc2UsIGZvciBleGFtcGxlLCBpZiB0aGUgZm9saW8gd2FzIGZ1bGx5IHRydW5jYXRlZCBvciBpZiBpdCB3YXNuJiMzOTt0IHNwbGl0LgoKVGhlIGNhbGxlcnMsIHNwZWNpZmljYWxseSBgc2htZW1fdW5kb19yYW5nZWAgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAsIHBhc3MgYCZhbXA7ZW5kYCAob3IgYHNhbWVfZm9saW8gPyAmYW1wO2VuZCA6IE5VTExgKSB0byBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuIFRoZSBjYWxsZXJzIGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgYHN0YXJ0YCBpbmRleCwgKmJ1dCBvbmx5IGlmKiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgcmV0dXJucyBgZmFsc2VgICphbmQqIGl0IHdhcyB0aGUgc3RhcnQgZm9saW8uCgpOb3csIGEgcXVpY2sgbWVtb3J5IHNhZmV0eSBjaGVjay4gSXQmIzM5O3MgY3J1Y2lhbCwgc28gbGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDoKCjEuICBJcyB0aGVyZSBhbnkgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZT8gTm8sIG5vdGhpbmcgb2J2aW91cyBpbiB0aGUgY29udGV4dC4gR29vZC4KMi4gIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdGhhdCB3ZSYjMzk7cmUgdXNpbmcgaW4gY29uZGl0aW9uYWxzIG9yIHJlYWRpbmc/CiAgICAqICAgSW4gdGhlIGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBmdW5jdGlvbiBpdHNlbGYsIGBlbmRgIGlzIGEgcG9pbnRlciBvZiB0eXBlIGBwZ29mZl90YC4gSXQmIzM5O3MgYWx3YXlzIGNoZWNrZWQgZm9yIGBOVUxMYCwgc28gdGhhdCYjMzk7cyBzYWZlLgogICAgKiAgIGBzdGFydGAgYW5kIGBlbmRgIHdpdGhpbiBgc2htZW1fdW5kb19yYW5nZWAgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAgYXJlIGxvY2FsIHZhcmlhYmxlcyBvZiB0eXBlIGBwZ29mZl90YC4gV2UgKm11c3QqIHZlcmlmeSB0aGVpciBpbml0aWFsaXphdGlvbiBiZWZvcmUgY2FsbGluZyBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuCiAgICAqICAgSW4gYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCwgYGVuZGAgaXMgaW5pdGlhbGl6ZWQgdG8gYC0xYCBvciBgKGxlbmQgJiM0MzsgMSkgJmd0OyZndDsgUEFHRV9TSElGVGAsICpiZWZvcmUqIHRoZSBjYWxsIHRvIGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBhdCBsaW5lIDQyNy4gVGhpcyBzZWVtcyBjb3JyZWN0LgogICAgKiAgIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGxpbmVzIDExMjAtMTE3NSBpbiBgbW0vc2htZW0uY2Agd2l0aGluIGBzaG1lbV91bmRvX3JhbmdlYCwgdG8gc2VlIGhvdyBgZW5kYCBpcyBpbml0aWFsaXplZCB0aGVyZS4gTmVlZCB0byBlbnN1cmUgYGVuZGAgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0XHRcdFx0XHRcdFx0XHRcdCBib29sIHVuZmFsbG9jKVxuMTEyMTpcdHtcbjExMjI6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXHUwMDNlaV9tYXBwaW5nO1xuMTEyMzpcdFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbjExMjQ6XHRcdHBnb2ZmX3Qgc3RhcnQgPSAobHN0YXJ0ICYjNDM7IFBBR0VfU0laRSAtIDEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuMTEyNTpcdFx0cGdvZmZfdCBlbmQgPSAobGVuZCAmIzQzOyAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbjExMjY6XHRcdHN0cnVjdCBmb2xpb19iYXRjaCBmYmF0Y2g7XG4xMTI3Olx0XHRwZ29mZl90IGluZGljZXNbRk9MSU9fQkFUQ0hfU0laRV07XG4xMTI4Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTEyOTpcdFx0Ym9vbCBzYW1lX2ZvbGlvO1xuMTEzMDpcdFx0bG9uZyBucl9zd2Fwc19mcmVlZCA9IDA7XG4xMTMxOlx0XHRwZ29mZl90IGluZGV4O1xuMTEzMjpcdFx0aW50IGk7XG4xMTMzOlx0XG4xMTM0Olx0XHRpZiAobGVuZCA9PSAtMSlcbjExMzU6XHRcdFx0ZW5kID0gLTE7XHQvKiB1bnNpZ25lZCwgc28gYWN0dWFsbHkgdmVyeSBiaWcgKi9cbjExMzY6XHRcbjExMzc6XHRcdGlmIChpbmZvLVx1MDAzZWZhbGxvY2VuZCBcdTAwM2Ugc3RhcnQgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlZmFsbG9jZW5kIFx1MDAzYz0gZW5kIFx1MDAyNlx1MDAyNiAhdW5mYWxsb2MpXG4xMTM4Olx0XHRcdGluZm8tXHUwMDNlZmFsbG9jZW5kID0gc3RhcnQ7XG4xMTM5Olx0XG4xMTQwOlx0XHRmb2xpb19iYXRjaF9pbml0KFx1MDAyNmZiYXRjaCk7XG4xMTQxOlx0XHRpbmRleCA9IHN0YXJ0O1xuMTE0MjpcdFx0d2hpbGUgKGluZGV4IFx1MDAzYyBlbmQgXHUwMDI2XHUwMDI2IGZpbmRfbG9ja19lbnRyaWVzKG1hcHBpbmcsIFx1MDAyNmluZGV4LCBlbmQgLSAxLFxuMTE0MzpcdFx0XHRcdFx1MDAyNmZiYXRjaCwgaW5kaWNlcykpIHtcbjExNDQ6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKTsgaSYjNDM7JiM0MzspIHtcbjExNDU6XHRcdFx0XHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XG4xMTQ2Olx0XG4xMTQ3Olx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuMTE0ODpcdFx0XHRcdFx0aWYgKHVuZmFsbG9jKVxuMTE0OTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjExNTA6XHRcdFx0XHRcdG5yX3N3YXBzX2ZyZWVkICYjNDM7PSBzaG1lbV9mcmVlX3N3YXAobWFwcGluZywgaW5kaWNlc1tpXSxcbjExNTE6XHRcdFx0XHRcdFx0XHRcdFx0ICBlbmQgLSAxLCBmb2xpbyk7XG4xMTUyOlx0XHRcdFx0XHRjb250aW51ZTtcbjExNTM6XHRcdFx0XHR9XG4xMTU0Olx0XG4xMTU1Olx0XHRcdFx0aWYgKCF1bmZhbGxvYyB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4xMTU2Olx0XHRcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4xMTU3Olx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjExNTg6XHRcdFx0fVxuMTE1OTpcdFx0XHRmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKFx1MDAyNmZiYXRjaCk7XG4xMTYwOlx0XHRcdGZvbGlvX2JhdGNoX3JlbGVhc2UoXHUwMDI2ZmJhdGNoKTtcbjExNjE6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4xMTYyOlx0XHR9XG4xMTYzOlx0XG4xMTY0Olx0XHQvKlxuMTE2NTpcdFx0ICogV2hlbiB1bmRvaW5nIGEgZmFpbGVkIGZhbGxvY2F0ZSwgd2Ugd2FudCBub25lIG9mIHRoZSBwYXJ0aWFsIGZvbGlvXG4xMTY2Olx0XHQgKiB6ZXJvaW5nIGFuZCBzcGxpdHRpbmcgYmVsb3csIGJ1dCBzaGFsbCB3YW50IHRvIHRydW5jYXRlIHRoZSB3aG9sZVxuMTE2NzpcdFx0ICogZm9saW8gd2hlbiAhdXB0b2RhdGUgaW5kaWNhdGVzIHRoYXQgaXQgd2FzIGFkZGVkIGJ5IHRoaXMgZmFsbG9jYXRlLFxuMTE2ODpcdFx0ICogZXZlbiB3aGVuIFtsc3RhcnQsIGxlbmRdIGNvdmVycyBvbmx5IGEgcGFydCBvZiB0aGUgZm9saW8uXG4xMTY5Olx0XHQgKi9cbjExNzA6XHRcdGlmICh1bmZhbGxvYylcbjExNzE6XHRcdFx0Z290byB3aG9sZV9mb2xpb3M7XG4xMTcyOlx0XG4xMTczOlx0XHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuMTE3NDpcdFx0Zm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExNzU6XHRcdGlmIChmb2xpbykge1xuMTE3NjpcdFx0XHRzYW1lX2ZvbGlvID0gbGVuZCBcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xuMTE3NzpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExNzg6XHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4xMTc5Olx0XHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDA4CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDQ5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBLTVNBTiBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZm9jdXNlZCBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoYXQgS01TQU4gd291bGQgYmUgcGFydGljdWxhcmx5IGVmZmVjdGl2ZSBhdCBjYXRjaGluZywgZ2l2ZW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuCgpGaXJzdCwgSSBzZWUgdGhlIGBlbmRgIHZhcmlhYmxlIGluIGBzaG1lbV91bmRvX3JhbmdlYCBpbml0aWFsaXplZCwgYW5kIGB0YWlsX2lzb2xhdGVkYCBpbiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgaXMgZXhwbGljaXRseSBzZXQgdG8gYHRydWVgLiBHb29kIHN0YXJ0LCB0aG9zZSBhcmUgY292ZXJlZC4KCk15IG1haW4gY29uY2VybiBpcyBhbHdheXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBsZWFrYWdlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgSSBjb25maXJtZWQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLiBJdCBwcmltYXJpbHkgZGVhbHMgd2l0aCBwYWdlIGNhY2hlIGFuZCBmb2xpbyBtYW5pcHVsYXRpb25zOiB0cnVuY2F0aW9uLCBzcGxpdHRpbmcgKHVzaW5nIGBmb2xpb19zcGxpdF9vcl91bm1hcGApLCBhbmQgaW52YWxpZGF0aW9uLiBNeSBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBhbSBJIGNoYW5naW5nIHRoZSBrZXJuZWwgbWVtb3J5IGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgcGFnZXMvbWVtb3J5PyBOb3BlLiBJdCBpcyBvcGVyYXRpbmcgd2l0aGluIHRoZSBrZXJuZWwtcGFnZSBjYWNoZS4KClRoZSBwb3RlbnRpYWwgaXNzdWVzIEkgZm9yZXNlZSBoZXJlIHJlbGF0ZSB0byBwYWdlIGNhY2hlIGNvbnNpc3RlbmN5LCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIHRydW5jYXRpb24gb3Igc3BsaXR0aW5nIGxvZ2ljLCBhbmQgbG9ja2luZywgYW55IG9mIHdoaWNoIGFyZSBpc3N1ZXMgSSYjMzk7ZCBsb29rIGF0IGluIGFueSBwYXRjaCBkZWFsaW5nIHdpdGggc2hhcmVkIG1lbW9yeS4gSG93ZXZlciwgdGhvc2UgYXJlIGhhbmRsZWQgdmlhIEtBU0FOLCBMT0NLREVQLCBhbmQgYEJVR2AgY2hlY2tzLgoKTm93LCBsZXQgbWUgcnVuIHRocm91Z2ggdGhlIGZvdXIgY3JpdGVyaWEgZm9yIEtNU0FOLCBhcyBJIGtub3cgdGhlbToKCjEuICAqKktlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSB1c3VhbCBzdXNwZWN0cyAoY29weVxfdG9cX3VzZXIsIGV0Yy4pLiBUaGlzIGlzIHN0cmljdGx5IGtlcm5lbC1pbnRlcm5hbC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBBbGwga2V5IHZhcmlhYmxlcyAoZW5kLCB0YWlsXF9pc29sYXRlZCwgc3BsaXRcX2F0LCBzcGxpdFxfYXQyLCBldGMuKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXMgSSBzYXcuCjMuICAqKlVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGNvbXBsZXggYWxsb2NhdGlvbnM6KiogTm8gbmV3IGFsbG9jYXRpb25zLiBUaGlzIHBhdGNoIGlzIHdvcmtpbmcgd2l0aCBleGlzdGluZyBtZW1vcnkuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk6KiogTm8uIFRoaXMgaW52b2x2ZXMgbW9kaWZ5aW5nIGZvbGlvIGJvdW5kcyBmb3IgcGFnZWNhY2hlIG1hbmFnZW1lbnQuCgpHaXZlbiB0aGlzLCBJIGNvbmNsdWRlIHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjaGVja3MgYW5kIHRoZSBleGlzdGluZyBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgYXJlIGVudGlyZWx5IGFwcHJvcHJpYXRlLiBUaGlzIGRvZXNuJiMzOTt0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBzdWJtaXQgbXkgYHNldC1yZXN1bHRzYCByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGludHJvZHVjZWQgb3IgcmVhZCwgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBib3VuZHMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHBhZ2UgY2FjaGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSBjYWNoZSBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGludHJvZHVjZWQgb3IgcmVhZCwgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBib3VuZHMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHBhZ2UgY2FjaGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSBjYWNoZSBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMDo0OS45MzM5OTkxOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODcxNzQyMDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTSE1FTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXCIsXG4gICAgXCJzaG1lbV91bmRvX3JhbmdlXCIsXG4gICAgXCJ0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZVwiLFxuICAgIFwic2htZW1fdHJ1bmNhdGVfcmFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGZvbGlvIHRydW5jYXRpb24gYW5kIHNwbGl0dGluZyBsb2dpYyBpbiBgbW0vdHJ1bmNhdGUuY2AsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS9pbnRlcm5hbC5oYCAoYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBpdHMgY2FsbGVycykuIEl0IHJlZmFjdG9ycyBob3cgdGhlIHBhcnRpYWwgZm9saW8gdHJ1bmNhdGlvbiByZXR1cm4gdmFsdWUgYW5kIHRoZSBgZW5kYCBwYWdlIG9mZnNldCBhcmUgaGFuZGxlZCBhbmQgdXBkYXRlZCB3aGVuIHNwbGl0dGluZyBvciBrZWVwaW5nIHN0cmFkZGxpbmcgZm9saW9zLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGludHJvZHVjZWQgb3IgcmVhZCwgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBib3VuZHMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHBhZ2UgY2FjaGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSBjYWNoZSBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgY2FjaGUgdHJ1bmNhdGlvbiBsb2dpYyAoaW4gbW0vdHJ1bmNhdGUuYyBhbmQgbW0vc2htZW0uYykgZm9yIHBhcnRpYWwgZm9saW9zLCBhbHRlcmluZyBib3VuZGFyeSB0cmFja2luZyBhbmQgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBvZiB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvIHRvIHByZXZlbnQgaW1wcm9wZXIgZGlzY2FyZCBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBhY3RpdmVseSByZWFjaGFibGUga2VybmVsIGNvZGUgZXhlcmNpc2VkIGJ5IGZpbGUgdHJ1bmNhdGlvbiwgZnRydW5jYXRlLCBhbmQgZmFsbG9jYXRlIGhvbGUtcHVuY2hpbmcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjA6NDkuOTM0MDA0NTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzAwMzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVmZmUxODIwZGZiMDdiNjlkMTRiMzQxNWE1ZTUyZGY0NmY0NTZkYjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDY4ZGI1YWJkMGE0Y2UuLmRiN2Q5ZDlmYjVjOWUgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtNjI3LDggKzYyNyw4IEBAIHVuc2lnbmVkIGZpbmRfbG9ja19lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcXG4gdW5zaWduZWQgZmluZF9nZXRfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXFxuIFxcdFxcdHBnb2ZmX3QgZW5kLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgcGdvZmZfdCAqaW5kaWNlcyk7XFxuIGludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsXFxuLVxcdFxcdGxvZmZfdCBlbmQpO1xcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcXG4rXFx0XFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XFxuIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIHVuc2lnbmVkIGxvbmcgbWFwcGluZ190cnlfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0cGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsIHVuc2lnbmVkIGxvbmcgKm5yX2ZhaWxlZCk7XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggODlhMTQ5NWU1NWY3ZS4uY2MxNTQ4ZmY1MDlhZSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0xMTc1LDExICsxMTc1LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcXG4gXFx0aWYgKGZvbGlvKSB7XFxuIFxcdFxcdHNhbWVfZm9saW8gPSBsZW5kIFxcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xcbiBcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tXFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XFxuK1xcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHNhbWVfZm9saW8gPyBcXHUwMDI2ZW5kIDogTlVMTCkpXFxuIFxcdFxcdFxcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XFxuLVxcdFxcdFxcdGlmIChzYW1lX2ZvbGlvKVxcbi1cXHRcXHRcXHRcXHRlbmQgPSBmb2xpby1cXHUwMDNlaW5kZXg7XFxuLVxcdFxcdH1cXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0Zm9saW8gPSBOVUxMO1xcbkBAIC0xMTg5LDggKzExODcsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxcbiBcXHRcXHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXHRpZiAoZm9saW8pIHtcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuLVxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSlcXG4tXFx0XFx0XFx0ZW5kID0gZm9saW8tXFx1MDAzZWluZGV4O1xcbitcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFxcdTAwMjZlbmQpO1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHR9XFxuQEAgLTEyNTgsNyArMTI1NSw4IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXFxuIFxcbiBcXHRcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdFxcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0fSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XFxuK1xcdFxcdFxcdFxcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bHN0YXJ0LCBsZW5kLCBOVUxMKSkge1xcbiBcXHRcXHRcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBJZiB3ZSBzcGxpdCBhIHBhZ2UsIHJlc2V0IHRoZSBsb29wIHNvXFxuIFxcdFxcdFxcdFxcdFxcdCAqIHRoYXQgd2UgcGljayB1cCB0aGUgbmV3IHN1YiBwYWdlcy5cXG5kaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmNcXG5pbmRleCBiNThiYTk0MGJlNDc0Li4yZWJiMDBmNmMzNzkzIDEwMDY0NFxcbi0tLSBhL21tL3RydW5jYXRlLmNcXG4rKysgYi9tbS90cnVuY2F0ZS5jXFxuQEAgLTIwNiwxNSArMjA2LDE4IEBAIHN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxcbiAvKlxcbiAgKiBIYW5kbGUgcGFydGlhbCBmb2xpb3MuICBUaGUgZm9saW8gbWF5IGJlIGVudGlyZWx5IHdpdGhpbiB0aGVcXG4gICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGVcXG4tICogZm9saW8gdGhhdCdzIHdpdGhpbiB0aGUgW3N0YXJ0LCBlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWZcXG4rICogZm9saW8gdGhhdCdzIHdpdGhpbiB0aGUgW2xzdGFydCwgbGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZlxcbiAgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxcbiAgKiBpX3NpemUsIGFuZCB3ZSByZWx5IG9uIHRoZSBjYWxsZXIgdG8gZGlzY2FyZCBwYWdlcyB3aGljaCBsaWUgd2l0aGluIGFcXG4gICogbmV3bHkgY3JlYXRlZCBob2xlLlxcbiAgKlxcbi0gKiBSZXR1cm5zIGZhbHNlIGlmIHNwbGl0dGluZyBmYWlsZWQgc28gdGhlIGNhbGxlciBjYW4gYXZvaWRcXG4tICogZGlzY2FyZGluZyB0aGUgZW50aXJlIGZvbGlvIHdoaWNoIGlzIHN0dWJib3JubHkgdW5zcGxpdC5cXG4rICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXFxuKyAqIGFuZCBtdXN0IGJlIGtlcHQgYnkgdGhlIGNhbGxlcidzIHRydW5jYXRlIGxvb3AuICBSZXR1cm4gJXRydWUgaWYgdGhlXFxuKyAqIGZvbGlvIHdhcyBzcGxpdCwgJWZhbHNlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgZm9saW8gaXMgZHJvcHBlZCBvclxcbisgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXFxuICAqL1xcbi1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcXG4rXFx0XFx0XFx0XFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxcbiB7XFxuIFxcdGxvZmZfdCBwb3MgPSBmb2xpb19wb3MoZm9saW8pO1xcbiBcXHRzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pO1xcbkBAIC0yMjIsMTkgKzIyNSwyMiBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxcbiBcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsICpzcGxpdF9hdDI7XFxuIFxcdHVuc2lnbmVkIGludCBtaW5fb3JkZXI7XFxuIFxcbi1cXHRpZiAocG9zIFxcdTAwM2Mgc3RhcnQpXFxuLVxcdFxcdG9mZnNldCA9IHN0YXJ0IC0gcG9zO1xcbitcXHRpZiAoZW5kIFxcdTAwMjZcXHUwMDI2IHBvcyArIHNpemUgXFx1MDAzZSAodTY0KWxlbmQpXFxuK1xcdFxcdCplbmQgPSBmb2xpby1cXHUwMDNlaW5kZXg7XFxuK1xcbitcXHRpZiAocG9zIFxcdTAwM2MgbHN0YXJ0KVxcbitcXHRcXHRvZmZzZXQgPSBsc3RhcnQgLSBwb3M7XFxuIFxcdGVsc2VcXG4gXFx0XFx0b2Zmc2V0ID0gMDtcXG4tXFx0aWYgKHBvcyArIHNpemUgXFx1MDAzYz0gKHU2NCllbmQpXFxuK1xcdGlmIChwb3MgKyBzaXplIFxcdTAwM2M9ICh1NjQpbGVuZClcXG4gXFx0XFx0bGVuZ3RoID0gc2l6ZSAtIG9mZnNldDtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRsZW5ndGggPSBlbmQgKyAxIC0gcG9zIC0gb2Zmc2V0O1xcbitcXHRcXHRsZW5ndGggPSBsZW5kICsgMSAtIHBvcyAtIG9mZnNldDtcXG4gXFxuIFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG4gXFx0aWYgKGxlbmd0aCA9PSBzaXplKSB7XFxuIFxcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLVxcdTAwM2VtYXBwaW5nLCBmb2xpbyk7XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTI0OCw3ICsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxcbiBcXHRpZiAoZm9saW9fbmVlZHNfcmVsZWFzZShmb2xpbykpXFxuIFxcdFxcdGZvbGlvX2ludmFsaWRhdGUoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4gXFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdG1pbl9vcmRlciA9IG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGZvbGlvLVxcdTAwM2VtYXBwaW5nKTtcXG4gXFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XFxuQEAgLTI1OSw2ICsyNjUsMTAgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4gXFx0XFx0ICogZm9yIHNobWVtIHRydW5jYXRlXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcXG4rXFx0XFx0Ym9vbCB0YWlsX2lzb2xhdGVkID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdGlmIChlbmQpXFxuK1xcdFxcdFxcdCplbmQgPSAocG9zICsgb2Zmc2V0ICsgbGVuZ3RoKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0XFx0aWYgKG9mZnNldCArIGxlbmd0aCA9PSBzaXplKVxcbiBcXHRcXHRcXHRnb3RvIG5vX3NwbGl0O1xcbkBAIC0yNzMsMjQgKzI4MywyOCBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxcbiBcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSlcXG4rXFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpIHtcXG4rXFx0XFx0XFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogbWFrZSBzdXJlIGZvbGlvMiBpcyBsYXJnZSBhbmQgZG9lcyBub3QgY2hhbmdlIGl0cyBtYXBwaW5nICovXFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGZvbGlvMi1cXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cXHUwMDNlbWFwcGluZylcXG4tXFx0XFx0XFx0Zm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7XFxuK1xcdFxcdCAgICBmb2xpbzItXFx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXFx1MDAzZW1hcHBpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpKVxcbitcXHRcXHRcXHR0YWlsX2lzb2xhdGVkID0gZmFsc2U7XFxuIFxcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8yKTtcXG4gb3V0OlxcbitcXHRcXHRpZiAoIXRhaWxfaXNvbGF0ZWQgXFx1MDAyNlxcdTAwMjYgZW5kKVxcbitcXHRcXHRcXHQqZW5kID0gZm9saW8yLVxcdTAwM2VpbmRleDtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvMik7XFxuIG5vX3NwbGl0OlxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbi1cXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmICghZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuK1xcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLVxcdTAwM2VtYXBwaW5nLCBmb2xpbyk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNDEzLDExICs0MjcsOSBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIEZHUF9MT0NLLCAwKTtcXG4gXFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XFxuIFxcdFxcdHNhbWVfZm9saW8gPSBsZW5kIFxcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xcbi1cXHRcXHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHtcXG4rXFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc2FtZV9mb2xpbyA/IFxcdTAwMjZlbmQgOiBOVUxMKSlcXG4gXFx0XFx0XFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcXG4tXFx0XFx0XFx0aWYgKHNhbWVfZm9saW8pXFxuLVxcdFxcdFxcdFxcdGVuZCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4tXFx0XFx0fVxcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRmb2xpbyA9IE5VTEw7XFxuQEAgLTQyNyw4ICs0MzksNyBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRGR1BfTE9DSywgMCk7XFxuIFxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpXFxuLVxcdFxcdFxcdFxcdGVuZCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4rXFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG4gXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMDo1MC41MTc3OTQ2NDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk5NDM3MjU5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cIixcbiAgICBcInNobWVtX3VuZG9fcmFuZ2VcIixcbiAgICBcInRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlXCIsXG4gICAgXCJzaG1lbV90cnVuY2F0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgY2FjaGUgdHJ1bmNhdGlvbiBsb2dpYyAoaW4gbW0vdHJ1bmNhdGUuYyBhbmQgbW0vc2htZW0uYykgZm9yIHBhcnRpYWwgZm9saW9zLCBhbHRlcmluZyBib3VuZGFyeSB0cmFja2luZyBhbmQgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBvZiB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvIHRvIHByZXZlbnQgaW1wcm9wZXIgZGlzY2FyZCBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBhY3RpdmVseSByZWFjaGFibGUga2VybmVsIGNvZGUgZXhlcmNpc2VkIGJ5IGZpbGUgdHJ1bmNhdGlvbiwgZnRydW5jYXRlLCBhbmQgZmFsbG9jYXRlIGhvbGUtcHVuY2hpbmcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZmZlMTgyMGRmYjA3YjY5ZDE0YjM0MTVhNWU1MmRmNDZmNDU2ZGIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA2OGRiNWFiZDBhNGNlLi5kYjdkOWQ5ZmI1YzllIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTYyNyw4ICs2MjcsOCBAQCB1bnNpZ25lZCBmaW5kX2xvY2tfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXG4gdW5zaWduZWQgZmluZF9nZXRfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXG4gXHRcdHBnb2ZmX3QgZW5kLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgcGdvZmZfdCAqaW5kaWNlcyk7XG4gaW50IHRydW5jYXRlX2lub2RlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LFxuLVx0XHRsb2ZmX3QgZW5kKTtcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbitcdFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XG4gbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB1bnNpZ25lZCBsb25nIG1hcHBpbmdfdHJ5X2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLCB1bnNpZ25lZCBsb25nICpucl9mYWlsZWQpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA4OWExNDk1ZTU1ZjdlLi5jYzE1NDhmZjUwOWFlIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTExNzUsMTEgKzExNzUsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuIFx0aWYgKGZvbGlvKSB7XG4gXHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLVx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHtcbitcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4rXHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4gXHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbi1cdFx0XHRpZiAoc2FtZV9mb2xpbylcbi1cdFx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuLVx0XHR9XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdGZvbGlvID0gTlVMTDtcbkBAIC0xMTg5LDggKzExODcsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuIFx0XHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdGlmIChmb2xpbykge1xuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbi1cdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKVxuLVx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuK1x0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG5AQCAtMTI1OCw3ICsxMjU1LDggQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbiBcdFx0XHRcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8obWFwcGluZywgZm9saW8pO1xuLVx0XHRcdFx0fSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XG4rXHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG4rXHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbiBcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jXG5pbmRleCBiNThiYTk0MGJlNDc0Li4yZWJiMDBmNmMzNzkzIDEwMDY0NFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xuKysrIGIvbW0vdHJ1bmNhdGUuY1xuQEAgLTIwNiwxNSArMjA2LDE4IEBAIHN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxuIC8qXG4gICogSGFuZGxlIHBhcnRpYWwgZm9saW9zLiAgVGhlIGZvbGlvIG1heSBiZSBlbnRpcmVseSB3aXRoaW4gdGhlXG4gICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGVcbi0gKiBmb2xpbyB0aGF0J3Mgd2l0aGluIHRoZSBbc3RhcnQsIGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZlxuKyAqIGZvbGlvIHRoYXQncyB3aXRoaW4gdGhlIFtsc3RhcnQsIGxlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWZcbiAgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxuICAqIGlfc2l6ZSwgYW5kIHdlIHJlbHkgb24gdGhlIGNhbGxlciB0byBkaXNjYXJkIHBhZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYVxuICAqIG5ld2x5IGNyZWF0ZWQgaG9sZS5cbiAgKlxuLSAqIFJldHVybnMgZmFsc2UgaWYgc3BsaXR0aW5nIGZhaWxlZCBzbyB0aGUgY2FsbGVyIGNhbiBhdm9pZFxuLSAqIGRpc2NhcmRpbmcgdGhlIGVudGlyZSBmb2xpbyB3aGljaCBpcyBzdHViYm9ybmx5IHVuc3BsaXQuXG4rICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXG4rICogYW5kIG11c3QgYmUga2VwdCBieSB0aGUgY2FsbGVyJ3MgdHJ1bmNhdGUgbG9vcC4gIFJldHVybiAldHJ1ZSBpZiB0aGVcbisgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3JcbisgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXG4gICovXG4tYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbitcdFx0XHRcdCAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZClcbiB7XG4gXHRsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiBcdHNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7XG5AQCAtMjIyLDE5ICsyMjUsMjIgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiBcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgKnNwbGl0X2F0MjtcbiBcdHVuc2lnbmVkIGludCBtaW5fb3JkZXI7XG4gXG4tXHRpZiAocG9zIFx1MDAzYyBzdGFydClcbi1cdFx0b2Zmc2V0ID0gc3RhcnQgLSBwb3M7XG4rXHRpZiAoZW5kIFx1MDAyNlx1MDAyNiBwb3MgKyBzaXplIFx1MDAzZSAodTY0KWxlbmQpXG4rXHRcdCplbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbitcbitcdGlmIChwb3MgXHUwMDNjIGxzdGFydClcbitcdFx0b2Zmc2V0ID0gbHN0YXJ0IC0gcG9zO1xuIFx0ZWxzZVxuIFx0XHRvZmZzZXQgPSAwO1xuLVx0aWYgKHBvcyArIHNpemUgXHUwMDNjPSAodTY0KWVuZClcbitcdGlmIChwb3MgKyBzaXplIFx1MDAzYz0gKHU2NClsZW5kKVxuIFx0XHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xuIFx0ZWxzZVxuLVx0XHRsZW5ndGggPSBlbmQgKyAxIC0gcG9zIC0gb2Zmc2V0O1xuK1x0XHRsZW5ndGggPSBsZW5kICsgMSAtIHBvcyAtIG9mZnNldDtcbiBcbiBcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xuIFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI0OCw3ICsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxuIFx0XHRmb2xpb19pbnZhbGlkYXRlKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4gXHRzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTtcbkBAIC0yNTksNiArMjY1LDEwIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4gXHRcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbzI7XG4rXHRcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XG4rXG4rXHRcdGlmIChlbmQpXG4rXHRcdFx0KmVuZCA9IChwb3MgKyBvZmZzZXQgKyBsZW5ndGgpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0XHRpZiAob2Zmc2V0ICsgbGVuZ3RoID09IHNpemUpXG4gXHRcdFx0Z290byBub19zcGxpdDtcbkBAIC0yNzMsMjQgKzI4MywyOCBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpXG4rXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKSB7XG4rXHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXG4gXHRcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZm9saW8yLVx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXHUwMDNlbWFwcGluZylcbi1cdFx0XHRmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKTtcbitcdFx0ICAgIGZvbGlvMi1cdTAwM2VtYXBwaW5nID09IGZvbGlvLVx1MDAzZW1hcHBpbmcgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKSlcbitcdFx0XHR0YWlsX2lzb2xhdGVkID0gZmFsc2U7XG4gXG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbzIpO1xuIG91dDpcbitcdFx0aWYgKCF0YWlsX2lzb2xhdGVkIFx1MDAyNlx1MDAyNiBlbmQpXG4rXHRcdFx0KmVuZCA9IGZvbGlvMi1cdTAwM2VpbmRleDtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvMik7XG4gbm9fc3BsaXQ6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuLVx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRyZXR1cm4gdHJ1ZTtcbitcdGlmICghZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4rXHRcdHRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLVx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLypcbkBAIC00MTMsMTEgKzQyNyw5IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7XG4gXHRpZiAoIUlTX0VSUihmb2xpbykpIHtcbiBcdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbi1cdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XG4rXHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxuK1x0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4tXHRcdFx0aWYgKHNhbWVfZm9saW8pXG4tXHRcdFx0XHRlbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbi1cdFx0fVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG5AQCAtNDI3LDggKzQzOSw3IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRcdEZHUF9MT0NLLCAwKTtcbiBcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKVxuLVx0XHRcdFx0ZW5kID0gZm9saW8tXHUwMDNlaW5kZXg7XG4rXHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuIFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjA6NTAuNTE3Nzk2NDc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzMyNjk3NTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBGb2N1cyBvbiBUcnVuY2F0aW9uIGFuZCBTaGFyZWQgTWVtb3J5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgc3BlY2lmaWMgZmlsZXMgYW5kIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkLiBJdCdzIG1vZGlmeWluZyBgbW0vaW50ZXJuYWwuaGAsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS90cnVuY2F0ZS5jYC4gVGhhdCdzIGEgY2xlYXIgc2lnbmFsIOKAkyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgYW5kIHRoZSB0cnVuY2F0aW9uIG9mIGlub2Rlcy5cblxuVGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbXkgYXR0ZW50aW9uIGFyZTogYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VgIGluIGBtbS90cnVuY2F0ZS5jYCwgYW5kIGBzaG1lbV91bmRvX3JhbmdlYCBpbiBgbW0vc2htZW0uY2AuIFRoZSBmYWN0IHRoYXQgYHRydW5jYXRlYCBpcyBpbnZvbHZlZCBzdHJvbmdseSBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyBmaWxlcyBhcmUgc2hvcnRlbmVkIG9yIGNsZWFyZWQsIGFuZCBgc2htZW1gIGluZGljYXRlcyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLiBUaGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIHR3byBjb25jZXB0cyBpbW1lZGlhdGVseSBicmluZ3MgdXAgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHJlbGF0aW5nIHRvIGRhdGEgY29uc2lzdGVuY3kuXG5cbk15IG5leHQgc3RlcCBpcyB0byBnZXQgbXkgaGVhZCBhcm91bmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgc28gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIGBtbS90cnVuY2F0ZS5jYCBhbmQgYG1tL3NobWVtLmNgLiBUaGF0J3MgdGhlIG9ubHkgd2F5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjA6NTcuODQ0Nzc3MDk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3RydW5jYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiA5NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdFxcdFxcdFdBUk5fT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxuIDIwMTpcXHRcXHR9XFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdHJldHVybiByZXQ7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdC8qXFxuIDIwNzpcXHQgKiBIYW5kbGUgcGFydGlhbCBmb2xpb3MuICBUaGUgZm9saW8gbWF5IGJlIGVudGlyZWx5IHdpdGhpbiB0aGVcXG4gMjA4OlxcdCAqIHJhbmdlIGlmIGEgc3BsaXQgaGFzIHJhY2VkIHdpdGggdXMuICBJZiBub3QsIHdlIHplcm8gdGhlIHBhcnQgb2YgdGhlXFxuIDIwOTpcXHQgKiBmb2xpbyB0aGF0J3Mgd2l0aGluIHRoZSBbbHN0YXJ0LCBsZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmXFxuIDIxMDpcXHQgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxcbiAyMTE6XFx0ICogaV9zaXplLCBhbmQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGRpc2NhcmQgcGFnZXMgd2hpY2ggbGllIHdpdGhpbiBhXFxuIDIxMjpcXHQgKiBuZXdseSBjcmVhdGVkIGhvbGUuXFxuIDIxMzpcXHQgKlxcbiAyMTQ6XFx0ICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXFxuIDIxNTpcXHQgKiBhbmQgbXVzdCBiZSBrZXB0IGJ5IHRoZSBjYWxsZXIncyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZVxcbiAyMTY6XFx0ICogZm9saW8gd2FzIHNwbGl0LCAlZmFsc2Ugb3RoZXJ3aXNlLCBpbiB3aGljaCBjYXNlIHRoZSBmb2xpbyBpcyBkcm9wcGVkIG9yXFxuIDIxNzpcXHQgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXFxuIDIxODpcXHQgKi9cXG4gMjE5OlxcdGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxcbiAyMjA6XFx0XFx0XFx0XFx0XFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxcbiAyMjE6XFx0e1xcbiAyMjI6XFx0XFx0bG9mZl90IHBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XFxuIDIyMzpcXHRcXHRzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pO1xcbiAyMjQ6XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuZ3RoO1xcbiAyMjU6XFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCAqc3BsaXRfYXQyO1xcbiAyMjY6XFx0XFx0dW5zaWduZWQgaW50IG1pbl9vcmRlcjtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0aWYgKGVuZCBcXHUwMDI2XFx1MDAyNiBwb3MgKyBzaXplIFxcdTAwM2UgKHU2NClsZW5kKVxcbiAyMjk6XFx0XFx0XFx0KmVuZCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0aWYgKHBvcyBcXHUwMDNjIGxzdGFydClcXG4gMjMyOlxcdFxcdFxcdG9mZnNldCA9IGxzdGFydCAtIHBvcztcXG4gMjMzOlxcdFxcdGVsc2VcXG4gMjM0OlxcdFxcdFxcdG9mZnNldCA9IDA7XFxuIDIzNTpcXHRcXHRpZiAocG9zICsgc2l6ZSBcXHUwMDNjPSAodTY0KWxlbmQpXFxuIDIzNjpcXHRcXHRcXHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xcbiAyMzc6XFx0XFx0ZWxzZVxcbiAyMzg6XFx0XFx0XFx0bGVuZ3RoID0gbGVuZCArIDEgLSBwb3MgLSBvZmZzZXQ7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG4gMjQxOlxcdFxcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xcbiAyNDI6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcXG4gMjQzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQ0OlxcdFxcdH1cXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0LypcXG4gMjQ3OlxcdFxcdCAqIFdlIG1heSBiZSB6ZXJvaW5nIHBhZ2VzIHdlJ3JlIGFib3V0IHRvIGRpc2NhcmQsIGJ1dCBpdCBhdm9pZHNcXG4gMjQ4OlxcdFxcdCAqIGRvaW5nIGEgY29tcGxleCBjYWxjdWxhdGlvbiBoZXJlLCBhbmQgdGhlbiBkb2luZyB0aGUgemVyb2luZ1xcbiAyNDk6XFx0XFx0ICogYW55d2F5IGlmIHRoZSBwYWdlIHNwbGl0IGZhaWxzLlxcbiAyNTA6XFx0XFx0ICovXFxuIDI1MTpcXHRcXHRpZiAoIW1hcHBpbmdfaW5hY2Nlc3NpYmxlKGZvbGlvLVxcdTAwM2VtYXBwaW5nKSlcXG4gMjUyOlxcdFxcdFxcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxcbiAyNTU6XFx0XFx0XFx0Zm9saW9faW52YWxpZGF0ZShmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbiAyNTY6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4gMjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXFx1MDAzZW1hcHBpbmcpO1xcbiAyNjA6XFx0XFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XFxuIDI2MTpcXHRcXHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xcbiAyNjI6XFx0XFx0XFx0LypcXG4gMjYzOlxcdFxcdFxcdCAqIHRyeSB0byBzcGxpdCBhdCBvZmZzZXQgKyBsZW5ndGggdG8gbWFrZSBzdXJlIGZvbGlvcyB3aXRoaW5cXG4gMjY0OlxcdFxcdFxcdCAqIHRoZSByYW5nZSBjYW4gYmUgZHJvcHBlZCwgZXNwZWNpYWxseSB0byBhdm9pZCBtZW1vcnkgd2FzdGVcXG4gMjY1OlxcdFxcdFxcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxcbiAyNjY6XFx0XFx0XFx0ICovXFxuIDI2NzpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcXG4gMjY4OlxcdFxcdFxcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XFxuIDI2OTpcXHRcXG4gMjcwOlxcdFxcdFxcdGlmIChlbmQpXFxuIDI3MTpcXHRcXHRcXHRcXHQqZW5kID0gKHBvcyArIG9mZnNldCArIGxlbmd0aCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0XFx0aWYgKG9mZnNldCArIGxlbmd0aCA9PSBzaXplKVxcbiAyNzQ6XFx0XFx0XFx0XFx0Z290byBub19zcGxpdDtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0XFx0c3BsaXRfYXQyID0gZm9saW9fcGFnZShmb2xpbyxcXG4gMjc3OlxcdFxcdFxcdFxcdFxcdFBBR0VfQUxJR05fRE9XTihvZmZzZXQgKyBsZW5ndGgpIC8gUEFHRV9TSVpFKTtcXG4gMjc4OlxcdFxcdFxcdGZvbGlvMiA9IHBhZ2VfZm9saW8oc3BsaXRfYXQyKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0XFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvMikpXFxuIDI4MTpcXHRcXHRcXHRcXHRnb3RvIG5vX3NwbGl0O1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcXG4gMjg0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSkge1xcbiAyODc6XFx0XFx0XFx0XFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xcbiAyODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI4OTpcXHRcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdFxcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xcbiAyOTI6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSBcXHUwMDI2XFx1MDAyNlxcbiAyOTM6XFx0XFx0XFx0ICAgIGZvbGlvMi1cXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cXHUwMDNlbWFwcGluZyBcXHUwMDI2XFx1MDAyNlxcbiAyOTQ6XFx0XFx0XFx0ICAgIGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMDo1Ny44NDUwMjAzNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODM3OTU4ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0YWtlIGEgbG9vayBhdCBgbW0vc2htZW0uY2AgYXJvdW5kIGxpbmUgMTE3NSBhbmQgYG1tL3RydW5jYXRlLmNgIGFyb3VuZCBsaW5lIDQxMy4gVGhpcyBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi4gYHNobWVtYCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBzaGFyZWQgbWVtb3J5LCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRtcGZzIG9yIHNpbWlsYXIgbWVtb3J5LWJhc2VkIGZpbGUgc3lzdGVtcy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYXQgdGhhdCBwYXJ0aWN1bGFyIHBvaW50LCBwZXJoYXBzIHJlZ2FyZGluZyBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIHN5bmNocm9uaXphdGlvbi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVyLCBJJ2QgZXhwZWN0IHRvIGJlIGxvb2tpbmcgYXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHBhZ2UgY2FjaGUgYW5kIHNoYXJlZCBtZW1vcnkgaW4gdGhvc2UgbGluZXMuXG5cblRoZW4sIHR1cm5pbmcgdG8gYG1tL3RydW5jYXRlLmNgLCBsaW5lIDQxMyBsaWtlbHkgcmVsYXRlcyB0byB0aGUgdHJ1bmNhdGlvbiBvZiBhIGZpbGUgb3Igc2hhcmVkIG1lbW9yeSByZWdpb24uIFRoaXMgZnVuY3Rpb24gdXN1YWxseSBpbnZvbHZlcyByZWxlYXNpbmcgcmVzb3VyY2VzLCB1cGRhdGluZyBtZXRhZGF0YSwgYW5kIHBvdGVudGlhbGx5IGludmFsaWRhdGluZyBjYWNoZWQgZGF0YS4gSSdtIGJldHRpbmcgd2UncmUgbG9va2luZyBhdCB0aGUgZWZmZWN0cyBvZiB0aGUgdHJ1bmNhdGlvbiBvbiBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBiZSBhIHBhcnRpY3VsYXJseSB0cmlja3kgYXJlYS4gVGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSB0d28gZmlsZXMgYXJlIGEgbGlrZWx5IHNvdXJjZSBvZiBwb3RlbnRpYWwgZm9yIGRhdGEgY29ycnVwdGlvbiBhbmQgZXJyb3JzLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBiZSwgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjA3LjY4Mjk4MjUyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTcwOlxcdFxcdGlmICh1bmZhbGxvYylcXG4xMTcxOlxcdFxcdFxcdGdvdG8gd2hvbGVfZm9saW9zO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSA9PSAobGVuZCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMTc0OlxcdFxcdGZvbGlvID0gc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oaW5vZGUsIGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMTc1OlxcdFxcdGlmIChmb2xpbykge1xcbjExNzY6XFx0XFx0XFx0c2FtZV9mb2xpbyA9IGxlbmQgXFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XFxuMTE3NzpcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4xMTc4OlxcdFxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzYW1lX2ZvbGlvID8gXFx1MDAyNmVuZCA6IE5VTEwpKVxcbjExODA6XFx0XFx0XFx0XFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcXG4xMTgxOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTE4MjpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjExODM6XFx0XFx0XFx0Zm9saW8gPSBOVUxMO1xcbjExODQ6XFx0XFx0fVxcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAoIXNhbWVfZm9saW8pXFxuMTE4NzpcXHRcXHRcXHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbjExODg6XFx0XFx0aWYgKGZvbGlvKSB7XFxuMTE4OTpcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4xMTkwOlxcdFxcdFxcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXFx1MDAyNmVuZCk7XFxuMTE5MTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjExOTI6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4xMTkzOlxcdFxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0d2hvbGVfZm9saW9zOlxcbjExOTY6XFx0XFxuMTE5NzpcXHRcXHRpbmRleCA9IHN0YXJ0O1xcbjExOTg6XFx0XFx0d2hpbGUgKGluZGV4IFxcdTAwM2MgZW5kKSB7XFxuMTE5OTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xMjAwOlxcdFxcbjEyMDE6XFx0XFx0XFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFxcdTAwMjZpbmRleCwgZW5kIC0gMSwgXFx1MDAyNmZiYXRjaCxcXG4xMjAyOlxcdFxcdFxcdFxcdFxcdGluZGljZXMpKSB7XFxuMTIwMzpcXHRcXHRcXHRcXHQvKiBJZiBhbGwgZ29uZSBvciBob2xlLXB1bmNoIG9yIHVuZmFsbG9jLCB3ZSdyZSBkb25lICovXFxuMTIwNDpcXHRcXHRcXHRcXHRpZiAoaW5kZXggPT0gc3RhcnQgfHwgZW5kICE9IC0xKVxcbjEyMDU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIwNjpcXHRcXHRcXHRcXHQvKiBCdXQgaWYgdHJ1bmNhdGluZywgcmVzdGFydCB0byBtYWtlIHN1cmUgYWxsIGdvbmUgKi9cXG4xMjA3OlxcdFxcdFxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuMTIwODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjA5OlxcdFxcdFxcdH1cXG4xMjEwOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcXHUwMDI2ZmJhdGNoKTsgaSsrKSB7XFxuMTIxMTpcXHRcXHRcXHRcXHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdFxcdFxcdGlmICh4YV9pc192YWx1ZShmb2xpbykpIHtcXG4xMjE0OlxcdFxcdFxcdFxcdFxcdGludCBvcmRlcjtcXG4xMjE1OlxcdFxcdFxcdFxcdFxcdGxvbmcgc3dhcHNfZnJlZWQ7XFxuMTIxNjpcXHRcXG4xMjE3OlxcdFxcdFxcdFxcdFxcdGlmICh1bmZhbGxvYylcXG4xMjE4OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMTk6XFx0XFx0XFx0XFx0XFx0c3dhcHNfZnJlZWQgPSBzaG1lbV9mcmVlX3N3YXAobWFwcGluZywgaW5kaWNlc1tpXSxcXG4xMjIwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGVuZCAtIDEsIGZvbGlvKTtcXG4xMjIxOlxcdFxcdFxcdFxcdFxcdGlmICghc3dhcHNfZnJlZWQpIHtcXG4xMjIyOlxcdFxcdFxcdFxcdFxcdFxcdHBnb2ZmX3QgYmFzZSA9IGluZGljZXNbaV07XFxuMTIyMzpcXHRcXG4xMjI0OlxcdFxcdFxcdFxcdFxcdFxcdG9yZGVyID0gc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGljZXNbaV0sXFxuMTIyNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICByYWRpeF90b19zd3BfZW50cnkoZm9saW8pKTtcXG4xMjI2OlxcdFxcdFxcdFxcdFxcdFxcdC8qXFxuMTIyNzpcXHRcXHRcXHRcXHRcXHRcXHQgKiBJZiBmb3VuZCBhIGxhcmdlIHN3YXAgZW50cnkgY3Jvc3MgdGhlIGVuZCBvciBzdGFydFxcbjEyMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXFxuMTIyOTpcXHRcXHRcXHRcXHRcXHRcXHQgKiBhYm92ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB6ZXJvZCBpdHMgY29udGVudCBvbmNlLlxcbjEyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICovXFxuMTIzMTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSAwKSB7XFxuMTIzMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRiYXNlID0gcm91bmRfZG93bihiYXNlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4xMjMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGlmIChiYXNlIFxcdTAwM2Mgc3RhcnQgfHwgYmFzZSArICgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSBcXHUwMDNlIGVuZClcXG4xMjM0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMzU6XFx0XFx0XFx0XFx0XFx0XFx0fVxcbjEyMzY6XFx0XFx0XFx0XFx0XFx0XFx0LyogU3dhcCB3YXMgcmVwbGFjZWQgYnkgcGFnZSBvciBleHRlbmRlZCwgcmV0cnkgKi9cXG4xMjM3OlxcdFxcdFxcdFxcdFxcdFxcdGluZGV4ID0gYmFzZTtcXG4xMjM4OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMzk6XFx0XFx0XFx0XFx0XFx0fVxcbjEyNDA6XFx0XFx0XFx0XFx0XFx0bnJfc3dhcHNfZnJlZWQgKz0gc3dhcHNfZnJlZWQ7XFxuMTI0MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjQyOlxcdFxcdFxcdFxcdH1cXG4xMjQzOlxcdFxcbjEyNDQ6XFx0XFx0XFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuMTI0NTpcXHRcXG4xMjQ2OlxcdFxcdFxcdFxcdGlmICghdW5mYWxsb2MgfHwgIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XFxuMTI0NzpcXHRcXHRcXHRcXHRcXHRpZiAoZm9saW9fbWFwcGluZyhmb2xpbykgIT0gbWFwcGluZykge1xcbjEyNDg6XFx0XFx0XFx0XFx0XFx0XFx0LyogUGFnZSB3YXMgcmVwbGFjZWQgYnkgc3dhcDogcmV0cnkgKi9cXG4xMjQ5OlxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTI1MDpcXHRcXHRcXHRcXHRcXHRcXHRpbmRleCA9IGluZGljZXNbaV07XFxuMTI1MTpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMjUyOlxcdFxcdFxcdFxcdFxcdH1cXG4xMjUzOlxcdFxcdFxcdFxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXFxuMTI1NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRmb2xpbyk7XFxuMTI1NTpcXHRcXG4xMjU2OlxcdFxcdFxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4xMjU3OlxcdFxcdFxcdFxcdFxcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4xMjU4OlxcdFxcdFxcdFxcdFxcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcXG4xMjU5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGxzdGFydCwgbGVuZCwgTlVMTCkpIHtcXG4xMjYwOlxcdFxcdFxcdFxcdFxcdFxcdC8qXFxuMTI2MTpcXHRcXHRcXHRcXHRcXHRcXHQgKiBJZiB3ZSBzcGxpdCBhIHBhZ2UsIHJlc2V0IHRoZSBsb29wIHNvXFxuMTI2MjpcXHRcXHRcXHRcXHRcXHRcXHQgKiB0aGF0IHdlIHBpY2sgdXAgdGhlIG5ldyBzdWIgcGFnZXMuXFxuMTI2MzpcXHRcXHRcXHRcXHRcXHRcXHQgKiBPdGhlcndpc2UgdGhlIFRIUCB3YXMgZW50aXJlbHlcXG4xMjY0OlxcdFxcdFxcdFxcdFxcdFxcdCAqIGRyb3BwZWQgb3IgdGhlIHRhcmdldCByYW5nZSB3YXNcXG4xMjY1OlxcdFxcdFxcdFxcdFxcdFxcdCAqIHplcm9lZCwgc28ganVzdCBjb250aW51ZSB0aGUgbG9vcCBhc1xcbjEyNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICogaXMuXFxuMTI2NzpcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4xMjY4OlxcdFxcdFxcdFxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4xMjY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjA3LjY4MzIzODI4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MzIzNzkwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYG1tL3RydW5jYXRlLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYHRydW5jYXRlYCBmdW5jdGlvbmFsaXR5LiBCYXNlZCBvbiB3aGF0IEknbSBsb29raW5nIGF0LCB0aGUgYXJlYSBvZiBpbnRlcmVzdCBzZWVtcyB0byBiZSBhcm91bmQgbGluZXMgNDEwIHRvIDQ1MCBpbiBgbW0vdHJ1bmNhdGUuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBrZXkgbG9naWMgdGhlcmUgcmVsYXRlZCB0byBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0cyB3aXRoIHRoZSB0cnVuY2F0aW9uIHByb2Nlc3MuIFByb2JhYmx5IHNvbWUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaW5vZGUsIHBhZ2UgY2FjaGUsIGFuZCBibG9jayBhbGxvY2F0aW9uLiBLbm93aW5nIHdoZXJlIHRoZSByZWxldmFudCBjb2RlIGxpZXMgYWxsb3dzIG1lIHRvIGZvY3VzIG15IGVmZm9ydHMuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgbGllIHdpdGhpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODk1NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6MTYuNTE1NjIyNDMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3RydW5jYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDEwOlxcdFxcdFxcdGVuZCA9IChsZW5kICsgMSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNDExOlxcdFxcbiA0MTI6XFx0XFx0Zm9saW9fYmF0Y2hfaW5pdChcXHUwMDI2ZmJhdGNoKTtcXG4gNDEzOlxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuIDQxNDpcXHRcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBlbmQgXFx1MDAyNlxcdTAwMjYgZmluZF9sb2NrX2VudHJpZXMobWFwcGluZywgXFx1MDAyNmluZGV4LCBlbmQgLSAxLFxcbiA0MTU6XFx0XFx0XFx0XFx0XFx1MDAyNmZiYXRjaCwgaW5kaWNlcykpIHtcXG4gNDE2OlxcdFxcdFxcdHRydW5jYXRlX2ZvbGlvX2JhdGNoX2V4Y2VwdGlvbmFscyhtYXBwaW5nLCBcXHUwMDI2ZmJhdGNoLCBpbmRpY2VzKTtcXG4gNDE3OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcXHUwMDI2ZmJhdGNoKTsgaSsrKVxcbiA0MTg6XFx0XFx0XFx0XFx0dHJ1bmNhdGVfY2xlYW51cF9mb2xpbyhmYmF0Y2guZm9saW9zW2ldKTtcXG4gNDE5OlxcdFxcdFxcdGRlbGV0ZV9mcm9tX3BhZ2VfY2FjaGVfYmF0Y2gobWFwcGluZywgXFx1MDAyNmZiYXRjaCk7XFxuIDQyMDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXFx1MDAyNmZiYXRjaCk7IGkrKylcXG4gNDIxOlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmYmF0Y2guZm9saW9zW2ldKTtcXG4gNDIyOlxcdFxcdFxcdGZvbGlvX2JhdGNoX3JlbGVhc2UoXFx1MDAyNmZiYXRjaCk7XFxuIDQyMzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNDI0OlxcdFxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0XFx0c2FtZV9mb2xpbyA9IChsc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuIDQyNzpcXHRcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIEZHUF9MT0NLLCAwKTtcXG4gNDI4OlxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbiA0Mjk6XFx0XFx0XFx0c2FtZV9mb2xpbyA9IGxlbmQgXFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XFxuIDQzMDpcXHRcXHRcXHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCxcXG4gNDMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc2FtZV9mb2xpbyA/IFxcdTAwMjZlbmQgOiBOVUxMKSlcXG4gNDMyOlxcdFxcdFxcdFxcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XFxuIDQzMzpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiA0MzQ6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gNDM1OlxcdFxcdFxcdGZvbGlvID0gTlVMTDtcXG4gNDM2OlxcdFxcdH1cXG4gNDM3OlxcdFxcbiA0Mzg6XFx0XFx0aWYgKCFzYW1lX2ZvbGlvKSB7XFxuIDQzOTpcXHRcXHRcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbiA0NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0ssIDApO1xcbiA0NDE6XFx0XFx0XFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XFxuIDQ0MjpcXHRcXHRcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFxcdTAwMjZlbmQpO1xcbiA0NDM6XFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gNDQ0OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDQ0NTpcXHRcXHRcXHR9XFxuIDQ0NjpcXHRcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuIDQ0OTpcXHRcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBlbmQpIHtcXG4gNDUwOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiA0NTE6XFx0XFx0XFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFxcdTAwMjZpbmRleCwgZW5kIC0gMSwgXFx1MDAyNmZiYXRjaCxcXG4gNDUyOlxcdFxcdFxcdFxcdFxcdGluZGljZXMpKSB7XFxuIDQ1MzpcXHRcXHRcXHRcXHQvKiBJZiBhbGwgZ29uZSBmcm9tIHN0YXJ0IG9ud2FyZHMsIHdlJ3JlIGRvbmUgKi9cXG4gNDU0OlxcdFxcdFxcdFxcdGlmIChpbmRleCA9PSBzdGFydClcXG4gNDU1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NTY6XFx0XFx0XFx0XFx0LyogT3RoZXJ3aXNlIHJlc3RhcnQgdG8gbWFrZSBzdXJlIGFsbCBnb25lICovXFxuIDQ1NzpcXHRcXHRcXHRcXHRpbmRleCA9IHN0YXJ0O1xcbiA0NTg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ1OTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjE2LjUxNTc0OTE4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMjIzODk1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogUGF0Y2ggV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgYXJlYXMuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgbW0vdHJ1bmNhdGUuY2AgYW5kIGBtbS9zaG1lbS5jYCBmaWxlcy4gV2UncmUgbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAuIFRoZXNlIGFyZSBpbnRpbWF0ZWx5IGludm9sdmVkIGluIHRydW5jYXRpb24gb3BlcmF0aW9ucywgaG9sZSBwdW5jaGluZyAodmlhIGBmYWxsb2NhdGVgKSwgYGZ0cnVuY2F0ZWAsIGFuZCBwYWdlIGNhY2hlIG1hbmFnZW1lbnQuIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGNvcmUgdG8gZmlsZSBzeXN0ZW0gYmVoYXZpb3IgYW5kIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIHRvdWNoZXMgdGhlIHBhZ2UgY2FjaGUsIGZvbGlvIGhhbmRsaW5nLCBhbmQgZXZlbiBkZWFscyB3aXRoIGxhcmdlIGZvbGlvcyBvciBUSFAgc3BsaXR0aW5nIGFuZCB0cnVuY2F0aW9uLCBtZWFucyBpdCdzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzOiBgdHJ1bmNhdGVgLCBgZnRydW5jYXRlYCwgYW5kIGBmYWxsb2NhdGVgLCB3aGljaCBhcmUgY29tbW9ubHkgdXNlZCBvbiByZWd1bGFyIGZpbGVzLCBhcyB3ZWxsIGFzIGBzaG1lbWAsIGB0bXBmc2AsIGFuZCBgbWVtZmRgLiBUaGF0IG1ha2VzIGl0IGV2ZW4gbW9yZSBpbXBvcnRhbnQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudD8gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgYSBkZWVwIGRpdmUuIEkgbmVlZCB0byBub3cgZXhhbWluZSB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB0byBzZWUgd2hhdCBhZGRpdGlvbmFsIGRldGFpbHMgSSBjYW4gZ2xlYW4uIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCByZWxhdGlvbnNoaXBzIGJldHdlZW4gYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBhbnkgb3RoZXIgY2FsbGVycyBvciByZWxhdGVkIGZ1bmN0aW9ucy4gSSdsbCBydW4gYSBncmVwIHRvIGNvbmZpcm0gdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMToyMy44MzgxNDMzODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTU4NTc0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTYyOT1pbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6NjMwOmJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxcbm1tL2ludGVybmFsLmgtNjMxLVxcdFxcdGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpO1xcbi0tXFxubW0vc2htZW0uYz0xMTE5PXN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXFxuLS1cXG5tbS9zaG1lbS5jLTExNzctXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxubW0vc2htZW0uYzoxMTc4OlxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbm1tL3NobWVtLmMtMTE3OS1cXHRcXHRcXHRcXHRcXHRcXHQgIHNhbWVfZm9saW8gPyBcXHUwMDI2ZW5kIDogTlVMTCkpXFxuLS1cXG5tbS9zaG1lbS5jLTExODktXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxubW0vc2htZW0uYzoxMTkwOlxcdFxcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXFx1MDAyNmVuZCk7XFxubW0vc2htZW0uYy0xMTkxLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLS1cXG5tbS9zaG1lbS5jLTEyMjctXFx0XFx0XFx0XFx0XFx0ICogSWYgZm91bmQgYSBsYXJnZSBzd2FwIGVudHJ5IGNyb3NzIHRoZSBlbmQgb3Igc3RhcnRcXG5tbS9zaG1lbS5jOjEyMjg6XFx0XFx0XFx0XFx0XFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXFxubW0vc2htZW0uYy0xMjI5LVxcdFxcdFxcdFxcdFxcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXFxuLS1cXG5tbS9zaG1lbS5jLTEyNTctXFx0XFx0XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8obWFwcGluZywgZm9saW8pO1xcbm1tL3NobWVtLmM6MTI1ODpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXFxubW0vc2htZW0uYy0xMjU5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGxzdGFydCwgbGVuZCwgTlVMTCkpIHtcXG4tLVxcbm1tL3RydW5jYXRlLmM9MTgwPXN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxcbi0tXFxubW0vdHJ1bmNhdGUuYy0yMTgtICovXFxubW0vdHJ1bmNhdGUuYzoyMTk6Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsXFxubW0vdHJ1bmNhdGUuYy0yMjAtXFx0XFx0XFx0XFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxcbi0tXFxubW0vdHJ1bmNhdGUuYz0zODA9dm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3RydW5jYXRlLmMtNDI5LVxcdFxcdHNhbWVfZm9saW8gPSBsZW5kIFxcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xcbm1tL3RydW5jYXRlLmM6NDMwOlxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbm1tL3RydW5jYXRlLmMtNDMxLVxcdFxcdFxcdFxcdFxcdFxcdCAgc2FtZV9mb2xpbyA/IFxcdTAwMjZlbmQgOiBOVUxMKSlcXG4tLVxcbm1tL3RydW5jYXRlLmMtNDQxLVxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbm1tL3RydW5jYXRlLmM6NDQyOlxcdFxcdFxcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXFx1MDAyNmVuZCk7XFxubW0vdHJ1bmNhdGUuYy00NDMtXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6MjYuNTM0MDEyMDk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NzQ0NTgxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIHBpZWNlZCB0b2dldGhlciBmcm9tIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBzb21lIHNoYXJlZCBtZW1vcnkgYW5kIHRydW5jYXRpb24gZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdG9wIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBgbW0vc2htZW0uY2AgYW5kIGBtbS90cnVuY2F0ZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQsIGlmIGFueSwgZmxleGliaWxpdHkgaXMgb2ZmZXJlZCBhdCBjb21waWxlIHRpbWUuIEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBvcHRpb25hbCBmZWF0dXJlcyBJIHNob3VsZCBrbm93IGFib3V0PyBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC5cblxuVGhlbiwgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgcHJvY2VzcywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgdGhhdCBkZXRlcm1pbmUgaG93IGBzaG1lbS5vYCBhbmQgYHRydW5jYXRlLm9gIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gV2hhdCBvdGhlciBzb3VyY2UgZmlsZXMgYXJlIGJ1aWx0IGFsb25nc2lkZSB0aGVzZT8gQXJlIHRoZXJlIGFueSBjb21waWxlciBmbGFncyBvciBzcGVjaWZpYyBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMgSSBzaG91bGQga25vdyBhYm91dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGVzZSBmaWxlcyB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gQnkgdW5kZXJzdGFuZGluZyB0aGUgTWFrZWZpbGUgSSBjYW4gZmlndXJlIG91dCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgaGl0cyB0aGUgcm9hZCBpbiB0ZXJtcyBvZiBzZWVpbmcgdGhlIG92ZXJhbGwgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQgYWxsIHdvcmtzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjMwLjQwODQ3MzQ5NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxMDY3NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHRydW5jYXRlfHNobWVtKVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Mi1cXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxubW0vTWFrZWZpbGU6NTM6XFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gZm9saW8ubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU0OlxcdFxcdFxcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU1LVxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG4tLVxcbm1tL3NobWVtLmM9NTIwPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy01NjktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmM6NTcwOi8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cXG5tbS9zaG1lbS5jLTU3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6MzAuNDcwNTg2MzYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MjY3MTE1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBNZW1vcnkgRmlsZXN5c3RlbXMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IG1lbW9yeS1iYXNlZCBmaWxlc3lzdGVtcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBjdXJyZW50bHkgZW5hYmxlZCBpbiB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHJlZ2FyZGluZyBzaGFyZWQgbWVtb3J5LCB0ZW1wb3JhcnkgZmlsZXN5c3RlbXMsIGFuZCB0cmFuc3BhcmVudCBodWdlcGFnZXMuIEl0J3MgYSBjb21tb24gZGVwZW5kZW5jeSBhbmFseXNpcywgbm90aGluZyBuZXcuXG5cbk15IGZpcnN0IGNoZWNrIHdpbGwgYmUgZm9yIGBDT05GSUdfU0hNRU1gLCBgQ09ORklHX1RNUEZTYCwgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGtub3cgdGhlc2UgYXJlIGltcG9ydGFudC4gU3BlY2lmaWNhbGx5IGZvciBgQ09ORklHX1NITUVNYCwgSSdsbCBwcm9iYWJseSBzdGFydCBkaWdnaW5nIGludG8gYG1tL3NobWVtLmNgIG9yIG1heWJlIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGVzZSBmaWxlcyB0ZW5kIHRvIGJlIG15IGdvLXRvJ3MgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIGZvciB0aGF0IHNwZWNpZmljIHN1YnN5c3RlbSBhbmQgaG93IGl0IGhvb2tzIGludG8gdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50LiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhhdCBzaGFyZWQgbWVtb3J5IGlzLCB3ZWxsLCBzaGFyZWQgbWVtb3J5IG1hbmFnZWQgYnkgdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjM0LjA5NzMwMTA3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2OTQ0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NITUVNfENPTkZJR19UTVBGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTQ2PW9iai0kKENPTkZJR19FWEVDTUVNKSArPSBleGVjbWVtLm9cXG5tbS9NYWtlZmlsZToxNDc6b2JqLSQoQ09ORklHX1RNUEZTX1FVT1RBKSArPSBzaG1lbV9xdW90YS5vXFxubW0vTWFrZWZpbGUtMTQ4LW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz02MTk9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmh1Z2VwYWdlX2F0dHJbXSA9IHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjIzLVxcdFxcdTAwMjZocGFnZV9wbWRfc2l6ZV9hdHRyLmF0dHIsXFxubW0vaHVnZV9tZW1vcnkuYzo2MjQ6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjI1LVxcdFxcdTAwMjZzaG1lbV9lbmFibGVkX2F0dHIuYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NzIwPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmaWxlX2N0cmxfYXR0cnNbXSA9IHtcXG5tbS9odWdlX21lbW9yeS5jOjcyMTojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy03MjItXFx0XFx1MDAyNnRocHNpemVfc2htZW1fZW5hYmxlZF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTc4MD1ERUZJTkVfTVRIUF9TVEFUX0FUVFIoc3dwb3V0X2ZhbGxiYWNrLCBNVEhQX1NUQVRfU1dQT1VUX0ZBTExCQUNLKTtcXG5tbS9odWdlX21lbW9yeS5jOjc4MTojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy03ODItREVGSU5FX01USFBfU1RBVF9BVFRSKHNobWVtX2FsbG9jLCBNVEhQX1NUQVRfU0hNRU1fQUxMT0MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz03OTY9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFub25fc3RhdHNfYXR0cnNbXSA9IHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNzk5LVxcdFxcdTAwMjZhbm9uX2ZhdWx0X2ZhbGxiYWNrX2NoYXJnZV9hdHRyLmF0dHIsXFxubW0vaHVnZV9tZW1vcnkuYzo4MDA6I2lmbmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTgwMS1cXHRcXHUwMDI2enN3cG91dF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTgyMj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZmlsZV9zdGF0c19hdHRyc1tdID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODIzOiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTgyNC1cXHRcXHUwMDI2c2htZW1fYWxsb2NfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz04MzY9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFueV9zdGF0c19hdHRyc1tdID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODM3OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTgzOC1cXHRcXHUwMDI2enN3cG91dF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNDAzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9saWN5X21vZGVzW10gPVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzQxMy1cXG5tbS9tZW1wb2xpY3kuYzozNDE0OiNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9tZW1wb2xpY3kuYy0zNDE1LS8qKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzQyNT1pbnQgbXBvbF9wYXJzZV9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM1NDctfVxcbm1tL21lbXBvbGljeS5jOjM1NDg6I2VuZGlmIC8qIENPTkZJR19UTVBGUyAqL1xcbm1tL21lbXBvbGljeS5jLTM1NDktXFxuLS1cXG5tbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xcbm1tL3NobWVtLmMtNDctXFxubW0vc2htZW0uYzo0ODojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vc2htZW0uYy00OS0vKlxcbi0tXFxubW0vc2htZW0uYz0xNDI9c3RhdGljIGJvb2wgc2htZW1fb3JkZXJzX2NvbmZpZ3VyZWQgX19pbml0ZGF0YTtcXG4tLVxcbm1tL3NobWVtLmMtMTQ0LVxcbm1tL3NobWVtLmM6MTQ1OiNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9zaG1lbS5jLTE0Ni1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9ibG9ja3Modm9pZClcXG4tLVxcbm1tL3NobWVtLmM9Mjk0PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2htZW1fc3dhcGxpc3RfbG9jayk7XFxubW0vc2htZW0uYy0yOTUtXFxubW0vc2htZW0uYzoyOTY6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxcbm1tL3NobWVtLmMtMjk3LVxcbi0tXFxubW0vc2htZW0uYz0zMzE9c3RhdGljIHN0cnVjdCBkcXVvdCBfX3JjdSAqKnNobWVtX2dldF9kcXVvdHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtMzM0LX1cXG5tbS9zaG1lbS5jOjMzNTojZW5kaWYgLyogQ09ORklHX1RNUEZTX1FVT1RBICovXFxubW0vc2htZW0uYy0zMzYtXFxuLS1cXG5tbS9zaG1lbS5jPTY3MD1zdGF0aWMgaW50IHNobWVtX3BhcnNlX2h1Z2UoY29uc3QgY2hhciAqc3RyKVxcbi0tXFxubW0vc2htZW0uYy03MDMtXFxubW0vc2htZW0uYzo3MDQ6I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSB8fCBkZWZpbmVkKENPTkZJR19UTVBGUylcXG5tbS9zaG1lbS5jLTcwNS1zdGF0aWMgY29uc3QgY2hhciAqc2htZW1fZm9ybWF0X2h1Z2UoaW50IGh1Z2UpXFxuLS1cXG5tbS9zaG1lbS5jPTE0MDc9c3RhdGljIHZvaWQgc2htZW1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtMTQ0NS1cXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxubW0vc2htZW0uYzoxNDQ2OiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTE0NDctXFx0ZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7XFxuLS1cXG5tbS9zaG1lbS5jPTE3NTI9RVhQT1JUX1NZTUJPTF9HUEwoc2htZW1fd3JpdGVvdXQpO1xcbm1tL3NobWVtLmMtMTc1My1cXG5tbS9zaG1lbS5jOjE3NTQ6I2lmIGRlZmluZWQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1RNUEZTKVxcbm1tL3NobWVtLmMtMTc1NS1zdGF0aWMgdm9pZCBzaG1lbV9zaG93X21wb2woc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wpXFxuLS1cXG5tbS9zaG1lbS5jPTE3Njc9c3RhdGljIHN0cnVjdCBtZW1wb2xpY3kgKnNobWVtX2dldF9zYm1wb2woc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbylcXG4tLVxcbm1tL3NobWVtLmMtMTc3Ny19XFxubW0vc2htZW0uYzoxNzc4OiNlbHNlIC8qICFDT05GSUdfTlVNQSB8fCAhQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy0xNzc5LXN0YXRpYyBpbmxpbmUgdm9pZCBzaG1lbV9zaG93X21wb2woc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wpXFxuLS1cXG5tbS9zaG1lbS5jPTE3ODI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtcG9saWN5ICpzaG1lbV9nZXRfc2JtcG9sKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8pXFxuLS1cXG5tbS9zaG1lbS5jLTE3ODUtfVxcbm1tL3NobWVtLmM6MTc4NjojZW5kaWYgLyogQ09ORklHX05VTUEgXFx1MDAyNlxcdTAwMjYgQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy0xNzg3LVxcbi0tXFxubW0vc2htZW0uYz0yOTIxPXN0YXRpYyBpbnQgc2htZW1fZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxubW0vc2htZW0uYy0yOTI2LVxcbm1tL3NobWVtLmM6MjkyNzojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXFxubW0vc2htZW0uYy0yOTI4LXN0YXRpYyBpbnQgc2htZW1faW5pdHhhdHRycyhzdHJ1Y3QgaW5vZGUgKiwgY29uc3Qgc3RydWN0IHhhdHRyICosIHZvaWQgKik7XFxuLS1cXG5tbS9zaG1lbS5jPTMwMTI9c3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTMwOTAtXFxubW0vc2htZW0uYzozMDkxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTMwOTItc3RhdGljIHN0cnVjdCBpbm9kZSAqc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxubW0vc2htZW0uYz0zMTIwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtMzEyNS19XFxubW0vc2htZW0uYzozMTI2OiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cXG5tbS9zaG1lbS5jLTMxMjctXFxuLS1cXG5tbS9zaG1lbS5jPTMyMTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyBzaG1lbV91ZmZkX29wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtMzIyMy1cXG5tbS9zaG1lbS5jOjMyMjQ6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtMzIyNS1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbi0tXFxubW0vc2htZW0uYz00MDk4PXN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTQxMjktXFxubW0vc2htZW0uYzo0MTMwOiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcXG5tbS9zaG1lbS5jLTQxMzEtXFxuLS1cXG5tbS9zaG1lbS5jPTQzMTQ9c3RhdGljIHNzaXplX3Qgc2htZW1fbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL3NobWVtLmMtNDMxOS19XFxubW0vc2htZW0uYzo0MzIwOiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfWEFUVFIgKi9cXG5tbS9zaG1lbS5jLTQzMjEtXFxubW0vc2htZW0uYz00MzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTQzMjUtXFx0LmdldF9saW5rXFx0PSBzaW1wbGVfZ2V0X2xpbmssXFxubW0vc2htZW0uYzo0MzI2OiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcXG5tbS9zaG1lbS5jLTQzMjctXFx0Lmxpc3R4YXR0clxcdD0gc2htZW1fbGlzdHhhdHRyLFxcbi0tXFxubW0vc2htZW0uYz00MzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTQzMzQtXFx0LmdldF9saW5rXFx0PSBzaG1lbV9nZXRfbGluayxcXG5tbS9zaG1lbS5jOjQzMzU6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcbm1tL3NobWVtLmMtNDMzNi1cXHQubGlzdHhhdHRyXFx0PSBzaG1lbV9saXN0eGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTQ0NTI9Y29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIHNobWVtX2ZzX3BhcmFtZXRlcnNbXSA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNDQ2My1cXHRmc3BhcmFtX2ZsYWcgIChcXFwibm9zd2FwXFxcIixcXHRPcHRfbm9zd2FwKSxcXG5tbS9zaG1lbS5jOjQ0NjQ6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxcbm1tL3NobWVtLmMtNDQ2NS1cXHRmc3BhcmFtX2ZsYWcgIChcXFwicXVvdGFcXFwiLFxcdFxcdE9wdF9xdW90YSksXFxuLS1cXG5tbS9zaG1lbS5jPTQ3MzQ9c3RhdGljIGludCBzaG1lbV9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTQ3ODctXFxubW0vc2htZW0uYzo0Nzg4OiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTQ3ODktI2RlZmluZSBDSEFOR0VEX0xJTUlUKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vc2htZW0uYy00Nzk3LVxcdH1cXG5tbS9zaG1lbS5jOjQ3OTg6I2VuZGlmIC8qIENPTkZJR19UTVBGU19RVU9UQSAqL1xcbm1tL3NobWVtLmMtNDc5OS1cXG4tLVxcbm1tL3NobWVtLmM9NDgzMT1zdGF0aWMgaW50IHNobWVtX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbm1tL3NobWVtLmMtNDg2OC1cXHQgKi9cXG5tbS9zaG1lbS5jOjQ4Njk6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RNUEZTX0lOT0RFNjQpIHx8IHNiaW5mby1cXHUwMDNlZnVsbF9pbnVtcylcXG5tbS9zaG1lbS5jLTQ4NzAtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIsaW5vZGUlZFxcXCIsIChzYmluZm8tXFx1MDAzZWZ1bGxfaW51bXMgPyA2NCA6IDMyKSk7XFxuLS1cXG5tbS9zaG1lbS5jLTQ4ODAtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIsbm9zd2FwXFxcIik7XFxubW0vc2htZW0uYzo0ODgxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTQ4ODItXFx0aWYgKHNiX2hhc19xdW90YV9hY3RpdmUocm9vdC1cXHUwMDNlZF9zYiwgVVNSUVVPVEEpKVxcbi0tXFxubW0vc2htZW0uYy00OTAxLVxcbm1tL3NobWVtLmM6NDkwMjojZW5kaWYgLyogQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy00OTAzLVxcbm1tL3NobWVtLmM9NDkwND1zdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbm1tL3NobWVtLmMtNDkxMi1cXG5tbS9zaG1lbS5jOjQ5MTM6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxcbm1tL3NobWVtLmMtNDkxNC1cXHRzaG1lbV9kaXNhYmxlX3F1b3RhcyhzYik7XFxuLS1cXG5tbS9zaG1lbS5jLTQ5MTgtXFx0bXBvbF9wdXQoc2JpbmZvLVxcdTAwM2VtcG9sKTtcXG5tbS9zaG1lbS5jOjQ5MTk6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcbm1tL3NobWVtLmMtNDkyMC1cXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcXHUwMDI2c2JpbmZvLVxcdTAwM2V4YV9jYWNoZSk7XFxuLS1cXG5tbS9zaG1lbS5jLTQ5MjUtXFxubW0vc2htZW0uYzo0OTI2OiNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19UTVBGUylcXG5tbS9zaG1lbS5jLTQ5Mjctc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzaG1lbV9jaV9kZW50cnlfb3BzID0ge1xcbi0tXFxubW0vc2htZW0uYz00OTMzPXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTQ5NDctXFxubW0vc2htZW0uYzo0OTQ4OiNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9zaG1lbS5jLTQ5NDktXFx0LypcXG4tLVxcbm1tL3NobWVtLmMtNDk1OS1cXHRcXHRpZiAoIShjdHgtXFx1MDAzZXNlZW4gXFx1MDAyNiBTSE1FTV9TRUVOX0lOVU1TKSlcXG5tbS9zaG1lbS5jOjQ5NjA6XFx0XFx0XFx0Y3R4LVxcdTAwM2VmdWxsX2ludW1zID0gSVNfRU5BQkxFRChDT05GSUdfVE1QRlNfSU5PREU2NCk7XFxubW0vc2htZW0uYy00OTYxLVxcdFxcdHNiaW5mby1cXHUwMDNlbm9zd2FwID0gY3R4LVxcdTAwM2Vub3N3YXA7XFxuLS1cXG5tbS9zaG1lbS5jLTQ5ODQtXFx0c2ItXFx1MDAzZXNfZmxhZ3MgfD0gU0JfTk9VU0VSO1xcbm1tL3NobWVtLmM6NDk4NTojZW5kaWYgLyogQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy00OTg2LVxcdHNiLVxcdTAwM2VzX2RfZmxhZ3MgfD0gRENBQ0hFX0RPTlRDQUNIRTtcXG4tLVxcbm1tL3NobWVtLmMtNTAxOS1cXHRzYi1cXHUwMDNlc190aW1lX2dyYW4gPSAxO1xcbm1tL3NobWVtLmM6NTAyMDojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXFxubW0vc2htZW0uYy01MDIxLVxcdHNiLVxcdTAwM2VzX3hhdHRyID0gc2htZW1feGF0dHJfaGFuZGxlcnM7XFxubW0vc2htZW0uYy01MDIyLSNlbmRpZlxcbm1tL3NobWVtLmM6NTAyMzojaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTFxcbm1tL3NobWVtLmMtNTAyNC1cXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9QT1NJWEFDTDtcXG4tLVxcbm1tL3NobWVtLmMtNTAyOS1cXG5tbS9zaG1lbS5jOjUwMzA6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxcbm1tL3NobWVtLmMtNTAzMS1cXHRpZiAoY3R4LVxcdTAwM2VzZWVuIFxcdTAwMjYgU0hNRU1fU0VFTl9RVU9UQSkge1xcbi0tXFxubW0vc2htZW0uYy01MDQyLVxcdH1cXG5tbS9zaG1lbS5jOjUwNDM6I2VuZGlmIC8qIENPTkZJR19UTVBGU19RVU9UQSAqL1xcbm1tL3NobWVtLmMtNTA0NC1cXG4tLVxcbm1tL3NobWVtLmM9NTA3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBzaG1lbV9mc19jb250ZXh0X29wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTA4MS1cXHQuZ2V0X3RyZWVcXHRcXHQ9IHNobWVtX2dldF90cmVlLFxcbm1tL3NobWVtLmM6NTA4MjojaWZkZWYgQ09ORklHX1RNUEZTXFxubW0vc2htZW0uYy01MDgzLVxcdC5wYXJzZV9tb25vbGl0aGljXFx0PSBzaG1lbV9wYXJzZV9tb25vbGl0aGljLFxcbi0tXFxubW0vc2htZW0uYz01MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7XFxubW0vc2htZW0uYy01MTQxLVxcdC5kaXJ0eV9mb2xpb1xcdD0gbm9vcF9kaXJ0eV9mb2xpbyxcXG5tbS9zaG1lbS5jOjUxNDI6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtNTE0My1cXHQud3JpdGVfYmVnaW5cXHQ9IHNobWVtX3dyaXRlX2JlZ2luLFxcbi0tXFxubW0vc2htZW0uYz01MTUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobWVtX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTE1NS1cXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYSxcXG5tbS9zaG1lbS5jOjUxNTY6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtNTE1Ny1cXHQubGxzZWVrXFx0XFx0PSBzaG1lbV9maWxlX2xsc2VlayxcXG4tLVxcbm1tL3NobWVtLmM9NTE2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1faW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTE3MC1cXHQuc2V0YXR0clxcdD0gc2htZW1fc2V0YXR0cixcXG5tbS9zaG1lbS5jOjUxNzE6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcbm1tL3NobWVtLmMtNTE3Mi1cXHQubGlzdHhhdHRyXFx0PSBzaG1lbV9saXN0eGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTUxNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbm1tL3NobWVtLmM6NTE4MDojaWZkZWYgQ09ORklHX1RNUEZTXFxubW0vc2htZW0uYy01MTgxLVxcdC5nZXRhdHRyXFx0PSBzaG1lbV9nZXRhdHRyLFxcbi0tXFxubW0vc2htZW0uYy01MTkzLSNlbmRpZlxcbm1tL3NobWVtLmM6NTE5NDojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXFxubW0vc2htZW0uYy01MTk1LVxcdC5saXN0eGF0dHJcXHQ9IHNobWVtX2xpc3R4YXR0cixcXG4tLVxcbm1tL3NobWVtLmMtNTE5OC0jZW5kaWZcXG5tbS9zaG1lbS5jOjUxOTk6I2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0xcXG5tbS9zaG1lbS5jLTUyMDAtXFx0LnNldGF0dHJcXHQ9IHNobWVtX3NldGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTUyMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5tbS9zaG1lbS5jLTUyMDYtXFx0LmdldGF0dHJcXHQ9IHNobWVtX2dldGF0dHIsXFxubW0vc2htZW0uYzo1MjA3OiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcXG5tbS9zaG1lbS5jLTUyMDgtXFx0Lmxpc3R4YXR0clxcdD0gc2htZW1fbGlzdHhhdHRyLFxcbm1tL3NobWVtLmMtNTIwOS0jZW5kaWZcXG5tbS9zaG1lbS5jOjUyMTA6I2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0xcXG5tbS9zaG1lbS5jLTUyMTEtXFx0LnNldGF0dHJcXHQ9IHNobWVtX3NldGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTUyMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTIxOS1cXHQuZGVzdHJveV9pbm9kZVxcdD0gc2htZW1fZGVzdHJveV9pbm9kZSxcXG5tbS9zaG1lbS5jOjUyMjA6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtNTIyMS1cXHQuc3RhdGZzXFx0XFx0PSBzaG1lbV9zdGF0ZnMsXFxuLS1cXG5tbS9zaG1lbS5jLTUyMjMtI2VuZGlmXFxubW0vc2htZW0uYzo1MjI0OiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTUyMjUtXFx0LmdldF9kcXVvdHNcXHQ9IHNobWVtX2dldF9kcXVvdHMsXFxuLS1cXG5tbS9zaG1lbS5jPTUyNjA9aW50IHNobWVtX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTUyNzctXFx0ZmMtXFx1MDAzZW9wcyA9IFxcdTAwMjZzaG1lbV9mc19jb250ZXh0X29wcztcXG5tbS9zaG1lbS5jOjUyNzg6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtNTI3OS1cXHRmYy1cXHUwMDNlc2JfZmxhZ3MgfD0gU0JfSV9WRVJTSU9OO1xcbi0tXFxubW0vc2htZW0uYz01Mjg0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBzaG1lbV9mc190eXBlID0ge1xcbi0tXFxubW0vc2htZW0uYy01Mjg3LVxcdC5pbml0X2ZzX2NvbnRleHQgPSBzaG1lbV9pbml0X2ZzX2NvbnRleHQsXFxubW0vc2htZW0uYzo1Mjg4OiNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9zaG1lbS5jLTUyODktXFx0LnBhcmFtZXRlcnNcXHQ9IHNobWVtX2ZzX3BhcmFtZXRlcnMsXFxuLS1cXG5tbS9zaG1lbS5jLTUyOTQtXFxubW0vc2htZW0uYzo1Mjk1OiNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfVE1QRlMpXFxubW0vc2htZW0uYy01Mjk2LVxcbi0tXFxubW0vc2htZW0uYz01MzM5PXN0YXRpYyBpbnQgX19pbml0IHRtcGZzX3N5c2ZzX2luaXQodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtNTM1Mi19XFxubW0vc2htZW0uYzo1MzUzOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy01MzU0LVxcbm1tL3NobWVtLmM9NTM1NT12b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXFxuLS1cXG5tbS9zaG1lbS5jLTUzNjAtXFxubW0vc2htZW0uYzo1MzYxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTUzNjItXFx0cmVnaXN0ZXJfcXVvdGFfZm9ybWF0KFxcdTAwMjZzaG1lbV9xdW90YV9mb3JtYXQpO1xcbi0tXFxubW0vc2htZW0uYy01Mzc3LVxcbm1tL3NobWVtLmM6NTM3ODojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1RNUEZTKVxcbm1tL3NobWVtLmMtNTM3OS1cXHRlcnJvciA9IHRtcGZzX3N5c2ZzX2luaXQoKTtcXG4tLVxcbm1tL3NobWVtLmMtNTQwMy1vdXQyOlxcbm1tL3NobWVtLmM6NTQwNDojaWZkZWYgQ09ORklHX1RNUEZTX1FVT1RBXFxubW0vc2htZW0uYy01NDA1LVxcdHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KFxcdTAwMjZzaG1lbV9xdW90YV9mb3JtYXQpO1xcbi0tXFxubW0vc2htZW0uYz01NzAxPV9fc2V0dXAoXFxcInRocF9zaG1lbT1cXFwiLCBzZXR1cF90aHBfc2htZW0pO1xcbi0tXFxubW0vc2htZW0uYy01NzA0LVxcbm1tL3NobWVtLmM6NTcwNTojZWxzZSAvKiAhQ09ORklHX1NITUVNICovXFxubW0vc2htZW0uYy01NzA2LVxcbi0tXFxubW0vc2htZW0uYz01Nzc0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTU3ODEtXFxubW0vc2htZW0uYzo1NzgyOiNlbmRpZiAvKiBDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU3ODMtXFxuLS1cXG5tbS9zaG1lbS5jPTU5MzY9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNTkzOC17XFxubW0vc2htZW0uYzo1OTM5OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTU5NDAtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjM0LjE1NTAwMjI4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTgzMTYxMDMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzaG1lbV91bmRvX3JhbmdlYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBzaG1lbV91bmRvX3JhbmdlYCBpbiBgbW0vc2htZW0uY2AgaXMgY2xlYXJseSBjb25kaXRpb25hbCwgcHJvdGVjdGVkIGJ5IGAjaWZkZWYgQ09ORklHX1NITUVNYCBhdCBsaW5lIDQ4LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgbmVlZCB0byBrZWVwIGBDT05GSUdfU0hNRU1gIGluIG1pbmQuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC4gVGhpbmtpbmcgYWJvdXQgaXQsIGBDT05GSUdfU0hNRU1gIHdpbGwgYmUgdGllZCB0byBvdGhlciBjb25maWdzLCBwcm9iYWJseSBgQ09ORklHX1RNUEZTYCwgbWF5YmUgZXZlbiBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHNoYXJlZCBtZW1vcnkuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcyB0byBjb25maXJtIHRoZXNlIGxpbmthZ2VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgYGluaXQvS2NvbmZpZ2Agb3IgYSBzaW1pbGFyIGZpbGUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzczOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjU1Ljk4NjYxNTk2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcwMzk3MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODk2PWNvbmZpZyBFVkVOVEZEXFxuLS1cXG5pbml0L0tjb25maWctMTkwNC1cXG5pbml0L0tjb25maWc6MTkwNTpjb25maWcgU0hNRU1cXG5pbml0L0tjb25maWctMTkwNi1cXHRib29sIFxcXCJVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6NTYuMDgzNjYyMTI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzgzNDUzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgbW0vS2NvbmZpZ2AuIEkga25vdyB0aGF0J3Mgd2hlcmUgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gemVybyBpbiBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSdtIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIHRvIGNvbmZpcm0gaXRzIHByZXNlbmNlLCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBpdCBtaWdodCByZWxhdGUgdG8uIEknbSBsb29raW5nIGZvciB0aGUgZGVmaW5pbmcgbWFjcm8sIGl0cyBwb3NzaWJsZSBzdGF0ZXMgKGBib29sYCwgYHRyaXN0YXRlYCksIGFuZCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoaXMgS2NvbmZpZyBvcHRpb24gaXMgZnVuZGFtZW50YWwgdG8gYW5hbHl6aW5nIHRoZSBzeXN0ZW0ncyBUSFAgYmVoYXZpb3IhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6NTguMzYyMDExODI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg2NTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODM1PWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzctXFxubW0vS2NvbmZpZzo4Mzg6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM5LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Nj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODYxLVxcbm1tL0tjb25maWc6ODYyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2My1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2OC1cXG5tbS9LY29uZmlnOjg2OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODcwLVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3Ny1cXG5tbS9LY29uZmlnOjg3ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3OS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODg1PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTQtXFxubW0vS2NvbmZpZzo4OTU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5Ni1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTA0LVxcbm1tL0tjb25maWc6OTA1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTA2LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyMC1cXG5tbS9LY29uZmlnOjkyMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkyMi1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkzMD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM5LVxcbm1tL0tjb25maWc6OTQwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05NDEtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0OC1cXG5tbS9LY29uZmlnOjk0OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk1MC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjQtXFxubW0vS2NvbmZpZzo5NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjYtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMTo1OC40MTc4ODk0NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkwNDYxMjc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBTeW1ib2wgSXNzdWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgYEZvY3VzU3ltYm9sc2Ag4oCTIHdoYXQgZnVuY3Rpb25zIGFyZSBmbGFnZ2VkIGFzIG1vZGlmaWVkPyBBaCwgaGVyZSB3ZSBnbzogYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gLCBgc2htZW1fdW5kb19yYW5nZWAsIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgYW55IG9mIHRoZXNlIGFyZSBzdGF0aWMgb3Igd2lkZWx5IHVzZWQuIFRoYXQnbGwgaW5mbHVlbmNlIGhvdyBtdWNoIHNjcnV0aW55IHRoZXkgbmVlZC5cblxuTGV0J3MgYnJlYWsgdGhlbSBkb3duOiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgaXMgZGVmaW5lZCBpbiBgbW0vdHJ1bmNhdGUuY2AuIEZyb20gbWVtb3J5LCBpdCdzIG5vdCBzdGF0aWMgYW5kIGlzIGV4cG9ydGVkIGludGVybmFsbHksIGF0IGxlYXN0IGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHZpYSBgbW0vaW50ZXJuYWwuaGAuIEl0IHNlZW1zIHNwZWNpZmljIHRvIHBhcnRpYWwgZm9saW8gdHJ1bmNhdGlvbiwgZGVmaW5pdGVseSBub3Qgc29tZXRoaW5nIHRoYXQncyB1YmlxdWl0b3VzIGFjcm9zcyB0aGUga2VybmVsLlxuXG5OZXh0LCBgc2htZW1fdW5kb19yYW5nZWAuIFRoaXMgaXMgc3RhdGljIGFuZCB3aXRoaW4gYG1tL3NobWVtLmNgLiBJdCdzIGNhbGxlZCBieSBhIGZldyBvdGhlciBzaG1lbS1zcGVjaWZpYyBmdW5jdGlvbnM6IGBzaG1lbV90cnVuY2F0ZV9yYW5nZWAsIGBzaG1lbV9mYWxsb2NhdGVgLCBgc2htZW1fZXZpY3RfaW5vZGVgLCBhbmQgYHNobWVtX2ZyZWVfaW5fbWVtb3J5X3BhZ2VzYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGJlaW5nIHN0YXRpYyBtaWdodCBtZWFuIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgaW4gdGhlIHZtbGludXggc3ltYm9sIHRhYmxlLCBvciBhdCBsZWFzdCBub3QgaW4gYSB3YXkgdGhhdCBpcyBlYXNpbHkgdmlzaWJsZS4gVGhhdCBtYWtlcyBtZSB0aGluayBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaXRzIGNhbGxlcnMuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgd2hldGhlciBgc2htZW1fdHJ1bmNhdGVfcmFuZ2VgIG9yIGBzaG1lbV9mYWxsb2NhdGVgIGFyZSBhbHNvIHRhcmdldHMuXG5cbkZpbmFsbHksIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAgd2hpY2ggaXMgZGVmaW5lZCBpbiBgbW0vdHJ1bmNhdGUuY2AuIFRoaXMgaXMgbm9uLXN0YXRpYywgYW5kIHNlZW1zIHRvIGJlIGludm9sdmVkIGluIGhvbGUgcHVuY2hpbmcgYW5kIHRydW5jYXRpb24gb3BlcmF0aW9ucywgc28gbm90IHViaXF1aXRvdXMgYnV0IG5vdCBhcyB0YXJnZXRlZCBhcyBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhpcyBgc2htZW1fdW5kb19yYW5nZWAgYnVzaW5lc3MgbW9yZSBwcmVjaXNlbHkuIEl0J3Mgc3RhdGljLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgc2VlIGlmIGl0J3MgdmlzaWJsZS4gSWYgbm90LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGxvb2sgYXQgaXRzIGNhbGxlcnMsIGVzcGVjaWFsbHkgYHNobWVtX3RydW5jYXRlX3JhbmdlYCBhbmQgYHNobWVtX2ZhbGxvY2F0ZWAuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBzaG1lbV91bmRvX3JhbmdlYCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9zaG1lbS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDgyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjAyLjMyMjUwNjc4N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1Nzk0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fdW5kb19yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2htZW0uYz0xMDg3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpXFxuLS1cXG5tbS9zaG1lbS5jLTExMTgtICovXFxubW0vc2htZW0uYzoxMTE5OnN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXFxubW0vc2htZW0uYy0xMTIwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBib29sIHVuZmFsbG9jKVxcbi0tXFxubW0vc2htZW0uYz0xMjg0PXZvaWQgc2htZW1fdHJ1bmNhdGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQpXFxubW0vc2htZW0uYy0xMjg1LXtcXG5tbS9zaG1lbS5jOjEyODY6XFx0c2htZW1fdW5kb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5kLCBmYWxzZSk7XFxubW0vc2htZW0uYy0xMjg3LVxcdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTtcXG4tLVxcbm1tL3NobWVtLmM9MjYzMT1zdGF0aWMgaW50IHN5bmNocm9ub3VzX3dha2VfZnVuY3Rpb24od2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LFxcbi0tXFxubW0vc2htZW0uYy0yNjQzLSAqIGZhdWx0aW5nIHBhZ2VzIGludG8gdGhlIGhvbGUgd2hpbGUgaXQncyBiZWluZyBwdW5jaGVkLiAgQWx0aG91Z2hcXG5tbS9zaG1lbS5jOjI2NDQ6ICogc2htZW1fdW5kb19yYW5nZSgpIGRvZXMgcmVtb3ZlIHRoZSBhZGRpdGlvbnMsIGl0IG1heSBiZSB1bmFibGUgdG9cXG5tbS9zaG1lbS5jLTI2NDUtICoga2VlcCB1cCwgYXMgZWFjaCBuZXcgcGFnZSBuZWVkcyBpdHMgb3duIHVubWFwX21hcHBpbmdfcmFuZ2UoKSBjYWxsLFxcbi0tXFxubW0vc2htZW0uYz0zNjEwPXN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5tbS9zaG1lbS5jLTM3MjAtXFx0XFx0XFx0aWYgKGluZGV4IFxcdTAwM2Ugc3RhcnQpIHtcXG5tbS9zaG1lbS5jOjM3MjE6XFx0XFx0XFx0XFx0c2htZW1fdW5kb19yYW5nZShpbm9kZSxcXG5tbS9zaG1lbS5jLTM3MjItXFx0XFx0XFx0XFx0ICAgIChsb2ZmX3Qpc3RhcnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6MDIuMzc4MDkyNTAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODc1NjYzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAgQ2FsbGVycyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCBpcyBiZWluZyB1c2VkLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCBpbnRvIGBtbS90cnVuY2F0ZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgaW52b2tpbmcgdGhpcyBmdW5jdGlvbi4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIHdpbGwgaW52b2x2ZSB0cmFjaW5nIGV4ZWN1dGlvbiBwYXRocywgc2luY2UgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB3aGVyZSB0aGUgdHJ1bmNhdGlvbiBpcyB0YWtpbmcgcGxhY2UgaXMga2V5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkganVzdCBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgd2l0aGluIHRoZSBjb2RlLCBidXQgSSBrbm93IGJldHRlciB0aGFuIHRvIGFzc3VtZSB0aGF0J3MgdGhlIHdob2xlIHN0b3J5LiBJJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3JvcyB0b28uIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5yYXZlbGluZyB3aGF0ZXZlciBpc3N1ZSBvciBvcHRpbWl6YXRpb24gSSdtIGxvb2tpbmcgYXQsIGJ1dCBpdCdzIGEgY3JpdGljYWwgb25lLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYW5kc2NhcGUgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgc29sdXRpb25zIG9yIGltcHJvdmVtZW50cy4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCByZWFsbHkgZ3VpZGUgdGhlIHJlc3Qgb2YgbXkgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjowNC41NjU2NjQyMDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDgxOTI0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9sb2NraW5nLnJzdD01Mjc9cGFnZSBjYWNoZSBjb250ZW50cy4gVXN1YWxseSB0aGUgZmlsZXN5c3RlbSBuZWVkcyB0byBjYWxsXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9sb2NraW5nLnJzdDo1Mjg6dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoKSB0byBpbnZhbGlkYXRlIHJlbGV2YW50IHJhbmdlIG9mIHRoZSBwYWdlIGNhY2hlLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbG9ja2luZy5yc3QtNTI5LUhvd2V2ZXIgdGhlIGZpbGVzeXN0ZW0gdXN1YWxseSBhbHNvIG5lZWRzIHRvIHVwZGF0ZSBpdHMgaW50ZXJuYWwgKGFuZCBvbiBkaXNrKVxcbi0tXFxuYmxvY2svYmRldi5jPTExMD1pbnQgdHJ1bmNhdGVfYmRldl9yYW5nZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5ibG9jay9iZGV2LmMtMTIzLVxcbmJsb2NrL2JkZXYuYzoxMjQ6XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoYmRldi1cXHUwMDNlYmRfbWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcXG5ibG9jay9iZGV2LmMtMTI1LVxcdGlmICghKG1vZGUgXFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcXG4tLVxcbmZzL2J0cmZzL3NlbmQuYz01NjAwPXN0YXRpYyBpbnQgc2VuZF9leHRlbnRfZGF0YShzdHJ1Y3Qgc2VuZF9jdHggKnNjdHgsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLFxcbi0tXFxuZnMvYnRyZnMvc2VuZC5jLTU3MDUtXFx0XFx0ICovXFxuZnMvYnRyZnMvc2VuZC5jOjU3MDY6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXFx1MDAyNnNjdHgtXFx1MDAzZWN1cl9pbm9kZS1cXHUwMDNlaV9kYXRhLFxcbmZzL2J0cmZzL3NlbmQuYy01NzA3LVxcdFxcdFxcdFxcdFxcdCAgIHNjdHgtXFx1MDAzZXBhZ2VfY2FjaGVfY2xlYXJfc3RhcnQsXFxuLS1cXG5mcy9idHJmcy9zZW5kLmM9NjcwOD1zdGF0aWMgdm9pZCBjbG9zZV9jdXJyZW50X2lub2RlKHN0cnVjdCBzZW5kX2N0eCAqc2N0eClcXG4tLVxcbmZzL2J0cmZzL3NlbmQuYy02NzIzLVxcdGlmIChzY3R4LVxcdTAwM2VjbGVhbl9wYWdlX2NhY2hlIFxcdTAwMjZcXHUwMDI2IHNjdHgtXFx1MDAzZXBhZ2VfY2FjaGVfY2xlYXJfc3RhcnQgXFx1MDAzYyBpX3NpemUpXFxuZnMvYnRyZnMvc2VuZC5jOjY3MjQ6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXFx1MDAyNnNjdHgtXFx1MDAzZWN1cl9pbm9kZS1cXHUwMDNlaV9kYXRhLFxcbmZzL2J0cmZzL3NlbmQuYy02NzI1LVxcdFxcdFxcdFxcdFxcdCAgIHNjdHgtXFx1MDAzZXBhZ2VfY2FjaGVfY2xlYXJfc3RhcnQsXFxuLS1cXG5mcy9jZXBoL2ZpbGUuYz0xNTE5PWNlcGhfZGlyZWN0X3JlYWRfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9jZXBoL2ZpbGUuYy0xNjM4LVxcdFxcdFxcdCAqL1xcbmZzL2NlcGgvZmlsZS5jOjE2Mzk6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcG9zLFxcbmZzL2NlcGgvZmlsZS5jLTE2NDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgUEFHRV9BTElHTihwb3MgKyBsZW4pIC0gMSk7XFxuLS1cXG5mcy9mMmZzL2YyZnMuaD01MTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBmMmZzX3RydW5jYXRlX21ldGFfaW5vZGVfcGFnZXMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLFxcbi0tXFxuZnMvZjJmcy9mMmZzLmgtNTE0Ny1cXG5mcy9mMmZzL2YyZnMuaDo1MTQ4OlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKE1FVEFfTUFQUElORyhzYmkpLFxcbmZzL2YyZnMvZjJmcy5oLTUxNDktXFx0XFx0XFx0RjJGU19CTEtfVE9fQllURVMoKGxvZmZfdClibGthZGRyKSxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTM5PXN0YXRpYyB2b2lkIGYyZnNfemVyb19wb3N0X2VvZl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy01Mi1cXHQvKiB6ZXJvIG9yIGRyb3AgcGFnZXMgb25seSBpbiByYW5nZSBvZiBbb2xkX3NpemUsIG5ld19zaXplXSAqL1xcbmZzL2YyZnMvZmlsZS5jOjUzOlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIG9sZF9zaXplLCBuZXdfc2l6ZSk7XFxuZnMvZjJmcy9maWxlLmMtNTQtXFx0aWYgKGxvY2spXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz05MDU9aW50IGYyZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTkzMi1cXHRcXHRcXHQgKi9cXG5mcy9mMmZzL2ZpbGUuYzo5MzM6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyxcXG5mcy9mMmZzL2ZpbGUuYy05MzQtXFx0XFx0XFx0XFx0XFx0RjJGU19CTEtfVE9fQllURVMoMCksXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz00MTkxPXN0YXRpYyBpbnQgZjJmc19zZWNfdHJpbV9maWxlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQyNjMtXFxuZnMvZjJmcy9maWxlLmM6NDI2NDpcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShtYXBwaW5nLCByYW5nZS5zdGFydCxcXG5mcy9mMmZzL2ZpbGUuYy00MjY1LVxcdFxcdFxcdHRvX2VuZCA/IC0xIDogZW5kX2FkZHIgLSAxKTtcXG4tLVxcbmZzL2YyZnMvcmVjb3ZlcnkuYz04NzU9aW50IGYyZnNfcmVjb3Zlcl9mc3luY19kYXRhKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgYm9vbCBjaGVja19vbmx5KVxcbi0tXFxuZnMvZjJmcy9yZWNvdmVyeS5jLTkxOC1cXHQvKiB0cnVuY2F0ZSBtZXRhIHBhZ2VzIHRvIGJlIHVzZWQgYnkgdGhlIHJlY292ZXJ5ICovXFxuZnMvZjJmcy9yZWNvdmVyeS5jOjkxOTpcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShNRVRBX01BUFBJTkcoc2JpKSxcXG5mcy9mMmZzL3JlY292ZXJ5LmMtOTIwLVxcdFxcdFxcdChsb2ZmX3QpTUFJTl9CTEtBRERSKHNiaSkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgLTEpO1xcbi0tXFxuZnMvZnVzZS9maWxlLmM9MjkyMD1zdGF0aWMgc3NpemVfdCBfX2Z1c2VfY29weV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMzAyOS1cXG5mcy9mdXNlL2ZpbGUuYzozMDMwOlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlX291dC1cXHUwMDNlaV9tYXBwaW5nLFxcbmZzL2Z1c2UvZmlsZS5jLTMwMzEtXFx0XFx0XFx0XFx0ICAgQUxJR05fRE9XTihwb3Nfb3V0LCBQQUdFX1NJWkUpLFxcbi0tXFxuZnMvZ2ZzMi9nbG9wcy5jPTIyMT1zdGF0aWMgdm9pZCByZ3JwX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZ2ZzMi9nbG9wcy5jLTIzNS1cXHRnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFhdG9taWNfcmVhZChcXHUwMDI2Z2wtXFx1MDAzZWdsX2FpbF9jb3VudCkpO1xcbmZzL2dmczIvZ2xvcHMuYzoyMzY6XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCk7XFxuZnMvZ2ZzMi9nbG9wcy5jLTIzNy19XFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYz0xOTQzPXN0YXRpYyBpbnQgX19qYmQyX2pvdXJuYWxfZXJhc2Uoam91cm5hbF90ICpqb3VybmFsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDAxLVxcbmZzL2piZDIvam91cm5hbC5jOjIwMDI6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoam91cm5hbC1cXHUwMDNlal9kZXYtXFx1MDAzZWJkX21hcHBpbmcsXFxuZnMvamJkMi9qb3VybmFsLmMtMjAwMy1cXHRcXHRcXHRcXHRieXRlX3N0YXJ0LCBieXRlX3N0b3AgLSAxKTtcXG4tLVxcbmZzL25mcy9uZnM0ZmlsZS5jPTI0Nz1zdGF0aWMgbG9mZl90IG5mczQyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX29mZixcXG4tLVxcbmZzL25mcy9uZnM0ZmlsZS5jLTI5My1cXHRpZiAoIXJldClcXG5mcy9uZnMvbmZzNGZpbGUuYzoyOTQ6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXFx1MDAyNmRzdF9pbm9kZS1cXHUwMDNlaV9kYXRhLCBkc3Rfb2ZmLCBkc3Rfb2ZmICsgY291bnQgLSAxKTtcXG5mcy9uZnMvbmZzNGZpbGUuYy0yOTUtXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmM9MTUzMT1zdGF0aWMgdm9pZCBvY2ZzMl90cnVuY2F0ZV9jbHVzdGVyX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBieXRlX3N0YXJ0LFxcbi0tXFxuZnMvb2NmczIvZmlsZS5jLTE1NDMtXFx0XFx0dW5tYXBfbWFwcGluZ19yYW5nZShtYXBwaW5nLCBzdGFydCwgZW5kIC0gc3RhcnQsIDApO1xcbmZzL29jZnMyL2ZpbGUuYzoxNTQ0OlxcdFxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKG1hcHBpbmcsIHN0YXJ0LCBlbmQgLSAxKTtcXG5mcy9vY2ZzMi9maWxlLmMtMTU0NS1cXHR9XFxuLS1cXG5mcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMjc0Ny1cXHQvKiBaYXAgYW55IHBhZ2UgY2FjaGUgZm9yIHRoZSBkZXN0aW5hdGlvbiBmaWxlJ3MgcmFuZ2UuICovXFxuZnMvb2NmczIvZmlsZS5jOjI3NDg6XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXFx1MDAyNmlub2RlX291dC1cXHUwMDNlaV9kYXRhLFxcbmZzL29jZnMyL2ZpbGUuYy0yNzQ5LVxcdFxcdFxcdFxcdCAgIHJvdW5kX2Rvd24ocG9zX291dCwgUEFHRV9TSVpFKSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTM3NT1zdGF0aWMgbG9mZl90IGNpZnNfcmVtYXBfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBvZmYsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE0NjAtXFx0Y2lmc19kYmcoRllJLCBcXFwiYWJvdXQgdG8gZGlzY2FyZCBwYWdlcyAlbGx4LSVsbHhcXFxcblxcXCIsIGZzdGFydCwgZmVuZCk7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxNDYxOlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKFxcdTAwMjZ0YXJnZXRfaW5vZGUtXFx1MDAzZWlfZGF0YSwgZnN0YXJ0LCBmZW5kKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE0NjItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NDI1OD12b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0KTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDI1OTp2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0LFxcbmluY2x1ZGUvbGludXgvbW0uaC00MjYwLVxcdFxcdHVvZmZfdCBsZW5kKTtcXG4tLVxcbm1tL3NobWVtLmM9NTc1NT12b2lkIHNobWVtX3RydW5jYXRlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kKVxcbm1tL3NobWVtLmMtNTc1Ni17XFxubW0vc2htZW0uYzo1NzU3OlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGxzdGFydCwgbGVuZCk7XFxubW0vc2htZW0uYy01NzU4LX1cXG4tLVxcbm1tL3RydW5jYXRlLmM9MzM5PWxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3RydW5jYXRlLmMtMzU2LS8qKlxcbm1tL3RydW5jYXRlLmM6MzU3OiAqIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlIC0gdHJ1bmNhdGUgcmFuZ2Ugb2YgcGFnZXMgc3BlY2lmaWVkIGJ5IHN0YXJ0IFxcdTAwMjYgZW5kIGJ5dGUgb2Zmc2V0c1xcbm1tL3RydW5jYXRlLmMtMzU4LSAqIEBtYXBwaW5nOiBtYXBwaW5nIHRvIHRydW5jYXRlXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTM3Ni0gKiBOb3RlIHRoYXQgc2luY2UgLVxcdTAwM2VpbnZhbGlkYXRlX2ZvbGlvKCkgYWNjZXB0cyByYW5nZSB0byBpbnZhbGlkYXRlXFxubW0vdHJ1bmNhdGUuYzozNzc6ICogdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UgaXMgYWJsZSB0byBoYW5kbGUgY2FzZXMgd2hlcmUgbGVuZCArIDEgaXMgbm90XFxubW0vdHJ1bmNhdGUuYy0zNzgtICogcGFnZSBhbGlnbmVkIHByb3Blcmx5Llxcbm1tL3RydW5jYXRlLmMtMzc5LSAqL1xcbm1tL3RydW5jYXRlLmM6MzgwOnZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vdHJ1bmNhdGUuYy0zODEtXFx0XFx0XFx0XFx0bG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQpXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTQ3OC19XFxubW0vdHJ1bmNhdGUuYzo0Nzk6RVhQT1JUX1NZTUJPTCh0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSk7XFxubW0vdHJ1bmNhdGUuYy00ODAtXFxuLS1cXG5tbS90cnVuY2F0ZS5jPTQ5ND12b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0KVxcbm1tL3RydW5jYXRlLmMtNDk1LXtcXG5tbS90cnVuY2F0ZS5jOjQ5NjpcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShtYXBwaW5nLCBsc3RhcnQsIChsb2ZmX3QpLTEpO1xcbm1tL3RydW5jYXRlLmMtNDk3LX1cXG4tLVxcbm1tL3RydW5jYXRlLmM9OTE1PXZvaWQgdHJ1bmNhdGVfcGFnZWNhY2hlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy05MzUtXFx0XFx0XFx0XFx0ICAgIDEgKyB1bm1hcF9lbmQgLSB1bm1hcF9zdGFydCwgMCk7XFxubW0vdHJ1bmNhdGUuYzo5MzY6XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcXG5tbS90cnVuY2F0ZS5jLTkzNy19XFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTIzMD1zdGF0aWMgbG9uZyBrdm1fZ21lbV9wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTI0Mi1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjI0MzpcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBvZmZzZXQsIG9mZnNldCArIGxlbiAtIDEpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMjQ0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjowNi45MTM4NjUxNDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NjIzNjM2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRydW5jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgdGhhdCBhcmUga2V5OiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCwgYW5kIGBzaG1lbV90cnVuY2F0ZV9yYW5nZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0YXJnZXRpbmcsIGFuZCB0aGV5J3JlIGFsbCByZWxhdGVkIHRvIHRydW5jYXRpb24sIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcGFydGlhbCBmb2xpb3MgYW5kIHNoYXJlZCBtZW1vcnkgKHNobWVtKS5cblxuTmV4dCwgSSdtIG5vdGluZyB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgU0hNRU1gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGlzIGdpdmVzIG1lIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIEkga25vdyBgU0hNRU1gIGVuYWJsZXMgc2hhcmVkIG1lbW9yeSBmdW5jdGlvbmFsaXR5LCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCByZWxhdGVzIHRvIHVzaW5nIGxhcmdlIHBhZ2VzIChodWdlIHBhZ2VzKSBmb3IgaW1wcm92ZWQgbWVtb3J5IHBlcmZvcm1hbmNlLiBUaGUgY29kZSBpbmRpY2F0ZXMgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWN0aXZlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2Ugc2htZW0gc2V0dXBzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgcmVxdWlyZWQsIGJ1dCBmcm9tIGluaXRpYWwgcmV2aWV3LCBgbW0vdHJ1bmNhdGUuY2AgYW5kIGBtbS9zaG1lbS5jYCBhcmUgYnVpbHQgdW5jb25kaXRpb25hbGx5LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgc2htZW1fdW5kb19yYW5nZWAgcmVxdWlyZXMgYENPTkZJR19TSE1FTWAgd2l0aGluIGBzaG1lbS5jYC5cblxuVGhlIFwiUmVhc29uaW5nXCIgcHJvdmlkZWQgaXMgYWxzbyBjcnVjaWFsLiBJdCBoaWdobGlnaHRzIHRoYXQgdGhlIHBhdGNoIGlzIGFib3V0IGNvcnJlY3RseSBoYW5kbGluZyBib3VuZGFyaWVzIGFuZCBpc29sYXRpb24gd2hlbiAqc3BsaXR0aW5nKiBmb2xpb3MsIHdoaWNoIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgZHVyaW5nIGZpbGUgdHJ1bmNhdGlvbiBhbmQgaG9sZSBwdW5jaGluZy4gRXNzZW50aWFsbHksIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgcGFnZSBjYWNoZSBhbmQgc2htZW0gd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggcGFydGlhbCBmb2xpb3MgYW5kIHBvdGVudGlhbGx5IFRIUC5cblxuVGhpcyBpcyBhbGwgY29uc2lzdGVudCB3aXRoIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGJlaW5nIHNldCB0byBgdHJ1ZWAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBmdXp6aW5nIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgd2lsbCBiZSBiZW5lZmljaWFsLCBhcyB0aGV5IGFyZSBub3cgc2VlbiBhcyBiZWluZyBtb3JlIHN1c2NlcHRpYmxlIHRvIGVkZ2UtY2FzZSBidWdzIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxpbmcgY29tcGxpY2F0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuXG5cbkFscmlnaHQsIGl0J3MgdGltZSB0byB2ZXJpZnkgZXZlcnl0aGluZyBhcyByZXF1ZXN0ZWQgYW5kIHRoZW4gY2FsbCBgc2V0LXJlc3VsdHNgLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJIGZlZWwgY29uZmlkZW50IGFib3V0IHRoZSBpbmZvcm1hdGlvbiBJJ3ZlIGdhdGhlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU4MSwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6MjkuODc2MjMyMjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgxNzY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0hNRU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb1wiLFxuICAgIFwic2htZW1fdW5kb19yYW5nZVwiLFxuICAgIFwidHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VcIixcbiAgICBcInNobWVtX3RydW5jYXRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBjYWNoZSB0cnVuY2F0aW9uIGxvZ2ljIChpbiBtbS90cnVuY2F0ZS5jIGFuZCBtbS9zaG1lbS5jKSBmb3IgcGFydGlhbCBmb2xpb3MsIGFsdGVyaW5nIGJvdW5kYXJ5IHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgc2VtYW50aWNzIG9mIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8gdG8gcHJldmVudCBpbXByb3BlciBkaXNjYXJkIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGFjdGl2ZWx5IHJlYWNoYWJsZSBrZXJuZWwgY29kZSBleGVyY2lzZWQgYnkgZmlsZSB0cnVuY2F0aW9uLCBmdHJ1bmNhdGUsIGFuZCBmYWxsb2NhdGUgaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cIixcbiAgICBcInNobWVtX3VuZG9fcmFuZ2VcIixcbiAgICBcInRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlXCIsXG4gICAgXCJzaG1lbV90cnVuY2F0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgY2FjaGUgdHJ1bmNhdGlvbiBsb2dpYyAoaW4gbW0vdHJ1bmNhdGUuYyBhbmQgbW0vc2htZW0uYykgZm9yIHBhcnRpYWwgZm9saW9zLCBhbHRlcmluZyBib3VuZGFyeSB0cmFja2luZyBhbmQgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBvZiB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvIHRvIHByZXZlbnQgaW1wcm9wZXIgZGlzY2FyZCBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBhY3RpdmVseSByZWFjaGFibGUga2VybmVsIGNvZGUgZXhlcmNpc2VkIGJ5IGZpbGUgdHJ1bmNhdGlvbiwgZnRydW5jYXRlLCBhbmQgZmFsbG9jYXRlIGhvbGUtcHVuY2hpbmcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6MjkuOTU1MDU5NjY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY5NjMzNjA1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjI5Ljk1NTcwMTk1NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ4Njk1Njg5MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBmb2xpbyB0cnVuY2F0aW9uIGFuZCBzcGxpdHRpbmcgbG9naWMgaW4gYG1tL3RydW5jYXRlLmNgLCBgbW0vc2htZW0uY2AsIGFuZCBgbW0vaW50ZXJuYWwuaGAgKGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBhbmQgaXRzIGNhbGxlcnMpLiBJdCByZWZhY3RvcnMgaG93IHRoZSBwYXJ0aWFsIGZvbGlvIHRydW5jYXRpb24gcmV0dXJuIHZhbHVlIGFuZCB0aGUgYGVuZGAgcGFnZSBvZmZzZXQgYXJlIGhhbmRsZWQgYW5kIHVwZGF0ZWQgd2hlbiBzcGxpdHRpbmcgb3Iga2VlcGluZyBzdHJhZGRsaW5nIGZvbGlvcy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBpbnRyb2R1Y2VkIG9yIHJlYWQsIG5vIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGFsdGVyYXRpb25zIHRvIGRhdGEgYm91bmRzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyBwYWdlIGNhY2hlIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnRpbmcgYnVncywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgY2FjaGUgYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZmZlMTgyMGRmYjA3YjY5ZDE0YjM0MTVhNWU1MmRmNDZmNDU2ZGIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA2OGRiNWFiZDBhNGNlLi5kYjdkOWQ5ZmI1YzllIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTYyNyw4ICs2MjcsOCBAQCB1bnNpZ25lZCBmaW5kX2xvY2tfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXG4gdW5zaWduZWQgZmluZF9nZXRfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXG4gXHRcdHBnb2ZmX3QgZW5kLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgcGdvZmZfdCAqaW5kaWNlcyk7XG4gaW50IHRydW5jYXRlX2lub2RlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LFxuLVx0XHRsb2ZmX3QgZW5kKTtcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbitcdFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XG4gbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB1bnNpZ25lZCBsb25nIG1hcHBpbmdfdHJ5X2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLCB1bnNpZ25lZCBsb25nICpucl9mYWlsZWQpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA4OWExNDk1ZTU1ZjdlLi5jYzE1NDhmZjUwOWFlIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTExNzUsMTEgKzExNzUsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuIFx0aWYgKGZvbGlvKSB7XG4gXHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLVx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHtcbitcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4rXHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4gXHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbi1cdFx0XHRpZiAoc2FtZV9mb2xpbylcbi1cdFx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuLVx0XHR9XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdGZvbGlvID0gTlVMTDtcbkBAIC0xMTg5LDggKzExODcsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuIFx0XHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdGlmIChmb2xpbykge1xuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbi1cdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKVxuLVx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuK1x0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG5AQCAtMTI1OCw3ICsxMjU1LDggQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbiBcdFx0XHRcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8obWFwcGluZywgZm9saW8pO1xuLVx0XHRcdFx0fSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XG4rXHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG4rXHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbiBcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jXG5pbmRleCBiNThiYTk0MGJlNDc0Li4yZWJiMDBmNmMzNzkzIDEwMDY0NFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xuKysrIGIvbW0vdHJ1bmNhdGUuY1xuQEAgLTIwNiwxNSArMjA2LDE4IEBAIHN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxuIC8qXG4gICogSGFuZGxlIHBhcnRpYWwgZm9saW9zLiAgVGhlIGZvbGlvIG1heSBiZSBlbnRpcmVseSB3aXRoaW4gdGhlXG4gICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGVcbi0gKiBmb2xpbyB0aGF0J3Mgd2l0aGluIHRoZSBbc3RhcnQsIGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZlxuKyAqIGZvbGlvIHRoYXQncyB3aXRoaW4gdGhlIFtsc3RhcnQsIGxlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWZcbiAgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxuICAqIGlfc2l6ZSwgYW5kIHdlIHJlbHkgb24gdGhlIGNhbGxlciB0byBkaXNjYXJkIHBhZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYVxuICAqIG5ld2x5IGNyZWF0ZWQgaG9sZS5cbiAgKlxuLSAqIFJldHVybnMgZmFsc2UgaWYgc3BsaXR0aW5nIGZhaWxlZCBzbyB0aGUgY2FsbGVyIGNhbiBhdm9pZFxuLSAqIGRpc2NhcmRpbmcgdGhlIGVudGlyZSBmb2xpbyB3aGljaCBpcyBzdHViYm9ybmx5IHVuc3BsaXQuXG4rICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXG4rICogYW5kIG11c3QgYmUga2VwdCBieSB0aGUgY2FsbGVyJ3MgdHJ1bmNhdGUgbG9vcC4gIFJldHVybiAldHJ1ZSBpZiB0aGVcbisgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3JcbisgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXG4gICovXG4tYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbitcdFx0XHRcdCAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZClcbiB7XG4gXHRsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiBcdHNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7XG5AQCAtMjIyLDE5ICsyMjUsMjIgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiBcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgKnNwbGl0X2F0MjtcbiBcdHVuc2lnbmVkIGludCBtaW5fb3JkZXI7XG4gXG4tXHRpZiAocG9zIFx1MDAzYyBzdGFydClcbi1cdFx0b2Zmc2V0ID0gc3RhcnQgLSBwb3M7XG4rXHRpZiAoZW5kIFx1MDAyNlx1MDAyNiBwb3MgKyBzaXplIFx1MDAzZSAodTY0KWxlbmQpXG4rXHRcdCplbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbitcbitcdGlmIChwb3MgXHUwMDNjIGxzdGFydClcbitcdFx0b2Zmc2V0ID0gbHN0YXJ0IC0gcG9zO1xuIFx0ZWxzZVxuIFx0XHRvZmZzZXQgPSAwO1xuLVx0aWYgKHBvcyArIHNpemUgXHUwMDNjPSAodTY0KWVuZClcbitcdGlmIChwb3MgKyBzaXplIFx1MDAzYz0gKHU2NClsZW5kKVxuIFx0XHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xuIFx0ZWxzZVxuLVx0XHRsZW5ndGggPSBlbmQgKyAxIC0gcG9zIC0gb2Zmc2V0O1xuK1x0XHRsZW5ndGggPSBsZW5kICsgMSAtIHBvcyAtIG9mZnNldDtcbiBcbiBcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xuIFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI0OCw3ICsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxuIFx0XHRmb2xpb19pbnZhbGlkYXRlKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4gXHRzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTtcbkBAIC0yNTksNiArMjY1LDEwIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4gXHRcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbzI7XG4rXHRcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XG4rXG4rXHRcdGlmIChlbmQpXG4rXHRcdFx0KmVuZCA9IChwb3MgKyBvZmZzZXQgKyBsZW5ndGgpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0XHRpZiAob2Zmc2V0ICsgbGVuZ3RoID09IHNpemUpXG4gXHRcdFx0Z290byBub19zcGxpdDtcbkBAIC0yNzMsMjQgKzI4MywyOCBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpXG4rXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKSB7XG4rXHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXG4gXHRcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZm9saW8yLVx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXHUwMDNlbWFwcGluZylcbi1cdFx0XHRmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKTtcbitcdFx0ICAgIGZvbGlvMi1cdTAwM2VtYXBwaW5nID09IGZvbGlvLVx1MDAzZW1hcHBpbmcgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKSlcbitcdFx0XHR0YWlsX2lzb2xhdGVkID0gZmFsc2U7XG4gXG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbzIpO1xuIG91dDpcbitcdFx0aWYgKCF0YWlsX2lzb2xhdGVkIFx1MDAyNlx1MDAyNiBlbmQpXG4rXHRcdFx0KmVuZCA9IGZvbGlvMi1cdTAwM2VpbmRleDtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvMik7XG4gbm9fc3BsaXQ6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuLVx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRyZXR1cm4gdHJ1ZTtcbitcdGlmICghZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4rXHRcdHRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLVx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLypcbkBAIC00MTMsMTEgKzQyNyw5IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7XG4gXHRpZiAoIUlTX0VSUihmb2xpbykpIHtcbiBcdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbi1cdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XG4rXHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxuK1x0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4tXHRcdFx0aWYgKHNhbWVfZm9saW8pXG4tXHRcdFx0XHRlbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbi1cdFx0fVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG5AQCAtNDI3LDggKzQzOSw3IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRcdEZHUF9MT0NLLCAwKTtcbiBcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKVxuLVx0XHRcdFx0ZW5kID0gZm9saW8tXHUwMDNlaW5kZXg7XG4rXHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuIFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6MjkuOTU1NzAyOTU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwMDM5NDM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRmlsZSBUcnVuY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byBwaW5wb2ludCBpZiB0aGlzIGNvZGUgaW50cm9kdWNlcyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpa2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKEtNU0FOIGlzIHRoZSBwcmltYXJ5IHdvcnJ5IGhlcmUpIG9yIGlmIGl0IG1lc3NlcyB1cCBtZW1vcnkgbWFuYWdlbWVudCBvciB0cnVuY2F0aW9uIGxvZ2ljIGluIGFueSB3YXkgKEtBU0FOIGFuZCBvdGhlciBzYW5pdGl6ZXJzIHdpbGwgYmUgbXkgZnJpZW5kcyBmb3IgdGhhdCkuIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBzdXJyb3VuZGluZyBjYWxsZXJzIHdpdGhpbiBgbW0vc2htZW0uY2AgYW5kIGBtbS90cnVuY2F0ZS5jYC5cblxuTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSBhIGNsb3NlIHJlYWRpbmcgb2YgdGhvc2Ugc3BlY2lmaWMgZmlsZXMg4oCTIGBtbS90cnVuY2F0ZS5jYCBhbmQgYG1tL3NobWVtLmNgIOKAkyBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIHRob3NlIGZ1bmN0aW9uIGNhbGxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIHBpY3R1cmUsIHNlZSBob3cgdGhpcyBwYXJ0aWFsIGZvbGlvIHRydW5jYXRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiBmaWxlIHRydW5jYXRpb24gYW5kIHNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudC4gSSdtIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBlZGdlIGNhc2VzLCBhbmQgb2YgY291cnNlLCBhbnkgcG90ZW50aWFsIGZvciB0aGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uLiBMZXQncyBnZXQgdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjozNS45NTk2NTE2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2Nzg1Mjg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NjI5PWludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaDo2MzA6Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsXFxubW0vaW50ZXJuYWwuaC02MzEtXFx0XFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XFxuLS1cXG5tbS9zaG1lbS5jPTExMTk9c3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcXG4tLVxcbm1tL3NobWVtLmMtMTE3Ny1cXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG5tbS9zaG1lbS5jOjExNzg6XFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxubW0vc2htZW0uYy0xMTc5LVxcdFxcdFxcdFxcdFxcdFxcdCAgc2FtZV9mb2xpbyA/IFxcdTAwMjZlbmQgOiBOVUxMKSlcXG4tLVxcbm1tL3NobWVtLmMtMTE4OS1cXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG5tbS9zaG1lbS5jOjExOTA6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG5tbS9zaG1lbS5jLTExOTEtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL3NobWVtLmMtMTIyNy1cXHRcXHRcXHRcXHRcXHQgKiBJZiBmb3VuZCBhIGxhcmdlIHN3YXAgZW50cnkgY3Jvc3MgdGhlIGVuZCBvciBzdGFydFxcbm1tL3NobWVtLmM6MTIyODpcXHRcXHRcXHRcXHRcXHQgKiBib3JkZXIsIHNraXAgaXQgYXMgdGhlIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cXG5tbS9zaG1lbS5jLTEyMjktXFx0XFx0XFx0XFx0XFx0ICogYWJvdmUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgemVyb2QgaXRzIGNvbnRlbnQgb25jZS5cXG4tLVxcbm1tL3NobWVtLmMtMTI1Ny1cXHRcXHRcXHRcXHRcXHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XFxubW0vc2htZW0uYzoxMjU4OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcXG5tbS9zaG1lbS5jLTEyNTktXFx0XFx0XFx0XFx0XFx0XFx0XFx0bHN0YXJ0LCBsZW5kLCBOVUxMKSkge1xcbi0tXFxubW0vdHJ1bmNhdGUuYz0xODA9c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTIxOC0gKi9cXG5tbS90cnVuY2F0ZS5jOjIxOTpib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcXG5tbS90cnVuY2F0ZS5jLTIyMC1cXHRcXHRcXHRcXHQgIGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpXFxuLS1cXG5tbS90cnVuY2F0ZS5jPTM4MD12b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vdHJ1bmNhdGUuYy00MjktXFx0XFx0c2FtZV9mb2xpbyA9IGxlbmQgXFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XFxubW0vdHJ1bmNhdGUuYzo0MzA6XFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxubW0vdHJ1bmNhdGUuYy00MzEtXFx0XFx0XFx0XFx0XFx0XFx0ICBzYW1lX2ZvbGlvID8gXFx1MDAyNmVuZCA6IE5VTEwpKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy00NDEtXFx0XFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XFxubW0vdHJ1bmNhdGUuYzo0NDI6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG5tbS90cnVuY2F0ZS5jLTQ0My1cXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjozOC42Mjc1MjE3MDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk4ODgzMTc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vdHJ1bmNhdGUuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0cnVuY2F0aW9uIHdvcmtzIGluIHRoZSBtZW1vcnkgbWFuYWdlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vdHJ1bmNhdGUuY2AuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyb3VuZCBsaW5lcyAyMDAgdGhyb3VnaCAzMDUgYW5kIHRoZW4gYWdhaW4gb24gbGluZXMgNDEwIHRocm91Z2ggNDYwLiBJIHN1c3BlY3QgdGhlc2Ugc2VjdGlvbnMgZGVhbCB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIHJlZHVjaW5nIHRoZSBzaXplIG9mIGEgbWFwcGVkIG1lbW9yeSByZWdpb24gb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2YgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIG1lbW9yeSBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gdGhlc2UgZnVuY3Rpb25zIGlzIGVzc2VudGlhbCBpbiBkZXRlcm1pbmluZyB0aGUgYmVoYXZpb3IuIFRoaXMgYWxzbyBoZWxwcyBtZSBkZXRlcm1pbmUgaWYgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cnVuY2F0aW9uIGZ1bmN0aW9ucyBoYXMgYmVlbiBhbHRlcmVkIG9yIG1vZGlmaWVkIGluIGFueSB3YXkgYW5kIGlmIHRoaXMgaXMgdGhlIGNhdXNlIG9mIGFueSBlcnJvcnMgSSBtaWdodCBoYXZlIGVuY291bnRlcmVkIG9yIG9ic2VydmVkLiBXaXRoIHRoaXMgcmV2aWV3IEknbGwgY29uZmlybSBvciByZWZpbmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhleSBpbnRlcmFjdCBkdXJpbmcgYSB0cnVuY2F0aW9uIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjQ2LjYxNjM1Njk4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdHJ1bmNhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdFxcdFxcdFdBUk5fT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxuIDIwMTpcXHRcXHR9XFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdHJldHVybiByZXQ7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdC8qXFxuIDIwNzpcXHQgKiBIYW5kbGUgcGFydGlhbCBmb2xpb3MuICBUaGUgZm9saW8gbWF5IGJlIGVudGlyZWx5IHdpdGhpbiB0aGVcXG4gMjA4OlxcdCAqIHJhbmdlIGlmIGEgc3BsaXQgaGFzIHJhY2VkIHdpdGggdXMuICBJZiBub3QsIHdlIHplcm8gdGhlIHBhcnQgb2YgdGhlXFxuIDIwOTpcXHQgKiBmb2xpbyB0aGF0J3Mgd2l0aGluIHRoZSBbbHN0YXJ0LCBsZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmXFxuIDIxMDpcXHQgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxcbiAyMTE6XFx0ICogaV9zaXplLCBhbmQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGRpc2NhcmQgcGFnZXMgd2hpY2ggbGllIHdpdGhpbiBhXFxuIDIxMjpcXHQgKiBuZXdseSBjcmVhdGVkIGhvbGUuXFxuIDIxMzpcXHQgKlxcbiAyMTQ6XFx0ICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXFxuIDIxNTpcXHQgKiBhbmQgbXVzdCBiZSBrZXB0IGJ5IHRoZSBjYWxsZXIncyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZVxcbiAyMTY6XFx0ICogZm9saW8gd2FzIHNwbGl0LCAlZmFsc2Ugb3RoZXJ3aXNlLCBpbiB3aGljaCBjYXNlIHRoZSBmb2xpbyBpcyBkcm9wcGVkIG9yXFxuIDIxNzpcXHQgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXFxuIDIxODpcXHQgKi9cXG4gMjE5OlxcdGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxcbiAyMjA6XFx0XFx0XFx0XFx0XFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxcbiAyMjE6XFx0e1xcbiAyMjI6XFx0XFx0bG9mZl90IHBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XFxuIDIyMzpcXHRcXHRzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pO1xcbiAyMjQ6XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuZ3RoO1xcbiAyMjU6XFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCAqc3BsaXRfYXQyO1xcbiAyMjY6XFx0XFx0dW5zaWduZWQgaW50IG1pbl9vcmRlcjtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0aWYgKGVuZCBcXHUwMDI2XFx1MDAyNiBwb3MgKyBzaXplIFxcdTAwM2UgKHU2NClsZW5kKVxcbiAyMjk6XFx0XFx0XFx0KmVuZCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0aWYgKHBvcyBcXHUwMDNjIGxzdGFydClcXG4gMjMyOlxcdFxcdFxcdG9mZnNldCA9IGxzdGFydCAtIHBvcztcXG4gMjMzOlxcdFxcdGVsc2VcXG4gMjM0OlxcdFxcdFxcdG9mZnNldCA9IDA7XFxuIDIzNTpcXHRcXHRpZiAocG9zICsgc2l6ZSBcXHUwMDNjPSAodTY0KWxlbmQpXFxuIDIzNjpcXHRcXHRcXHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xcbiAyMzc6XFx0XFx0ZWxzZVxcbiAyMzg6XFx0XFx0XFx0bGVuZ3RoID0gbGVuZCArIDEgLSBwb3MgLSBvZmZzZXQ7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG4gMjQxOlxcdFxcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xcbiAyNDI6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcXG4gMjQzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQ0OlxcdFxcdH1cXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0LypcXG4gMjQ3OlxcdFxcdCAqIFdlIG1heSBiZSB6ZXJvaW5nIHBhZ2VzIHdlJ3JlIGFib3V0IHRvIGRpc2NhcmQsIGJ1dCBpdCBhdm9pZHNcXG4gMjQ4OlxcdFxcdCAqIGRvaW5nIGEgY29tcGxleCBjYWxjdWxhdGlvbiBoZXJlLCBhbmQgdGhlbiBkb2luZyB0aGUgemVyb2luZ1xcbiAyNDk6XFx0XFx0ICogYW55d2F5IGlmIHRoZSBwYWdlIHNwbGl0IGZhaWxzLlxcbiAyNTA6XFx0XFx0ICovXFxuIDI1MTpcXHRcXHRpZiAoIW1hcHBpbmdfaW5hY2Nlc3NpYmxlKGZvbGlvLVxcdTAwM2VtYXBwaW5nKSlcXG4gMjUyOlxcdFxcdFxcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxcbiAyNTU6XFx0XFx0XFx0Zm9saW9faW52YWxpZGF0ZShmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbiAyNTY6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4gMjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXFx1MDAzZW1hcHBpbmcpO1xcbiAyNjA6XFx0XFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XFxuIDI2MTpcXHRcXHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xcbiAyNjI6XFx0XFx0XFx0LypcXG4gMjYzOlxcdFxcdFxcdCAqIHRyeSB0byBzcGxpdCBhdCBvZmZzZXQgKyBsZW5ndGggdG8gbWFrZSBzdXJlIGZvbGlvcyB3aXRoaW5cXG4gMjY0OlxcdFxcdFxcdCAqIHRoZSByYW5nZSBjYW4gYmUgZHJvcHBlZCwgZXNwZWNpYWxseSB0byBhdm9pZCBtZW1vcnkgd2FzdGVcXG4gMjY1OlxcdFxcdFxcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxcbiAyNjY6XFx0XFx0XFx0ICovXFxuIDI2NzpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcXG4gMjY4OlxcdFxcdFxcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XFxuIDI2OTpcXHRcXG4gMjcwOlxcdFxcdFxcdGlmIChlbmQpXFxuIDI3MTpcXHRcXHRcXHRcXHQqZW5kID0gKHBvcyArIG9mZnNldCArIGxlbmd0aCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0XFx0aWYgKG9mZnNldCArIGxlbmd0aCA9PSBzaXplKVxcbiAyNzQ6XFx0XFx0XFx0XFx0Z290byBub19zcGxpdDtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0XFx0c3BsaXRfYXQyID0gZm9saW9fcGFnZShmb2xpbyxcXG4gMjc3OlxcdFxcdFxcdFxcdFxcdFBBR0VfQUxJR05fRE9XTihvZmZzZXQgKyBsZW5ndGgpIC8gUEFHRV9TSVpFKTtcXG4gMjc4OlxcdFxcdFxcdGZvbGlvMiA9IHBhZ2VfZm9saW8oc3BsaXRfYXQyKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0XFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvMikpXFxuIDI4MTpcXHRcXHRcXHRcXHRnb3RvIG5vX3NwbGl0O1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcXG4gMjg0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSkge1xcbiAyODc6XFx0XFx0XFx0XFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xcbiAyODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI4OTpcXHRcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdFxcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xcbiAyOTI6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSBcXHUwMDI2XFx1MDAyNlxcbiAyOTM6XFx0XFx0XFx0ICAgIGZvbGlvMi1cXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cXHUwMDNlbWFwcGluZyBcXHUwMDI2XFx1MDAyNlxcbiAyOTQ6XFx0XFx0XFx0ICAgIGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpKVxcbiAyOTU6XFx0XFx0XFx0XFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8yKTtcXG4gMjk4OlxcdG91dDpcXG4gMjk5OlxcdFxcdFxcdGlmICghdGFpbF9pc29sYXRlZCBcXHUwMDI2XFx1MDAyNiBlbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjQ2LjYxNjUxNTUxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzkwNzA2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBgbW0vdHJ1bmNhdGUuY2AgQ29kZSoqXG5cbk9rYXksIGJlZm9yZSB3ZSBtb3ZlIG9uLCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgc29tZXRoaW5nIHNwZWNpZmljLiBMZXQncyBoZWFkIG92ZXIgdG8gYG1tL3RydW5jYXRlLmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDQwMCB0aHJvdWdoIDQ2MC4gSSBrbm93IHdlJ3ZlIGJlZW4gd29ya2luZyBvbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2lkZSwgYW5kIHRydW5jYXRpb24gb3BlcmF0aW9ucyBjYW4gYmUgdHJpY2t5LCBlc3BlY2lhbGx5IHdpdGggY29uY3VycmVudCBhY2Nlc3MgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFRoaXMgc2VjdGlvbidzIGxpa2VseSBoYW5kbGluZyB0aGUgbWVjaGFuaWNzIG9mIGZyZWVpbmcgcGFnZXMgb3IgdXBkYXRpbmcgaW5vZGUgbWV0YWRhdGEgYWZ0ZXIgYSBmaWxlIHRydW5jYXRpb24uIEkgd2FudCB0byBxdWlja2x5IHJldmlldyBob3cgaXQncyBkZWFsaW5nIHdpdGggcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gYW5kIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kuIEdpdmVuIG91ciB3b3JrLCBpdOKAmXMgYmVzdCBwcmFjdGljZSB0byB2ZXJpZnkgd2UgYXJlIG5vdCBleHBvc2luZyBhbnkgcmFjZSBjb25kaXRpb25zLiBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoZSB0cnVuY2F0aW9uIGxvZ2ljIGlzIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8gb3RoZXIgb3BlcmF0aW9ucywgc3VjaCBhcyB3cml0ZXMgb3IgcmVhZHMuIExldCdzIHNlZSB3aGF04oCZcyBnb2luZyBvbiBpbiB0aGF0IGJsb2NrIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjUyLjQwNzIyNDEyNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdHJ1bmNhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDA6XFx0XFx0ICovXFxuIDQwMTpcXHRcXHRzdGFydCA9IChsc3RhcnQgKyBQQUdFX1NJWkUgLSAxKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA0MDI6XFx0XFx0aWYgKGxlbmQgPT0gLTEpXFxuIDQwMzpcXHRcXHRcXHQvKlxcbiA0MDQ6XFx0XFx0XFx0ICogbGVuZCA9PSAtMSBpbmRpY2F0ZXMgZW5kLW9mLWZpbGUgc28gd2UgaGF2ZSB0byBzZXQgJ2VuZCdcXG4gNDA1OlxcdFxcdFxcdCAqIHRvIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHBnb2ZmX3QgYW5kIHNpbmNlIHRoZSB0eXBlIGlzXFxuIDQwNjpcXHRcXHRcXHQgKiB1bnNpZ25lZCB3ZSdyZSB1c2luZyAtMS5cXG4gNDA3OlxcdFxcdFxcdCAqL1xcbiA0MDg6XFx0XFx0XFx0ZW5kID0gLTE7XFxuIDQwOTpcXHRcXHRlbHNlXFxuIDQxMDpcXHRcXHRcXHRlbmQgPSAobGVuZCArIDEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdGZvbGlvX2JhdGNoX2luaXQoXFx1MDAyNmZiYXRjaCk7XFxuIDQxMzpcXHRcXHRpbmRleCA9IHN0YXJ0O1xcbiA0MTQ6XFx0XFx0d2hpbGUgKGluZGV4IFxcdTAwM2MgZW5kIFxcdTAwMjZcXHUwMDI2IGZpbmRfbG9ja19lbnRyaWVzKG1hcHBpbmcsIFxcdTAwMjZpbmRleCwgZW5kIC0gMSxcXG4gNDE1OlxcdFxcdFxcdFxcdFxcdTAwMjZmYmF0Y2gsIGluZGljZXMpKSB7XFxuIDQxNjpcXHRcXHRcXHR0cnVuY2F0ZV9mb2xpb19iYXRjaF9leGNlcHRpb25hbHMobWFwcGluZywgXFx1MDAyNmZiYXRjaCwgaW5kaWNlcyk7XFxuIDQxNzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXFx1MDAyNmZiYXRjaCk7IGkrKylcXG4gNDE4OlxcdFxcdFxcdFxcdHRydW5jYXRlX2NsZWFudXBfZm9saW8oZmJhdGNoLmZvbGlvc1tpXSk7XFxuIDQxOTpcXHRcXHRcXHRkZWxldGVfZnJvbV9wYWdlX2NhY2hlX2JhdGNoKG1hcHBpbmcsIFxcdTAwMjZmYmF0Y2gpO1xcbiA0MjA6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX2JhdGNoX2NvdW50KFxcdTAwMjZmYmF0Y2gpOyBpKyspXFxuIDQyMTpcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZmJhdGNoLmZvbGlvc1tpXSk7XFxuIDQyMjpcXHRcXHRcXHRmb2xpb19iYXRjaF9yZWxlYXNlKFxcdTAwMjZmYmF0Y2gpO1xcbiA0MjM6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdHNhbWVfZm9saW8gPSAobHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpID09IChsZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiA0Mjc6XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7XFxuIDQyODpcXHRcXHRpZiAoIUlTX0VSUihmb2xpbykpIHtcXG4gNDI5OlxcdFxcdFxcdHNhbWVfZm9saW8gPSBsZW5kIFxcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xcbiA0MzA6XFx0XFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxuIDQzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHNhbWVfZm9saW8gPyBcXHUwMDI2ZW5kIDogTlVMTCkpXFxuIDQzMjpcXHRcXHRcXHRcXHRzdGFydCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xcbiA0MzM6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gNDM0OlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDQzNTpcXHRcXHRcXHRmb2xpbyA9IE5VTEw7XFxuIDQzNjpcXHRcXHR9XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdGlmICghc2FtZV9mb2xpbykge1xcbiA0Mzk6XFx0XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4gNDQwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdEZHUF9MT0NLLCAwKTtcXG4gNDQxOlxcdFxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbiA0NDI6XFx0XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG4gNDQzOlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIDQ0NDpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0NDU6XFx0XFx0XFx0fVxcbiA0NDY6XFx0XFx0fVxcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRpbmRleCA9IHN0YXJ0O1xcbiA0NDk6XFx0XFx0d2hpbGUgKGluZGV4IFxcdTAwM2MgZW5kKSB7XFxuIDQ1MDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNDUxOlxcdFxcdFxcdGlmICghZmluZF9nZXRfZW50cmllcyhtYXBwaW5nLCBcXHUwMDI2aW5kZXgsIGVuZCAtIDEsIFxcdTAwMjZmYmF0Y2gsXFxuIDQ1MjpcXHRcXHRcXHRcXHRcXHRpbmRpY2VzKSkge1xcbiA0NTM6XFx0XFx0XFx0XFx0LyogSWYgYWxsIGdvbmUgZnJvbSBzdGFydCBvbndhcmRzLCB3ZSdyZSBkb25lICovXFxuIDQ1NDpcXHRcXHRcXHRcXHRpZiAoaW5kZXggPT0gc3RhcnQpXFxuIDQ1NTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNDU2OlxcdFxcdFxcdFxcdC8qIE90aGVyd2lzZSByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xcbiA0NTc6XFx0XFx0XFx0XFx0aW5kZXggPSBzdGFydDtcXG4gNDU4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0NTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjo1Mi40MDczMzIxMjRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI0ODE1MzMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipFeGFtaW5pbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gU2hhcmVkIE1lbW9yeSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhpcyBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9zaG1lbS5jYCBhbmQgZm9jdXMgb24gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDExNTAgdG8gMTI3MC4gVGhhdCB1c3VhbGx5IGNvdmVycyB0aGUgY29yZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiByb3V0aW5lcywgb3IgcG90ZW50aWFsbHkgc29tZSBjcml0aWNhbCBwYWdlLXRhYmxlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBzaGFyZWQgbWVtb3J5IGNvbnRleHQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIHBoeXNpY2FsIHBhZ2UgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGluIHRoaXMgcmVnaW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGNvbmN1cnJlbmN5IGFyb3VuZCB0aGlzIHNlY3Rpb24uIE5lZWQgdG8gYmUgc3VyZSBhbGwgdGhlIHByb3BlciBsb2NrcyBhcmUgYmVpbmcgdGFrZW4uIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBtZW1vcnkgbGVha3MgYmVpbmcgaW50cm9kdWNlZCBieSB0aGlzIHJvdXRpbmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHNpbmNlIHNoYXJlZCBtZW1vcnkgaXMgYWxsIGFib3V0IGNvbmN1cnJlbnQgYWNjZXNzLiBJJ20gZXhwZWN0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHRvby4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjo1OS42NTU0ODk0OTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NobWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNzA6XFx0XFx0aWYgKHVuZmFsbG9jKVxcbjExNzE6XFx0XFx0XFx0Z290byB3aG9sZV9mb2xpb3M7XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdHNhbWVfZm9saW8gPSAobHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpID09IChsZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbjExNzQ6XFx0XFx0Zm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbjExNzU6XFx0XFx0aWYgKGZvbGlvKSB7XFxuMTE3NjpcXHRcXHRcXHRzYW1lX2ZvbGlvID0gbGVuZCBcXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcXG4xMTc3OlxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbjExNzg6XFx0XFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxuMTE3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHNhbWVfZm9saW8gPyBcXHUwMDI2ZW5kIDogTlVMTCkpXFxuMTE4MDpcXHRcXHRcXHRcXHRzdGFydCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xcbjExODE6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4xMTgyOlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMTE4MzpcXHRcXHRcXHRmb2xpbyA9IE5VTEw7XFxuMTE4NDpcXHRcXHR9XFxuMTE4NTpcXHRcXG4xMTg2OlxcdFxcdGlmICghc2FtZV9mb2xpbylcXG4xMTg3OlxcdFxcdFxcdGZvbGlvID0gc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oaW5vZGUsIGxlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuMTE4ODpcXHRcXHRpZiAoZm9saW8pIHtcXG4xMTg5OlxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbjExOTA6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG4xMTkxOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTE5MjpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjExOTM6XFx0XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHR3aG9sZV9mb2xpb3M6XFxuMTE5NjpcXHRcXG4xMTk3OlxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuMTE5ODpcXHRcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBlbmQpIHtcXG4xMTk5OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjEyMDA6XFx0XFxuMTIwMTpcXHRcXHRcXHRpZiAoIWZpbmRfZ2V0X2VudHJpZXMobWFwcGluZywgXFx1MDAyNmluZGV4LCBlbmQgLSAxLCBcXHUwMDI2ZmJhdGNoLFxcbjEyMDI6XFx0XFx0XFx0XFx0XFx0aW5kaWNlcykpIHtcXG4xMjAzOlxcdFxcdFxcdFxcdC8qIElmIGFsbCBnb25lIG9yIGhvbGUtcHVuY2ggb3IgdW5mYWxsb2MsIHdlJ3JlIGRvbmUgKi9cXG4xMjA0OlxcdFxcdFxcdFxcdGlmIChpbmRleCA9PSBzdGFydCB8fCBlbmQgIT0gLTEpXFxuMTIwNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMjA2OlxcdFxcdFxcdFxcdC8qIEJ1dCBpZiB0cnVuY2F0aW5nLCByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xcbjEyMDc6XFx0XFx0XFx0XFx0aW5kZXggPSBzdGFydDtcXG4xMjA4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMDk6XFx0XFx0XFx0fVxcbjEyMTA6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX2JhdGNoX2NvdW50KFxcdTAwMjZmYmF0Y2gpOyBpKyspIHtcXG4xMjExOlxcdFxcdFxcdFxcdGZvbGlvID0gZmJhdGNoLmZvbGlvc1tpXTtcXG4xMjEyOlxcdFxcbjEyMTM6XFx0XFx0XFx0XFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xcbjEyMTQ6XFx0XFx0XFx0XFx0XFx0aW50IG9yZGVyO1xcbjEyMTU6XFx0XFx0XFx0XFx0XFx0bG9uZyBzd2Fwc19mcmVlZDtcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0XFx0XFx0XFx0aWYgKHVuZmFsbG9jKVxcbjEyMTg6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTIxOTpcXHRcXHRcXHRcXHRcXHRzd2Fwc19mcmVlZCA9IHNobWVtX2ZyZWVfc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxcbjEyMjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW5kIC0gMSwgZm9saW8pO1xcbjEyMjE6XFx0XFx0XFx0XFx0XFx0aWYgKCFzd2Fwc19mcmVlZCkge1xcbjEyMjI6XFx0XFx0XFx0XFx0XFx0XFx0cGdvZmZfdCBiYXNlID0gaW5kaWNlc1tpXTtcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0XFx0XFx0XFx0XFx0XFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kaWNlc1tpXSxcXG4xMjI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHJhZGl4X3RvX3N3cF9lbnRyeShmb2xpbykpO1xcbjEyMjY6XFx0XFx0XFx0XFx0XFx0XFx0LypcXG4xMjI3OlxcdFxcdFxcdFxcdFxcdFxcdCAqIElmIGZvdW5kIGEgbGFyZ2Ugc3dhcCBlbnRyeSBjcm9zcyB0aGUgZW5kIG9yIHN0YXJ0XFxuMTIyODpcXHRcXHRcXHRcXHRcXHRcXHQgKiBib3JkZXIsIHNraXAgaXQgYXMgdGhlIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cXG4xMjI5OlxcdFxcdFxcdFxcdFxcdFxcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXFxuMTIzMDpcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4xMjMxOlxcdFxcdFxcdFxcdFxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDApIHtcXG4xMjMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJhc2UgPSByb3VuZF9kb3duKGJhc2UsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbjEyMzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aWYgKGJhc2UgXFx1MDAzYyBzdGFydCB8fCBiYXNlICsgKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIFxcdTAwM2UgZW5kKVxcbjEyMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTIzNTpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuMTIzNjpcXHRcXHRcXHRcXHRcXHRcXHQvKiBTd2FwIHdhcyByZXBsYWNlZCBieSBwYWdlIG9yIGV4dGVuZGVkLCByZXRyeSAqL1xcbjEyMzc6XFx0XFx0XFx0XFx0XFx0XFx0aW5kZXggPSBiYXNlO1xcbjEyMzg6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIzOTpcXHRcXHRcXHRcXHRcXHR9XFxuMTI0MDpcXHRcXHRcXHRcXHRcXHRucl9zd2Fwc19mcmVlZCArPSBzd2Fwc19mcmVlZDtcXG4xMjQxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNDI6XFx0XFx0XFx0XFx0fVxcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHRcXHRcXHRmb2xpb19sb2NrKGZvbGlvKTtcXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0XFx0XFx0aWYgKCF1bmZhbGxvYyB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG4xMjQ3OlxcdFxcdFxcdFxcdFxcdGlmIChmb2xpb19tYXBwaW5nKGZvbGlvKSAhPSBtYXBwaW5nKSB7XFxuMTI0ODpcXHRcXHRcXHRcXHRcXHRcXHQvKiBQYWdlIHdhcyByZXBsYWNlZCBieSBzd2FwOiByZXRyeSAqL1xcbjEyNDk6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4xMjUwOlxcdFxcdFxcdFxcdFxcdFxcdGluZGV4ID0gaW5kaWNlc1tpXTtcXG4xMjUxOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyNTI6XFx0XFx0XFx0XFx0XFx0fVxcbjEyNTM6XFx0XFx0XFx0XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSxcXG4xMjU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvKTtcXG4xMjU1OlxcdFxcbjEyNTY6XFx0XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbjEyNTc6XFx0XFx0XFx0XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8obWFwcGluZywgZm9saW8pO1xcbjEyNTg6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLFxcbjEyNTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bHN0YXJ0LCBsZW5kLCBOVUxMKSkge1xcbjEyNjA6XFx0XFx0XFx0XFx0XFx0XFx0LypcXG4xMjYxOlxcdFxcdFxcdFxcdFxcdFxcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cXG4xMjYyOlxcdFxcdFxcdFxcdFxcdFxcdCAqIHRoYXQgd2UgcGljayB1cCB0aGUgbmV3IHN1YiBwYWdlcy5cXG4xMjYzOlxcdFxcdFxcdFxcdFxcdFxcdCAqIE90aGVyd2lzZSB0aGUgVEhQIHdhcyBlbnRpcmVseVxcbjEyNjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICogZHJvcHBlZCBvciB0aGUgdGFyZ2V0IHJhbmdlIHdhc1xcbjEyNjU6XFx0XFx0XFx0XFx0XFx0XFx0ICogemVyb2VkLCBzbyBqdXN0IGNvbnRpbnVlIHRoZSBsb29wIGFzXFxuMTI2NjpcXHRcXHRcXHRcXHRcXHRcXHQgKiBpcy5cXG4xMjY3OlxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbjEyNjg6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbjEyNjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6NTkuNjU1NzUyOTc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTk5NjI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUcnVuY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgdHJ1bmNhdGlvbiBhbmQgaG9sZS1wdW5jaGluZyBvZiBwYXJ0aWFsIGZvbGlvcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGZ1bmN0aW9uLlxuXG5QcmV2aW91c2x5LCBJIGhhZCBhIHNwZWNpZmljIHBhdHRlcm4gZm9yIGhhbmRsaW5nIHRoZSByZXR1cm4gdmFsdWVzIGFuZCBhZGp1c3RpbmcgdGhlIGBlbmRgIGluZGV4IGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhhdC4gTm93LCBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgZGlyZWN0bHkgdXBkYXRlcyB0aGUgYCplbmRgIHBvaW50ZXIgdGhhdCB0aGUgY2FsbGVyIHBhc3NlcywgKmRlcGVuZGluZyogb24gd2hldGhlciB0aGUgZm9saW8gd2FzIHNwbGl0IG9yIGlmIGl0IG5lZWRzIHRvIGJlIHJldGFpbmVkLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IHNoaWZ0IGluIHJlc3BvbnNpYmlsaXR5LlxuXG5UaGUgcmV0dXJuIHZhbHVlIGl0c2VsZiBoYXMgYWxzbyBjaGFuZ2VkIHNlbWFudGljcy4gSXQgbm93IHJldHVybnMgYHRydWVgIGlmIHRoZSBmb2xpbyB3YXMgc3BsaXQgKG1lYW5pbmcgd2UgbmVlZGVkIHRvIGRvIHNvbWV0aGluZyBsaWtlIHplcm8tcmFuZ2VzKSwgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLCBmb3IgZXhhbXBsZSwgaWYgdGhlIGZvbGlvIHdhcyBmdWxseSB0cnVuY2F0ZWQgb3IgaWYgaXQgd2Fzbid0IHNwbGl0LlxuXG5UaGUgY2FsbGVycywgc3BlY2lmaWNhbGx5IGBzaG1lbV91bmRvX3JhbmdlYCBhbmQgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCwgcGFzcyBgXHUwMDI2ZW5kYCAob3IgYHNhbWVfZm9saW8gPyBcdTAwMjZlbmQgOiBOVUxMYCkgdG8gYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gLiBUaGUgY2FsbGVycyBhcmUgYWxzbyByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIGBzdGFydGAgaW5kZXgsICpidXQgb25seSBpZiogYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIHJldHVybnMgYGZhbHNlYCAqYW5kKiBpdCB3YXMgdGhlIHN0YXJ0IGZvbGlvLlxuXG5Ob3csIGEgcXVpY2sgbWVtb3J5IHNhZmV0eSBjaGVjay4gSXQncyBjcnVjaWFsLCBzbyBsZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6XG5cbjEuICBJcyB0aGVyZSBhbnkgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZT8gTm8sIG5vdGhpbmcgb2J2aW91cyBpbiB0aGUgY29udGV4dC4gR29vZC5cbjIuICBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHRoYXQgd2UncmUgdXNpbmcgaW4gY29uZGl0aW9uYWxzIG9yIHJlYWRpbmc/XG4gICAgKiAgIEluIHRoZSBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmLCBgZW5kYCBpcyBhIHBvaW50ZXIgb2YgdHlwZSBgcGdvZmZfdGAuIEl0J3MgYWx3YXlzIGNoZWNrZWQgZm9yIGBOVUxMYCwgc28gdGhhdCdzIHNhZmUuXG4gICAgKiAgIGBzdGFydGAgYW5kIGBlbmRgIHdpdGhpbiBgc2htZW1fdW5kb19yYW5nZWAgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAgYXJlIGxvY2FsIHZhcmlhYmxlcyBvZiB0eXBlIGBwZ29mZl90YC4gV2UgKm11c3QqIHZlcmlmeSB0aGVpciBpbml0aWFsaXphdGlvbiBiZWZvcmUgY2FsbGluZyBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuXG4gICAgKiAgIEluIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAsIGBlbmRgIGlzIGluaXRpYWxpemVkIHRvIGAtMWAgb3IgYChsZW5kICsgMSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlRgLCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYXQgbGluZSA0MjcuIFRoaXMgc2VlbXMgY29ycmVjdC5cbiAgICAqICAgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBsaW5lcyAxMTIwLTExNzUgaW4gYG1tL3NobWVtLmNgIHdpdGhpbiBgc2htZW1fdW5kb19yYW5nZWAsIHRvIHNlZSBob3cgYGVuZGAgaXMgaW5pdGlhbGl6ZWQgdGhlcmUuIE5lZWQgdG8gZW5zdXJlIGBlbmRgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjYwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjM6MDUuNzE1NzE4NTg0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgdW5mYWxsb2MpXFxuMTEyMTpcXHR7XFxuMTEyMjpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuMTEyMzpcXHRcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbjExMjQ6XFx0XFx0cGdvZmZfdCBzdGFydCA9IChsc3RhcnQgKyBQQUdFX1NJWkUgLSAxKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbjExMjU6XFx0XFx0cGdvZmZfdCBlbmQgPSAobGVuZCArIDEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuMTEyNjpcXHRcXHRzdHJ1Y3QgZm9saW9fYmF0Y2ggZmJhdGNoO1xcbjExMjc6XFx0XFx0cGdvZmZfdCBpbmRpY2VzW0ZPTElPX0JBVENIX1NJWkVdO1xcbjExMjg6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4xMTI5OlxcdFxcdGJvb2wgc2FtZV9mb2xpbztcXG4xMTMwOlxcdFxcdGxvbmcgbnJfc3dhcHNfZnJlZWQgPSAwO1xcbjExMzE6XFx0XFx0cGdvZmZfdCBpbmRleDtcXG4xMTMyOlxcdFxcdGludCBpO1xcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHRpZiAobGVuZCA9PSAtMSlcXG4xMTM1OlxcdFxcdFxcdGVuZCA9IC0xO1xcdC8qIHVuc2lnbmVkLCBzbyBhY3R1YWxseSB2ZXJ5IGJpZyAqL1xcbjExMzY6XFx0XFxuMTEzNzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlZmFsbG9jZW5kIFxcdTAwM2Ugc3RhcnQgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlZmFsbG9jZW5kIFxcdTAwM2M9IGVuZCBcXHUwMDI2XFx1MDAyNiAhdW5mYWxsb2MpXFxuMTEzODpcXHRcXHRcXHRpbmZvLVxcdTAwM2VmYWxsb2NlbmQgPSBzdGFydDtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0Zm9saW9fYmF0Y2hfaW5pdChcXHUwMDI2ZmJhdGNoKTtcXG4xMTQxOlxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuMTE0MjpcXHRcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBlbmQgXFx1MDAyNlxcdTAwMjYgZmluZF9sb2NrX2VudHJpZXMobWFwcGluZywgXFx1MDAyNmluZGV4LCBlbmQgLSAxLFxcbjExNDM6XFx0XFx0XFx0XFx0XFx1MDAyNmZiYXRjaCwgaW5kaWNlcykpIHtcXG4xMTQ0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcXHUwMDI2ZmJhdGNoKTsgaSsrKSB7XFxuMTE0NTpcXHRcXHRcXHRcXHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XFxuMTE0NjpcXHRcXG4xMTQ3OlxcdFxcdFxcdFxcdGlmICh4YV9pc192YWx1ZShmb2xpbykpIHtcXG4xMTQ4OlxcdFxcdFxcdFxcdFxcdGlmICh1bmZhbGxvYylcXG4xMTQ5OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExNTA6XFx0XFx0XFx0XFx0XFx0bnJfc3dhcHNfZnJlZWQgKz0gc2htZW1fZnJlZV9zd2FwKG1hcHBpbmcsIGluZGljZXNbaV0sXFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGVuZCAtIDEsIGZvbGlvKTtcXG4xMTUyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExNTM6XFx0XFx0XFx0XFx0fVxcbjExNTQ6XFx0XFxuMTE1NTpcXHRcXHRcXHRcXHRpZiAoIXVuZmFsbG9jIHx8ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4xMTU3OlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTE1ODpcXHRcXHRcXHR9XFxuMTE1OTpcXHRcXHRcXHRmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKFxcdTAwMjZmYmF0Y2gpO1xcbjExNjA6XFx0XFx0XFx0Zm9saW9fYmF0Y2hfcmVsZWFzZShcXHUwMDI2ZmJhdGNoKTtcXG4xMTYxOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjExNjI6XFx0XFx0fVxcbjExNjM6XFx0XFxuMTE2NDpcXHRcXHQvKlxcbjExNjU6XFx0XFx0ICogV2hlbiB1bmRvaW5nIGEgZmFpbGVkIGZhbGxvY2F0ZSwgd2Ugd2FudCBub25lIG9mIHRoZSBwYXJ0aWFsIGZvbGlvXFxuMTE2NjpcXHRcXHQgKiB6ZXJvaW5nIGFuZCBzcGxpdHRpbmcgYmVsb3csIGJ1dCBzaGFsbCB3YW50IHRvIHRydW5jYXRlIHRoZSB3aG9sZVxcbjExNjc6XFx0XFx0ICogZm9saW8gd2hlbiAhdXB0b2RhdGUgaW5kaWNhdGVzIHRoYXQgaXQgd2FzIGFkZGVkIGJ5IHRoaXMgZmFsbG9jYXRlLFxcbjExNjg6XFx0XFx0ICogZXZlbiB3aGVuIFtsc3RhcnQsIGxlbmRdIGNvdmVycyBvbmx5IGEgcGFydCBvZiB0aGUgZm9saW8uXFxuMTE2OTpcXHRcXHQgKi9cXG4xMTcwOlxcdFxcdGlmICh1bmZhbGxvYylcXG4xMTcxOlxcdFxcdFxcdGdvdG8gd2hvbGVfZm9saW9zO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSA9PSAobGVuZCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMTc0OlxcdFxcdGZvbGlvID0gc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oaW5vZGUsIGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMTc1OlxcdFxcdGlmIChmb2xpbykge1xcbjExNzY6XFx0XFx0XFx0c2FtZV9mb2xpbyA9IGxlbmQgXFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XFxuMTE3NzpcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4xMTc4OlxcdFxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzYW1lX2ZvbGlvID8gXFx1MDAyNmVuZCA6IE5VTEwpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMzowNS43MTU5NDg5MDRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5MzU0MTg2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgYXQgY2F0Y2hpbmcsIGdpdmVuIG15IGFyZWEgb2YgZXhwZXJ0aXNlLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGBlbmRgIHZhcmlhYmxlIGluIGBzaG1lbV91bmRvX3JhbmdlYCBpbml0aWFsaXplZCwgYW5kIGB0YWlsX2lzb2xhdGVkYCBpbiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgaXMgZXhwbGljaXRseSBzZXQgdG8gYHRydWVgLiBHb29kIHN0YXJ0LCB0aG9zZSBhcmUgY292ZXJlZC5cblxuTXkgbWFpbiBjb25jZXJuIGlzIGFsd2F5cyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsIGxlYWthZ2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhLiBIb3dldmVyLCBJIGNvbmZpcm1lZCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucy4gSXQgcHJpbWFyaWx5IGRlYWxzIHdpdGggcGFnZSBjYWNoZSBhbmQgZm9saW8gbWFuaXB1bGF0aW9uczogdHJ1bmNhdGlvbiwgc3BsaXR0aW5nICh1c2luZyBgZm9saW9fc3BsaXRfb3JfdW5tYXBgKSwgYW5kIGludmFsaWRhdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogYW0gSSBjaGFuZ2luZyB0aGUga2VybmVsIG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIHBhZ2VzL21lbW9yeT8gTm9wZS4gSXQgaXMgb3BlcmF0aW5nIHdpdGhpbiB0aGUga2VybmVsLXBhZ2UgY2FjaGUuXG5cblRoZSBwb3RlbnRpYWwgaXNzdWVzIEkgZm9yZXNlZSBoZXJlIHJlbGF0ZSB0byBwYWdlIGNhY2hlIGNvbnNpc3RlbmN5LCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIHRydW5jYXRpb24gb3Igc3BsaXR0aW5nIGxvZ2ljLCBhbmQgbG9ja2luZywgYW55IG9mIHdoaWNoIGFyZSBpc3N1ZXMgSSdkIGxvb2sgYXQgaW4gYW55IHBhdGNoIGRlYWxpbmcgd2l0aCBzaGFyZWQgbWVtb3J5LiBIb3dldmVyLCB0aG9zZSBhcmUgaGFuZGxlZCB2aWEgS0FTQU4sIExPQ0tERVAsIGFuZCBgQlVHYCBjaGVja3MuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIHRoZSBmb3VyIGNyaXRlcmlhIGZvciBLTVNBTiwgYXMgSSBrbm93IHRoZW06XG5cbjEuICAqKktlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSB1c3VhbCBzdXNwZWN0cyAoY29weVxcX3RvXFxfdXNlciwgZXRjLikuIFRoaXMgaXMgc3RyaWN0bHkga2VybmVsLWludGVybmFsLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBBbGwga2V5IHZhcmlhYmxlcyAoZW5kLCB0YWlsXFxfaXNvbGF0ZWQsIHNwbGl0XFxfYXQsIHNwbGl0XFxfYXQyLCBldGMuKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXMgSSBzYXcuXG4zLiAgKipVbmluaXRpYWxpemVkIGZpZWxkcyBpbiBjb21wbGV4IGFsbG9jYXRpb25zOioqIE5vIG5ldyBhbGxvY2F0aW9ucy4gVGhpcyBwYXRjaCBpcyB3b3JraW5nIHdpdGggZXhpc3RpbmcgbWVtb3J5LlxuNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeToqKiBOby4gVGhpcyBpbnZvbHZlcyBtb2RpZnlpbmcgZm9saW8gYm91bmRzIGZvciBwYWdlY2FjaGUgbWFuYWdlbWVudC5cblxuR2l2ZW4gdGhpcywgSSBjb25jbHVkZSB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjaGVja3MgYW5kIHRoZSBleGlzdGluZyBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgYXJlIGVudGlyZWx5IGFwcHJvcHJpYXRlLiBUaGlzIGRvZXNuJ3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gc3VibWl0IG15IGBzZXQtcmVzdWx0c2AgcmVzcG9uc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA4LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIzOjE4LjY1MTM3MTM2NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgaW50cm9kdWNlZCBvciByZWFkLCBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBhbHRlcmF0aW9ucyB0byBkYXRhIGJvdW5kcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgcGFnZSBjYWNoZSBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIGNhY2hlIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgaW50cm9kdWNlZCBvciByZWFkLCBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBhbHRlcmF0aW9ucyB0byBkYXRhIGJvdW5kcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgcGFnZSBjYWNoZSBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIGNhY2hlIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 16:00:22 +0000 UTC FinishedAt: 2026-09-04 16:23:20 +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": "ef6a1dca8de41a408019310649e6d1b7b21ac4bc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM", "TRANSPARENT_HUGEPAGE" ], "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": "ef6a1dca8de41a408019310649e6d1b7b21ac4bc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM", "TRANSPARENT_HUGEPAGE" ], "series_id": "a02ecab0-6b5d-44e6-86cf-e6abc167b6a4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "truncate_inode_partial_folio", "shmem_undo_range", "truncate_inode_pages_range", "shmem_truncate_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyYjMzQ7LAogICAgJiMzNDtzaG1lbV91bmRvX3JhbmdlJiMzNDssCiAgICAmIzM0O3RydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlJiMzNDssCiAgICAmIzM0O3NobWVtX3RydW5jYXRlX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGludHJvZHVjZWQgb3IgcmVhZCwgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBib3VuZHMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHBhZ2UgY2FjaGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSBjYWNoZSBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIGNhY2hlIHRydW5jYXRpb24gbG9naWMgKGluIG1tL3RydW5jYXRlLmMgYW5kIG1tL3NobWVtLmMpIGZvciBwYXJ0aWFsIGZvbGlvcywgYWx0ZXJpbmcgYm91bmRhcnkgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZSBzZW1hbnRpY3Mgb2YgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyB0byBwcmV2ZW50IGltcHJvcGVyIGRpc2NhcmQgZHVyaW5nIGZvbGlvIHNwbGl0dGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gYWN0aXZlbHkgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGV4ZXJjaXNlZCBieSBmaWxlIHRydW5jYXRpb24sIGZ0cnVuY2F0ZSwgYW5kIGZhbGxvY2F0ZSBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZmZlMTgyMGRmYjA3YjY5ZDE0YjM0MTVhNWU1MmRmNDZmNDU2ZGIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggNjhkYjVhYmQwYTRjZS4uZGI3ZDlkOWZiNWM5ZSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC02MjcsOCAmIzQzOzYyNyw4IEBAIHVuc2lnbmVkIGZpbmRfbG9ja19lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcbiB1bnNpZ25lZCBmaW5kX2dldF9lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcbiBcdFx0cGdvZmZfdCBlbmQsIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoLCBwZ29mZl90ICppbmRpY2VzKTtcbiBpbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsXG4tXHRcdGxvZmZfdCBlbmQpO1xuJiM0Mztib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbiYjNDM7XHRcdGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpO1xuIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gdW5zaWduZWQgbG9uZyBtYXBwaW5nX3RyeV9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCwgdW5zaWduZWQgbG9uZyAqbnJfZmFpbGVkKTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggODlhMTQ5NWU1NWY3ZS4uY2MxNTQ4ZmY1MDlhZSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0xMTc1LDExICYjNDM7MTE3NSw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXG4gXHRpZiAoZm9saW8pIHtcbiBcdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4tXHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkge1xuJiM0MztcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4tXHRcdFx0aWYgKHNhbWVfZm9saW8pXG4tXHRcdFx0XHRlbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbi1cdFx0fVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG5AQCAtMTE4OSw4ICYjNDM7MTE4Nyw3IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXG4gXHRcdGZvbGlvID0gc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oaW5vZGUsIGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIFx0aWYgKGZvbGlvKSB7XG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLVx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpXG4tXHRcdFx0ZW5kID0gZm9saW8tXHUwMDNlaW5kZXg7XG4mIzQzO1x0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG5AQCAtMTI1OCw3ICYjNDM7MTI1NSw4IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXG4gXG4gXHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4gXHRcdFx0XHRcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbi1cdFx0XHRcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkge1xuJiM0MztcdFx0XHRcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbiBcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jXG5pbmRleCBiNThiYTk0MGJlNDc0Li4yZWJiMDBmNmMzNzkzIDEwMDY0NFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdHJ1bmNhdGUuY1xuQEAgLTIwNiwxNSAmIzQzOzIwNiwxOCBAQCBzdGF0aWMgaW50IGZvbGlvX3NwbGl0X29yX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzcGxpdF9hdCxcbiAvKlxuICAqIEhhbmRsZSBwYXJ0aWFsIGZvbGlvcy4gIFRoZSBmb2xpbyBtYXkgYmUgZW50aXJlbHkgd2l0aGluIHRoZVxuICAqIHJhbmdlIGlmIGEgc3BsaXQgaGFzIHJhY2VkIHdpdGggdXMuICBJZiBub3QsIHdlIHplcm8gdGhlIHBhcnQgb2YgdGhlXG4tICogZm9saW8gdGhhdCYjMzk7cyB3aXRoaW4gdGhlIFtzdGFydCwgZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmXG4mIzQzOyAqIGZvbGlvIHRoYXQmIzM5O3Mgd2l0aGluIHRoZSBbbHN0YXJ0LCBsZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmXG4gICogaXQmIzM5O3MgbGFyZ2UuICBzcGxpdF9wYWdlX3JhbmdlKCkgd2lsbCBkaXNjYXJkIHBhZ2VzIHdoaWNoIG5vdyBsaWUgYmV5b25kXG4gICogaV9zaXplLCBhbmQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGRpc2NhcmQgcGFnZXMgd2hpY2ggbGllIHdpdGhpbiBhXG4gICogbmV3bHkgY3JlYXRlZCBob2xlLlxuICAqXG4tICogUmV0dXJucyBmYWxzZSBpZiBzcGxpdHRpbmcgZmFpbGVkIHNvIHRoZSBjYWxsZXIgY2FuIGF2b2lkXG4tICogZGlzY2FyZGluZyB0aGUgZW50aXJlIGZvbGlvIHdoaWNoIGlzIHN0dWJib3JubHkgdW5zcGxpdC5cbiYjNDM7ICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXG4mIzQzOyAqIGFuZCBtdXN0IGJlIGtlcHQgYnkgdGhlIGNhbGxlciYjMzk7cyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZVxuJiM0MzsgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3JcbiYjNDM7ICogbWF5IHN0aWxsIHN0cmFkZGxlIHRoZSByYW5nZSwgc28gdGhlIGNhbGxlciBtdXN0IG5vdCBkaXNjYXJkIGl0LlxuICAqL1xuLWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4mIzQzO2Jvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxuJiM0MztcdFx0XHRcdCAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZClcbiB7XG4gXHRsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiBcdHNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7XG5AQCAtMjIyLDE5ICYjNDM7MjI1LDIyIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4gXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsICpzcGxpdF9hdDI7XG4gXHR1bnNpZ25lZCBpbnQgbWluX29yZGVyO1xuIFxuLVx0aWYgKHBvcyBcdTAwM2Mgc3RhcnQpXG4tXHRcdG9mZnNldCA9IHN0YXJ0IC0gcG9zO1xuJiM0MztcdGlmIChlbmQgXHUwMDI2XHUwMDI2IHBvcyAmIzQzOyBzaXplIFx1MDAzZSAodTY0KWxlbmQpXG4mIzQzO1x0XHQqZW5kID0gZm9saW8tXHUwMDNlaW5kZXg7XG4mIzQzO1xuJiM0MztcdGlmIChwb3MgXHUwMDNjIGxzdGFydClcbiYjNDM7XHRcdG9mZnNldCA9IGxzdGFydCAtIHBvcztcbiBcdGVsc2VcbiBcdFx0b2Zmc2V0ID0gMDtcbi1cdGlmIChwb3MgJiM0Mzsgc2l6ZSBcdTAwM2M9ICh1NjQpZW5kKVxuJiM0MztcdGlmIChwb3MgJiM0Mzsgc2l6ZSBcdTAwM2M9ICh1NjQpbGVuZClcbiBcdFx0bGVuZ3RoID0gc2l6ZSAtIG9mZnNldDtcbiBcdGVsc2Vcbi1cdFx0bGVuZ3RoID0gZW5kICYjNDM7IDEgLSBwb3MgLSBvZmZzZXQ7XG4mIzQzO1x0XHRsZW5ndGggPSBsZW5kICYjNDM7IDEgLSBwb3MgLSBvZmZzZXQ7XG4gXG4gXHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG4gXHRpZiAobGVuZ3RoID09IHNpemUpIHtcbiBcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXHUwMDNlbWFwcGluZywgZm9saW8pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMjQ4LDcgJiM0MzsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxuIFx0XHRmb2xpb19pbnZhbGlkYXRlKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdG1pbl9vcmRlciA9IG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuIFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XG5AQCAtMjU5LDYgJiM0MzsyNjUsMTAgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiBcdFx0ICogZm9yIHNobWVtIHRydW5jYXRlXG4gXHRcdCAqL1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcbiYjNDM7XHRcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVuZClcbiYjNDM7XHRcdFx0KmVuZCA9IChwb3MgJiM0Mzsgb2Zmc2V0ICYjNDM7IGxlbmd0aCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRcdGlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoID09IHNpemUpXG4gXHRcdFx0Z290byBub19zcGxpdDtcbkBAIC0yNzMsMjQgJiM0MzsyODMsMjggQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiBcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKVxuJiM0MztcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpIHtcbiYjNDM7XHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBtYWtlIHN1cmUgZm9saW8yIGlzIGxhcmdlIGFuZCBkb2VzIG5vdCBjaGFuZ2UgaXRzIG1hcHBpbmcgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGZvbGlvMi1cdTAwM2VtYXBwaW5nID09IGZvbGlvLVx1MDAzZW1hcHBpbmcpXG4tXHRcdFx0Zm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7XG4mIzQzO1x0XHQgICAgZm9saW8yLVx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXHUwMDNlbWFwcGluZyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKSlcbiYjNDM7XHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIFxuIFx0XHRmb2xpb191bmxvY2soZm9saW8yKTtcbiBvdXQ6XG4mIzQzO1x0XHRpZiAoIXRhaWxfaXNvbGF0ZWQgXHUwMDI2XHUwMDI2IGVuZClcbiYjNDM7XHRcdFx0KmVuZCA9IGZvbGlvMi1cdTAwM2VpbmRleDtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvMik7XG4gbm9fc3BsaXQ6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuLVx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuJiM0MztcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXHUwMDNlbWFwcGluZywgZm9saW8pO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLypcbkBAIC00MTMsMTEgJiM0Mzs0MjcsOSBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgRkdQX0xPQ0ssIDApO1xuIFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4gXHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG4tXHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkge1xuJiM0MztcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4tXHRcdFx0aWYgKHNhbWVfZm9saW8pXG4tXHRcdFx0XHRlbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbi1cdFx0fVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG5AQCAtNDI3LDggJiM0Mzs0MzksNyBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiBcdFx0XHRcdFx0XHRGR1BfTE9DSywgMCk7XG4gXHRcdGlmICghSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSlcbi1cdFx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuJiM0MztcdFx0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0hNRU0mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3NobWVtX3VuZG9fcmFuZ2UmIzM0OywKICAgICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UmIzM0OywKICAgICYjMzQ7c2htZW1fdHJ1bmNhdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBjYWNoZSB0cnVuY2F0aW9uIGxvZ2ljIChpbiBtbS90cnVuY2F0ZS5jIGFuZCBtbS9zaG1lbS5jKSBmb3IgcGFydGlhbCBmb2xpb3MsIGFsdGVyaW5nIGJvdW5kYXJ5IHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgc2VtYW50aWNzIG9mIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8gdG8gcHJldmVudCBpbXByb3BlciBkaXNjYXJkIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGFjdGl2ZWx5IHJlYWNoYWJsZSBrZXJuZWwgY29kZSBleGVyY2lzZWQgYnkgZmlsZSB0cnVuY2F0aW9uLCBmdHJ1bmNhdGUsIGFuZCBmYWxsb2NhdGUgaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWZmZTE4MjBkZmIwN2I2OWQxNGIzNDE1YTVlNTJkZjQ2ZjQ1NmRiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTY6MjA6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA2OGRiNWFiZDBhNGNlLi5kYjdkOWQ5ZmI1YzllIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTYyNyw4ICYjNDM7NjI3LDggQEAgdW5zaWduZWQgZmluZF9sb2NrX2VudHJpZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgKnN0YXJ0LAogdW5zaWduZWQgZmluZF9nZXRfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsCiAJCXBnb2ZmX3QgZW5kLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgcGdvZmZfdCAqaW5kaWNlcyk7CiBpbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwotYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwKLQkJbG9mZl90IGVuZCk7CiYjNDM7Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsCiYjNDM7CQlsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKTsKIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7CiB1bnNpZ25lZCBsb25nIG1hcHBpbmdfdHJ5X2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLCB1bnNpZ25lZCBsb25nICpucl9mYWlsZWQpOwpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggODlhMTQ5NWU1NWY3ZS4uY2MxNTQ4ZmY1MDlhZSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0xMTc1LDExICYjNDM7MTE3NSw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsCiAJaWYgKGZvbGlvKSB7CiAJCXNhbWVfZm9saW8gPSBsZW5kICZsdDsgZm9saW9fbmV4dF9wb3MoZm9saW8pOwogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKLQkJaWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7CiYjNDM7CQlpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwKJiM0MzsJCQkJCQkgIHNhbWVfZm9saW8gPyAmYW1wO2VuZCA6IE5VTEwpKQogCQkJc3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTsKLQkJCWlmIChzYW1lX2ZvbGlvKQotCQkJCWVuZCA9IGZvbGlvLSZndDtpbmRleDsKLQkJfQogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCQlmb2xpbyA9IE5VTEw7CkBAIC0xMTg5LDggJiM0MzsxMTg3LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCwKIAkJZm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbGVuZCAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIAlpZiAoZm9saW8pIHsKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7Ci0JCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkKLQkJCWVuZCA9IGZvbGlvLSZndDtpbmRleDsKJiM0MzsJCXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgJmFtcDtlbmQpOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCX0KQEAgLTEyNTgsNyAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLAogCiAJCQkJaWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkgewogCQkJCQl0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7Ci0JCQkJfSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7CiYjNDM7CQkJCX0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywKJiM0MzsJCQkJCQkJbHN0YXJ0LCBsZW5kLCBOVUxMKSkgewogCQkJCQkvKgogCQkJCQkgKiBJZiB3ZSBzcGxpdCBhIHBhZ2UsIHJlc2V0IHRoZSBsb29wIHNvCiAJCQkJCSAqIHRoYXQgd2UgcGljayB1cCB0aGUgbmV3IHN1YiBwYWdlcy4KZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IGI1OGJhOTQwYmU0NzQuLjJlYmIwMGY2YzM3OTMgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdHJ1bmNhdGUuYwpAQCAtMjA2LDE1ICYjNDM7MjA2LDE4IEBAIHN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LAogLyoKICAqIEhhbmRsZSBwYXJ0aWFsIGZvbGlvcy4gIFRoZSBmb2xpbyBtYXkgYmUgZW50aXJlbHkgd2l0aGluIHRoZQogICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGUKLSAqIGZvbGlvIHRoYXQmIzM5O3Mgd2l0aGluIHRoZSBbc3RhcnQsIGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZgomIzQzOyAqIGZvbGlvIHRoYXQmIzM5O3Mgd2l0aGluIHRoZSBbbHN0YXJ0LCBsZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmCiAgKiBpdCYjMzk7cyBsYXJnZS4gIHNwbGl0X3BhZ2VfcmFuZ2UoKSB3aWxsIGRpc2NhcmQgcGFnZXMgd2hpY2ggbm93IGxpZSBiZXlvbmQKICAqIGlfc2l6ZSwgYW5kIHdlIHJlbHkgb24gdGhlIGNhbGxlciB0byBkaXNjYXJkIHBhZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYQogICogbmV3bHkgY3JlYXRlZCBob2xlLgogICoKLSAqIFJldHVybnMgZmFsc2UgaWYgc3BsaXR0aW5nIGZhaWxlZCBzbyB0aGUgY2FsbGVyIGNhbiBhdm9pZAotICogZGlzY2FyZGluZyB0aGUgZW50aXJlIGZvbGlvIHdoaWNoIGlzIHN0dWJib3JubHkgdW5zcGxpdC4KJiM0MzsgKiBXaGVuIEBlbmQgbm9uLU5VTEwsIHNldCB0byB0aGUgaW5kZXggb2YgdGhlIGZvbGlvIHRoYXQgY29udGFpbnMgQGxlbmQKJiM0MzsgKiBhbmQgbXVzdCBiZSBrZXB0IGJ5IHRoZSBjYWxsZXImIzM5O3MgdHJ1bmNhdGUgbG9vcC4gIFJldHVybiAldHJ1ZSBpZiB0aGUKJiM0MzsgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3IKJiM0MzsgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuCiAgKi8KLWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiYjNDM7Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsCiYjNDM7CQkJCSAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCkKIHsKIAlsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTsKIAlzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pOwpAQCAtMjIyLDE5ICYjNDM7MjI1LDIyIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiAJc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCAqc3BsaXRfYXQyOwogCXVuc2lnbmVkIGludCBtaW5fb3JkZXI7CiAKLQlpZiAocG9zICZsdDsgc3RhcnQpCi0JCW9mZnNldCA9IHN0YXJ0IC0gcG9zOwomIzQzOwlpZiAoZW5kICZhbXA7JmFtcDsgcG9zICYjNDM7IHNpemUgJmd0OyAodTY0KWxlbmQpCiYjNDM7CQkqZW5kID0gZm9saW8tJmd0O2luZGV4OwomIzQzOwomIzQzOwlpZiAocG9zICZsdDsgbHN0YXJ0KQomIzQzOwkJb2Zmc2V0ID0gbHN0YXJ0IC0gcG9zOwogCWVsc2UKIAkJb2Zmc2V0ID0gMDsKLQlpZiAocG9zICYjNDM7IHNpemUgJmx0Oz0gKHU2NCllbmQpCiYjNDM7CWlmIChwb3MgJiM0Mzsgc2l6ZSAmbHQ7PSAodTY0KWxlbmQpCiAJCWxlbmd0aCA9IHNpemUgLSBvZmZzZXQ7CiAJZWxzZQotCQlsZW5ndGggPSBlbmQgJiM0MzsgMSAtIHBvcyAtIG9mZnNldDsKJiM0MzsJCWxlbmd0aCA9IGxlbmQgJiM0MzsgMSAtIHBvcyAtIG9mZnNldDsKIAogCWZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTsKIAlpZiAobGVuZ3RoID09IHNpemUpIHsKIAkJdHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tJmd0O21hcHBpbmcsIGZvbGlvKTsKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTI0OCw3ICYjNDM7MjU0LDcgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKIAlpZiAoZm9saW9fbmVlZHNfcmVsZWFzZShmb2xpbykpCiAJCWZvbGlvX2ludmFsaWRhdGUoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTsKIAlpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAogCW1pbl9vcmRlciA9IG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGZvbGlvLSZndDttYXBwaW5nKTsKIAlzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTsKQEAgLTI1OSw2ICYjNDM7MjY1LDEwIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiAJCSAqIGZvciBzaG1lbSB0cnVuY2F0ZQogCQkgKi8KIAkJc3RydWN0IGZvbGlvICpmb2xpbzI7CiYjNDM7CQlib29sIHRhaWxfaXNvbGF0ZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJaWYgKGVuZCkKJiM0MzsJCQkqZW5kID0gKHBvcyAmIzQzOyBvZmZzZXQgJiM0MzsgbGVuZ3RoKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCiAJCWlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoID09IHNpemUpCiAJCQlnb3RvIG5vX3NwbGl0OwpAQCAtMjczLDI0ICYjNDM7MjgzLDI4IEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiAJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpKQogCQkJZ290byBvdXQ7CiAKLQkJaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpCiYjNDM7CQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSkgewomIzQzOwkJCXRhaWxfaXNvbGF0ZWQgPSBmYWxzZTsKIAkJCWdvdG8gb3V0OwomIzQzOwkJfQogCiAJCS8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqLwogCQlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpICZhbXA7JmFtcDsKLQkJICAgIGZvbGlvMi0mZ3Q7bWFwcGluZyA9PSBmb2xpby0mZ3Q7bWFwcGluZykKLQkJCWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpOwomIzQzOwkJICAgIGZvbGlvMi0mZ3Q7bWFwcGluZyA9PSBmb2xpby0mZ3Q7bWFwcGluZyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcikpCiYjNDM7CQkJdGFpbF9pc29sYXRlZCA9IGZhbHNlOwogCiAJCWZvbGlvX3VubG9jayhmb2xpbzIpOwogb3V0OgomIzQzOwkJaWYgKCF0YWlsX2lzb2xhdGVkICZhbXA7JmFtcDsgZW5kKQomIzQzOwkJCSplbmQgPSBmb2xpbzItJmd0O2luZGV4OwogCQlmb2xpb19wdXQoZm9saW8yKTsKIG5vX3NwbGl0OgogCQlyZXR1cm4gdHJ1ZTsKIAl9Ci0JaWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKQotCQlyZXR1cm4gZmFsc2U7Ci0JdHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tJmd0O21hcHBpbmcsIGZvbGlvKTsKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkKJiM0MzsJCXRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLSZndDttYXBwaW5nLCBmb2xpbyk7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogLyoKQEAgLTQxMywxMSAmIzQzOzQyNyw5IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxzdGFydCAmZ3Q7Jmd0OyBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7CiAJaWYgKCFJU19FUlIoZm9saW8pKSB7CiAJCXNhbWVfZm9saW8gPSBsZW5kICZsdDsgZm9saW9fbmV4dF9wb3MoZm9saW8pOwotCQlpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHsKJiM0MzsJCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLAomIzQzOwkJCQkJCSAgc2FtZV9mb2xpbyA/ICZhbXA7ZW5kIDogTlVMTCkpCiAJCQlzdGFydCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pOwotCQkJaWYgKHNhbWVfZm9saW8pCi0JCQkJZW5kID0gZm9saW8tJmd0O2luZGV4OwotCQl9CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKQEAgLTQyNyw4ICYjNDM7NDM5LDcgQEAgdm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxlbmQgJmd0OyZndDsgUEFHRV9TSElGVCwKIAkJCQkJCUZHUF9MT0NLLCAwKTsKIAkJaWYgKCFJU19FUlIoZm9saW8pKSB7Ci0JCQlpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpCi0JCQkJZW5kID0gZm9saW8tJmd0O2luZGV4OwomIzQzOwkJCXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgJmFtcDtlbmQpOwogCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBGb2N1cyBvbiBUcnVuY2F0aW9uIGFuZCBTaGFyZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBzcGVjaWZpYyBmaWxlcyBhbmQgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEl0JiMzOTtzIG1vZGlmeWluZyBgbW0vaW50ZXJuYWwuaGAsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS90cnVuY2F0ZS5jYC4gVGhhdCYjMzk7cyBhIGNsZWFyIHNpZ25hbCDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZWx5IHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBhbmQgdGhlIHRydW5jYXRpb24gb2YgaW5vZGVzLgoKVGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbXkgYXR0ZW50aW9uIGFyZTogYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VgIGluIGBtbS90cnVuY2F0ZS5jYCwgYW5kIGBzaG1lbV91bmRvX3JhbmdlYCBpbiBgbW0vc2htZW0uY2AuIFRoZSBmYWN0IHRoYXQgYHRydW5jYXRlYCBpcyBpbnZvbHZlZCBzdHJvbmdseSBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyBmaWxlcyBhcmUgc2hvcnRlbmVkIG9yIGNsZWFyZWQsIGFuZCBgc2htZW1gIGluZGljYXRlcyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLiBUaGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIHR3byBjb25jZXB0cyBpbW1lZGlhdGVseSBicmluZ3MgdXAgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHJlbGF0aW5nIHRvIGRhdGEgY29uc2lzdGVuY3kuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgYG1tL3RydW5jYXRlLmNgIGFuZCBgbW0vc2htZW0uY2AuIFRoYXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdHJ1bmNhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHRcdFdBUk5fT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XG4gMjAxOlx0XHR9XG4gMjAyOlx0XG4gMjAzOlx0XHRyZXR1cm4gcmV0O1xuIDIwNDpcdH1cbiAyMDU6XHRcbiAyMDY6XHQvKlxuIDIwNzpcdCAqIEhhbmRsZSBwYXJ0aWFsIGZvbGlvcy4gIFRoZSBmb2xpbyBtYXkgYmUgZW50aXJlbHkgd2l0aGluIHRoZVxuIDIwODpcdCAqIHJhbmdlIGlmIGEgc3BsaXQgaGFzIHJhY2VkIHdpdGggdXMuICBJZiBub3QsIHdlIHplcm8gdGhlIHBhcnQgb2YgdGhlXG4gMjA5Olx0ICogZm9saW8gdGhhdCYjMzk7cyB3aXRoaW4gdGhlIFtsc3RhcnQsIGxlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWZcbiAyMTA6XHQgKiBpdCYjMzk7cyBsYXJnZS4gIHNwbGl0X3BhZ2VfcmFuZ2UoKSB3aWxsIGRpc2NhcmQgcGFnZXMgd2hpY2ggbm93IGxpZSBiZXlvbmRcbiAyMTE6XHQgKiBpX3NpemUsIGFuZCB3ZSByZWx5IG9uIHRoZSBjYWxsZXIgdG8gZGlzY2FyZCBwYWdlcyB3aGljaCBsaWUgd2l0aGluIGFcbiAyMTI6XHQgKiBuZXdseSBjcmVhdGVkIGhvbGUuXG4gMjEzOlx0ICpcbiAyMTQ6XHQgKiBXaGVuIEBlbmQgbm9uLU5VTEwsIHNldCB0byB0aGUgaW5kZXggb2YgdGhlIGZvbGlvIHRoYXQgY29udGFpbnMgQGxlbmRcbiAyMTU6XHQgKiBhbmQgbXVzdCBiZSBrZXB0IGJ5IHRoZSBjYWxsZXImIzM5O3MgdHJ1bmNhdGUgbG9vcC4gIFJldHVybiAldHJ1ZSBpZiB0aGVcbiAyMTY6XHQgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3JcbiAyMTc6XHQgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXG4gMjE4Olx0ICovXG4gMjE5Olx0Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsXG4gMjIwOlx0XHRcdFx0XHQgIGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpXG4gMjIxOlx0e1xuIDIyMjpcdFx0bG9mZl90IHBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XG4gMjIzOlx0XHRzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pO1xuIDIyNDpcdFx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuZ3RoO1xuIDIyNTpcdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCAqc3BsaXRfYXQyO1xuIDIyNjpcdFx0dW5zaWduZWQgaW50IG1pbl9vcmRlcjtcbiAyMjc6XHRcbiAyMjg6XHRcdGlmIChlbmQgXHUwMDI2XHUwMDI2IHBvcyAmIzQzOyBzaXplIFx1MDAzZSAodTY0KWxlbmQpXG4gMjI5Olx0XHRcdCplbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbiAyMzA6XHRcbiAyMzE6XHRcdGlmIChwb3MgXHUwMDNjIGxzdGFydClcbiAyMzI6XHRcdFx0b2Zmc2V0ID0gbHN0YXJ0IC0gcG9zO1xuIDIzMzpcdFx0ZWxzZVxuIDIzNDpcdFx0XHRvZmZzZXQgPSAwO1xuIDIzNTpcdFx0aWYgKHBvcyAmIzQzOyBzaXplIFx1MDAzYz0gKHU2NClsZW5kKVxuIDIzNjpcdFx0XHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xuIDIzNzpcdFx0ZWxzZVxuIDIzODpcdFx0XHRsZW5ndGggPSBsZW5kICYjNDM7IDEgLSBwb3MgLSBvZmZzZXQ7XG4gMjM5Olx0XG4gMjQwOlx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG4gMjQxOlx0XHRpZiAobGVuZ3RoID09IHNpemUpIHtcbiAyNDI6XHRcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXHUwMDNlbWFwcGluZywgZm9saW8pO1xuIDI0MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjQ0Olx0XHR9XG4gMjQ1Olx0XG4gMjQ2Olx0XHQvKlxuIDI0NzpcdFx0ICogV2UgbWF5IGJlIHplcm9pbmcgcGFnZXMgd2UmIzM5O3JlIGFib3V0IHRvIGRpc2NhcmQsIGJ1dCBpdCBhdm9pZHNcbiAyNDg6XHRcdCAqIGRvaW5nIGEgY29tcGxleCBjYWxjdWxhdGlvbiBoZXJlLCBhbmQgdGhlbiBkb2luZyB0aGUgemVyb2luZ1xuIDI0OTpcdFx0ICogYW55d2F5IGlmIHRoZSBwYWdlIHNwbGl0IGZhaWxzLlxuIDI1MDpcdFx0ICovXG4gMjUxOlx0XHRpZiAoIW1hcHBpbmdfaW5hY2Nlc3NpYmxlKGZvbGlvLVx1MDAzZW1hcHBpbmcpKVxuIDI1MjpcdFx0XHRmb2xpb196ZXJvX3JhbmdlKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4gMjUzOlx0XG4gMjU0Olx0XHRpZiAoZm9saW9fbmVlZHNfcmVsZWFzZShmb2xpbykpXG4gMjU1Olx0XHRcdGZvbGlvX2ludmFsaWRhdGUoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbiAyNTY6XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gMjU3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyNTg6XHRcbiAyNTk6XHRcdG1pbl9vcmRlciA9IG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuIDI2MDpcdFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XG4gMjYxOlx0XHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xuIDI2MjpcdFx0XHQvKlxuIDI2MzpcdFx0XHQgKiB0cnkgdG8gc3BsaXQgYXQgb2Zmc2V0ICYjNDM7IGxlbmd0aCB0byBtYWtlIHN1cmUgZm9saW9zIHdpdGhpblxuIDI2NDpcdFx0XHQgKiB0aGUgcmFuZ2UgY2FuIGJlIGRyb3BwZWQsIGVzcGVjaWFsbHkgdG8gYXZvaWQgbWVtb3J5IHdhc3RlXG4gMjY1Olx0XHRcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxuIDI2NjpcdFx0XHQgKi9cbiAyNjc6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbzI7XG4gMjY4Olx0XHRcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XG4gMjY5Olx0XG4gMjcwOlx0XHRcdGlmIChlbmQpXG4gMjcxOlx0XHRcdFx0KmVuZCA9IChwb3MgJiM0Mzsgb2Zmc2V0ICYjNDM7IGxlbmd0aCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gMjcyOlx0XG4gMjczOlx0XHRcdGlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoID09IHNpemUpXG4gMjc0Olx0XHRcdFx0Z290byBub19zcGxpdDtcbiAyNzU6XHRcbiAyNzY6XHRcdFx0c3BsaXRfYXQyID0gZm9saW9fcGFnZShmb2xpbyxcbiAyNzc6XHRcdFx0XHRcdFBBR0VfQUxJR05fRE9XTihvZmZzZXQgJiM0MzsgbGVuZ3RoKSAvIFBBR0VfU0laRSk7XG4gMjc4Olx0XHRcdGZvbGlvMiA9IHBhZ2VfZm9saW8oc3BsaXRfYXQyKTtcbiAyNzk6XHRcbiAyODA6XHRcdFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvMikpXG4gMjgxOlx0XHRcdFx0Z290byBub19zcGxpdDtcbiAyODI6XHRcbiAyODM6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikpXG4gMjg0Olx0XHRcdFx0Z290byBvdXQ7XG4gMjg1Olx0XG4gMjg2Olx0XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKSB7XG4gMjg3Olx0XHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIDI4ODpcdFx0XHRcdGdvdG8gb3V0O1xuIDI4OTpcdFx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xuIDI5MjpcdFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpIFx1MDAyNlx1MDAyNlxuIDI5MzpcdFx0XHQgICAgZm9saW8yLVx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXHUwMDNlbWFwcGluZyBcdTAwMjZcdTAwMjZcbiAyOTQ6XHRcdFx0ICAgIGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRha2UgYSBsb29rIGF0IGBtbS9zaG1lbS5jYCBhcm91bmQgbGluZSAxMTc1IGFuZCBgbW0vdHJ1bmNhdGUuY2AgYXJvdW5kIGxpbmUgNDEzLiBUaGlzIHN1Z2dlc3RzIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnZlc3RpZ2F0aW9uLiBgc2htZW1gIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHNoYXJlZCBtZW1vcnksIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdG1wZnMgb3Igc2ltaWxhciBtZW1vcnktYmFzZWQgZmlsZSBzeXN0ZW1zLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYXQgdGhhdCBwYXJ0aWN1bGFyIHBvaW50LCBwZXJoYXBzIHJlZ2FyZGluZyBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIHN5bmNocm9uaXphdGlvbi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVyLCBJJiMzOTtkIGV4cGVjdCB0byBiZSBsb29raW5nIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBwYWdlIGNhY2hlIGFuZCBzaGFyZWQgbWVtb3J5IGluIHRob3NlIGxpbmVzLgoKVGhlbiwgdHVybmluZyB0byBgbW0vdHJ1bmNhdGUuY2AsIGxpbmUgNDEzIGxpa2VseSByZWxhdGVzIHRvIHRoZSB0cnVuY2F0aW9uIG9mIGEgZmlsZSBvciBzaGFyZWQgbWVtb3J5IHJlZ2lvbi4gVGhpcyBmdW5jdGlvbiB1c3VhbGx5IGludm9sdmVzIHJlbGVhc2luZyByZXNvdXJjZXMsIHVwZGF0aW5nIG1ldGFkYXRhLCBhbmQgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIGNhY2hlZCBkYXRhLiBJJiMzOTttIGJldHRpbmcgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIGVmZmVjdHMgb2YgdGhlIHRydW5jYXRpb24gb24gc2hhcmVkIG1lbW9yeSByZWdpb25zLCB3aGljaCBjYW4gYmUgYSBwYXJ0aWN1bGFybHkgdHJpY2t5IGFyZWEuIFRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgdHdvIGZpbGVzIGFyZSBhIGxpa2VseSBzb3VyY2Ugb2YgcG90ZW50aWFsIGZvciBkYXRhIGNvcnJ1cHRpb24gYW5kIGVycm9ycy4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gYmUsIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzA6XHRcdGlmICh1bmZhbGxvYylcbjExNzE6XHRcdFx0Z290byB3aG9sZV9mb2xpb3M7XG4xMTcyOlx0XG4xMTczOlx0XHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuMTE3NDpcdFx0Zm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExNzU6XHRcdGlmIChmb2xpbykge1xuMTE3NjpcdFx0XHRzYW1lX2ZvbGlvID0gbGVuZCBcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xuMTE3NzpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExNzg6XHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4xMTc5Olx0XHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4xMTgwOlx0XHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbjExODE6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjExODI6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjExODM6XHRcdFx0Zm9saW8gPSBOVUxMO1xuMTE4NDpcdFx0fVxuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKCFzYW1lX2ZvbGlvKVxuMTE4NzpcdFx0XHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExODg6XHRcdGlmIChmb2xpbykge1xuMTE4OTpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExOTA6XHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuMTE5MTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMTE5MjpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTE5MzpcdFx0fVxuMTE5NDpcdFxuMTE5NTpcdHdob2xlX2ZvbGlvczpcbjExOTY6XHRcbjExOTc6XHRcdGluZGV4ID0gc3RhcnQ7XG4xMTk4Olx0XHR3aGlsZSAoaW5kZXggXHUwMDNjIGVuZCkge1xuMTE5OTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjEyMDA6XHRcbjEyMDE6XHRcdFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFx1MDAyNmluZGV4LCBlbmQgLSAxLCBcdTAwMjZmYmF0Y2gsXG4xMjAyOlx0XHRcdFx0XHRpbmRpY2VzKSkge1xuMTIwMzpcdFx0XHRcdC8qIElmIGFsbCBnb25lIG9yIGhvbGUtcHVuY2ggb3IgdW5mYWxsb2MsIHdlJiMzOTtyZSBkb25lICovXG4xMjA0Olx0XHRcdFx0aWYgKGluZGV4ID09IHN0YXJ0IHx8IGVuZCAhPSAtMSlcbjEyMDU6XHRcdFx0XHRcdGJyZWFrO1xuMTIwNjpcdFx0XHRcdC8qIEJ1dCBpZiB0cnVuY2F0aW5nLCByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xuMTIwNzpcdFx0XHRcdGluZGV4ID0gc3RhcnQ7XG4xMjA4Olx0XHRcdFx0Y29udGludWU7XG4xMjA5Olx0XHRcdH1cbjEyMTA6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKTsgaSYjNDM7JiM0MzspIHtcbjEyMTE6XHRcdFx0XHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XG4xMjEyOlx0XG4xMjEzOlx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuMTIxNDpcdFx0XHRcdFx0aW50IG9yZGVyO1xuMTIxNTpcdFx0XHRcdFx0bG9uZyBzd2Fwc19mcmVlZDtcbjEyMTY6XHRcbjEyMTc6XHRcdFx0XHRcdGlmICh1bmZhbGxvYylcbjEyMTg6XHRcdFx0XHRcdFx0Y29udGludWU7XG4xMjE5Olx0XHRcdFx0XHRzd2Fwc19mcmVlZCA9IHNobWVtX2ZyZWVfc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxuMTIyMDpcdFx0XHRcdFx0XHRcdFx0ICAgICAgZW5kIC0gMSwgZm9saW8pO1xuMTIyMTpcdFx0XHRcdFx0aWYgKCFzd2Fwc19mcmVlZCkge1xuMTIyMjpcdFx0XHRcdFx0XHRwZ29mZl90IGJhc2UgPSBpbmRpY2VzW2ldO1xuMTIyMzpcdFxuMTIyNDpcdFx0XHRcdFx0XHRvcmRlciA9IHNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxuMTIyNTpcdFx0XHRcdFx0XHRcdFx0XHQgICByYWRpeF90b19zd3BfZW50cnkoZm9saW8pKTtcbjEyMjY6XHRcdFx0XHRcdFx0LypcbjEyMjc6XHRcdFx0XHRcdFx0ICogSWYgZm91bmQgYSBsYXJnZSBzd2FwIGVudHJ5IGNyb3NzIHRoZSBlbmQgb3Igc3RhcnRcbjEyMjg6XHRcdFx0XHRcdFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXG4xMjI5Olx0XHRcdFx0XHRcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXG4xMjMwOlx0XHRcdFx0XHRcdCAqL1xuMTIzMTpcdFx0XHRcdFx0XHRpZiAob3JkZXIgXHUwMDNlIDApIHtcbjEyMzI6XHRcdFx0XHRcdFx0XHRiYXNlID0gcm91bmRfZG93bihiYXNlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4xMjMzOlx0XHRcdFx0XHRcdFx0aWYgKGJhc2UgXHUwMDNjIHN0YXJ0IHx8IGJhc2UgJiM0MzsgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2UgZW5kKVxuMTIzNDpcdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XG4xMjM1Olx0XHRcdFx0XHRcdH1cbjEyMzY6XHRcdFx0XHRcdFx0LyogU3dhcCB3YXMgcmVwbGFjZWQgYnkgcGFnZSBvciBleHRlbmRlZCwgcmV0cnkgKi9cbjEyMzc6XHRcdFx0XHRcdFx0aW5kZXggPSBiYXNlO1xuMTIzODpcdFx0XHRcdFx0XHRicmVhaztcbjEyMzk6XHRcdFx0XHRcdH1cbjEyNDA6XHRcdFx0XHRcdG5yX3N3YXBzX2ZyZWVkICYjNDM7PSBzd2Fwc19mcmVlZDtcbjEyNDE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMTI0MjpcdFx0XHRcdH1cbjEyNDM6XHRcbjEyNDQ6XHRcdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbjEyNDU6XHRcbjEyNDY6XHRcdFx0XHRpZiAoIXVuZmFsbG9jIHx8ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuMTI0NzpcdFx0XHRcdFx0aWYgKGZvbGlvX21hcHBpbmcoZm9saW8pICE9IG1hcHBpbmcpIHtcbjEyNDg6XHRcdFx0XHRcdFx0LyogUGFnZSB3YXMgcmVwbGFjZWQgYnkgc3dhcDogcmV0cnkgKi9cbjEyNDk6XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjEyNTA6XHRcdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzW2ldO1xuMTI1MTpcdFx0XHRcdFx0XHRicmVhaztcbjEyNTI6XHRcdFx0XHRcdH1cbjEyNTM6XHRcdFx0XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXG4xMjU0Olx0XHRcdFx0XHRcdFx0Zm9saW8pO1xuMTI1NTpcdFxuMTI1NjpcdFx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuMTI1NzpcdFx0XHRcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4xMjU4Olx0XHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG4xMjU5Olx0XHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4xMjYwOlx0XHRcdFx0XHRcdC8qXG4xMjYxOlx0XHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbjEyNjI6XHRcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuMTI2MzpcdFx0XHRcdFx0XHQgKiBPdGhlcndpc2UgdGhlIFRIUCB3YXMgZW50aXJlbHlcbjEyNjQ6XHRcdFx0XHRcdFx0ICogZHJvcHBlZCBvciB0aGUgdGFyZ2V0IHJhbmdlIHdhc1xuMTI2NTpcdFx0XHRcdFx0XHQgKiB6ZXJvZWQsIHNvIGp1c3QgY29udGludWUgdGhlIGxvb3AgYXNcbjEyNjY6XHRcdFx0XHRcdFx0ICogaXMuXG4xMjY3Olx0XHRcdFx0XHRcdCAqL1xuMTI2ODpcdFx0XHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4xMjY5Olx0XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBgbW0vdHJ1bmNhdGUuY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGB0cnVuY2F0ZWAgZnVuY3Rpb25hbGl0eS4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIHRoZSBhcmVhIG9mIGludGVyZXN0IHNlZW1zIHRvIGJlIGFyb3VuZCBsaW5lcyA0MTAgdG8gNDUwIGluIGBtbS90cnVuY2F0ZS5jYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGtleSBsb2dpYyB0aGVyZSByZWxhdGVkIHRvIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3RzIHdpdGggdGhlIHRydW5jYXRpb24gcHJvY2Vzcy4gUHJvYmFibHkgc29tZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBpbm9kZSwgcGFnZSBjYWNoZSwgYW5kIGJsb2NrIGFsbG9jYXRpb24uIEtub3dpbmcgd2hlcmUgdGhlIHJlbGV2YW50IGNvZGUgbGllcyBhbGxvd3MgbWUgdG8gZm9jdXMgbXkgZWZmb3J0cy4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgbGllIHdpdGhpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3RydW5jYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMDpcdFx0XHRlbmQgPSAobGVuZCAmIzQzOyAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA0MTE6XHRcbiA0MTI6XHRcdGZvbGlvX2JhdGNoX2luaXQoXHUwMDI2ZmJhdGNoKTtcbiA0MTM6XHRcdGluZGV4ID0gc3RhcnQ7XG4gNDE0Olx0XHR3aGlsZSAoaW5kZXggXHUwMDNjIGVuZCBcdTAwMjZcdTAwMjYgZmluZF9sb2NrX2VudHJpZXMobWFwcGluZywgXHUwMDI2aW5kZXgsIGVuZCAtIDEsXG4gNDE1Olx0XHRcdFx0XHUwMDI2ZmJhdGNoLCBpbmRpY2VzKSkge1xuIDQxNjpcdFx0XHR0cnVuY2F0ZV9mb2xpb19iYXRjaF9leGNlcHRpb25hbHMobWFwcGluZywgXHUwMDI2ZmJhdGNoLCBpbmRpY2VzKTtcbiA0MTc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKTsgaSYjNDM7JiM0MzspXG4gNDE4Olx0XHRcdFx0dHJ1bmNhdGVfY2xlYW51cF9mb2xpbyhmYmF0Y2guZm9saW9zW2ldKTtcbiA0MTk6XHRcdFx0ZGVsZXRlX2Zyb21fcGFnZV9jYWNoZV9iYXRjaChtYXBwaW5nLCBcdTAwMjZmYmF0Y2gpO1xuIDQyMDpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcdTAwMjZmYmF0Y2gpOyBpJiM0MzsmIzQzOylcbiA0MjE6XHRcdFx0XHRmb2xpb191bmxvY2soZmJhdGNoLmZvbGlvc1tpXSk7XG4gNDIyOlx0XHRcdGZvbGlvX2JhdGNoX3JlbGVhc2UoXHUwMDI2ZmJhdGNoKTtcbiA0MjM6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gNDI0Olx0XHR9XG4gNDI1Olx0XG4gNDI2Olx0XHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIDQyNzpcdFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgRkdQX0xPQ0ssIDApO1xuIDQyODpcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4gNDI5Olx0XHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG4gNDMwOlx0XHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxuIDQzMTpcdFx0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIDQzMjpcdFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4gNDMzOlx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gNDM0Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gNDM1Olx0XHRcdGZvbGlvID0gTlVMTDtcbiA0MzY6XHRcdH1cbiA0Mzc6XHRcbiA0Mzg6XHRcdGlmICghc2FtZV9mb2xpbykge1xuIDQzOTpcdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiA0NDA6XHRcdFx0XHRcdFx0XHRGR1BfTE9DSywgMCk7XG4gNDQxOlx0XHRcdGlmICghSVNfRVJSKGZvbGlvKSkge1xuIDQ0MjpcdFx0XHRcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXHUwMDI2ZW5kKTtcbiA0NDM6XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDQ0NDpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gNDQ1Olx0XHRcdH1cbiA0NDY6XHRcdH1cbiA0NDc6XHRcbiA0NDg6XHRcdGluZGV4ID0gc3RhcnQ7XG4gNDQ5Olx0XHR3aGlsZSAoaW5kZXggXHUwMDNjIGVuZCkge1xuIDQ1MDpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA0NTE6XHRcdFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFx1MDAyNmluZGV4LCBlbmQgLSAxLCBcdTAwMjZmYmF0Y2gsXG4gNDUyOlx0XHRcdFx0XHRpbmRpY2VzKSkge1xuIDQ1MzpcdFx0XHRcdC8qIElmIGFsbCBnb25lIGZyb20gc3RhcnQgb253YXJkcywgd2UmIzM5O3JlIGRvbmUgKi9cbiA0NTQ6XHRcdFx0XHRpZiAoaW5kZXggPT0gc3RhcnQpXG4gNDU1Olx0XHRcdFx0XHRicmVhaztcbiA0NTY6XHRcdFx0XHQvKiBPdGhlcndpc2UgcmVzdGFydCB0byBtYWtlIHN1cmUgYWxsIGdvbmUgKi9cbiA0NTc6XHRcdFx0XHRpbmRleCA9IHN0YXJ0O1xuIDQ1ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ1OTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBQYXRjaCBXb3J0aCBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB0b3VjaGluZyBzb21lIGNyaXRpY2FsIGFyZWFzLiBJdCYjMzk7cyBtb2RpZnlpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBtbS90cnVuY2F0ZS5jYCBhbmQgYG1tL3NobWVtLmNgIGZpbGVzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAuIFRoZXNlIGFyZSBpbnRpbWF0ZWx5IGludm9sdmVkIGluIHRydW5jYXRpb24gb3BlcmF0aW9ucywgaG9sZSBwdW5jaGluZyAodmlhIGBmYWxsb2NhdGVgKSwgYGZ0cnVuY2F0ZWAsIGFuZCBwYWdlIGNhY2hlIG1hbmFnZW1lbnQuIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGNvcmUgdG8gZmlsZSBzeXN0ZW0gYmVoYXZpb3IgYW5kIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KClRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBwYWdlIGNhY2hlLCBmb2xpbyBoYW5kbGluZywgYW5kIGV2ZW4gZGVhbHMgd2l0aCBsYXJnZSBmb2xpb3Mgb3IgVEhQIHNwbGl0dGluZyBhbmQgdHJ1bmNhdGlvbiwgbWVhbnMgaXQmIzM5O3MgYSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGFmZmVjdGVkIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHM6IGB0cnVuY2F0ZWAsIGBmdHJ1bmNhdGVgLCBhbmQgYGZhbGxvY2F0ZWAsIHdoaWNoIGFyZSBjb21tb25seSB1c2VkIG9uIHJlZ3VsYXIgZmlsZXMsIGFzIHdlbGwgYXMgYHNobWVtYCwgYHRtcGZzYCwgYW5kIGBtZW1mZGAuIFRoYXQgbWFrZXMgaXQgZXZlbiBtb3JlIGltcG9ydGFudC4KCk15IGluaXRpYWwgYXNzZXNzbWVudD8gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgYSBkZWVwIGRpdmUuIEkgbmVlZCB0byBub3cgZXhhbWluZSB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB0byBzZWUgd2hhdCBhZGRpdGlvbmFsIGRldGFpbHMgSSBjYW4gZ2xlYW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBhbmQgYW55IG90aGVyIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMuIEkmIzM5O2xsIHJ1biBhIGdyZXAgdG8gY29uZmlybSB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTYyOT1pbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaDo2MzA6Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsXG5tbS9pbnRlcm5hbC5oLTYzMS1cdFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XG4tLVxubW0vc2htZW0uYz0xMTE5PXN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXG4tLVxubW0vc2htZW0uYy0xMTc3LVx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbm1tL3NobWVtLmM6MTE3ODpcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG5tbS9zaG1lbS5jLTExNzktXHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4tLVxubW0vc2htZW0uYy0xMTg5LVx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbm1tL3NobWVtLmM6MTE5MDpcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xubW0vc2htZW0uYy0xMTkxLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL3NobWVtLmMtMTIyNy1cdFx0XHRcdFx0ICogSWYgZm91bmQgYSBsYXJnZSBzd2FwIGVudHJ5IGNyb3NzIHRoZSBlbmQgb3Igc3RhcnRcbm1tL3NobWVtLmM6MTIyODpcdFx0XHRcdFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXG5tbS9zaG1lbS5jLTEyMjktXHRcdFx0XHRcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXG4tLVxubW0vc2htZW0uYy0xMjU3LVx0XHRcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG5tbS9zaG1lbS5jOjEyNTg6XHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG5tbS9zaG1lbS5jLTEyNTktXHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4tLVxubW0vdHJ1bmNhdGUuYz0xODA9c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXG4tLVxubW0vdHJ1bmNhdGUuYy0yMTgtICovXG5tbS90cnVuY2F0ZS5jOjIxOTpib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbm1tL3RydW5jYXRlLmMtMjIwLVx0XHRcdFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxuLS1cbm1tL3RydW5jYXRlLmM9MzgwPXZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vdHJ1bmNhdGUuYy00MjktXHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG5tbS90cnVuY2F0ZS5jOjQzMDpcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG5tbS90cnVuY2F0ZS5jLTQzMS1cdFx0XHRcdFx0XHQgIHNhbWVfZm9saW8gPyBcdTAwMjZlbmQgOiBOVUxMKSlcbi0tXG5tbS90cnVuY2F0ZS5jLTQ0MS1cdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG5tbS90cnVuY2F0ZS5jOjQ0MjpcdFx0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG5tbS90cnVuY2F0ZS5jLTQ0My1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBwaWVjZWQgdG9nZXRoZXIgZnJvbSB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBzb21lIHNoYXJlZCBtZW1vcnkgYW5kIHRydW5jYXRpb24gZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdG9wIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBgbW0vc2htZW0uY2AgYW5kIGBtbS90cnVuY2F0ZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQsIGlmIGFueSwgZmxleGliaWxpdHkgaXMgb2ZmZXJlZCBhdCBjb21waWxlIHRpbWUuIEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBvcHRpb25hbCBmZWF0dXJlcyBJIHNob3VsZCBrbm93IGFib3V0PyBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4KClRoZW4sIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIHByb2Nlc3MsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lIGhvdyBgc2htZW0ub2AgYW5kIGB0cnVuY2F0ZS5vYCBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIFdoYXQgb3RoZXIgc291cmNlIGZpbGVzIGFyZSBidWlsdCBhbG9uZ3NpZGUgdGhlc2U/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgZmxhZ3Mgb3Igc3BlY2lmaWMgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGtub3cgYWJvdXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlc2UgZmlsZXMgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUuIEJ5IHVuZGVyc3RhbmRpbmcgdGhlIE1ha2VmaWxlIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQgaW4gdGVybXMgb2Ygc2VlaW5nIHRoZSBvdmVyYWxsIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0IGFsbCB3b3JrcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHRydW5jYXRlfHNobWVtKVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NTE9b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG5tbS9NYWtlZmlsZS01Mi1cdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxubW0vTWFrZWZpbGU6NTM6XHRcdFx0ICAgcmVhZGFoZWFkLm8gZm9saW8ubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbm1tL01ha2VmaWxlOjU0Olx0XHRcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcbm1tL01ha2VmaWxlLTU1LVx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG4tLVxubW0vc2htZW0uYz01MjA9c3RhdGljIGludCBzaG1lbV9jb25maXJtX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy01NjktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYzo1NzA6LyogaWZkZWYgaGVyZSB0byBhdm9pZCBibG9hdGluZyBzaG1lbS5vIHdoZW4gbm90IG5lY2Vzc2FyeSAqL1xubW0vc2htZW0uYy01NzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDAyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXM6IE1lbW9yeSBGaWxlc3lzdGVtcyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgbWVtb3J5LWJhc2VkIGZpbGVzeXN0ZW1zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBjdXJyZW50bHkgZW5hYmxlZCBpbiB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHJlZ2FyZGluZyBzaGFyZWQgbWVtb3J5LCB0ZW1wb3JhcnkgZmlsZXN5c3RlbXMsIGFuZCB0cmFuc3BhcmVudCBodWdlcGFnZXMuIEl0JiMzOTtzIGEgY29tbW9uIGRlcGVuZGVuY3kgYW5hbHlzaXMsIG5vdGhpbmcgbmV3LgoKTXkgZmlyc3QgY2hlY2sgd2lsbCBiZSBmb3IgYENPTkZJR19TSE1FTWAsIGBDT05GSUdfVE1QRlNgLCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25vdyB0aGVzZSBhcmUgaW1wb3J0YW50LiBTcGVjaWZpY2FsbHkgZm9yIGBDT05GSUdfU0hNRU1gLCBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBkaWdnaW5nIGludG8gYG1tL3NobWVtLmNgIG9yIG1heWJlIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGVzZSBmaWxlcyB0ZW5kIHRvIGJlIG15IGdvLXRvJiMzOTtzIHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCBmb3IgdGhhdCBzcGVjaWZpYyBzdWJzeXN0ZW0gYW5kIGhvdyBpdCBob29rcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgc2hhcmVkIG1lbW9yeSBpcywgd2VsbCwgc2hhcmVkIG1lbW9yeSBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU0hNRU18Q09ORklHX1RNUEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTE0Nj1vYmotJChDT05GSUdfRVhFQ01FTSkgJiM0Mzs9IGV4ZWNtZW0ub1xubW0vTWFrZWZpbGU6MTQ3Om9iai0kKENPTkZJR19UTVBGU19RVU9UQSkgJiM0Mzs9IHNobWVtX3F1b3RhLm9cbm1tL01ha2VmaWxlLTE0OC1vYmotJChDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUKSAmIzQzOz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXG4tLVxubW0vaHVnZV9tZW1vcnkuYz02MTk9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmh1Z2VwYWdlX2F0dHJbXSA9IHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTYyMy1cdFx1MDAyNmhwYWdlX3BtZF9zaXplX2F0dHIuYXR0cixcbm1tL2h1Z2VfbWVtb3J5LmM6NjI0OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtNjI1LVx0XHUwMDI2c2htZW1fZW5hYmxlZF9hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz03MjA9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfY3RybF9hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo3MjE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy03MjItXHRcdTAwMjZ0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NzgwPURFRklORV9NVEhQX1NUQVRfQVRUUihzd3BvdXRfZmFsbGJhY2ssIE1USFBfU1RBVF9TV1BPVVRfRkFMTEJBQ0spO1xubW0vaHVnZV9tZW1vcnkuYzo3ODE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy03ODItREVGSU5FX01USFBfU1RBVF9BVFRSKHNobWVtX2FsbG9jLCBNVEhQX1NUQVRfU0hNRU1fQUxMT0MpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Nzk2PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbm9uX3N0YXRzX2F0dHJzW10gPSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy03OTktXHRcdTAwMjZhbm9uX2ZhdWx0X2ZhbGxiYWNrX2NoYXJnZV9hdHRyLmF0dHIsXG5tbS9odWdlX21lbW9yeS5jOjgwMDojaWZuZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MDEtXHRcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgyMj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZmlsZV9zdGF0c19hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo4MjM6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MjQtXHRcdTAwMjZzaG1lbV9hbGxvY19hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz04MzY9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFueV9zdGF0c19hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo4Mzc6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MzgtXHRcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcbi0tXG5tbS9tZW1wb2xpY3kuYz0zNDAzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9saWN5X21vZGVzW10gPVxuLS1cbm1tL21lbXBvbGljeS5jLTM0MTMtXG5tbS9tZW1wb2xpY3kuYzozNDE0OiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL21lbXBvbGljeS5jLTM0MTUtLyoqXG4tLVxubW0vbWVtcG9saWN5LmM9MzQyNT1pbnQgbXBvbF9wYXJzZV9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbClcbi0tXG5tbS9tZW1wb2xpY3kuYy0zNTQ3LX1cbm1tL21lbXBvbGljeS5jOjM1NDg6I2VuZGlmIC8qIENPTkZJR19UTVBGUyAqL1xubW0vbWVtcG9saWN5LmMtMzU0OS1cbi0tXG5tbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00Ny1cbm1tL3NobWVtLmM6NDg6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy00OS0vKlxuLS1cbm1tL3NobWVtLmM9MTQyPXN0YXRpYyBib29sIHNobWVtX29yZGVyc19jb25maWd1cmVkIF9faW5pdGRhdGE7XG4tLVxubW0vc2htZW0uYy0xNDQtXG5tbS9zaG1lbS5jOjE0NTojaWZkZWYgQ09ORklHX1RNUEZTXG5tbS9zaG1lbS5jLTE0Ni1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9ibG9ja3Modm9pZClcbi0tXG5tbS9zaG1lbS5jPTI5ND1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNobWVtX3N3YXBsaXN0X2xvY2spO1xubW0vc2htZW0uYy0yOTUtXG5tbS9zaG1lbS5jOjI5NjojaWZkZWYgQ09ORklHX1RNUEZTX1FVT1RBXG5tbS9zaG1lbS5jLTI5Ny1cbi0tXG5tbS9zaG1lbS5jPTMzMT1zdGF0aWMgc3RydWN0IGRxdW90IF9fcmN1ICoqc2htZW1fZ2V0X2RxdW90cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL3NobWVtLmMtMzM0LX1cbm1tL3NobWVtLmM6MzM1OiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cbm1tL3NobWVtLmMtMzM2LVxuLS1cbm1tL3NobWVtLmM9NjcwPXN0YXRpYyBpbnQgc2htZW1fcGFyc2VfaHVnZShjb25zdCBjaGFyICpzdHIpXG4tLVxubW0vc2htZW0uYy03MDMtXG5tbS9zaG1lbS5jOjcwNDojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIHx8IGRlZmluZWQoQ09ORklHX1RNUEZTKVxubW0vc2htZW0uYy03MDUtc3RhdGljIGNvbnN0IGNoYXIgKnNobWVtX2Zvcm1hdF9odWdlKGludCBodWdlKVxuLS1cbm1tL3NobWVtLmM9MTQwNz1zdGF0aWMgdm9pZCBzaG1lbV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL3NobWVtLmMtMTQ0NS1cdGNsZWFyX2lub2RlKGlub2RlKTtcbm1tL3NobWVtLmM6MTQ0NjojaWZkZWYgQ09ORklHX1RNUEZTX1FVT1RBXG5tbS9zaG1lbS5jLTE0NDctXHRkcXVvdF9mcmVlX2lub2RlKGlub2RlKTtcbi0tXG5tbS9zaG1lbS5jPTE3NTI9RVhQT1JUX1NZTUJPTF9HUEwoc2htZW1fd3JpdGVvdXQpO1xubW0vc2htZW0uYy0xNzUzLVxubW0vc2htZW0uYzoxNzU0OiNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVE1QRlMpXG5tbS9zaG1lbS5jLTE3NTUtc3RhdGljIHZvaWQgc2htZW1fc2hvd19tcG9sKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sKVxuLS1cbm1tL3NobWVtLmM9MTc2Nz1zdGF0aWMgc3RydWN0IG1lbXBvbGljeSAqc2htZW1fZ2V0X3NibXBvbChzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvKVxuLS1cbm1tL3NobWVtLmMtMTc3Ny19XG5tbS9zaG1lbS5jOjE3Nzg6I2Vsc2UgLyogIUNPTkZJR19OVU1BIHx8ICFDT05GSUdfVE1QRlMgKi9cbm1tL3NobWVtLmMtMTc3OS1zdGF0aWMgaW5saW5lIHZvaWQgc2htZW1fc2hvd19tcG9sKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sKVxuLS1cbm1tL3NobWVtLmM9MTc4Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1wb2xpY3kgKnNobWVtX2dldF9zYm1wb2woc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbylcbi0tXG5tbS9zaG1lbS5jLTE3ODUtfVxubW0vc2htZW0uYzoxNzg2OiNlbmRpZiAvKiBDT05GSUdfTlVNQSBcdTAwMjZcdTAwMjYgQ09ORklHX1RNUEZTICovXG5tbS9zaG1lbS5jLTE3ODctXG4tLVxubW0vc2htZW0uYz0yOTIxPXN0YXRpYyBpbnQgc2htZW1fZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbm1tL3NobWVtLmMtMjkyNi1cbm1tL3NobWVtLmM6MjkyNzojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG5tbS9zaG1lbS5jLTI5Mjgtc3RhdGljIGludCBzaG1lbV9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKiwgdm9pZCAqKTtcbi0tXG5tbS9zaG1lbS5jPTMwMTI9c3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxubW0vc2htZW0uYy0zMDkwLVxubW0vc2htZW0uYzozMDkxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbm1tL3NobWVtLmMtMzA5Mi1zdGF0aWMgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxubW0vc2htZW0uYz0zMTIwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTMxMjUtfVxubW0vc2htZW0uYzozMTI2OiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cbm1tL3NobWVtLmMtMzEyNy1cbi0tXG5tbS9zaG1lbS5jPTMyMTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyBzaG1lbV91ZmZkX29wcyA9IHtcbi0tXG5tbS9zaG1lbS5jLTMyMjMtXG5tbS9zaG1lbS5jOjMyMjQ6I2lmZGVmIENPTkZJR19UTVBGU1xubW0vc2htZW0uYy0zMjI1LXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4tLVxubW0vc2htZW0uYz00MDk4PXN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy00MTI5LVxubW0vc2htZW0uYzo0MTMwOiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbm1tL3NobWVtLmMtNDEzMS1cbi0tXG5tbS9zaG1lbS5jPTQzMTQ9c3RhdGljIHNzaXplX3Qgc2htZW1fbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9zaG1lbS5jLTQzMTktfVxubW0vc2htZW0uYzo0MzIwOiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfWEFUVFIgKi9cbm1tL3NobWVtLmMtNDMyMS1cbm1tL3NobWVtLmM9NDMyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc2hvcnRfc3ltbGlua19vcGVyYXRpb25zID0ge1xuLS1cbm1tL3NobWVtLmMtNDMyNS1cdC5nZXRfbGlua1x0PSBzaW1wbGVfZ2V0X2xpbmssXG5tbS9zaG1lbS5jOjQzMjY6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxubW0vc2htZW0uYy00MzI3LVx0Lmxpc3R4YXR0clx0PSBzaG1lbV9saXN0eGF0dHIsXG4tLVxubW0vc2htZW0uYz00MzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxubW0vc2htZW0uYy00MzM0LVx0LmdldF9saW5rXHQ9IHNobWVtX2dldF9saW5rLFxubW0vc2htZW0uYzo0MzM1OiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbm1tL3NobWVtLmMtNDMzNi1cdC5saXN0eGF0dHJcdD0gc2htZW1fbGlzdHhhdHRyLFxuLS1cbm1tL3NobWVtLmM9NDQ1Mj1jb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgc2htZW1fZnNfcGFyYW1ldGVyc1tdID0ge1xuLS1cbm1tL3NobWVtLmMtNDQ2My1cdGZzcGFyYW1fZmxhZyAgKFwmIzM0O25vc3dhcFwmIzM0OyxcdE9wdF9ub3N3YXApLFxubW0vc2htZW0uYzo0NDY0OiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbm1tL3NobWVtLmMtNDQ2NS1cdGZzcGFyYW1fZmxhZyAgKFwmIzM0O3F1b3RhXCYjMzQ7LFx0XHRPcHRfcXVvdGEpLFxuLS1cbm1tL3NobWVtLmM9NDczND1zdGF0aWMgaW50IHNobWVtX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5tbS9zaG1lbS5jLTQ3ODctXG5tbS9zaG1lbS5jOjQ3ODg6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxubW0vc2htZW0uYy00Nzg5LSNkZWZpbmUgQ0hBTkdFRF9MSU1JVChuYW1lKVx0XHRcdFx0XHRcdFxcXG4tLVxubW0vc2htZW0uYy00Nzk3LVx0fVxubW0vc2htZW0uYzo0Nzk4OiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cbm1tL3NobWVtLmMtNDc5OS1cbi0tXG5tbS9zaG1lbS5jPTQ4MzE9c3RhdGljIGludCBzaG1lbV9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxubW0vc2htZW0uYy00ODY4LVx0ICovXG5tbS9zaG1lbS5jOjQ4Njk6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVE1QRlNfSU5PREU2NCkgfHwgc2JpbmZvLVx1MDAzZWZ1bGxfaW51bXMpXG5tbS9zaG1lbS5jLTQ4NzAtXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDssaW5vZGUlZFwmIzM0OywgKHNiaW5mby1cdTAwM2VmdWxsX2ludW1zID8gNjQgOiAzMikpO1xuLS1cbm1tL3NobWVtLmMtNDg4MC1cdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0Oyxub3N3YXBcJiMzNDspO1xubW0vc2htZW0uYzo0ODgxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbm1tL3NobWVtLmMtNDg4Mi1cdGlmIChzYl9oYXNfcXVvdGFfYWN0aXZlKHJvb3QtXHUwMDNlZF9zYiwgVVNSUVVPVEEpKVxuLS1cbm1tL3NobWVtLmMtNDkwMS1cbm1tL3NobWVtLmM6NDkwMjojZW5kaWYgLyogQ09ORklHX1RNUEZTICovXG5tbS9zaG1lbS5jLTQ5MDMtXG5tbS9zaG1lbS5jPTQ5MDQ9c3RhdGljIHZvaWQgc2htZW1fcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxubW0vc2htZW0uYy00OTEyLVxubW0vc2htZW0uYzo0OTEzOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcbm1tL3NobWVtLmMtNDkxNC1cdHNobWVtX2Rpc2FibGVfcXVvdGFzKHNiKTtcbi0tXG5tbS9zaG1lbS5jLTQ5MTgtXHRtcG9sX3B1dChzYmluZm8tXHUwMDNlbXBvbCk7XG5tbS9zaG1lbS5jOjQ5MTk6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxubW0vc2htZW0uYy00OTIwLVx0c2ltcGxlX3hhdHRyX2NhY2hlX2NsZWFudXAoXHUwMDI2c2JpbmZvLVx1MDAzZXhhX2NhY2hlKTtcbi0tXG5tbS9zaG1lbS5jLTQ5MjUtXG5tbS9zaG1lbS5jOjQ5MjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19UTVBGUylcbm1tL3NobWVtLmMtNDkyNy1zdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHNobWVtX2NpX2RlbnRyeV9vcHMgPSB7XG4tLVxubW0vc2htZW0uYz00OTMzPXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubW0vc2htZW0uYy00OTQ3LVxubW0vc2htZW0uYzo0OTQ4OiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL3NobWVtLmMtNDk0OS1cdC8qXG4tLVxubW0vc2htZW0uYy00OTU5LVx0XHRpZiAoIShjdHgtXHUwMDNlc2VlbiBcdTAwMjYgU0hNRU1fU0VFTl9JTlVNUykpXG5tbS9zaG1lbS5jOjQ5NjA6XHRcdFx0Y3R4LVx1MDAzZWZ1bGxfaW51bXMgPSBJU19FTkFCTEVEKENPTkZJR19UTVBGU19JTk9ERTY0KTtcbm1tL3NobWVtLmMtNDk2MS1cdFx0c2JpbmZvLVx1MDAzZW5vc3dhcCA9IGN0eC1cdTAwM2Vub3N3YXA7XG4tLVxubW0vc2htZW0uYy00OTg0LVx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9OT1VTRVI7XG5tbS9zaG1lbS5jOjQ5ODU6I2VuZGlmIC8qIENPTkZJR19UTVBGUyAqL1xubW0vc2htZW0uYy00OTg2LVx0c2ItXHUwMDNlc19kX2ZsYWdzIHw9IERDQUNIRV9ET05UQ0FDSEU7XG4tLVxubW0vc2htZW0uYy01MDE5LVx0c2ItXHUwMDNlc190aW1lX2dyYW4gPSAxO1xubW0vc2htZW0uYzo1MDIwOiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbm1tL3NobWVtLmMtNTAyMS1cdHNiLVx1MDAzZXNfeGF0dHIgPSBzaG1lbV94YXR0cl9oYW5kbGVycztcbm1tL3NobWVtLmMtNTAyMi0jZW5kaWZcbm1tL3NobWVtLmM6NTAyMzojaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTFxubW0vc2htZW0uYy01MDI0LVx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9QT1NJWEFDTDtcbi0tXG5tbS9zaG1lbS5jLTUwMjktXG5tbS9zaG1lbS5jOjUwMzA6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxubW0vc2htZW0uYy01MDMxLVx0aWYgKGN0eC1cdTAwM2VzZWVuIFx1MDAyNiBTSE1FTV9TRUVOX1FVT1RBKSB7XG4tLVxubW0vc2htZW0uYy01MDQyLVx0fVxubW0vc2htZW0uYzo1MDQzOiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cbm1tL3NobWVtLmMtNTA0NC1cbi0tXG5tbS9zaG1lbS5jPTUwNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgc2htZW1fZnNfY29udGV4dF9vcHMgPSB7XG4tLVxubW0vc2htZW0uYy01MDgxLVx0LmdldF90cmVlXHRcdD0gc2htZW1fZ2V0X3RyZWUsXG5tbS9zaG1lbS5jOjUwODI6I2lmZGVmIENPTkZJR19UTVBGU1xubW0vc2htZW0uYy01MDgzLVx0LnBhcnNlX21vbm9saXRoaWNcdD0gc2htZW1fcGFyc2VfbW9ub2xpdGhpYyxcbi0tXG5tbS9zaG1lbS5jPTUxNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHtcbm1tL3NobWVtLmMtNTE0MS1cdC5kaXJ0eV9mb2xpb1x0PSBub29wX2RpcnR5X2ZvbGlvLFxubW0vc2htZW0uYzo1MTQyOiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL3NobWVtLmMtNTE0My1cdC53cml0ZV9iZWdpblx0PSBzaG1lbV93cml0ZV9iZWdpbixcbi0tXG5tbS9zaG1lbS5jPTUxNTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htZW1fZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbm1tL3NobWVtLmMtNTE1NS1cdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHNobWVtX2dldF91bm1hcHBlZF9hcmVhLFxubW0vc2htZW0uYzo1MTU2OiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL3NobWVtLmMtNTE1Ny1cdC5sbHNlZWtcdFx0PSBzaG1lbV9maWxlX2xsc2Vlayxcbi0tXG5tbS9zaG1lbS5jPTUxNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxubW0vc2htZW0uYy01MTcwLVx0LnNldGF0dHJcdD0gc2htZW1fc2V0YXR0cixcbm1tL3NobWVtLmM6NTE3MTojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG5tbS9zaG1lbS5jLTUxNzItXHQubGlzdHhhdHRyXHQ9IHNobWVtX2xpc3R4YXR0cixcbi0tXG5tbS9zaG1lbS5jPTUxNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xubW0vc2htZW0uYzo1MTgwOiNpZmRlZiBDT05GSUdfVE1QRlNcbm1tL3NobWVtLmMtNTE4MS1cdC5nZXRhdHRyXHQ9IHNobWVtX2dldGF0dHIsXG4tLVxubW0vc2htZW0uYy01MTkzLSNlbmRpZlxubW0vc2htZW0uYzo1MTk0OiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbm1tL3NobWVtLmMtNTE5NS1cdC5saXN0eGF0dHJcdD0gc2htZW1fbGlzdHhhdHRyLFxuLS1cbm1tL3NobWVtLmMtNTE5OC0jZW5kaWZcbm1tL3NobWVtLmM6NTE5OTojaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTFxubW0vc2htZW0uYy01MjAwLVx0LnNldGF0dHJcdD0gc2htZW1fc2V0YXR0cixcbi0tXG5tbS9zaG1lbS5jPTUyMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbm1tL3NobWVtLmMtNTIwNi1cdC5nZXRhdHRyXHQ9IHNobWVtX2dldGF0dHIsXG5tbS9zaG1lbS5jOjUyMDc6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxubW0vc2htZW0uYy01MjA4LVx0Lmxpc3R4YXR0clx0PSBzaG1lbV9saXN0eGF0dHIsXG5tbS9zaG1lbS5jLTUyMDktI2VuZGlmXG5tbS9zaG1lbS5jOjUyMTA6I2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0xcbm1tL3NobWVtLmMtNTIxMS1cdC5zZXRhdHRyXHQ9IHNobWVtX3NldGF0dHIsXG4tLVxubW0vc2htZW0uYz01MjE2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHMgPSB7XG4tLVxubW0vc2htZW0uYy01MjE5LVx0LmRlc3Ryb3lfaW5vZGVcdD0gc2htZW1fZGVzdHJveV9pbm9kZSxcbm1tL3NobWVtLmM6NTIyMDojaWZkZWYgQ09ORklHX1RNUEZTXG5tbS9zaG1lbS5jLTUyMjEtXHQuc3RhdGZzXHRcdD0gc2htZW1fc3RhdGZzLFxuLS1cbm1tL3NobWVtLmMtNTIyMy0jZW5kaWZcbm1tL3NobWVtLmM6NTIyNDojaWZkZWYgQ09ORklHX1RNUEZTX1FVT1RBXG5tbS9zaG1lbS5jLTUyMjUtXHQuZ2V0X2RxdW90c1x0PSBzaG1lbV9nZXRfZHF1b3RzLFxuLS1cbm1tL3NobWVtLmM9NTI2MD1pbnQgc2htZW1faW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5tbS9zaG1lbS5jLTUyNzctXHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZzaG1lbV9mc19jb250ZXh0X29wcztcbm1tL3NobWVtLmM6NTI3ODojaWZkZWYgQ09ORklHX1RNUEZTXG5tbS9zaG1lbS5jLTUyNzktXHRmYy1cdTAwM2VzYl9mbGFncyB8PSBTQl9JX1ZFUlNJT047XG4tLVxubW0vc2htZW0uYz01Mjg0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBzaG1lbV9mc190eXBlID0ge1xuLS1cbm1tL3NobWVtLmMtNTI4Ny1cdC5pbml0X2ZzX2NvbnRleHQgPSBzaG1lbV9pbml0X2ZzX2NvbnRleHQsXG5tbS9zaG1lbS5jOjUyODg6I2lmZGVmIENPTkZJR19UTVBGU1xubW0vc2htZW0uYy01Mjg5LVx0LnBhcmFtZXRlcnNcdD0gc2htZW1fZnNfcGFyYW1ldGVycyxcbi0tXG5tbS9zaG1lbS5jLTUyOTQtXG5tbS9zaG1lbS5jOjUyOTU6I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfVE1QRlMpXG5tbS9zaG1lbS5jLTUyOTYtXG4tLVxubW0vc2htZW0uYz01MzM5PXN0YXRpYyBpbnQgX19pbml0IHRtcGZzX3N5c2ZzX2luaXQodm9pZClcbi0tXG5tbS9zaG1lbS5jLTUzNTItfVxubW0vc2htZW0uYzo1MzUzOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR19UTVBGUyAqL1xubW0vc2htZW0uYy01MzU0LVxubW0vc2htZW0uYz01MzU1PXZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZClcbi0tXG5tbS9zaG1lbS5jLTUzNjAtXG5tbS9zaG1lbS5jOjUzNjE6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxubW0vc2htZW0uYy01MzYyLVx0cmVnaXN0ZXJfcXVvdGFfZm9ybWF0KFx1MDAyNnNobWVtX3F1b3RhX2Zvcm1hdCk7XG4tLVxubW0vc2htZW0uYy01Mzc3LVxubW0vc2htZW0uYzo1Mzc4OiNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RNUEZTKVxubW0vc2htZW0uYy01Mzc5LVx0ZXJyb3IgPSB0bXBmc19zeXNmc19pbml0KCk7XG4tLVxubW0vc2htZW0uYy01NDAzLW91dDI6XG5tbS9zaG1lbS5jOjU0MDQ6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxubW0vc2htZW0uYy01NDA1LVx0dW5yZWdpc3Rlcl9xdW90YV9mb3JtYXQoXHUwMDI2c2htZW1fcXVvdGFfZm9ybWF0KTtcbi0tXG5tbS9zaG1lbS5jPTU3MDE9X19zZXR1cChcJiMzNDt0aHBfc2htZW09XCYjMzQ7LCBzZXR1cF90aHBfc2htZW0pO1xuLS1cbm1tL3NobWVtLmMtNTcwNC1cbm1tL3NobWVtLmM6NTcwNTojZWxzZSAvKiAhQ09ORklHX1NITUVNICovXG5tbS9zaG1lbS5jLTU3MDYtXG4tLVxubW0vc2htZW0uYz01Nzc0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxubW0vc2htZW0uYy01NzgxLVxubW0vc2htZW0uYzo1NzgyOiNlbmRpZiAvKiBDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTc4My1cbi0tXG5tbS9zaG1lbS5jPTU5MzY9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9zaG1lbS5jLTU5Mzgte1xubW0vc2htZW0uYzo1OTM5OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL3NobWVtLmMtNTk0MC1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzM5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc2htZW1fdW5kb19yYW5nZWAgRnVuY3Rpb24qKgoKT2theSwgc28gYHNobWVtX3VuZG9fcmFuZ2VgIGluIGBtbS9zaG1lbS5jYCBpcyBjbGVhcmx5IGNvbmRpdGlvbmFsLCBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfU0hNRU1gIGF0IGxpbmUgNDguIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBuZWVkIHRvIGtlZXAgYENPTkZJR19TSE1FTWAgaW4gbWluZC4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBUaGlua2luZyBhYm91dCBpdCwgYENPTkZJR19TSE1FTWAgd2lsbCBiZSB0aWVkIHRvIG90aGVyIGNvbmZpZ3MsIHByb2JhYmx5IGBDT05GSUdfVE1QRlNgLCBtYXliZSBldmVuIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNoYXJlZCBtZW1vcnkuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcyB0byBjb25maXJtIHRoZXNlIGxpbmthZ2VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgYGluaXQvS2NvbmZpZ2Agb3IgYSBzaW1pbGFyIGZpbGUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg5Nj1jb25maWcgRVZFTlRGRFxuLS1cbmluaXQvS2NvbmZpZy0xOTA0LVxuaW5pdC9LY29uZmlnOjE5MDU6Y29uZmlnIFNITUVNXG5pbml0L0tjb25maWctMTkwNi1cdGJvb2wgXCYjMzQ7VXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG1tL0tjb25maWdgLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gemVybyBpbiBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoYXQgZmlsZSB0byBjb25maXJtIGl0cyBwcmVzZW5jZSwgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgb3B0aW9uIGlzIGNvbnRyb2xsZWQgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgaXQgbWlnaHQgcmVsYXRlIHRvLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbmluZyBtYWNybywgaXRzIHBvc3NpYmxlIHN0YXRlcyAoYGJvb2xgLCBgdHJpc3RhdGVgKSwgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaW1wbGljYXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IG9mIHRoZSBrZXJuZWwuIFVuZGVyc3RhbmRpbmcgdGhpcyBLY29uZmlnIG9wdGlvbiBpcyBmdW5kYW1lbnRhbCB0byBhbmFseXppbmcgdGhlIHN5c3RlbSYjMzk7cyBUSFAgYmVoYXZpb3IhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgzNT1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzNy1cbm1tL0tjb25maWc6ODM4Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM5LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTY9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjEtXG5tbS9LY29uZmlnOjg2MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODYzLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODY4LVxubW0vS2NvbmZpZzo4Njk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzAtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODc3LVxubW0vS2NvbmZpZzo4Nzg6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODc5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODU9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTQtXG5tbS9LY29uZmlnOjg5NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTA0LVxubW0vS2NvbmZpZzo5MDU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTA2LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTQtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyMC1cbm1tL0tjb25maWc6OTIxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkyMi1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzMD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzOS1cbm1tL0tjb25maWc6OTQwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQxLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDgtXG5tbS9LY29uZmlnOjk0OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1OC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTY0LVxubW0vS2NvbmZpZzo5NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTY2LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA4MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBTeW1ib2wgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayBgRm9jdXNTeW1ib2xzYCDigJMgd2hhdCBmdW5jdGlvbnMgYXJlIGZsYWdnZWQgYXMgbW9kaWZpZWQ/IEFoLCBoZXJlIHdlIGdvOiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiBpZiBhbnkgb2YgdGhlc2UgYXJlIHN0YXRpYyBvciB3aWRlbHkgdXNlZC4gVGhhdCYjMzk7bGwgaW5mbHVlbmNlIGhvdyBtdWNoIHNjcnV0aW55IHRoZXkgbmVlZC4KCkxldCYjMzk7cyBicmVhayB0aGVtIGRvd246IGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBpcyBkZWZpbmVkIGluIGBtbS90cnVuY2F0ZS5jYC4gRnJvbSBtZW1vcnksIGl0JiMzOTtzIG5vdCBzdGF0aWMgYW5kIGlzIGV4cG9ydGVkIGludGVybmFsbHksIGF0IGxlYXN0IGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHZpYSBgbW0vaW50ZXJuYWwuaGAuIEl0IHNlZW1zIHNwZWNpZmljIHRvIHBhcnRpYWwgZm9saW8gdHJ1bmNhdGlvbiwgZGVmaW5pdGVseSBub3Qgc29tZXRoaW5nIHRoYXQmIzM5O3MgdWJpcXVpdG91cyBhY3Jvc3MgdGhlIGtlcm5lbC4KCk5leHQsIGBzaG1lbV91bmRvX3JhbmdlYC4gVGhpcyBpcyBzdGF0aWMgYW5kIHdpdGhpbiBgbW0vc2htZW0uY2AuIEl0JiMzOTtzIGNhbGxlZCBieSBhIGZldyBvdGhlciBzaG1lbS1zcGVjaWZpYyBmdW5jdGlvbnM6IGBzaG1lbV90cnVuY2F0ZV9yYW5nZWAsIGBzaG1lbV9mYWxsb2NhdGVgLCBgc2htZW1fZXZpY3RfaW5vZGVgLCBhbmQgYHNobWVtX2ZyZWVfaW5fbWVtb3J5X3BhZ2VzYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGJlaW5nIHN0YXRpYyBtaWdodCBtZWFuIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkIGluIHRoZSB2bWxpbnV4IHN5bWJvbCB0YWJsZSwgb3IgYXQgbGVhc3Qgbm90IGluIGEgd2F5IHRoYXQgaXMgZWFzaWx5IHZpc2libGUuIFRoYXQgbWFrZXMgbWUgdGhpbmsgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBpdHMgY2FsbGVycy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgd2hldGhlciBgc2htZW1fdHJ1bmNhdGVfcmFuZ2VgIG9yIGBzaG1lbV9mYWxsb2NhdGVgIGFyZSBhbHNvIHRhcmdldHMuCgpGaW5hbGx5LCBgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VgIHdoaWNoIGlzIGRlZmluZWQgaW4gYG1tL3RydW5jYXRlLmNgLiBUaGlzIGlzIG5vbi1zdGF0aWMsIGFuZCBzZWVtcyB0byBiZSBpbnZvbHZlZCBpbiBob2xlIHB1bmNoaW5nIGFuZCB0cnVuY2F0aW9uIG9wZXJhdGlvbnMsIHNvIG5vdCB1YmlxdWl0b3VzIGJ1dCBub3QgYXMgdGFyZ2V0ZWQgYXMgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGlzIGBzaG1lbV91bmRvX3JhbmdlYCBidXNpbmVzcyBtb3JlIHByZWNpc2VseS4gSXQmIzM5O3Mgc3RhdGljLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgYW5kIHNlZSBpZiBpdCYjMzk7cyB2aXNpYmxlLiBJZiBub3QsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBpdHMgY2FsbGVycywgZXNwZWNpYWxseSBgc2htZW1fdHJ1bmNhdGVfcmFuZ2VgIGFuZCBgc2htZW1fZmFsbG9jYXRlYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHNobWVtX3VuZG9fcmFuZ2VgIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3NobWVtLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1fdW5kb19yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTEwODc9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleClcbi0tXG5tbS9zaG1lbS5jLTExMTgtICovXG5tbS9zaG1lbS5jOjExMTk6c3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcbm1tL3NobWVtLmMtMTEyMC1cdFx0XHRcdFx0XHRcdFx0IGJvb2wgdW5mYWxsb2MpXG4tLVxubW0vc2htZW0uYz0xMjg0PXZvaWQgc2htZW1fdHJ1bmNhdGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQpXG5tbS9zaG1lbS5jLTEyODUte1xubW0vc2htZW0uYzoxMjg2Olx0c2htZW1fdW5kb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5kLCBmYWxzZSk7XG5tbS9zaG1lbS5jLTEyODctXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XG4tLVxubW0vc2htZW0uYz0yNjMxPXN0YXRpYyBpbnQgc3luY2hyb25vdXNfd2FrZV9mdW5jdGlvbih3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsXG4tLVxubW0vc2htZW0uYy0yNjQzLSAqIGZhdWx0aW5nIHBhZ2VzIGludG8gdGhlIGhvbGUgd2hpbGUgaXQmIzM5O3MgYmVpbmcgcHVuY2hlZC4gIEFsdGhvdWdoXG5tbS9zaG1lbS5jOjI2NDQ6ICogc2htZW1fdW5kb19yYW5nZSgpIGRvZXMgcmVtb3ZlIHRoZSBhZGRpdGlvbnMsIGl0IG1heSBiZSB1bmFibGUgdG9cbm1tL3NobWVtLmMtMjY0NS0gKiBrZWVwIHVwLCBhcyBlYWNoIG5ldyBwYWdlIG5lZWRzIGl0cyBvd24gdW5tYXBfbWFwcGluZ19yYW5nZSgpIGNhbGwsXG4tLVxubW0vc2htZW0uYz0zNjEwPXN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxubW0vc2htZW0uYy0zNzIwLVx0XHRcdGlmIChpbmRleCBcdTAwM2Ugc3RhcnQpIHtcbm1tL3NobWVtLmM6MzcyMTpcdFx0XHRcdHNobWVtX3VuZG9fcmFuZ2UoaW5vZGUsXG5tbS9zaG1lbS5jLTM3MjItXHRcdFx0XHQgICAgKGxvZmZfdClzdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCBDYWxsZXJzKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCBpcyBiZWluZyB1c2VkLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgaW50byBgbW0vdHJ1bmNhdGUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGludm9raW5nIHRoaXMgZnVuY3Rpb24uIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyB3aWxsIGludm9sdmUgdHJhY2luZyBleGVjdXRpb24gcGF0aHMsIHNpbmNlIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2Ygd2hlcmUgdGhlIHRydW5jYXRpb24gaXMgdGFraW5nIHBsYWNlIGlzIGtleS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBqdXN0IGxvb2tpbmcgZm9yIGRpcmVjdCBjYWxscyB3aXRoaW4gdGhlIGNvZGUsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYXNzdW1lIHRoYXQmIzM5O3MgdGhlIHdob2xlIHN0b3J5LiBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciBtYWNyb3MgdG9vLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVucmF2ZWxpbmcgd2hhdGV2ZXIgaXNzdWUgb3Igb3B0aW1pemF0aW9uIEkmIzM5O20gbG9va2luZyBhdCwgYnV0IGl0JiMzOTtzIGEgY3JpdGljYWwgb25lLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYW5kc2NhcGUgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgc29sdXRpb25zIG9yIGltcHJvdmVtZW50cy4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCByZWFsbHkgZ3VpZGUgdGhlIHJlc3Qgb2YgbXkgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9sb2NraW5nLnJzdD01Mjc9cGFnZSBjYWNoZSBjb250ZW50cy4gVXN1YWxseSB0aGUgZmlsZXN5c3RlbSBuZWVkcyB0byBjYWxsXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2xvY2tpbmcucnN0OjUyODp0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSgpIHRvIGludmFsaWRhdGUgcmVsZXZhbnQgcmFuZ2Ugb2YgdGhlIHBhZ2UgY2FjaGUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2xvY2tpbmcucnN0LTUyOS1Ib3dldmVyIHRoZSBmaWxlc3lzdGVtIHVzdWFsbHkgYWxzbyBuZWVkcyB0byB1cGRhdGUgaXRzIGludGVybmFsIChhbmQgb24gZGlzaylcbi0tXG5ibG9jay9iZGV2LmM9MTEwPWludCB0cnVuY2F0ZV9iZGV2X3JhbmdlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5ibG9jay9iZGV2LmMtMTIzLVxuYmxvY2svYmRldi5jOjEyNDpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGJkZXYtXHUwMDNlYmRfbWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcbmJsb2NrL2JkZXYuYy0xMjUtXHRpZiAoIShtb2RlIFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcbi0tXG5mcy9idHJmcy9zZW5kLmM9NTYwMD1zdGF0aWMgaW50IHNlbmRfZXh0ZW50X2RhdGEoc3RydWN0IHNlbmRfY3R4ICpzY3R4LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCxcbi0tXG5mcy9idHJmcy9zZW5kLmMtNTcwNS1cdFx0ICovXG5mcy9idHJmcy9zZW5kLmM6NTcwNjpcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXHUwMDI2c2N0eC1cdTAwM2VjdXJfaW5vZGUtXHUwMDNlaV9kYXRhLFxuZnMvYnRyZnMvc2VuZC5jLTU3MDctXHRcdFx0XHRcdCAgIHNjdHgtXHUwMDNlcGFnZV9jYWNoZV9jbGVhcl9zdGFydCxcbi0tXG5mcy9idHJmcy9zZW5kLmM9NjcwOD1zdGF0aWMgdm9pZCBjbG9zZV9jdXJyZW50X2lub2RlKHN0cnVjdCBzZW5kX2N0eCAqc2N0eClcbi0tXG5mcy9idHJmcy9zZW5kLmMtNjcyMy1cdGlmIChzY3R4LVx1MDAzZWNsZWFuX3BhZ2VfY2FjaGUgXHUwMDI2XHUwMDI2IHNjdHgtXHUwMDNlcGFnZV9jYWNoZV9jbGVhcl9zdGFydCBcdTAwM2MgaV9zaXplKVxuZnMvYnRyZnMvc2VuZC5jOjY3MjQ6XHRcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKFx1MDAyNnNjdHgtXHUwMDNlY3VyX2lub2RlLVx1MDAzZWlfZGF0YSxcbmZzL2J0cmZzL3NlbmQuYy02NzI1LVx0XHRcdFx0XHQgICBzY3R4LVx1MDAzZXBhZ2VfY2FjaGVfY2xlYXJfc3RhcnQsXG4tLVxuZnMvY2VwaC9maWxlLmM9MTUxOT1jZXBoX2RpcmVjdF9yZWFkX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2NlcGgvZmlsZS5jLTE2MzgtXHRcdFx0ICovXG5mcy9jZXBoL2ZpbGUuYzoxNjM5Olx0XHRcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgcG9zLFxuZnMvY2VwaC9maWxlLmMtMTY0MC1cdFx0XHRcdFx0XHQgICBQQUdFX0FMSUdOKHBvcyAmIzQzOyBsZW4pIC0gMSk7XG4tLVxuZnMvZjJmcy9mMmZzLmg9NTEyNz1zdGF0aWMgaW5saW5lIHZvaWQgZjJmc190cnVuY2F0ZV9tZXRhX2lub2RlX3BhZ2VzKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSxcbi0tXG5mcy9mMmZzL2YyZnMuaC01MTQ3LVxuZnMvZjJmcy9mMmZzLmg6NTE0ODpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKE1FVEFfTUFQUElORyhzYmkpLFxuZnMvZjJmcy9mMmZzLmgtNTE0OS1cdFx0XHRGMkZTX0JMS19UT19CWVRFUygobG9mZl90KWJsa2FkZHIpLFxuLS1cbmZzL2YyZnMvZmlsZS5jPTM5PXN0YXRpYyB2b2lkIGYyZnNfemVyb19wb3N0X2VvZl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZjJmcy9maWxlLmMtNTItXHQvKiB6ZXJvIG9yIGRyb3AgcGFnZXMgb25seSBpbiByYW5nZSBvZiBbb2xkX3NpemUsIG5ld19zaXplXSAqL1xuZnMvZjJmcy9maWxlLmM6NTM6XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIG9sZF9zaXplLCBuZXdfc2l6ZSk7XG5mcy9mMmZzL2ZpbGUuYy01NC1cdGlmIChsb2NrKVxuLS1cbmZzL2YyZnMvZmlsZS5jPTkwNT1pbnQgZjJmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTkzMi1cdFx0XHQgKi9cbmZzL2YyZnMvZmlsZS5jOjkzMzpcdFx0XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsXG5mcy9mMmZzL2ZpbGUuYy05MzQtXHRcdFx0XHRcdEYyRlNfQkxLX1RPX0JZVEVTKDApLFxuLS1cbmZzL2YyZnMvZmlsZS5jPTQxOTE9c3RhdGljIGludCBmMmZzX3NlY190cmltX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL2YyZnMvZmlsZS5jLTQyNjMtXG5mcy9mMmZzL2ZpbGUuYzo0MjY0Olx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgcmFuZ2Uuc3RhcnQsXG5mcy9mMmZzL2ZpbGUuYy00MjY1LVx0XHRcdHRvX2VuZCA/IC0xIDogZW5kX2FkZHIgLSAxKTtcbi0tXG5mcy9mMmZzL3JlY292ZXJ5LmM9ODc1PWludCBmMmZzX3JlY292ZXJfZnN5bmNfZGF0YShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIGJvb2wgY2hlY2tfb25seSlcbi0tXG5mcy9mMmZzL3JlY292ZXJ5LmMtOTE4LVx0LyogdHJ1bmNhdGUgbWV0YSBwYWdlcyB0byBiZSB1c2VkIGJ5IHRoZSByZWNvdmVyeSAqL1xuZnMvZjJmcy9yZWNvdmVyeS5jOjkxOTpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKE1FVEFfTUFQUElORyhzYmkpLFxuZnMvZjJmcy9yZWNvdmVyeS5jLTkyMC1cdFx0XHQobG9mZl90KU1BSU5fQkxLQUREUihzYmkpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCAtMSk7XG4tLVxuZnMvZnVzZS9maWxlLmM9MjkyMD1zdGF0aWMgc3NpemVfdCBfX2Z1c2VfY29weV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuLS1cbmZzL2Z1c2UvZmlsZS5jLTMwMjktXG5mcy9mdXNlL2ZpbGUuYzozMDMwOlx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGVfb3V0LVx1MDAzZWlfbWFwcGluZyxcbmZzL2Z1c2UvZmlsZS5jLTMwMzEtXHRcdFx0XHQgICBBTElHTl9ET1dOKHBvc19vdXQsIFBBR0VfU0laRSksXG4tLVxuZnMvZ2ZzMi9nbG9wcy5jPTIyMT1zdGF0aWMgdm9pZCByZ3JwX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKVxuLS1cbmZzL2dmczIvZ2xvcHMuYy0yMzUtXHRnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFhdG9taWNfcmVhZChcdTAwMjZnbC1cdTAwM2VnbF9haWxfY291bnQpKTtcbmZzL2dmczIvZ2xvcHMuYzoyMzY6XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShtYXBwaW5nLCBzdGFydCwgZW5kKTtcbmZzL2dmczIvZ2xvcHMuYy0yMzctfVxuLS1cbmZzL2piZDIvam91cm5hbC5jPTE5NDM9c3RhdGljIGludCBfX2piZDJfam91cm5hbF9lcmFzZShqb3VybmFsX3QgKmpvdXJuYWwsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDAxLVxuZnMvamJkMi9qb3VybmFsLmM6MjAwMjpcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoam91cm5hbC1cdTAwM2VqX2Rldi1cdTAwM2ViZF9tYXBwaW5nLFxuZnMvamJkMi9qb3VybmFsLmMtMjAwMy1cdFx0XHRcdGJ5dGVfc3RhcnQsIGJ5dGVfc3RvcCAtIDEpO1xuLS1cbmZzL25mcy9uZnM0ZmlsZS5jPTI0Nz1zdGF0aWMgbG9mZl90IG5mczQyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX29mZixcbi0tXG5mcy9uZnMvbmZzNGZpbGUuYy0yOTMtXHRpZiAoIXJldClcbmZzL25mcy9uZnM0ZmlsZS5jOjI5NDpcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXHUwMDI2ZHN0X2lub2RlLVx1MDAzZWlfZGF0YSwgZHN0X29mZiwgZHN0X29mZiAmIzQzOyBjb3VudCAtIDEpO1xuZnMvbmZzL25mczRmaWxlLmMtMjk1LVxuLS1cbmZzL29jZnMyL2ZpbGUuYz0xNTMxPXN0YXRpYyB2b2lkIG9jZnMyX3RydW5jYXRlX2NsdXN0ZXJfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJ5dGVfc3RhcnQsXG4tLVxuZnMvb2NmczIvZmlsZS5jLTE1NDMtXHRcdHVubWFwX21hcHBpbmdfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCAtIHN0YXJ0LCAwKTtcbmZzL29jZnMyL2ZpbGUuYzoxNTQ0Olx0XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShtYXBwaW5nLCBzdGFydCwgZW5kIC0gMSk7XG5mcy9vY2ZzMi9maWxlLmMtMTU0NS1cdH1cbi0tXG5mcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4tLVxuZnMvb2NmczIvZmlsZS5jLTI3NDctXHQvKiBaYXAgYW55IHBhZ2UgY2FjaGUgZm9yIHRoZSBkZXN0aW5hdGlvbiBmaWxlJiMzOTtzIHJhbmdlLiAqL1xuZnMvb2NmczIvZmlsZS5jOjI3NDg6XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShcdTAwMjZpbm9kZV9vdXQtXHUwMDNlaV9kYXRhLFxuZnMvb2NmczIvZmlsZS5jLTI3NDktXHRcdFx0XHQgICByb3VuZF9kb3duKHBvc19vdXQsIFBBR0VfU0laRSksXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYz0xMzc1PXN0YXRpYyBsb2ZmX3QgY2lmc19yZW1hcF9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IG9mZixcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE0NjAtXHRjaWZzX2RiZyhGWUksIFwmIzM0O2Fib3V0IHRvIGRpc2NhcmQgcGFnZXMgJWxseC0lbGx4XFxuXCYjMzQ7LCBmc3RhcnQsIGZlbmQpO1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxNDYxOlx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXHUwMDI2dGFyZ2V0X2lub2RlLVx1MDAzZWlfZGF0YSwgZnN0YXJ0LCBmZW5kKTtcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTQ2Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NDI1OD12b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0KTtcbmluY2x1ZGUvbGludXgvbW0uaDo0MjU5OnZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBsc3RhcnQsXG5pbmNsdWRlL2xpbnV4L21tLmgtNDI2MC1cdFx0dW9mZl90IGxlbmQpO1xuLS1cbm1tL3NobWVtLmM9NTc1NT12b2lkIHNobWVtX3RydW5jYXRlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kKVxubW0vc2htZW0uYy01NzU2LXtcbm1tL3NobWVtLmM6NTc1NzpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcbm1tL3NobWVtLmMtNTc1OC19XG4tLVxubW0vdHJ1bmNhdGUuYz0zMzk9bG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3RydW5jYXRlLmMtMzU2LS8qKlxubW0vdHJ1bmNhdGUuYzozNTc6ICogdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UgLSB0cnVuY2F0ZSByYW5nZSBvZiBwYWdlcyBzcGVjaWZpZWQgYnkgc3RhcnQgXHUwMDI2IGVuZCBieXRlIG9mZnNldHNcbm1tL3RydW5jYXRlLmMtMzU4LSAqIEBtYXBwaW5nOiBtYXBwaW5nIHRvIHRydW5jYXRlXG4tLVxubW0vdHJ1bmNhdGUuYy0zNzYtICogTm90ZSB0aGF0IHNpbmNlIC1cdTAwM2VpbnZhbGlkYXRlX2ZvbGlvKCkgYWNjZXB0cyByYW5nZSB0byBpbnZhbGlkYXRlXG5tbS90cnVuY2F0ZS5jOjM3NzogKiB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSBpcyBhYmxlIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBsZW5kICYjNDM7IDEgaXMgbm90XG5tbS90cnVuY2F0ZS5jLTM3OC0gKiBwYWdlIGFsaWduZWQgcHJvcGVybHkuXG5tbS90cnVuY2F0ZS5jLTM3OS0gKi9cbm1tL3RydW5jYXRlLmM6MzgwOnZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5tbS90cnVuY2F0ZS5jLTM4MS1cdFx0XHRcdGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kKVxuLS1cbm1tL3RydW5jYXRlLmMtNDc4LX1cbm1tL3RydW5jYXRlLmM6NDc5OkVYUE9SVF9TWU1CT0wodHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UpO1xubW0vdHJ1bmNhdGUuYy00ODAtXG4tLVxubW0vdHJ1bmNhdGUuYz00OTQ9dm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGxzdGFydClcbm1tL3RydW5jYXRlLmMtNDk1LXtcbm1tL3RydW5jYXRlLmM6NDk2Olx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgbHN0YXJ0LCAobG9mZl90KS0xKTtcbm1tL3RydW5jYXRlLmMtNDk3LX1cbi0tXG5tbS90cnVuY2F0ZS5jPTkxNT12b2lkIHRydW5jYXRlX3BhZ2VjYWNoZV9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCBsb2ZmX3QgbGVuZClcbi0tXG5tbS90cnVuY2F0ZS5jLTkzNS1cdFx0XHRcdCAgICAxICYjNDM7IHVubWFwX2VuZCAtIHVubWFwX3N0YXJ0LCAwKTtcbm1tL3RydW5jYXRlLmM6OTM2Olx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcbm1tL3RydW5jYXRlLmMtOTM3LX1cbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTIzMD1zdGF0aWMgbG9uZyBrdm1fZ21lbV9wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0yNDItXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjI0MzpcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgb2Zmc2V0LCBvZmZzZXQgJiM0MzsgbGVuIC0gMSk7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTI0NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1ODEKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUcnVuY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgdGhhdCBhcmUga2V5OiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCwgYW5kIGBzaG1lbV90cnVuY2F0ZV9yYW5nZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0YXJnZXRpbmcsIGFuZCB0aGV5JiMzOTtyZSBhbGwgcmVsYXRlZCB0byB0cnVuY2F0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHBhcnRpYWwgZm9saW9zIGFuZCBzaGFyZWQgbWVtb3J5IChzaG1lbSkuCgpOZXh0LCBJJiMzOTttIG5vdGluZyB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgU0hNRU1gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGlzIGdpdmVzIG1lIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIEkga25vdyBgU0hNRU1gIGVuYWJsZXMgc2hhcmVkIG1lbW9yeSBmdW5jdGlvbmFsaXR5LCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCByZWxhdGVzIHRvIHVzaW5nIGxhcmdlIHBhZ2VzIChodWdlIHBhZ2VzKSBmb3IgaW1wcm92ZWQgbWVtb3J5IHBlcmZvcm1hbmNlLiBUaGUgY29kZSBpbmRpY2F0ZXMgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWN0aXZlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2Ugc2htZW0gc2V0dXBzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IG90aGVyIGNvbmZpZ3MgYXJlIHJlcXVpcmVkLCBidXQgZnJvbSBpbml0aWFsIHJldmlldywgYG1tL3RydW5jYXRlLmNgIGFuZCBgbW0vc2htZW0uY2AgYXJlIGJ1aWx0IHVuY29uZGl0aW9uYWxseS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGBzaG1lbV91bmRvX3JhbmdlYCByZXF1aXJlcyBgQ09ORklHX1NITUVNYCB3aXRoaW4gYHNobWVtLmNgLgoKVGhlICYjMzQ7UmVhc29uaW5nJiMzNDsgcHJvdmlkZWQgaXMgYWxzbyBjcnVjaWFsLiBJdCBoaWdobGlnaHRzIHRoYXQgdGhlIHBhdGNoIGlzIGFib3V0IGNvcnJlY3RseSBoYW5kbGluZyBib3VuZGFyaWVzIGFuZCBpc29sYXRpb24gd2hlbiAqc3BsaXR0aW5nKiBmb2xpb3MsIHdoaWNoIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgZHVyaW5nIGZpbGUgdHJ1bmNhdGlvbiBhbmQgaG9sZSBwdW5jaGluZy4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBhZ2UgY2FjaGUgYW5kIHNobWVtIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYXJ0aWFsIGZvbGlvcyBhbmQgcG90ZW50aWFsbHkgVEhQLgoKVGhpcyBpcyBhbGwgY29uc2lzdGVudCB3aXRoIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGJlaW5nIHNldCB0byBgdHJ1ZWAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBmdXp6aW5nIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgd2lsbCBiZSBiZW5lZmljaWFsLCBhcyB0aGV5IGFyZSBub3cgc2VlbiBhcyBiZWluZyBtb3JlIHN1c2NlcHRpYmxlIHRvIGVkZ2UtY2FzZSBidWdzIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxpbmcgY29tcGxpY2F0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuCgpBbHJpZ2h0LCBpdCYjMzk7cyB0aW1lIHRvIHZlcmlmeSBldmVyeXRoaW5nIGFzIHJlcXVlc3RlZCBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkgZmVlbCBjb25maWRlbnQgYWJvdXQgdGhlIGluZm9ybWF0aW9uIEkmIzM5O3ZlIGdhdGhlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0hNRU0mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3NobWVtX3VuZG9fcmFuZ2UmIzM0OywKICAgICYjMzQ7dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UmIzM0OywKICAgICYjMzQ7c2htZW1fdHJ1bmNhdGVfcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBjYWNoZSB0cnVuY2F0aW9uIGxvZ2ljIChpbiBtbS90cnVuY2F0ZS5jIGFuZCBtbS9zaG1lbS5jKSBmb3IgcGFydGlhbCBmb2xpb3MsIGFsdGVyaW5nIGJvdW5kYXJ5IHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgc2VtYW50aWNzIG9mIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8gdG8gcHJldmVudCBpbXByb3BlciBkaXNjYXJkIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGFjdGl2ZWx5IHJlYWNoYWJsZSBrZXJuZWwgY29kZSBleGVyY2lzZWQgYnkgZmlsZSB0cnVuY2F0aW9uLCBmdHJ1bmNhdGUsIGFuZCBmYWxsb2NhdGUgaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSE1FTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8mIzM0OywKICAgICYjMzQ7c2htZW1fdW5kb19yYW5nZSYjMzQ7LAogICAgJiMzNDt0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSYjMzQ7LAogICAgJiMzNDtzaG1lbV90cnVuY2F0ZV9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIGNhY2hlIHRydW5jYXRpb24gbG9naWMgKGluIG1tL3RydW5jYXRlLmMgYW5kIG1tL3NobWVtLmMpIGZvciBwYXJ0aWFsIGZvbGlvcywgYWx0ZXJpbmcgYm91bmRhcnkgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZSBzZW1hbnRpY3Mgb2YgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyB0byBwcmV2ZW50IGltcHJvcGVyIGRpc2NhcmQgZHVyaW5nIGZvbGlvIHNwbGl0dGluZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gYWN0aXZlbHkgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGV4ZXJjaXNlZCBieSBmaWxlIHRydW5jYXRpb24sIGZ0cnVuY2F0ZSwgYW5kIGZhbGxvY2F0ZSBob2xlLXB1bmNoaW5nIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBmb2xpbyB0cnVuY2F0aW9uIGFuZCBzcGxpdHRpbmcgbG9naWMgaW4gYG1tL3RydW5jYXRlLmNgLCBgbW0vc2htZW0uY2AsIGFuZCBgbW0vaW50ZXJuYWwuaGAgKGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBhbmQgaXRzIGNhbGxlcnMpLiBJdCByZWZhY3RvcnMgaG93IHRoZSBwYXJ0aWFsIGZvbGlvIHRydW5jYXRpb24gcmV0dXJuIHZhbHVlIGFuZCB0aGUgYGVuZGAgcGFnZSBvZmZzZXQgYXJlIGhhbmRsZWQgYW5kIHVwZGF0ZWQgd2hlbiBzcGxpdHRpbmcgb3Iga2VlcGluZyBzdHJhZGRsaW5nIGZvbGlvcy5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgaW50cm9kdWNlZCBvciByZWFkLCBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBhbHRlcmF0aW9ucyB0byBkYXRhIGJvdW5kcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgcGFnZSBjYWNoZSBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIGNhY2hlIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZmZlMTgyMGRmYjA3YjY5ZDE0YjM0MTVhNWU1MmRmNDZmNDU2ZGIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDY4ZGI1YWJkMGE0Y2UuLmRiN2Q5ZDlmYjVjOWUgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtNjI3LDggJiM0Mzs2MjcsOCBAQCB1bnNpZ25lZCBmaW5kX2xvY2tfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsCiB1bnNpZ25lZCBmaW5kX2dldF9lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCwKIAkJcGdvZmZfdCBlbmQsIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoLCBwZ29mZl90ICppbmRpY2VzKTsKIGludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LAotCQlsb2ZmX3QgZW5kKTsKJiM0Mztib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCwKJiM0MzsJCWxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpOwogbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIHVuc2lnbmVkIGxvbmcgbWFwcGluZ190cnlfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsIHVuc2lnbmVkIGxvbmcgKm5yX2ZhaWxlZCk7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4OWExNDk1ZTU1ZjdlLi5jYzE1NDhmZjUwOWFlIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTExNzUsMTEgJiM0MzsxMTc1LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCwKIAlpZiAoZm9saW8pIHsKIAkJc2FtZV9mb2xpbyA9IGxlbmQgJmx0OyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7CiAJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwotCQlpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHsKJiM0MzsJCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLAomIzQzOwkJCQkJCSAgc2FtZV9mb2xpbyA/ICZhbXA7ZW5kIDogTlVMTCkpCiAJCQlzdGFydCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pOwotCQkJaWYgKHNhbWVfZm9saW8pCi0JCQkJZW5kID0gZm9saW8tJmd0O2luZGV4OwotCQl9CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKQEAgLTExODksOCAmIzQzOzExODcsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLAogCQlmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwogCWlmIChmb2xpbykgewogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKLQkJaWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKQotCQkJZW5kID0gZm9saW8tJmd0O2luZGV4OwomIzQzOwkJdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCAmYW1wO2VuZCk7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJfQpAQCAtMTI1OCw3ICYjNDM7MTI1NSw4IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsCiAKIAkJCQlpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7CiAJCQkJCXRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTsKLQkJCQl9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHsKJiM0MzsJCQkJfSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLAomIzQzOwkJCQkJCQlsc3RhcnQsIGxlbmQsIE5VTEwpKSB7CiAJCQkJCS8qCiAJCQkJCSAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc28KIAkJCQkJICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLgpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggYjU4YmE5NDBiZTQ3NC4uMmViYjAwZjZjMzc5MyAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS90cnVuY2F0ZS5jCkBAIC0yMDYsMTUgJiM0MzsyMDYsMTggQEAgc3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsCiAvKgogICogSGFuZGxlIHBhcnRpYWwgZm9saW9zLiAgVGhlIGZvbGlvIG1heSBiZSBlbnRpcmVseSB3aXRoaW4gdGhlCiAgKiByYW5nZSBpZiBhIHNwbGl0IGhhcyByYWNlZCB3aXRoIHVzLiAgSWYgbm90LCB3ZSB6ZXJvIHRoZSBwYXJ0IG9mIHRoZQotICogZm9saW8gdGhhdCYjMzk7cyB3aXRoaW4gdGhlIFtzdGFydCwgZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmCiYjNDM7ICogZm9saW8gdGhhdCYjMzk7cyB3aXRoaW4gdGhlIFtsc3RhcnQsIGxlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWYKICAqIGl0JiMzOTtzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZAogICogaV9zaXplLCBhbmQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGRpc2NhcmQgcGFnZXMgd2hpY2ggbGllIHdpdGhpbiBhCiAgKiBuZXdseSBjcmVhdGVkIGhvbGUuCiAgKgotICogUmV0dXJucyBmYWxzZSBpZiBzcGxpdHRpbmcgZmFpbGVkIHNvIHRoZSBjYWxsZXIgY2FuIGF2b2lkCi0gKiBkaXNjYXJkaW5nIHRoZSBlbnRpcmUgZm9saW8gd2hpY2ggaXMgc3R1YmJvcm5seSB1bnNwbGl0LgomIzQzOyAqIFdoZW4gQGVuZCBub24tTlVMTCwgc2V0IHRvIHRoZSBpbmRleCBvZiB0aGUgZm9saW8gdGhhdCBjb250YWlucyBAbGVuZAomIzQzOyAqIGFuZCBtdXN0IGJlIGtlcHQgYnkgdGhlIGNhbGxlciYjMzk7cyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZQomIzQzOyAqIGZvbGlvIHdhcyBzcGxpdCwgJWZhbHNlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgZm9saW8gaXMgZHJvcHBlZCBvcgomIzQzOyAqIG1heSBzdGlsbCBzdHJhZGRsZSB0aGUgcmFuZ2UsIHNvIHRoZSBjYWxsZXIgbXVzdCBub3QgZGlzY2FyZCBpdC4KICAqLwotYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKJiM0Mztib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCwKJiM0MzsJCQkJICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKQogewogCWxvZmZfdCBwb3MgPSBmb2xpb19wb3MoZm9saW8pOwogCXNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7CkBAIC0yMjIsMTkgJiM0MzsyMjUsMjIgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKIAlzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsICpzcGxpdF9hdDI7CiAJdW5zaWduZWQgaW50IG1pbl9vcmRlcjsKIAotCWlmIChwb3MgJmx0OyBzdGFydCkKLQkJb2Zmc2V0ID0gc3RhcnQgLSBwb3M7CiYjNDM7CWlmIChlbmQgJmFtcDsmYW1wOyBwb3MgJiM0Mzsgc2l6ZSAmZ3Q7ICh1NjQpbGVuZCkKJiM0MzsJCSplbmQgPSBmb2xpby0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CWlmIChwb3MgJmx0OyBsc3RhcnQpCiYjNDM7CQlvZmZzZXQgPSBsc3RhcnQgLSBwb3M7CiAJZWxzZQogCQlvZmZzZXQgPSAwOwotCWlmIChwb3MgJiM0Mzsgc2l6ZSAmbHQ7PSAodTY0KWVuZCkKJiM0MzsJaWYgKHBvcyAmIzQzOyBzaXplICZsdDs9ICh1NjQpbGVuZCkKIAkJbGVuZ3RoID0gc2l6ZSAtIG9mZnNldDsKIAllbHNlCi0JCWxlbmd0aCA9IGVuZCAmIzQzOyAxIC0gcG9zIC0gb2Zmc2V0OwomIzQzOwkJbGVuZ3RoID0gbGVuZCAmIzQzOyAxIC0gcG9zIC0gb2Zmc2V0OwogCiAJZm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pOwogCWlmIChsZW5ndGggPT0gc2l6ZSkgewogCQl0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby0mZ3Q7bWFwcGluZywgZm9saW8pOwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKgpAQCAtMjQ4LDcgJiM0MzsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKQogCWlmIChmb2xpb19uZWVkc19yZWxlYXNlKGZvbGlvKSkKIAkJZm9saW9faW52YWxpZGF0ZShmb2xpbywgb2Zmc2V0LCBsZW5ndGgpOwogCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJbWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tJmd0O21hcHBpbmcpOwogCXNwbGl0X2F0ID0gZm9saW9fcGFnZShmb2xpbywgUEFHRV9BTElHTl9ET1dOKG9mZnNldCkgLyBQQUdFX1NJWkUpOwpAQCAtMjU5LDYgJiM0MzsyNjUsMTAgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKIAkJICogZm9yIHNobWVtIHRydW5jYXRlCiAJCSAqLwogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvMjsKJiM0MzsJCWJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQlpZiAoZW5kKQomIzQzOwkJCSplbmQgPSAocG9zICYjNDM7IG9mZnNldCAmIzQzOyBsZW5ndGgpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAKIAkJaWYgKG9mZnNldCAmIzQzOyBsZW5ndGggPT0gc2l6ZSkKIAkJCWdvdG8gbm9fc3BsaXQ7CkBAIC0yNzMsMjQgJiM0MzsyODMsMjggQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKIAkJaWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikpCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSkKJiM0MzsJCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKSB7CiYjNDM7CQkJdGFpbF9pc29sYXRlZCA9IGZhbHNlOwogCQkJZ290byBvdXQ7CiYjNDM7CQl9CiAKIAkJLyogbWFrZSBzdXJlIGZvbGlvMiBpcyBsYXJnZSBhbmQgZG9lcyBub3QgY2hhbmdlIGl0cyBtYXBwaW5nICovCiAJCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikgJmFtcDsmYW1wOwotCQkgICAgZm9saW8yLSZndDttYXBwaW5nID09IGZvbGlvLSZndDttYXBwaW5nKQotCQkJZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7CiYjNDM7CQkgICAgZm9saW8yLSZndDttYXBwaW5nID09IGZvbGlvLSZndDttYXBwaW5nICZhbXA7JmFtcDsKJiM0MzsJCSAgICBmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKSkKJiM0MzsJCQl0YWlsX2lzb2xhdGVkID0gZmFsc2U7CiAKIAkJZm9saW9fdW5sb2NrKGZvbGlvMik7CiBvdXQ6CiYjNDM7CQlpZiAoIXRhaWxfaXNvbGF0ZWQgJmFtcDsmYW1wOyBlbmQpCiYjNDM7CQkJKmVuZCA9IGZvbGlvMi0mZ3Q7aW5kZXg7CiAJCWZvbGlvX3B1dChmb2xpbzIpOwogbm9fc3BsaXQ6CiAJCXJldHVybiB0cnVlOwogCX0KLQlpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpCi0JCXJldHVybiBmYWxzZTsKLQl0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby0mZ3Q7bWFwcGluZywgZm9saW8pOwotCXJldHVybiB0cnVlOwomIzQzOwlpZiAoIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKQomIzQzOwkJdHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tJmd0O21hcHBpbmcsIGZvbGlvKTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtNDEzLDExICYjNDM7NDI3LDkgQEAgdm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0ICZndDsmZ3Q7IFBBR0VfU0hJRlQsIEZHUF9MT0NLLCAwKTsKIAlpZiAoIUlTX0VSUihmb2xpbykpIHsKIAkJc2FtZV9mb2xpbyA9IGxlbmQgJmx0OyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7Ci0JCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkgewomIzQzOwkJaWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsCiYjNDM7CQkJCQkJICBzYW1lX2ZvbGlvID8gJmFtcDtlbmQgOiBOVUxMKSkKIAkJCXN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7Ci0JCQlpZiAoc2FtZV9mb2xpbykKLQkJCQllbmQgPSBmb2xpby0mZ3Q7aW5kZXg7Ci0JCX0KIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAkJZm9saW8gPSBOVUxMOwpAQCAtNDI3LDggJiM0Mzs0MzksNyBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCAmZ3Q7Jmd0OyBQQUdFX1NISUZULAogCQkJCQkJRkdQX0xPQ0ssIDApOwogCQlpZiAoIUlTX0VSUihmb2xpbykpIHsKLQkJCWlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSkKLQkJCQllbmQgPSBmb2xpby0mZ3Q7aW5kZXg7CiYjNDM7CQkJdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCAmYW1wO2VuZCk7CiAJCQlmb2xpb191bmxvY2soZm9saW8pOwogCQkJZm9saW9fcHV0KGZvbGlvKTsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGaWxlIFRydW5jYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gcGlucG9pbnQgaWYgdGhpcyBjb2RlIGludHJvZHVjZXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChLTVNBTiBpcyB0aGUgcHJpbWFyeSB3b3JyeSBoZXJlKSBvciBpZiBpdCBtZXNzZXMgdXAgbWVtb3J5IG1hbmFnZW1lbnQgb3IgdHJ1bmNhdGlvbiBsb2dpYyBpbiBhbnkgd2F5IChLQVNBTiBhbmQgb3RoZXIgc2FuaXRpemVycyB3aWxsIGJlIG15IGZyaWVuZHMgZm9yIHRoYXQpLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBpdHMgc3Vycm91bmRpbmcgY2FsbGVycyB3aXRoaW4gYG1tL3NobWVtLmNgIGFuZCBgbW0vdHJ1bmNhdGUuY2AuCgpNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIGEgY2xvc2UgcmVhZGluZyBvZiB0aG9zZSBzcGVjaWZpYyBmaWxlcyDigJMgYG1tL3RydW5jYXRlLmNgIGFuZCBgbW0vc2htZW0uY2Ag4oCTIHBheWluZyBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgdGhvc2UgZnVuY3Rpb24gY2FsbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgcGljdHVyZSwgc2VlIGhvdyB0aGlzIHBhcnRpYWwgZm9saW8gdHJ1bmNhdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgc2NoZW1lIG9mIGZpbGUgdHJ1bmNhdGlvbiBhbmQgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBlZGdlIGNhc2VzLCBhbmQgb2YgY291cnNlLCBhbnkgcG90ZW50aWFsIGZvciB0aGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9NjI5PWludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oOjYzMDpib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbm1tL2ludGVybmFsLmgtNjMxLVx0XHRsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKTtcbi0tXG5tbS9zaG1lbS5jPTExMTk9c3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcbi0tXG5tbS9zaG1lbS5jLTExNzctXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xubW0vc2htZW0uYzoxMTc4Olx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCxcbm1tL3NobWVtLmMtMTE3OS1cdFx0XHRcdFx0XHQgIHNhbWVfZm9saW8gPyBcdTAwMjZlbmQgOiBOVUxMKSlcbi0tXG5tbS9zaG1lbS5jLTExODktXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xubW0vc2htZW0uYzoxMTkwOlx0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG5tbS9zaG1lbS5jLTExOTEtXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tLVxubW0vc2htZW0uYy0xMjI3LVx0XHRcdFx0XHQgKiBJZiBmb3VuZCBhIGxhcmdlIHN3YXAgZW50cnkgY3Jvc3MgdGhlIGVuZCBvciBzdGFydFxubW0vc2htZW0uYzoxMjI4Olx0XHRcdFx0XHQgKiBib3JkZXIsIHNraXAgaXQgYXMgdGhlIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cbm1tL3NobWVtLmMtMTIyOS1cdFx0XHRcdFx0ICogYWJvdmUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgemVyb2QgaXRzIGNvbnRlbnQgb25jZS5cbi0tXG5tbS9zaG1lbS5jLTEyNTctXHRcdFx0XHRcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcbm1tL3NobWVtLmM6MTI1ODpcdFx0XHRcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcbm1tL3NobWVtLmMtMTI1OS1cdFx0XHRcdFx0XHRcdGxzdGFydCwgbGVuZCwgTlVMTCkpIHtcbi0tXG5tbS90cnVuY2F0ZS5jPTE4MD1zdGF0aWMgaW50IGZvbGlvX3NwbGl0X29yX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzcGxpdF9hdCxcbi0tXG5tbS90cnVuY2F0ZS5jLTIxOC0gKi9cbm1tL3RydW5jYXRlLmM6MjE5OmJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxubW0vdHJ1bmNhdGUuYy0yMjAtXHRcdFx0XHQgIGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpXG4tLVxubW0vdHJ1bmNhdGUuYz0zODA9dm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS90cnVuY2F0ZS5jLTQyOS1cdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbm1tL3RydW5jYXRlLmM6NDMwOlx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCxcbm1tL3RydW5jYXRlLmMtNDMxLVx0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuLS1cbm1tL3RydW5jYXRlLmMtNDQxLVx0XHRpZiAoIUlTX0VSUihmb2xpbykpIHtcbm1tL3RydW5jYXRlLmM6NDQyOlx0XHRcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXHUwMDI2ZW5kKTtcbm1tL3RydW5jYXRlLmMtNDQzLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS90cnVuY2F0ZS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdHJ1bmNhdGlvbiB3b3JrcyBpbiB0aGUgbWVtb3J5IG1hbmFnZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3RydW5jYXRlLmNgLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcm91bmQgbGluZXMgMjAwIHRocm91Z2ggMzA1IGFuZCB0aGVuIGFnYWluIG9uIGxpbmVzIDQxMCB0aHJvdWdoIDQ2MC4gSSBzdXNwZWN0IHRoZXNlIHNlY3Rpb25zIGRlYWwgd2l0aCB0aGUgY29yZSBsb2dpYyBvZiByZWR1Y2luZyB0aGUgc2l6ZSBvZiBhIG1hcHBlZCBtZW1vcnkgcmVnaW9uIG9yIHBlcmhhcHMgdGhlIGhhbmRsaW5nIG9mIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSBtZW1vcnkgb3BlcmF0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGZ1bmN0aW9ucyBpcyBlc3NlbnRpYWwgaW4gZGV0ZXJtaW5pbmcgdGhlIGJlaGF2aW9yLiBUaGlzIGFsc28gaGVscHMgbWUgZGV0ZXJtaW5lIGlmIHRoZSBiZWhhdmlvciBvZiB0aGUgdHJ1bmNhdGlvbiBmdW5jdGlvbnMgaGFzIGJlZW4gYWx0ZXJlZCBvciBtb2RpZmllZCBpbiBhbnkgd2F5IGFuZCBpZiB0aGlzIGlzIHRoZSBjYXVzZSBvZiBhbnkgZXJyb3JzIEkgbWlnaHQgaGF2ZSBlbmNvdW50ZXJlZCBvciBvYnNlcnZlZC4gV2l0aCB0aGlzIHJldmlldyBJJiMzOTtsbCBjb25maXJtIG9yIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IGR1cmluZyBhIHRydW5jYXRpb24gb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3RydW5jYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdFx0V0FSTl9PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcbiAyMDE6XHRcdH1cbiAyMDI6XHRcbiAyMDM6XHRcdHJldHVybiByZXQ7XG4gMjA0Olx0fVxuIDIwNTpcdFxuIDIwNjpcdC8qXG4gMjA3Olx0ICogSGFuZGxlIHBhcnRpYWwgZm9saW9zLiAgVGhlIGZvbGlvIG1heSBiZSBlbnRpcmVseSB3aXRoaW4gdGhlXG4gMjA4Olx0ICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGVcbiAyMDk6XHQgKiBmb2xpbyB0aGF0JiMzOTtzIHdpdGhpbiB0aGUgW2xzdGFydCwgbGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZlxuIDIxMDpcdCAqIGl0JiMzOTtzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxuIDIxMTpcdCAqIGlfc2l6ZSwgYW5kIHdlIHJlbHkgb24gdGhlIGNhbGxlciB0byBkaXNjYXJkIHBhZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYVxuIDIxMjpcdCAqIG5ld2x5IGNyZWF0ZWQgaG9sZS5cbiAyMTM6XHQgKlxuIDIxNDpcdCAqIFdoZW4gQGVuZCBub24tTlVMTCwgc2V0IHRvIHRoZSBpbmRleCBvZiB0aGUgZm9saW8gdGhhdCBjb250YWlucyBAbGVuZFxuIDIxNTpcdCAqIGFuZCBtdXN0IGJlIGtlcHQgYnkgdGhlIGNhbGxlciYjMzk7cyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZVxuIDIxNjpcdCAqIGZvbGlvIHdhcyBzcGxpdCwgJWZhbHNlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgZm9saW8gaXMgZHJvcHBlZCBvclxuIDIxNzpcdCAqIG1heSBzdGlsbCBzdHJhZGRsZSB0aGUgcmFuZ2UsIHNvIHRoZSBjYWxsZXIgbXVzdCBub3QgZGlzY2FyZCBpdC5cbiAyMTg6XHQgKi9cbiAyMTk6XHRib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbiAyMjA6XHRcdFx0XHRcdCAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZClcbiAyMjE6XHR7XG4gMjIyOlx0XHRsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiAyMjM6XHRcdHNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7XG4gMjI0Olx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW5ndGg7XG4gMjI1Olx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsICpzcGxpdF9hdDI7XG4gMjI2Olx0XHR1bnNpZ25lZCBpbnQgbWluX29yZGVyO1xuIDIyNzpcdFxuIDIyODpcdFx0aWYgKGVuZCBcdTAwMjZcdTAwMjYgcG9zICYjNDM7IHNpemUgXHUwMDNlICh1NjQpbGVuZClcbiAyMjk6XHRcdFx0KmVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuIDIzMDpcdFxuIDIzMTpcdFx0aWYgKHBvcyBcdTAwM2MgbHN0YXJ0KVxuIDIzMjpcdFx0XHRvZmZzZXQgPSBsc3RhcnQgLSBwb3M7XG4gMjMzOlx0XHRlbHNlXG4gMjM0Olx0XHRcdG9mZnNldCA9IDA7XG4gMjM1Olx0XHRpZiAocG9zICYjNDM7IHNpemUgXHUwMDNjPSAodTY0KWxlbmQpXG4gMjM2Olx0XHRcdGxlbmd0aCA9IHNpemUgLSBvZmZzZXQ7XG4gMjM3Olx0XHRlbHNlXG4gMjM4Olx0XHRcdGxlbmd0aCA9IGxlbmQgJiM0MzsgMSAtIHBvcyAtIG9mZnNldDtcbiAyMzk6XHRcbiAyNDA6XHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbiAyNDE6XHRcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xuIDI0MjpcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4gMjQzOlx0XHRcdHJldHVybiBmYWxzZTtcbiAyNDQ6XHRcdH1cbiAyNDU6XHRcbiAyNDY6XHRcdC8qXG4gMjQ3Olx0XHQgKiBXZSBtYXkgYmUgemVyb2luZyBwYWdlcyB3ZSYjMzk7cmUgYWJvdXQgdG8gZGlzY2FyZCwgYnV0IGl0IGF2b2lkc1xuIDI0ODpcdFx0ICogZG9pbmcgYSBjb21wbGV4IGNhbGN1bGF0aW9uIGhlcmUsIGFuZCB0aGVuIGRvaW5nIHRoZSB6ZXJvaW5nXG4gMjQ5Olx0XHQgKiBhbnl3YXkgaWYgdGhlIHBhZ2Ugc3BsaXQgZmFpbHMuXG4gMjUwOlx0XHQgKi9cbiAyNTE6XHRcdGlmICghbWFwcGluZ19pbmFjY2Vzc2libGUoZm9saW8tXHUwMDNlbWFwcGluZykpXG4gMjUyOlx0XHRcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdGlmIChmb2xpb19uZWVkc19yZWxlYXNlKGZvbGlvKSlcbiAyNTU6XHRcdFx0Zm9saW9faW52YWxpZGF0ZShmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xuIDI1NjpcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiAyNTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI1ODpcdFxuIDI1OTpcdFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4gMjYwOlx0XHRzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTtcbiAyNjE6XHRcdGlmICghZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8sIHNwbGl0X2F0LCBtaW5fb3JkZXIpKSB7XG4gMjYyOlx0XHRcdC8qXG4gMjYzOlx0XHRcdCAqIHRyeSB0byBzcGxpdCBhdCBvZmZzZXQgJiM0MzsgbGVuZ3RoIHRvIG1ha2Ugc3VyZSBmb2xpb3Mgd2l0aGluXG4gMjY0Olx0XHRcdCAqIHRoZSByYW5nZSBjYW4gYmUgZHJvcHBlZCwgZXNwZWNpYWxseSB0byBhdm9pZCBtZW1vcnkgd2FzdGVcbiAyNjU6XHRcdFx0ICogZm9yIHNobWVtIHRydW5jYXRlXG4gMjY2Olx0XHRcdCAqL1xuIDI2NzpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcbiAyNjg6XHRcdFx0Ym9vbCB0YWlsX2lzb2xhdGVkID0gdHJ1ZTtcbiAyNjk6XHRcbiAyNzA6XHRcdFx0aWYgKGVuZClcbiAyNzE6XHRcdFx0XHQqZW5kID0gKHBvcyAmIzQzOyBvZmZzZXQgJiM0MzsgbGVuZ3RoKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiAyNzI6XHRcbiAyNzM6XHRcdFx0aWYgKG9mZnNldCAmIzQzOyBsZW5ndGggPT0gc2l6ZSlcbiAyNzQ6XHRcdFx0XHRnb3RvIG5vX3NwbGl0O1xuIDI3NTpcdFxuIDI3NjpcdFx0XHRzcGxpdF9hdDIgPSBmb2xpb19wYWdlKGZvbGlvLFxuIDI3NzpcdFx0XHRcdFx0UEFHRV9BTElHTl9ET1dOKG9mZnNldCAmIzQzOyBsZW5ndGgpIC8gUEFHRV9TSVpFKTtcbiAyNzg6XHRcdFx0Zm9saW8yID0gcGFnZV9mb2xpbyhzcGxpdF9hdDIpO1xuIDI3OTpcdFxuIDI4MDpcdFx0XHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8yKSlcbiAyODE6XHRcdFx0XHRnb3RvIG5vX3NwbGl0O1xuIDI4MjpcdFxuIDI4MzpcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcbiAyODQ6XHRcdFx0XHRnb3RvIG91dDtcbiAyODU6XHRcbiAyODY6XHRcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpIHtcbiAyODc6XHRcdFx0XHR0YWlsX2lzb2xhdGVkID0gZmFsc2U7XG4gMjg4Olx0XHRcdFx0Z290byBvdXQ7XG4gMjg5Olx0XHRcdH1cbiAyOTA6XHRcbiAyOTE6XHRcdFx0LyogbWFrZSBzdXJlIGZvbGlvMiBpcyBsYXJnZSBhbmQgZG9lcyBub3QgY2hhbmdlIGl0cyBtYXBwaW5nICovXG4gMjkyOlx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikgXHUwMDI2XHUwMDI2XG4gMjkzOlx0XHRcdCAgICBmb2xpbzItXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cdTAwM2VtYXBwaW5nIFx1MDAyNlx1MDAyNlxuIDI5NDpcdFx0XHQgICAgZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcikpXG4gMjk1Olx0XHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIDI5NjpcdFxuIDI5NzpcdFx0XHRmb2xpb191bmxvY2soZm9saW8yKTtcbiAyOTg6XHRvdXQ6XG4gMjk5Olx0XHRcdGlmICghdGFpbF9pc29sYXRlZCBcdTAwMjZcdTAwMjYgZW5kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIGBtbS90cnVuY2F0ZS5jYCBDb2RlKioKCk9rYXksIGJlZm9yZSB3ZSBtb3ZlIG9uLCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgc29tZXRoaW5nIHNwZWNpZmljLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS90cnVuY2F0ZS5jYCBhbmQgemVybyBpbiBvbiBsaW5lcyA0MDAgdGhyb3VnaCA0NjAuIEkga25vdyB3ZSYjMzk7dmUgYmVlbiB3b3JraW5nIG9uIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaWRlLCBhbmQgdHJ1bmNhdGlvbiBvcGVyYXRpb25zIGNhbiBiZSB0cmlja3ksIGVzcGVjaWFsbHkgd2l0aCBjb25jdXJyZW50IGFjY2VzcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBzZWN0aW9uJiMzOTtzIGxpa2VseSBoYW5kbGluZyB0aGUgbWVjaGFuaWNzIG9mIGZyZWVpbmcgcGFnZXMgb3IgdXBkYXRpbmcgaW5vZGUgbWV0YWRhdGEgYWZ0ZXIgYSBmaWxlIHRydW5jYXRpb24uIEkgd2FudCB0byBxdWlja2x5IHJldmlldyBob3cgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGFuZCBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5LiBHaXZlbiBvdXIgd29yaywgaXTigJlzIGJlc3QgcHJhY3RpY2UgdG8gdmVyaWZ5IHdlIGFyZSBub3QgZXhwb3NpbmcgYW55IHJhY2UgY29uZGl0aW9ucy4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgdHJ1bmNhdGlvbiBsb2dpYyBpcyBhdG9taWMgd2l0aCByZXNwZWN0IHRvIG90aGVyIG9wZXJhdGlvbnMsIHN1Y2ggYXMgd3JpdGVzIG9yIHJlYWRzLiBMZXQmIzM5O3Mgc2VlIHdoYXTigJlzIGdvaW5nIG9uIGluIHRoYXQgYmxvY2sgb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS90cnVuY2F0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDA6XHRcdCAqL1xuIDQwMTpcdFx0c3RhcnQgPSAobHN0YXJ0ICYjNDM7IFBBR0VfU0laRSAtIDEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDQwMjpcdFx0aWYgKGxlbmQgPT0gLTEpXG4gNDAzOlx0XHRcdC8qXG4gNDA0Olx0XHRcdCAqIGxlbmQgPT0gLTEgaW5kaWNhdGVzIGVuZC1vZi1maWxlIHNvIHdlIGhhdmUgdG8gc2V0ICYjMzk7ZW5kJiMzOTtcbiA0MDU6XHRcdFx0ICogdG8gdGhlIGhpZ2hlc3QgcG9zc2libGUgcGdvZmZfdCBhbmQgc2luY2UgdGhlIHR5cGUgaXNcbiA0MDY6XHRcdFx0ICogdW5zaWduZWQgd2UmIzM5O3JlIHVzaW5nIC0xLlxuIDQwNzpcdFx0XHQgKi9cbiA0MDg6XHRcdFx0ZW5kID0gLTE7XG4gNDA5Olx0XHRlbHNlXG4gNDEwOlx0XHRcdGVuZCA9IChsZW5kICYjNDM7IDEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDQxMTpcdFxuIDQxMjpcdFx0Zm9saW9fYmF0Y2hfaW5pdChcdTAwMjZmYmF0Y2gpO1xuIDQxMzpcdFx0aW5kZXggPSBzdGFydDtcbiA0MTQ6XHRcdHdoaWxlIChpbmRleCBcdTAwM2MgZW5kIFx1MDAyNlx1MDAyNiBmaW5kX2xvY2tfZW50cmllcyhtYXBwaW5nLCBcdTAwMjZpbmRleCwgZW5kIC0gMSxcbiA0MTU6XHRcdFx0XHRcdTAwMjZmYmF0Y2gsIGluZGljZXMpKSB7XG4gNDE2Olx0XHRcdHRydW5jYXRlX2ZvbGlvX2JhdGNoX2V4Y2VwdGlvbmFscyhtYXBwaW5nLCBcdTAwMjZmYmF0Y2gsIGluZGljZXMpO1xuIDQxNzpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcdTAwMjZmYmF0Y2gpOyBpJiM0MzsmIzQzOylcbiA0MTg6XHRcdFx0XHR0cnVuY2F0ZV9jbGVhbnVwX2ZvbGlvKGZiYXRjaC5mb2xpb3NbaV0pO1xuIDQxOTpcdFx0XHRkZWxldGVfZnJvbV9wYWdlX2NhY2hlX2JhdGNoKG1hcHBpbmcsIFx1MDAyNmZiYXRjaCk7XG4gNDIwOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCk7IGkmIzQzOyYjNDM7KVxuIDQyMTpcdFx0XHRcdGZvbGlvX3VubG9jayhmYmF0Y2guZm9saW9zW2ldKTtcbiA0MjI6XHRcdFx0Zm9saW9fYmF0Y2hfcmVsZWFzZShcdTAwMjZmYmF0Y2gpO1xuIDQyMzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA0MjQ6XHRcdH1cbiA0MjU6XHRcbiA0MjY6XHRcdHNhbWVfZm9saW8gPSAobHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKSA9PSAobGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gNDI3Olx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7XG4gNDI4Olx0XHRpZiAoIUlTX0VSUihmb2xpbykpIHtcbiA0Mjk6XHRcdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbiA0MzA6XHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4gNDMxOlx0XHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4gNDMyOlx0XHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbiA0MzM6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiA0MzQ6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0MzU6XHRcdFx0Zm9saW8gPSBOVUxMO1xuIDQzNjpcdFx0fVxuIDQzNzpcdFxuIDQzODpcdFx0aWYgKCFzYW1lX2ZvbGlvKSB7XG4gNDM5Olx0XHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuIDQ0MDpcdFx0XHRcdFx0XHRcdEZHUF9MT0NLLCAwKTtcbiA0NDE6XHRcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4gNDQyOlx0XHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuIDQ0MzpcdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gNDQ0Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA0NDU6XHRcdFx0fVxuIDQ0NjpcdFx0fVxuIDQ0NzpcdFxuIDQ0ODpcdFx0aW5kZXggPSBzdGFydDtcbiA0NDk6XHRcdHdoaWxlIChpbmRleCBcdTAwM2MgZW5kKSB7XG4gNDUwOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDQ1MTpcdFx0XHRpZiAoIWZpbmRfZ2V0X2VudHJpZXMobWFwcGluZywgXHUwMDI2aW5kZXgsIGVuZCAtIDEsIFx1MDAyNmZiYXRjaCxcbiA0NTI6XHRcdFx0XHRcdGluZGljZXMpKSB7XG4gNDUzOlx0XHRcdFx0LyogSWYgYWxsIGdvbmUgZnJvbSBzdGFydCBvbndhcmRzLCB3ZSYjMzk7cmUgZG9uZSAqL1xuIDQ1NDpcdFx0XHRcdGlmIChpbmRleCA9PSBzdGFydClcbiA0NTU6XHRcdFx0XHRcdGJyZWFrO1xuIDQ1NjpcdFx0XHRcdC8qIE90aGVyd2lzZSByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xuIDQ1NzpcdFx0XHRcdGluZGV4ID0gc3RhcnQ7XG4gNDU4Olx0XHRcdFx0Y29udGludWU7XG4gNDU5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkV4YW1pbmluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBTaGFyZWQgTWVtb3J5KioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhpcyBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vc2htZW0uY2AgYW5kIGZvY3VzIG9uIHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lcyAxMTUwIHRvIDEyNzAuIFRoYXQgdXN1YWxseSBjb3ZlcnMgdGhlIGNvcmUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMsIG9yIHBvdGVudGlhbGx5IHNvbWUgY3JpdGljYWwgcGFnZS10YWJsZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgc2hhcmVkIG1lbW9yeSBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgaW4gdGhpcyByZWdpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBjb25jdXJyZW5jeSBhcm91bmQgdGhpcyBzZWN0aW9uLiBOZWVkIHRvIGJlIHN1cmUgYWxsIHRoZSBwcm9wZXIgbG9ja3MgYXJlIGJlaW5nIHRha2VuLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbWVtb3J5IGxlYWtzIGJlaW5nIGludHJvZHVjZWQgYnkgdGhpcyByb3V0aW5lLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgc2luY2Ugc2hhcmVkIG1lbW9yeSBpcyBhbGwgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHRvby4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzA6XHRcdGlmICh1bmZhbGxvYylcbjExNzE6XHRcdFx0Z290byB3aG9sZV9mb2xpb3M7XG4xMTcyOlx0XG4xMTczOlx0XHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuMTE3NDpcdFx0Zm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExNzU6XHRcdGlmIChmb2xpbykge1xuMTE3NjpcdFx0XHRzYW1lX2ZvbGlvID0gbGVuZCBcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xuMTE3NzpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExNzg6XHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4xMTc5Olx0XHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4xMTgwOlx0XHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbjExODE6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjExODI6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjExODM6XHRcdFx0Zm9saW8gPSBOVUxMO1xuMTE4NDpcdFx0fVxuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKCFzYW1lX2ZvbGlvKVxuMTE4NzpcdFx0XHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExODg6XHRcdGlmIChmb2xpbykge1xuMTE4OTpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExOTA6XHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuMTE5MTpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMTE5MjpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTE5MzpcdFx0fVxuMTE5NDpcdFxuMTE5NTpcdHdob2xlX2ZvbGlvczpcbjExOTY6XHRcbjExOTc6XHRcdGluZGV4ID0gc3RhcnQ7XG4xMTk4Olx0XHR3aGlsZSAoaW5kZXggXHUwMDNjIGVuZCkge1xuMTE5OTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjEyMDA6XHRcbjEyMDE6XHRcdFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFx1MDAyNmluZGV4LCBlbmQgLSAxLCBcdTAwMjZmYmF0Y2gsXG4xMjAyOlx0XHRcdFx0XHRpbmRpY2VzKSkge1xuMTIwMzpcdFx0XHRcdC8qIElmIGFsbCBnb25lIG9yIGhvbGUtcHVuY2ggb3IgdW5mYWxsb2MsIHdlJiMzOTtyZSBkb25lICovXG4xMjA0Olx0XHRcdFx0aWYgKGluZGV4ID09IHN0YXJ0IHx8IGVuZCAhPSAtMSlcbjEyMDU6XHRcdFx0XHRcdGJyZWFrO1xuMTIwNjpcdFx0XHRcdC8qIEJ1dCBpZiB0cnVuY2F0aW5nLCByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xuMTIwNzpcdFx0XHRcdGluZGV4ID0gc3RhcnQ7XG4xMjA4Olx0XHRcdFx0Y29udGludWU7XG4xMjA5Olx0XHRcdH1cbjEyMTA6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKTsgaSYjNDM7JiM0MzspIHtcbjEyMTE6XHRcdFx0XHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XG4xMjEyOlx0XG4xMjEzOlx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuMTIxNDpcdFx0XHRcdFx0aW50IG9yZGVyO1xuMTIxNTpcdFx0XHRcdFx0bG9uZyBzd2Fwc19mcmVlZDtcbjEyMTY6XHRcbjEyMTc6XHRcdFx0XHRcdGlmICh1bmZhbGxvYylcbjEyMTg6XHRcdFx0XHRcdFx0Y29udGludWU7XG4xMjE5Olx0XHRcdFx0XHRzd2Fwc19mcmVlZCA9IHNobWVtX2ZyZWVfc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxuMTIyMDpcdFx0XHRcdFx0XHRcdFx0ICAgICAgZW5kIC0gMSwgZm9saW8pO1xuMTIyMTpcdFx0XHRcdFx0aWYgKCFzd2Fwc19mcmVlZCkge1xuMTIyMjpcdFx0XHRcdFx0XHRwZ29mZl90IGJhc2UgPSBpbmRpY2VzW2ldO1xuMTIyMzpcdFxuMTIyNDpcdFx0XHRcdFx0XHRvcmRlciA9IHNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxuMTIyNTpcdFx0XHRcdFx0XHRcdFx0XHQgICByYWRpeF90b19zd3BfZW50cnkoZm9saW8pKTtcbjEyMjY6XHRcdFx0XHRcdFx0LypcbjEyMjc6XHRcdFx0XHRcdFx0ICogSWYgZm91bmQgYSBsYXJnZSBzd2FwIGVudHJ5IGNyb3NzIHRoZSBlbmQgb3Igc3RhcnRcbjEyMjg6XHRcdFx0XHRcdFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXG4xMjI5Olx0XHRcdFx0XHRcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXG4xMjMwOlx0XHRcdFx0XHRcdCAqL1xuMTIzMTpcdFx0XHRcdFx0XHRpZiAob3JkZXIgXHUwMDNlIDApIHtcbjEyMzI6XHRcdFx0XHRcdFx0XHRiYXNlID0gcm91bmRfZG93bihiYXNlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4xMjMzOlx0XHRcdFx0XHRcdFx0aWYgKGJhc2UgXHUwMDNjIHN0YXJ0IHx8IGJhc2UgJiM0MzsgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSBcdTAwM2UgZW5kKVxuMTIzNDpcdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XG4xMjM1Olx0XHRcdFx0XHRcdH1cbjEyMzY6XHRcdFx0XHRcdFx0LyogU3dhcCB3YXMgcmVwbGFjZWQgYnkgcGFnZSBvciBleHRlbmRlZCwgcmV0cnkgKi9cbjEyMzc6XHRcdFx0XHRcdFx0aW5kZXggPSBiYXNlO1xuMTIzODpcdFx0XHRcdFx0XHRicmVhaztcbjEyMzk6XHRcdFx0XHRcdH1cbjEyNDA6XHRcdFx0XHRcdG5yX3N3YXBzX2ZyZWVkICYjNDM7PSBzd2Fwc19mcmVlZDtcbjEyNDE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMTI0MjpcdFx0XHRcdH1cbjEyNDM6XHRcbjEyNDQ6XHRcdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbjEyNDU6XHRcbjEyNDY6XHRcdFx0XHRpZiAoIXVuZmFsbG9jIHx8ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuMTI0NzpcdFx0XHRcdFx0aWYgKGZvbGlvX21hcHBpbmcoZm9saW8pICE9IG1hcHBpbmcpIHtcbjEyNDg6XHRcdFx0XHRcdFx0LyogUGFnZSB3YXMgcmVwbGFjZWQgYnkgc3dhcDogcmV0cnkgKi9cbjEyNDk6XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjEyNTA6XHRcdFx0XHRcdFx0aW5kZXggPSBpbmRpY2VzW2ldO1xuMTI1MTpcdFx0XHRcdFx0XHRicmVhaztcbjEyNTI6XHRcdFx0XHRcdH1cbjEyNTM6XHRcdFx0XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXG4xMjU0Olx0XHRcdFx0XHRcdFx0Zm9saW8pO1xuMTI1NTpcdFxuMTI1NjpcdFx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuMTI1NzpcdFx0XHRcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4xMjU4Olx0XHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG4xMjU5Olx0XHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4xMjYwOlx0XHRcdFx0XHRcdC8qXG4xMjYxOlx0XHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbjEyNjI6XHRcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuMTI2MzpcdFx0XHRcdFx0XHQgKiBPdGhlcndpc2UgdGhlIFRIUCB3YXMgZW50aXJlbHlcbjEyNjQ6XHRcdFx0XHRcdFx0ICogZHJvcHBlZCBvciB0aGUgdGFyZ2V0IHJhbmdlIHdhc1xuMTI2NTpcdFx0XHRcdFx0XHQgKiB6ZXJvZWQsIHNvIGp1c3QgY29udGludWUgdGhlIGxvb3AgYXNcbjEyNjY6XHRcdFx0XHRcdFx0ICogaXMuXG4xMjY3Olx0XHRcdFx0XHRcdCAqL1xuMTI2ODpcdFx0XHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4xMjY5Olx0XHRcdFx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUcnVuY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgdHJ1bmNhdGlvbiBhbmQgaG9sZS1wdW5jaGluZyBvZiBwYXJ0aWFsIGZvbGlvcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGZ1bmN0aW9uLgoKUHJldmlvdXNseSwgSSBoYWQgYSBzcGVjaWZpYyBwYXR0ZXJuIGZvciBoYW5kbGluZyB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgYWRqdXN0aW5nIHRoZSBgZW5kYCBpbmRleCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoYXQuIE5vdywgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGRpcmVjdGx5IHVwZGF0ZXMgdGhlIGAqZW5kYCBwb2ludGVyIHRoYXQgdGhlIGNhbGxlciBwYXNzZXMsICpkZXBlbmRpbmcqIG9uIHdoZXRoZXIgdGhlIGZvbGlvIHdhcyBzcGxpdCBvciBpZiBpdCBuZWVkcyB0byBiZSByZXRhaW5lZC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiByZXNwb25zaWJpbGl0eS4KClRoZSByZXR1cm4gdmFsdWUgaXRzZWxmIGhhcyBhbHNvIGNoYW5nZWQgc2VtYW50aWNzLiBJdCBub3cgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZvbGlvIHdhcyBzcGxpdCAobWVhbmluZyB3ZSBuZWVkZWQgdG8gZG8gc29tZXRoaW5nIGxpa2UgemVyby1yYW5nZXMpLCBhbmQgYGZhbHNlYCBvdGhlcndpc2UsIGZvciBleGFtcGxlLCBpZiB0aGUgZm9saW8gd2FzIGZ1bGx5IHRydW5jYXRlZCBvciBpZiBpdCB3YXNuJiMzOTt0IHNwbGl0LgoKVGhlIGNhbGxlcnMsIHNwZWNpZmljYWxseSBgc2htZW1fdW5kb19yYW5nZWAgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAsIHBhc3MgYCZhbXA7ZW5kYCAob3IgYHNhbWVfZm9saW8gPyAmYW1wO2VuZCA6IE5VTExgKSB0byBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuIFRoZSBjYWxsZXJzIGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgYHN0YXJ0YCBpbmRleCwgKmJ1dCBvbmx5IGlmKiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgcmV0dXJucyBgZmFsc2VgICphbmQqIGl0IHdhcyB0aGUgc3RhcnQgZm9saW8uCgpOb3csIGEgcXVpY2sgbWVtb3J5IHNhZmV0eSBjaGVjay4gSXQmIzM5O3MgY3J1Y2lhbCwgc28gbGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDoKCjEuICBJcyB0aGVyZSBhbnkgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZT8gTm8sIG5vdGhpbmcgb2J2aW91cyBpbiB0aGUgY29udGV4dC4gR29vZC4KMi4gIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdGhhdCB3ZSYjMzk7cmUgdXNpbmcgaW4gY29uZGl0aW9uYWxzIG9yIHJlYWRpbmc/CiAgICAqICAgSW4gdGhlIGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBmdW5jdGlvbiBpdHNlbGYsIGBlbmRgIGlzIGEgcG9pbnRlciBvZiB0eXBlIGBwZ29mZl90YC4gSXQmIzM5O3MgYWx3YXlzIGNoZWNrZWQgZm9yIGBOVUxMYCwgc28gdGhhdCYjMzk7cyBzYWZlLgogICAgKiAgIGBzdGFydGAgYW5kIGBlbmRgIHdpdGhpbiBgc2htZW1fdW5kb19yYW5nZWAgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAgYXJlIGxvY2FsIHZhcmlhYmxlcyBvZiB0eXBlIGBwZ29mZl90YC4gV2UgKm11c3QqIHZlcmlmeSB0aGVpciBpbml0aWFsaXphdGlvbiBiZWZvcmUgY2FsbGluZyBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuCiAgICAqICAgSW4gYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCwgYGVuZGAgaXMgaW5pdGlhbGl6ZWQgdG8gYC0xYCBvciBgKGxlbmQgJiM0MzsgMSkgJmd0OyZndDsgUEFHRV9TSElGVGAsICpiZWZvcmUqIHRoZSBjYWxsIHRvIGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBhdCBsaW5lIDQyNy4gVGhpcyBzZWVtcyBjb3JyZWN0LgogICAgKiAgIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGxpbmVzIDExMjAtMTE3NSBpbiBgbW0vc2htZW0uY2Agd2l0aGluIGBzaG1lbV91bmRvX3JhbmdlYCwgdG8gc2VlIGhvdyBgZW5kYCBpcyBpbml0aWFsaXplZCB0aGVyZS4gTmVlZCB0byBlbnN1cmUgYGVuZGAgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0XHRcdFx0XHRcdFx0XHRcdCBib29sIHVuZmFsbG9jKVxuMTEyMTpcdHtcbjExMjI6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXHUwMDNlaV9tYXBwaW5nO1xuMTEyMzpcdFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbjExMjQ6XHRcdHBnb2ZmX3Qgc3RhcnQgPSAobHN0YXJ0ICYjNDM7IFBBR0VfU0laRSAtIDEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuMTEyNTpcdFx0cGdvZmZfdCBlbmQgPSAobGVuZCAmIzQzOyAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbjExMjY6XHRcdHN0cnVjdCBmb2xpb19iYXRjaCBmYmF0Y2g7XG4xMTI3Olx0XHRwZ29mZl90IGluZGljZXNbRk9MSU9fQkFUQ0hfU0laRV07XG4xMTI4Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTEyOTpcdFx0Ym9vbCBzYW1lX2ZvbGlvO1xuMTEzMDpcdFx0bG9uZyBucl9zd2Fwc19mcmVlZCA9IDA7XG4xMTMxOlx0XHRwZ29mZl90IGluZGV4O1xuMTEzMjpcdFx0aW50IGk7XG4xMTMzOlx0XG4xMTM0Olx0XHRpZiAobGVuZCA9PSAtMSlcbjExMzU6XHRcdFx0ZW5kID0gLTE7XHQvKiB1bnNpZ25lZCwgc28gYWN0dWFsbHkgdmVyeSBiaWcgKi9cbjExMzY6XHRcbjExMzc6XHRcdGlmIChpbmZvLVx1MDAzZWZhbGxvY2VuZCBcdTAwM2Ugc3RhcnQgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlZmFsbG9jZW5kIFx1MDAzYz0gZW5kIFx1MDAyNlx1MDAyNiAhdW5mYWxsb2MpXG4xMTM4Olx0XHRcdGluZm8tXHUwMDNlZmFsbG9jZW5kID0gc3RhcnQ7XG4xMTM5Olx0XG4xMTQwOlx0XHRmb2xpb19iYXRjaF9pbml0KFx1MDAyNmZiYXRjaCk7XG4xMTQxOlx0XHRpbmRleCA9IHN0YXJ0O1xuMTE0MjpcdFx0d2hpbGUgKGluZGV4IFx1MDAzYyBlbmQgXHUwMDI2XHUwMDI2IGZpbmRfbG9ja19lbnRyaWVzKG1hcHBpbmcsIFx1MDAyNmluZGV4LCBlbmQgLSAxLFxuMTE0MzpcdFx0XHRcdFx1MDAyNmZiYXRjaCwgaW5kaWNlcykpIHtcbjExNDQ6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKTsgaSYjNDM7JiM0MzspIHtcbjExNDU6XHRcdFx0XHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XG4xMTQ2Olx0XG4xMTQ3Olx0XHRcdFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xuMTE0ODpcdFx0XHRcdFx0aWYgKHVuZmFsbG9jKVxuMTE0OTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjExNTA6XHRcdFx0XHRcdG5yX3N3YXBzX2ZyZWVkICYjNDM7PSBzaG1lbV9mcmVlX3N3YXAobWFwcGluZywgaW5kaWNlc1tpXSxcbjExNTE6XHRcdFx0XHRcdFx0XHRcdFx0ICBlbmQgLSAxLCBmb2xpbyk7XG4xMTUyOlx0XHRcdFx0XHRjb250aW51ZTtcbjExNTM6XHRcdFx0XHR9XG4xMTU0Olx0XG4xMTU1Olx0XHRcdFx0aWYgKCF1bmZhbGxvYyB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4xMTU2Olx0XHRcdFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4xMTU3Olx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjExNTg6XHRcdFx0fVxuMTE1OTpcdFx0XHRmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKFx1MDAyNmZiYXRjaCk7XG4xMTYwOlx0XHRcdGZvbGlvX2JhdGNoX3JlbGVhc2UoXHUwMDI2ZmJhdGNoKTtcbjExNjE6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4xMTYyOlx0XHR9XG4xMTYzOlx0XG4xMTY0Olx0XHQvKlxuMTE2NTpcdFx0ICogV2hlbiB1bmRvaW5nIGEgZmFpbGVkIGZhbGxvY2F0ZSwgd2Ugd2FudCBub25lIG9mIHRoZSBwYXJ0aWFsIGZvbGlvXG4xMTY2Olx0XHQgKiB6ZXJvaW5nIGFuZCBzcGxpdHRpbmcgYmVsb3csIGJ1dCBzaGFsbCB3YW50IHRvIHRydW5jYXRlIHRoZSB3aG9sZVxuMTE2NzpcdFx0ICogZm9saW8gd2hlbiAhdXB0b2RhdGUgaW5kaWNhdGVzIHRoYXQgaXQgd2FzIGFkZGVkIGJ5IHRoaXMgZmFsbG9jYXRlLFxuMTE2ODpcdFx0ICogZXZlbiB3aGVuIFtsc3RhcnQsIGxlbmRdIGNvdmVycyBvbmx5IGEgcGFydCBvZiB0aGUgZm9saW8uXG4xMTY5Olx0XHQgKi9cbjExNzA6XHRcdGlmICh1bmZhbGxvYylcbjExNzE6XHRcdFx0Z290byB3aG9sZV9mb2xpb3M7XG4xMTcyOlx0XG4xMTczOlx0XHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuMTE3NDpcdFx0Zm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjExNzU6XHRcdGlmIChmb2xpbykge1xuMTE3NjpcdFx0XHRzYW1lX2ZvbGlvID0gbGVuZCBcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xuMTE3NzpcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbjExNzg6XHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4xMTc5Olx0XHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDA4CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDQ5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBLTVNBTiBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZm9jdXNlZCBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoYXQgS01TQU4gd291bGQgYmUgcGFydGljdWxhcmx5IGVmZmVjdGl2ZSBhdCBjYXRjaGluZywgZ2l2ZW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuCgpGaXJzdCwgSSBzZWUgdGhlIGBlbmRgIHZhcmlhYmxlIGluIGBzaG1lbV91bmRvX3JhbmdlYCBpbml0aWFsaXplZCwgYW5kIGB0YWlsX2lzb2xhdGVkYCBpbiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgaXMgZXhwbGljaXRseSBzZXQgdG8gYHRydWVgLiBHb29kIHN0YXJ0LCB0aG9zZSBhcmUgY292ZXJlZC4KCk15IG1haW4gY29uY2VybiBpcyBhbHdheXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBsZWFrYWdlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgSSBjb25maXJtZWQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLiBJdCBwcmltYXJpbHkgZGVhbHMgd2l0aCBwYWdlIGNhY2hlIGFuZCBmb2xpbyBtYW5pcHVsYXRpb25zOiB0cnVuY2F0aW9uLCBzcGxpdHRpbmcgKHVzaW5nIGBmb2xpb19zcGxpdF9vcl91bm1hcGApLCBhbmQgaW52YWxpZGF0aW9uLiBNeSBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBhbSBJIGNoYW5naW5nIHRoZSBrZXJuZWwgbWVtb3J5IGNvcHlpbmcgdG8gdXNlciBzcGFjZSBvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgcGFnZXMvbWVtb3J5PyBOb3BlLiBJdCBpcyBvcGVyYXRpbmcgd2l0aGluIHRoZSBrZXJuZWwtcGFnZSBjYWNoZS4KClRoZSBwb3RlbnRpYWwgaXNzdWVzIEkgZm9yZXNlZSBoZXJlIHJlbGF0ZSB0byBwYWdlIGNhY2hlIGNvbnNpc3RlbmN5LCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIHRydW5jYXRpb24gb3Igc3BsaXR0aW5nIGxvZ2ljLCBhbmQgbG9ja2luZywgYW55IG9mIHdoaWNoIGFyZSBpc3N1ZXMgSSYjMzk7ZCBsb29rIGF0IGluIGFueSBwYXRjaCBkZWFsaW5nIHdpdGggc2hhcmVkIG1lbW9yeS4gSG93ZXZlciwgdGhvc2UgYXJlIGhhbmRsZWQgdmlhIEtBU0FOLCBMT0NLREVQLCBhbmQgYEJVR2AgY2hlY2tzLgoKTm93LCBsZXQgbWUgcnVuIHRocm91Z2ggdGhlIGZvdXIgY3JpdGVyaWEgZm9yIEtNU0FOLCBhcyBJIGtub3cgdGhlbToKCjEuICAqKktlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSB1c3VhbCBzdXNwZWN0cyAoY29weVxfdG9cX3VzZXIsIGV0Yy4pLiBUaGlzIGlzIHN0cmljdGx5IGtlcm5lbC1pbnRlcm5hbC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBBbGwga2V5IHZhcmlhYmxlcyAoZW5kLCB0YWlsXF9pc29sYXRlZCwgc3BsaXRcX2F0LCBzcGxpdFxfYXQyLCBldGMuKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXMgSSBzYXcuCjMuICAqKlVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGNvbXBsZXggYWxsb2NhdGlvbnM6KiogTm8gbmV3IGFsbG9jYXRpb25zLiBUaGlzIHBhdGNoIGlzIHdvcmtpbmcgd2l0aCBleGlzdGluZyBtZW1vcnkuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk6KiogTm8uIFRoaXMgaW52b2x2ZXMgbW9kaWZ5aW5nIGZvbGlvIGJvdW5kcyBmb3IgcGFnZWNhY2hlIG1hbmFnZW1lbnQuCgpHaXZlbiB0aGlzLCBJIGNvbmNsdWRlIHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjaGVja3MgYW5kIHRoZSBleGlzdGluZyBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgYXJlIGVudGlyZWx5IGFwcHJvcHJpYXRlLiBUaGlzIGRvZXNuJiMzOTt0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBzdWJtaXQgbXkgYHNldC1yZXN1bHRzYCByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGludHJvZHVjZWQgb3IgcmVhZCwgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBib3VuZHMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHBhZ2UgY2FjaGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSBjYWNoZSBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGludHJvZHVjZWQgb3IgcmVhZCwgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBib3VuZHMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHBhZ2UgY2FjaGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSBjYWNoZSBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMDo0OS45MzM5OTkxOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODcxNzQyMDc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTSE1FTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXCIsXG4gICAgXCJzaG1lbV91bmRvX3JhbmdlXCIsXG4gICAgXCJ0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZVwiLFxuICAgIFwic2htZW1fdHJ1bmNhdGVfcmFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGZvbGlvIHRydW5jYXRpb24gYW5kIHNwbGl0dGluZyBsb2dpYyBpbiBgbW0vdHJ1bmNhdGUuY2AsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS9pbnRlcm5hbC5oYCAoYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBpdHMgY2FsbGVycykuIEl0IHJlZmFjdG9ycyBob3cgdGhlIHBhcnRpYWwgZm9saW8gdHJ1bmNhdGlvbiByZXR1cm4gdmFsdWUgYW5kIHRoZSBgZW5kYCBwYWdlIG9mZnNldCBhcmUgaGFuZGxlZCBhbmQgdXBkYXRlZCB3aGVuIHNwbGl0dGluZyBvciBrZWVwaW5nIHN0cmFkZGxpbmcgZm9saW9zLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGludHJvZHVjZWQgb3IgcmVhZCwgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gZGF0YSBib3VuZHMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHBhZ2UgY2FjaGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcGFnZSBjYWNoZSBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgY2FjaGUgdHJ1bmNhdGlvbiBsb2dpYyAoaW4gbW0vdHJ1bmNhdGUuYyBhbmQgbW0vc2htZW0uYykgZm9yIHBhcnRpYWwgZm9saW9zLCBhbHRlcmluZyBib3VuZGFyeSB0cmFja2luZyBhbmQgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBvZiB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvIHRvIHByZXZlbnQgaW1wcm9wZXIgZGlzY2FyZCBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBhY3RpdmVseSByZWFjaGFibGUga2VybmVsIGNvZGUgZXhlcmNpc2VkIGJ5IGZpbGUgdHJ1bmNhdGlvbiwgZnRydW5jYXRlLCBhbmQgZmFsbG9jYXRlIGhvbGUtcHVuY2hpbmcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjA6NDkuOTM0MDA0NTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzAwMzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVmZmUxODIwZGZiMDdiNjlkMTRiMzQxNWE1ZTUyZGY0NmY0NTZkYjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDY4ZGI1YWJkMGE0Y2UuLmRiN2Q5ZDlmYjVjOWUgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtNjI3LDggKzYyNyw4IEBAIHVuc2lnbmVkIGZpbmRfbG9ja19lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcXG4gdW5zaWduZWQgZmluZF9nZXRfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXFxuIFxcdFxcdHBnb2ZmX3QgZW5kLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgcGdvZmZfdCAqaW5kaWNlcyk7XFxuIGludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsXFxuLVxcdFxcdGxvZmZfdCBlbmQpO1xcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcXG4rXFx0XFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XFxuIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIHVuc2lnbmVkIGxvbmcgbWFwcGluZ190cnlfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0cGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQsIHVuc2lnbmVkIGxvbmcgKm5yX2ZhaWxlZCk7XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggODlhMTQ5NWU1NWY3ZS4uY2MxNTQ4ZmY1MDlhZSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0xMTc1LDExICsxMTc1LDkgQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcXG4gXFx0aWYgKGZvbGlvKSB7XFxuIFxcdFxcdHNhbWVfZm9saW8gPSBsZW5kIFxcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xcbiBcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tXFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XFxuK1xcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHNhbWVfZm9saW8gPyBcXHUwMDI2ZW5kIDogTlVMTCkpXFxuIFxcdFxcdFxcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XFxuLVxcdFxcdFxcdGlmIChzYW1lX2ZvbGlvKVxcbi1cXHRcXHRcXHRcXHRlbmQgPSBmb2xpby1cXHUwMDNlaW5kZXg7XFxuLVxcdFxcdH1cXG4gXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0Zm9saW8gPSBOVUxMO1xcbkBAIC0xMTg5LDggKzExODcsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxcbiBcXHRcXHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXHRpZiAoZm9saW8pIHtcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuLVxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kKSlcXG4tXFx0XFx0XFx0ZW5kID0gZm9saW8tXFx1MDAzZWluZGV4O1xcbitcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFxcdTAwMjZlbmQpO1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHR9XFxuQEAgLTEyNTgsNyArMTI1NSw4IEBAIHN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXFxuIFxcbiBcXHRcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdFxcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0fSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XFxuK1xcdFxcdFxcdFxcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bHN0YXJ0LCBsZW5kLCBOVUxMKSkge1xcbiBcXHRcXHRcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBJZiB3ZSBzcGxpdCBhIHBhZ2UsIHJlc2V0IHRoZSBsb29wIHNvXFxuIFxcdFxcdFxcdFxcdFxcdCAqIHRoYXQgd2UgcGljayB1cCB0aGUgbmV3IHN1YiBwYWdlcy5cXG5kaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmNcXG5pbmRleCBiNThiYTk0MGJlNDc0Li4yZWJiMDBmNmMzNzkzIDEwMDY0NFxcbi0tLSBhL21tL3RydW5jYXRlLmNcXG4rKysgYi9tbS90cnVuY2F0ZS5jXFxuQEAgLTIwNiwxNSArMjA2LDE4IEBAIHN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxcbiAvKlxcbiAgKiBIYW5kbGUgcGFydGlhbCBmb2xpb3MuICBUaGUgZm9saW8gbWF5IGJlIGVudGlyZWx5IHdpdGhpbiB0aGVcXG4gICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGVcXG4tICogZm9saW8gdGhhdCdzIHdpdGhpbiB0aGUgW3N0YXJ0LCBlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWZcXG4rICogZm9saW8gdGhhdCdzIHdpdGhpbiB0aGUgW2xzdGFydCwgbGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZlxcbiAgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxcbiAgKiBpX3NpemUsIGFuZCB3ZSByZWx5IG9uIHRoZSBjYWxsZXIgdG8gZGlzY2FyZCBwYWdlcyB3aGljaCBsaWUgd2l0aGluIGFcXG4gICogbmV3bHkgY3JlYXRlZCBob2xlLlxcbiAgKlxcbi0gKiBSZXR1cm5zIGZhbHNlIGlmIHNwbGl0dGluZyBmYWlsZWQgc28gdGhlIGNhbGxlciBjYW4gYXZvaWRcXG4tICogZGlzY2FyZGluZyB0aGUgZW50aXJlIGZvbGlvIHdoaWNoIGlzIHN0dWJib3JubHkgdW5zcGxpdC5cXG4rICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXFxuKyAqIGFuZCBtdXN0IGJlIGtlcHQgYnkgdGhlIGNhbGxlcidzIHRydW5jYXRlIGxvb3AuICBSZXR1cm4gJXRydWUgaWYgdGhlXFxuKyAqIGZvbGlvIHdhcyBzcGxpdCwgJWZhbHNlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgZm9saW8gaXMgZHJvcHBlZCBvclxcbisgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXFxuICAqL1xcbi1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcXG4rXFx0XFx0XFx0XFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxcbiB7XFxuIFxcdGxvZmZfdCBwb3MgPSBmb2xpb19wb3MoZm9saW8pO1xcbiBcXHRzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pO1xcbkBAIC0yMjIsMTkgKzIyNSwyMiBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxcbiBcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsICpzcGxpdF9hdDI7XFxuIFxcdHVuc2lnbmVkIGludCBtaW5fb3JkZXI7XFxuIFxcbi1cXHRpZiAocG9zIFxcdTAwM2Mgc3RhcnQpXFxuLVxcdFxcdG9mZnNldCA9IHN0YXJ0IC0gcG9zO1xcbitcXHRpZiAoZW5kIFxcdTAwMjZcXHUwMDI2IHBvcyArIHNpemUgXFx1MDAzZSAodTY0KWxlbmQpXFxuK1xcdFxcdCplbmQgPSBmb2xpby1cXHUwMDNlaW5kZXg7XFxuK1xcbitcXHRpZiAocG9zIFxcdTAwM2MgbHN0YXJ0KVxcbitcXHRcXHRvZmZzZXQgPSBsc3RhcnQgLSBwb3M7XFxuIFxcdGVsc2VcXG4gXFx0XFx0b2Zmc2V0ID0gMDtcXG4tXFx0aWYgKHBvcyArIHNpemUgXFx1MDAzYz0gKHU2NCllbmQpXFxuK1xcdGlmIChwb3MgKyBzaXplIFxcdTAwM2M9ICh1NjQpbGVuZClcXG4gXFx0XFx0bGVuZ3RoID0gc2l6ZSAtIG9mZnNldDtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRsZW5ndGggPSBlbmQgKyAxIC0gcG9zIC0gb2Zmc2V0O1xcbitcXHRcXHRsZW5ndGggPSBsZW5kICsgMSAtIHBvcyAtIG9mZnNldDtcXG4gXFxuIFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG4gXFx0aWYgKGxlbmd0aCA9PSBzaXplKSB7XFxuIFxcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLVxcdTAwM2VtYXBwaW5nLCBmb2xpbyk7XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTI0OCw3ICsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxcbiBcXHRpZiAoZm9saW9fbmVlZHNfcmVsZWFzZShmb2xpbykpXFxuIFxcdFxcdGZvbGlvX2ludmFsaWRhdGUoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4gXFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdG1pbl9vcmRlciA9IG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGZvbGlvLVxcdTAwM2VtYXBwaW5nKTtcXG4gXFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XFxuQEAgLTI1OSw2ICsyNjUsMTAgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4gXFx0XFx0ICogZm9yIHNobWVtIHRydW5jYXRlXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcXG4rXFx0XFx0Ym9vbCB0YWlsX2lzb2xhdGVkID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdGlmIChlbmQpXFxuK1xcdFxcdFxcdCplbmQgPSAocG9zICsgb2Zmc2V0ICsgbGVuZ3RoKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXG4gXFx0XFx0aWYgKG9mZnNldCArIGxlbmd0aCA9PSBzaXplKVxcbiBcXHRcXHRcXHRnb3RvIG5vX3NwbGl0O1xcbkBAIC0yNzMsMjQgKzI4MywyOCBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxcbiBcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSlcXG4rXFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpIHtcXG4rXFx0XFx0XFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogbWFrZSBzdXJlIGZvbGlvMiBpcyBsYXJnZSBhbmQgZG9lcyBub3QgY2hhbmdlIGl0cyBtYXBwaW5nICovXFxuIFxcdFxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvMikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGZvbGlvMi1cXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cXHUwMDNlbWFwcGluZylcXG4tXFx0XFx0XFx0Zm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7XFxuK1xcdFxcdCAgICBmb2xpbzItXFx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXFx1MDAzZW1hcHBpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpKVxcbitcXHRcXHRcXHR0YWlsX2lzb2xhdGVkID0gZmFsc2U7XFxuIFxcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8yKTtcXG4gb3V0OlxcbitcXHRcXHRpZiAoIXRhaWxfaXNvbGF0ZWQgXFx1MDAyNlxcdTAwMjYgZW5kKVxcbitcXHRcXHRcXHQqZW5kID0gZm9saW8yLVxcdTAwM2VpbmRleDtcXG4gXFx0XFx0Zm9saW9fcHV0KGZvbGlvMik7XFxuIG5vX3NwbGl0OlxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbi1cXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmICghZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuK1xcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLVxcdTAwM2VtYXBwaW5nLCBmb2xpbyk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNDEzLDExICs0MjcsOSBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIEZHUF9MT0NLLCAwKTtcXG4gXFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XFxuIFxcdFxcdHNhbWVfZm9saW8gPSBsZW5kIFxcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xcbi1cXHRcXHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHtcXG4rXFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc2FtZV9mb2xpbyA/IFxcdTAwMjZlbmQgOiBOVUxMKSlcXG4gXFx0XFx0XFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcXG4tXFx0XFx0XFx0aWYgKHNhbWVfZm9saW8pXFxuLVxcdFxcdFxcdFxcdGVuZCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4tXFx0XFx0fVxcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRmb2xpbyA9IE5VTEw7XFxuQEAgLTQyNyw4ICs0MzksNyBAQCB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRGR1BfTE9DSywgMCk7XFxuIFxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpXFxuLVxcdFxcdFxcdFxcdGVuZCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4rXFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG4gXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMDo1MC41MTc3OTQ2NDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk5NDM3MjU5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cIixcbiAgICBcInNobWVtX3VuZG9fcmFuZ2VcIixcbiAgICBcInRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlXCIsXG4gICAgXCJzaG1lbV90cnVuY2F0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgY2FjaGUgdHJ1bmNhdGlvbiBsb2dpYyAoaW4gbW0vdHJ1bmNhdGUuYyBhbmQgbW0vc2htZW0uYykgZm9yIHBhcnRpYWwgZm9saW9zLCBhbHRlcmluZyBib3VuZGFyeSB0cmFja2luZyBhbmQgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBvZiB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvIHRvIHByZXZlbnQgaW1wcm9wZXIgZGlzY2FyZCBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBhY3RpdmVseSByZWFjaGFibGUga2VybmVsIGNvZGUgZXhlcmNpc2VkIGJ5IGZpbGUgdHJ1bmNhdGlvbiwgZnRydW5jYXRlLCBhbmQgZmFsbG9jYXRlIGhvbGUtcHVuY2hpbmcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZmZlMTgyMGRmYjA3YjY5ZDE0YjM0MTVhNWU1MmRmNDZmNDU2ZGIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA2OGRiNWFiZDBhNGNlLi5kYjdkOWQ5ZmI1YzllIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTYyNyw4ICs2MjcsOCBAQCB1bnNpZ25lZCBmaW5kX2xvY2tfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXG4gdW5zaWduZWQgZmluZF9nZXRfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXG4gXHRcdHBnb2ZmX3QgZW5kLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgcGdvZmZfdCAqaW5kaWNlcyk7XG4gaW50IHRydW5jYXRlX2lub2RlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LFxuLVx0XHRsb2ZmX3QgZW5kKTtcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbitcdFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XG4gbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB1bnNpZ25lZCBsb25nIG1hcHBpbmdfdHJ5X2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLCB1bnNpZ25lZCBsb25nICpucl9mYWlsZWQpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA4OWExNDk1ZTU1ZjdlLi5jYzE1NDhmZjUwOWFlIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTExNzUsMTEgKzExNzUsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuIFx0aWYgKGZvbGlvKSB7XG4gXHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLVx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHtcbitcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4rXHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4gXHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbi1cdFx0XHRpZiAoc2FtZV9mb2xpbylcbi1cdFx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuLVx0XHR9XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdGZvbGlvID0gTlVMTDtcbkBAIC0xMTg5LDggKzExODcsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuIFx0XHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdGlmIChmb2xpbykge1xuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbi1cdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKVxuLVx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuK1x0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG5AQCAtMTI1OCw3ICsxMjU1LDggQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbiBcdFx0XHRcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8obWFwcGluZywgZm9saW8pO1xuLVx0XHRcdFx0fSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XG4rXHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG4rXHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbiBcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jXG5pbmRleCBiNThiYTk0MGJlNDc0Li4yZWJiMDBmNmMzNzkzIDEwMDY0NFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xuKysrIGIvbW0vdHJ1bmNhdGUuY1xuQEAgLTIwNiwxNSArMjA2LDE4IEBAIHN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxuIC8qXG4gICogSGFuZGxlIHBhcnRpYWwgZm9saW9zLiAgVGhlIGZvbGlvIG1heSBiZSBlbnRpcmVseSB3aXRoaW4gdGhlXG4gICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGVcbi0gKiBmb2xpbyB0aGF0J3Mgd2l0aGluIHRoZSBbc3RhcnQsIGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZlxuKyAqIGZvbGlvIHRoYXQncyB3aXRoaW4gdGhlIFtsc3RhcnQsIGxlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWZcbiAgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxuICAqIGlfc2l6ZSwgYW5kIHdlIHJlbHkgb24gdGhlIGNhbGxlciB0byBkaXNjYXJkIHBhZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYVxuICAqIG5ld2x5IGNyZWF0ZWQgaG9sZS5cbiAgKlxuLSAqIFJldHVybnMgZmFsc2UgaWYgc3BsaXR0aW5nIGZhaWxlZCBzbyB0aGUgY2FsbGVyIGNhbiBhdm9pZFxuLSAqIGRpc2NhcmRpbmcgdGhlIGVudGlyZSBmb2xpbyB3aGljaCBpcyBzdHViYm9ybmx5IHVuc3BsaXQuXG4rICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXG4rICogYW5kIG11c3QgYmUga2VwdCBieSB0aGUgY2FsbGVyJ3MgdHJ1bmNhdGUgbG9vcC4gIFJldHVybiAldHJ1ZSBpZiB0aGVcbisgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3JcbisgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXG4gICovXG4tYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbitcdFx0XHRcdCAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZClcbiB7XG4gXHRsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiBcdHNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7XG5AQCAtMjIyLDE5ICsyMjUsMjIgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiBcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgKnNwbGl0X2F0MjtcbiBcdHVuc2lnbmVkIGludCBtaW5fb3JkZXI7XG4gXG4tXHRpZiAocG9zIFx1MDAzYyBzdGFydClcbi1cdFx0b2Zmc2V0ID0gc3RhcnQgLSBwb3M7XG4rXHRpZiAoZW5kIFx1MDAyNlx1MDAyNiBwb3MgKyBzaXplIFx1MDAzZSAodTY0KWxlbmQpXG4rXHRcdCplbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbitcbitcdGlmIChwb3MgXHUwMDNjIGxzdGFydClcbitcdFx0b2Zmc2V0ID0gbHN0YXJ0IC0gcG9zO1xuIFx0ZWxzZVxuIFx0XHRvZmZzZXQgPSAwO1xuLVx0aWYgKHBvcyArIHNpemUgXHUwMDNjPSAodTY0KWVuZClcbitcdGlmIChwb3MgKyBzaXplIFx1MDAzYz0gKHU2NClsZW5kKVxuIFx0XHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xuIFx0ZWxzZVxuLVx0XHRsZW5ndGggPSBlbmQgKyAxIC0gcG9zIC0gb2Zmc2V0O1xuK1x0XHRsZW5ndGggPSBsZW5kICsgMSAtIHBvcyAtIG9mZnNldDtcbiBcbiBcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xuIFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI0OCw3ICsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxuIFx0XHRmb2xpb19pbnZhbGlkYXRlKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4gXHRzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTtcbkBAIC0yNTksNiArMjY1LDEwIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4gXHRcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbzI7XG4rXHRcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XG4rXG4rXHRcdGlmIChlbmQpXG4rXHRcdFx0KmVuZCA9IChwb3MgKyBvZmZzZXQgKyBsZW5ndGgpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0XHRpZiAob2Zmc2V0ICsgbGVuZ3RoID09IHNpemUpXG4gXHRcdFx0Z290byBub19zcGxpdDtcbkBAIC0yNzMsMjQgKzI4MywyOCBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpXG4rXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKSB7XG4rXHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXG4gXHRcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZm9saW8yLVx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXHUwMDNlbWFwcGluZylcbi1cdFx0XHRmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKTtcbitcdFx0ICAgIGZvbGlvMi1cdTAwM2VtYXBwaW5nID09IGZvbGlvLVx1MDAzZW1hcHBpbmcgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKSlcbitcdFx0XHR0YWlsX2lzb2xhdGVkID0gZmFsc2U7XG4gXG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbzIpO1xuIG91dDpcbitcdFx0aWYgKCF0YWlsX2lzb2xhdGVkIFx1MDAyNlx1MDAyNiBlbmQpXG4rXHRcdFx0KmVuZCA9IGZvbGlvMi1cdTAwM2VpbmRleDtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvMik7XG4gbm9fc3BsaXQ6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuLVx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRyZXR1cm4gdHJ1ZTtcbitcdGlmICghZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4rXHRcdHRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLVx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLypcbkBAIC00MTMsMTEgKzQyNyw5IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7XG4gXHRpZiAoIUlTX0VSUihmb2xpbykpIHtcbiBcdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbi1cdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XG4rXHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxuK1x0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4tXHRcdFx0aWYgKHNhbWVfZm9saW8pXG4tXHRcdFx0XHRlbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbi1cdFx0fVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG5AQCAtNDI3LDggKzQzOSw3IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRcdEZHUF9MT0NLLCAwKTtcbiBcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKVxuLVx0XHRcdFx0ZW5kID0gZm9saW8tXHUwMDNlaW5kZXg7XG4rXHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuIFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjA6NTAuNTE3Nzk2NDc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzMyNjk3NTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBGb2N1cyBvbiBUcnVuY2F0aW9uIGFuZCBTaGFyZWQgTWVtb3J5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgc3BlY2lmaWMgZmlsZXMgYW5kIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkLiBJdCdzIG1vZGlmeWluZyBgbW0vaW50ZXJuYWwuaGAsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS90cnVuY2F0ZS5jYC4gVGhhdCdzIGEgY2xlYXIgc2lnbmFsIOKAkyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgYW5kIHRoZSB0cnVuY2F0aW9uIG9mIGlub2Rlcy5cblxuVGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbXkgYXR0ZW50aW9uIGFyZTogYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VgIGluIGBtbS90cnVuY2F0ZS5jYCwgYW5kIGBzaG1lbV91bmRvX3JhbmdlYCBpbiBgbW0vc2htZW0uY2AuIFRoZSBmYWN0IHRoYXQgYHRydW5jYXRlYCBpcyBpbnZvbHZlZCBzdHJvbmdseSBzdWdnZXN0cyBjaGFuZ2VzIHRvIGhvdyBmaWxlcyBhcmUgc2hvcnRlbmVkIG9yIGNsZWFyZWQsIGFuZCBgc2htZW1gIGluZGljYXRlcyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLiBUaGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIHR3byBjb25jZXB0cyBpbW1lZGlhdGVseSBicmluZ3MgdXAgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHJlbGF0aW5nIHRvIGRhdGEgY29uc2lzdGVuY3kuXG5cbk15IG5leHQgc3RlcCBpcyB0byBnZXQgbXkgaGVhZCBhcm91bmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgc28gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIGBtbS90cnVuY2F0ZS5jYCBhbmQgYG1tL3NobWVtLmNgLiBUaGF0J3MgdGhlIG9ubHkgd2F5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjA6NTcuODQ0Nzc3MDk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3RydW5jYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiA5NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdFxcdFxcdFdBUk5fT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxuIDIwMTpcXHRcXHR9XFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdHJldHVybiByZXQ7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdC8qXFxuIDIwNzpcXHQgKiBIYW5kbGUgcGFydGlhbCBmb2xpb3MuICBUaGUgZm9saW8gbWF5IGJlIGVudGlyZWx5IHdpdGhpbiB0aGVcXG4gMjA4OlxcdCAqIHJhbmdlIGlmIGEgc3BsaXQgaGFzIHJhY2VkIHdpdGggdXMuICBJZiBub3QsIHdlIHplcm8gdGhlIHBhcnQgb2YgdGhlXFxuIDIwOTpcXHQgKiBmb2xpbyB0aGF0J3Mgd2l0aGluIHRoZSBbbHN0YXJ0LCBsZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmXFxuIDIxMDpcXHQgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxcbiAyMTE6XFx0ICogaV9zaXplLCBhbmQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGRpc2NhcmQgcGFnZXMgd2hpY2ggbGllIHdpdGhpbiBhXFxuIDIxMjpcXHQgKiBuZXdseSBjcmVhdGVkIGhvbGUuXFxuIDIxMzpcXHQgKlxcbiAyMTQ6XFx0ICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXFxuIDIxNTpcXHQgKiBhbmQgbXVzdCBiZSBrZXB0IGJ5IHRoZSBjYWxsZXIncyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZVxcbiAyMTY6XFx0ICogZm9saW8gd2FzIHNwbGl0LCAlZmFsc2Ugb3RoZXJ3aXNlLCBpbiB3aGljaCBjYXNlIHRoZSBmb2xpbyBpcyBkcm9wcGVkIG9yXFxuIDIxNzpcXHQgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXFxuIDIxODpcXHQgKi9cXG4gMjE5OlxcdGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxcbiAyMjA6XFx0XFx0XFx0XFx0XFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxcbiAyMjE6XFx0e1xcbiAyMjI6XFx0XFx0bG9mZl90IHBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XFxuIDIyMzpcXHRcXHRzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pO1xcbiAyMjQ6XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuZ3RoO1xcbiAyMjU6XFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCAqc3BsaXRfYXQyO1xcbiAyMjY6XFx0XFx0dW5zaWduZWQgaW50IG1pbl9vcmRlcjtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0aWYgKGVuZCBcXHUwMDI2XFx1MDAyNiBwb3MgKyBzaXplIFxcdTAwM2UgKHU2NClsZW5kKVxcbiAyMjk6XFx0XFx0XFx0KmVuZCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0aWYgKHBvcyBcXHUwMDNjIGxzdGFydClcXG4gMjMyOlxcdFxcdFxcdG9mZnNldCA9IGxzdGFydCAtIHBvcztcXG4gMjMzOlxcdFxcdGVsc2VcXG4gMjM0OlxcdFxcdFxcdG9mZnNldCA9IDA7XFxuIDIzNTpcXHRcXHRpZiAocG9zICsgc2l6ZSBcXHUwMDNjPSAodTY0KWxlbmQpXFxuIDIzNjpcXHRcXHRcXHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xcbiAyMzc6XFx0XFx0ZWxzZVxcbiAyMzg6XFx0XFx0XFx0bGVuZ3RoID0gbGVuZCArIDEgLSBwb3MgLSBvZmZzZXQ7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG4gMjQxOlxcdFxcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xcbiAyNDI6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcXG4gMjQzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQ0OlxcdFxcdH1cXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0LypcXG4gMjQ3OlxcdFxcdCAqIFdlIG1heSBiZSB6ZXJvaW5nIHBhZ2VzIHdlJ3JlIGFib3V0IHRvIGRpc2NhcmQsIGJ1dCBpdCBhdm9pZHNcXG4gMjQ4OlxcdFxcdCAqIGRvaW5nIGEgY29tcGxleCBjYWxjdWxhdGlvbiBoZXJlLCBhbmQgdGhlbiBkb2luZyB0aGUgemVyb2luZ1xcbiAyNDk6XFx0XFx0ICogYW55d2F5IGlmIHRoZSBwYWdlIHNwbGl0IGZhaWxzLlxcbiAyNTA6XFx0XFx0ICovXFxuIDI1MTpcXHRcXHRpZiAoIW1hcHBpbmdfaW5hY2Nlc3NpYmxlKGZvbGlvLVxcdTAwM2VtYXBwaW5nKSlcXG4gMjUyOlxcdFxcdFxcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxcbiAyNTU6XFx0XFx0XFx0Zm9saW9faW52YWxpZGF0ZShmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbiAyNTY6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4gMjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXFx1MDAzZW1hcHBpbmcpO1xcbiAyNjA6XFx0XFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XFxuIDI2MTpcXHRcXHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xcbiAyNjI6XFx0XFx0XFx0LypcXG4gMjYzOlxcdFxcdFxcdCAqIHRyeSB0byBzcGxpdCBhdCBvZmZzZXQgKyBsZW5ndGggdG8gbWFrZSBzdXJlIGZvbGlvcyB3aXRoaW5cXG4gMjY0OlxcdFxcdFxcdCAqIHRoZSByYW5nZSBjYW4gYmUgZHJvcHBlZCwgZXNwZWNpYWxseSB0byBhdm9pZCBtZW1vcnkgd2FzdGVcXG4gMjY1OlxcdFxcdFxcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxcbiAyNjY6XFx0XFx0XFx0ICovXFxuIDI2NzpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcXG4gMjY4OlxcdFxcdFxcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XFxuIDI2OTpcXHRcXG4gMjcwOlxcdFxcdFxcdGlmIChlbmQpXFxuIDI3MTpcXHRcXHRcXHRcXHQqZW5kID0gKHBvcyArIG9mZnNldCArIGxlbmd0aCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0XFx0aWYgKG9mZnNldCArIGxlbmd0aCA9PSBzaXplKVxcbiAyNzQ6XFx0XFx0XFx0XFx0Z290byBub19zcGxpdDtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0XFx0c3BsaXRfYXQyID0gZm9saW9fcGFnZShmb2xpbyxcXG4gMjc3OlxcdFxcdFxcdFxcdFxcdFBBR0VfQUxJR05fRE9XTihvZmZzZXQgKyBsZW5ndGgpIC8gUEFHRV9TSVpFKTtcXG4gMjc4OlxcdFxcdFxcdGZvbGlvMiA9IHBhZ2VfZm9saW8oc3BsaXRfYXQyKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0XFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvMikpXFxuIDI4MTpcXHRcXHRcXHRcXHRnb3RvIG5vX3NwbGl0O1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcXG4gMjg0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSkge1xcbiAyODc6XFx0XFx0XFx0XFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xcbiAyODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI4OTpcXHRcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdFxcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xcbiAyOTI6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSBcXHUwMDI2XFx1MDAyNlxcbiAyOTM6XFx0XFx0XFx0ICAgIGZvbGlvMi1cXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cXHUwMDNlbWFwcGluZyBcXHUwMDI2XFx1MDAyNlxcbiAyOTQ6XFx0XFx0XFx0ICAgIGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMDo1Ny44NDUwMjAzNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODM3OTU4ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0YWtlIGEgbG9vayBhdCBgbW0vc2htZW0uY2AgYXJvdW5kIGxpbmUgMTE3NSBhbmQgYG1tL3RydW5jYXRlLmNgIGFyb3VuZCBsaW5lIDQxMy4gVGhpcyBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi4gYHNobWVtYCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBzaGFyZWQgbWVtb3J5LCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRtcGZzIG9yIHNpbWlsYXIgbWVtb3J5LWJhc2VkIGZpbGUgc3lzdGVtcy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYXQgdGhhdCBwYXJ0aWN1bGFyIHBvaW50LCBwZXJoYXBzIHJlZ2FyZGluZyBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIHN5bmNocm9uaXphdGlvbi4gR2l2ZW4gdGhlIGxpbmUgbnVtYmVyLCBJJ2QgZXhwZWN0IHRvIGJlIGxvb2tpbmcgYXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHBhZ2UgY2FjaGUgYW5kIHNoYXJlZCBtZW1vcnkgaW4gdGhvc2UgbGluZXMuXG5cblRoZW4sIHR1cm5pbmcgdG8gYG1tL3RydW5jYXRlLmNgLCBsaW5lIDQxMyBsaWtlbHkgcmVsYXRlcyB0byB0aGUgdHJ1bmNhdGlvbiBvZiBhIGZpbGUgb3Igc2hhcmVkIG1lbW9yeSByZWdpb24uIFRoaXMgZnVuY3Rpb24gdXN1YWxseSBpbnZvbHZlcyByZWxlYXNpbmcgcmVzb3VyY2VzLCB1cGRhdGluZyBtZXRhZGF0YSwgYW5kIHBvdGVudGlhbGx5IGludmFsaWRhdGluZyBjYWNoZWQgZGF0YS4gSSdtIGJldHRpbmcgd2UncmUgbG9va2luZyBhdCB0aGUgZWZmZWN0cyBvZiB0aGUgdHJ1bmNhdGlvbiBvbiBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBiZSBhIHBhcnRpY3VsYXJseSB0cmlja3kgYXJlYS4gVGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSB0d28gZmlsZXMgYXJlIGEgbGlrZWx5IHNvdXJjZSBvZiBwb3RlbnRpYWwgZm9yIGRhdGEgY29ycnVwdGlvbiBhbmQgZXJyb3JzLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBiZSwgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjA3LjY4Mjk4MjUyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTcwOlxcdFxcdGlmICh1bmZhbGxvYylcXG4xMTcxOlxcdFxcdFxcdGdvdG8gd2hvbGVfZm9saW9zO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSA9PSAobGVuZCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMTc0OlxcdFxcdGZvbGlvID0gc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oaW5vZGUsIGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMTc1OlxcdFxcdGlmIChmb2xpbykge1xcbjExNzY6XFx0XFx0XFx0c2FtZV9mb2xpbyA9IGxlbmQgXFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XFxuMTE3NzpcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4xMTc4OlxcdFxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzYW1lX2ZvbGlvID8gXFx1MDAyNmVuZCA6IE5VTEwpKVxcbjExODA6XFx0XFx0XFx0XFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcXG4xMTgxOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTE4MjpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjExODM6XFx0XFx0XFx0Zm9saW8gPSBOVUxMO1xcbjExODQ6XFx0XFx0fVxcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAoIXNhbWVfZm9saW8pXFxuMTE4NzpcXHRcXHRcXHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbjExODg6XFx0XFx0aWYgKGZvbGlvKSB7XFxuMTE4OTpcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4xMTkwOlxcdFxcdFxcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXFx1MDAyNmVuZCk7XFxuMTE5MTpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjExOTI6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4xMTkzOlxcdFxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0d2hvbGVfZm9saW9zOlxcbjExOTY6XFx0XFxuMTE5NzpcXHRcXHRpbmRleCA9IHN0YXJ0O1xcbjExOTg6XFx0XFx0d2hpbGUgKGluZGV4IFxcdTAwM2MgZW5kKSB7XFxuMTE5OTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xMjAwOlxcdFxcbjEyMDE6XFx0XFx0XFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFxcdTAwMjZpbmRleCwgZW5kIC0gMSwgXFx1MDAyNmZiYXRjaCxcXG4xMjAyOlxcdFxcdFxcdFxcdFxcdGluZGljZXMpKSB7XFxuMTIwMzpcXHRcXHRcXHRcXHQvKiBJZiBhbGwgZ29uZSBvciBob2xlLXB1bmNoIG9yIHVuZmFsbG9jLCB3ZSdyZSBkb25lICovXFxuMTIwNDpcXHRcXHRcXHRcXHRpZiAoaW5kZXggPT0gc3RhcnQgfHwgZW5kICE9IC0xKVxcbjEyMDU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIwNjpcXHRcXHRcXHRcXHQvKiBCdXQgaWYgdHJ1bmNhdGluZywgcmVzdGFydCB0byBtYWtlIHN1cmUgYWxsIGdvbmUgKi9cXG4xMjA3OlxcdFxcdFxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuMTIwODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjA5OlxcdFxcdFxcdH1cXG4xMjEwOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcXHUwMDI2ZmJhdGNoKTsgaSsrKSB7XFxuMTIxMTpcXHRcXHRcXHRcXHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdFxcdFxcdGlmICh4YV9pc192YWx1ZShmb2xpbykpIHtcXG4xMjE0OlxcdFxcdFxcdFxcdFxcdGludCBvcmRlcjtcXG4xMjE1OlxcdFxcdFxcdFxcdFxcdGxvbmcgc3dhcHNfZnJlZWQ7XFxuMTIxNjpcXHRcXG4xMjE3OlxcdFxcdFxcdFxcdFxcdGlmICh1bmZhbGxvYylcXG4xMjE4OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMTk6XFx0XFx0XFx0XFx0XFx0c3dhcHNfZnJlZWQgPSBzaG1lbV9mcmVlX3N3YXAobWFwcGluZywgaW5kaWNlc1tpXSxcXG4xMjIwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGVuZCAtIDEsIGZvbGlvKTtcXG4xMjIxOlxcdFxcdFxcdFxcdFxcdGlmICghc3dhcHNfZnJlZWQpIHtcXG4xMjIyOlxcdFxcdFxcdFxcdFxcdFxcdHBnb2ZmX3QgYmFzZSA9IGluZGljZXNbaV07XFxuMTIyMzpcXHRcXG4xMjI0OlxcdFxcdFxcdFxcdFxcdFxcdG9yZGVyID0gc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGljZXNbaV0sXFxuMTIyNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICByYWRpeF90b19zd3BfZW50cnkoZm9saW8pKTtcXG4xMjI2OlxcdFxcdFxcdFxcdFxcdFxcdC8qXFxuMTIyNzpcXHRcXHRcXHRcXHRcXHRcXHQgKiBJZiBmb3VuZCBhIGxhcmdlIHN3YXAgZW50cnkgY3Jvc3MgdGhlIGVuZCBvciBzdGFydFxcbjEyMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXFxuMTIyOTpcXHRcXHRcXHRcXHRcXHRcXHQgKiBhYm92ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB6ZXJvZCBpdHMgY29udGVudCBvbmNlLlxcbjEyMzA6XFx0XFx0XFx0XFx0XFx0XFx0ICovXFxuMTIzMTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSAwKSB7XFxuMTIzMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRiYXNlID0gcm91bmRfZG93bihiYXNlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4xMjMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGlmIChiYXNlIFxcdTAwM2Mgc3RhcnQgfHwgYmFzZSArICgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSBcXHUwMDNlIGVuZClcXG4xMjM0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMzU6XFx0XFx0XFx0XFx0XFx0XFx0fVxcbjEyMzY6XFx0XFx0XFx0XFx0XFx0XFx0LyogU3dhcCB3YXMgcmVwbGFjZWQgYnkgcGFnZSBvciBleHRlbmRlZCwgcmV0cnkgKi9cXG4xMjM3OlxcdFxcdFxcdFxcdFxcdFxcdGluZGV4ID0gYmFzZTtcXG4xMjM4OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMzk6XFx0XFx0XFx0XFx0XFx0fVxcbjEyNDA6XFx0XFx0XFx0XFx0XFx0bnJfc3dhcHNfZnJlZWQgKz0gc3dhcHNfZnJlZWQ7XFxuMTI0MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjQyOlxcdFxcdFxcdFxcdH1cXG4xMjQzOlxcdFxcbjEyNDQ6XFx0XFx0XFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuMTI0NTpcXHRcXG4xMjQ2OlxcdFxcdFxcdFxcdGlmICghdW5mYWxsb2MgfHwgIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XFxuMTI0NzpcXHRcXHRcXHRcXHRcXHRpZiAoZm9saW9fbWFwcGluZyhmb2xpbykgIT0gbWFwcGluZykge1xcbjEyNDg6XFx0XFx0XFx0XFx0XFx0XFx0LyogUGFnZSB3YXMgcmVwbGFjZWQgYnkgc3dhcDogcmV0cnkgKi9cXG4xMjQ5OlxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTI1MDpcXHRcXHRcXHRcXHRcXHRcXHRpbmRleCA9IGluZGljZXNbaV07XFxuMTI1MTpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMjUyOlxcdFxcdFxcdFxcdFxcdH1cXG4xMjUzOlxcdFxcdFxcdFxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXFxuMTI1NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRmb2xpbyk7XFxuMTI1NTpcXHRcXG4xMjU2OlxcdFxcdFxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4xMjU3OlxcdFxcdFxcdFxcdFxcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4xMjU4OlxcdFxcdFxcdFxcdFxcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcXG4xMjU5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGxzdGFydCwgbGVuZCwgTlVMTCkpIHtcXG4xMjYwOlxcdFxcdFxcdFxcdFxcdFxcdC8qXFxuMTI2MTpcXHRcXHRcXHRcXHRcXHRcXHQgKiBJZiB3ZSBzcGxpdCBhIHBhZ2UsIHJlc2V0IHRoZSBsb29wIHNvXFxuMTI2MjpcXHRcXHRcXHRcXHRcXHRcXHQgKiB0aGF0IHdlIHBpY2sgdXAgdGhlIG5ldyBzdWIgcGFnZXMuXFxuMTI2MzpcXHRcXHRcXHRcXHRcXHRcXHQgKiBPdGhlcndpc2UgdGhlIFRIUCB3YXMgZW50aXJlbHlcXG4xMjY0OlxcdFxcdFxcdFxcdFxcdFxcdCAqIGRyb3BwZWQgb3IgdGhlIHRhcmdldCByYW5nZSB3YXNcXG4xMjY1OlxcdFxcdFxcdFxcdFxcdFxcdCAqIHplcm9lZCwgc28ganVzdCBjb250aW51ZSB0aGUgbG9vcCBhc1xcbjEyNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICogaXMuXFxuMTI2NzpcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4xMjY4OlxcdFxcdFxcdFxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4xMjY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjA3LjY4MzIzODI4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MzIzNzkwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYG1tL3RydW5jYXRlLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYHRydW5jYXRlYCBmdW5jdGlvbmFsaXR5LiBCYXNlZCBvbiB3aGF0IEknbSBsb29raW5nIGF0LCB0aGUgYXJlYSBvZiBpbnRlcmVzdCBzZWVtcyB0byBiZSBhcm91bmQgbGluZXMgNDEwIHRvIDQ1MCBpbiBgbW0vdHJ1bmNhdGUuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBrZXkgbG9naWMgdGhlcmUgcmVsYXRlZCB0byBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0cyB3aXRoIHRoZSB0cnVuY2F0aW9uIHByb2Nlc3MuIFByb2JhYmx5IHNvbWUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaW5vZGUsIHBhZ2UgY2FjaGUsIGFuZCBibG9jayBhbGxvY2F0aW9uLiBLbm93aW5nIHdoZXJlIHRoZSByZWxldmFudCBjb2RlIGxpZXMgYWxsb3dzIG1lIHRvIGZvY3VzIG15IGVmZm9ydHMuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgbGllIHdpdGhpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODk1NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6MTYuNTE1NjIyNDMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3RydW5jYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDEwOlxcdFxcdFxcdGVuZCA9IChsZW5kICsgMSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNDExOlxcdFxcbiA0MTI6XFx0XFx0Zm9saW9fYmF0Y2hfaW5pdChcXHUwMDI2ZmJhdGNoKTtcXG4gNDEzOlxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuIDQxNDpcXHRcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBlbmQgXFx1MDAyNlxcdTAwMjYgZmluZF9sb2NrX2VudHJpZXMobWFwcGluZywgXFx1MDAyNmluZGV4LCBlbmQgLSAxLFxcbiA0MTU6XFx0XFx0XFx0XFx0XFx1MDAyNmZiYXRjaCwgaW5kaWNlcykpIHtcXG4gNDE2OlxcdFxcdFxcdHRydW5jYXRlX2ZvbGlvX2JhdGNoX2V4Y2VwdGlvbmFscyhtYXBwaW5nLCBcXHUwMDI2ZmJhdGNoLCBpbmRpY2VzKTtcXG4gNDE3OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcXHUwMDI2ZmJhdGNoKTsgaSsrKVxcbiA0MTg6XFx0XFx0XFx0XFx0dHJ1bmNhdGVfY2xlYW51cF9mb2xpbyhmYmF0Y2guZm9saW9zW2ldKTtcXG4gNDE5OlxcdFxcdFxcdGRlbGV0ZV9mcm9tX3BhZ2VfY2FjaGVfYmF0Y2gobWFwcGluZywgXFx1MDAyNmZiYXRjaCk7XFxuIDQyMDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXFx1MDAyNmZiYXRjaCk7IGkrKylcXG4gNDIxOlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmYmF0Y2guZm9saW9zW2ldKTtcXG4gNDIyOlxcdFxcdFxcdGZvbGlvX2JhdGNoX3JlbGVhc2UoXFx1MDAyNmZiYXRjaCk7XFxuIDQyMzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNDI0OlxcdFxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0XFx0c2FtZV9mb2xpbyA9IChsc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCkgPT0gKGxlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuIDQyNzpcXHRcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIEZHUF9MT0NLLCAwKTtcXG4gNDI4OlxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbiA0Mjk6XFx0XFx0XFx0c2FtZV9mb2xpbyA9IGxlbmQgXFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XFxuIDQzMDpcXHRcXHRcXHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCxcXG4gNDMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc2FtZV9mb2xpbyA/IFxcdTAwMjZlbmQgOiBOVUxMKSlcXG4gNDMyOlxcdFxcdFxcdFxcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XFxuIDQzMzpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiA0MzQ6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gNDM1OlxcdFxcdFxcdGZvbGlvID0gTlVMTDtcXG4gNDM2OlxcdFxcdH1cXG4gNDM3OlxcdFxcbiA0Mzg6XFx0XFx0aWYgKCFzYW1lX2ZvbGlvKSB7XFxuIDQzOTpcXHRcXHRcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbGVuZCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbiA0NDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0ssIDApO1xcbiA0NDE6XFx0XFx0XFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XFxuIDQ0MjpcXHRcXHRcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFxcdTAwMjZlbmQpO1xcbiA0NDM6XFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gNDQ0OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDQ0NTpcXHRcXHRcXHR9XFxuIDQ0NjpcXHRcXHR9XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuIDQ0OTpcXHRcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBlbmQpIHtcXG4gNDUwOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiA0NTE6XFx0XFx0XFx0aWYgKCFmaW5kX2dldF9lbnRyaWVzKG1hcHBpbmcsIFxcdTAwMjZpbmRleCwgZW5kIC0gMSwgXFx1MDAyNmZiYXRjaCxcXG4gNDUyOlxcdFxcdFxcdFxcdFxcdGluZGljZXMpKSB7XFxuIDQ1MzpcXHRcXHRcXHRcXHQvKiBJZiBhbGwgZ29uZSBmcm9tIHN0YXJ0IG9ud2FyZHMsIHdlJ3JlIGRvbmUgKi9cXG4gNDU0OlxcdFxcdFxcdFxcdGlmIChpbmRleCA9PSBzdGFydClcXG4gNDU1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NTY6XFx0XFx0XFx0XFx0LyogT3RoZXJ3aXNlIHJlc3RhcnQgdG8gbWFrZSBzdXJlIGFsbCBnb25lICovXFxuIDQ1NzpcXHRcXHRcXHRcXHRpbmRleCA9IHN0YXJ0O1xcbiA0NTg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ1OTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjE2LjUxNTc0OTE4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMjIzODk1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogUGF0Y2ggV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgYXJlYXMuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgbW0vdHJ1bmNhdGUuY2AgYW5kIGBtbS9zaG1lbS5jYCBmaWxlcy4gV2UncmUgbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAuIFRoZXNlIGFyZSBpbnRpbWF0ZWx5IGludm9sdmVkIGluIHRydW5jYXRpb24gb3BlcmF0aW9ucywgaG9sZSBwdW5jaGluZyAodmlhIGBmYWxsb2NhdGVgKSwgYGZ0cnVuY2F0ZWAsIGFuZCBwYWdlIGNhY2hlIG1hbmFnZW1lbnQuIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGNvcmUgdG8gZmlsZSBzeXN0ZW0gYmVoYXZpb3IgYW5kIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuVGhlIGZhY3QgdGhhdCB0aGlzIHRvdWNoZXMgdGhlIHBhZ2UgY2FjaGUsIGZvbGlvIGhhbmRsaW5nLCBhbmQgZXZlbiBkZWFscyB3aXRoIGxhcmdlIGZvbGlvcyBvciBUSFAgc3BsaXR0aW5nIGFuZCB0cnVuY2F0aW9uLCBtZWFucyBpdCdzIGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBhZmZlY3RlZCBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHN5c2NhbGxzOiBgdHJ1bmNhdGVgLCBgZnRydW5jYXRlYCwgYW5kIGBmYWxsb2NhdGVgLCB3aGljaCBhcmUgY29tbW9ubHkgdXNlZCBvbiByZWd1bGFyIGZpbGVzLCBhcyB3ZWxsIGFzIGBzaG1lbWAsIGB0bXBmc2AsIGFuZCBgbWVtZmRgLiBUaGF0IG1ha2VzIGl0IGV2ZW4gbW9yZSBpbXBvcnRhbnQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudD8gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgYSBkZWVwIGRpdmUuIEkgbmVlZCB0byBub3cgZXhhbWluZSB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB0byBzZWUgd2hhdCBhZGRpdGlvbmFsIGRldGFpbHMgSSBjYW4gZ2xlYW4uIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCByZWxhdGlvbnNoaXBzIGJldHdlZW4gYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGFuZCBhbnkgb3RoZXIgY2FsbGVycyBvciByZWxhdGVkIGZ1bmN0aW9ucy4gSSdsbCBydW4gYSBncmVwIHRvIGNvbmZpcm0gdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMToyMy44MzgxNDMzODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTU4NTc0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTYyOT1pbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6NjMwOmJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxcbm1tL2ludGVybmFsLmgtNjMxLVxcdFxcdGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpO1xcbi0tXFxubW0vc2htZW0uYz0xMTE5PXN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXFxuLS1cXG5tbS9zaG1lbS5jLTExNzctXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxubW0vc2htZW0uYzoxMTc4OlxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbm1tL3NobWVtLmMtMTE3OS1cXHRcXHRcXHRcXHRcXHRcXHQgIHNhbWVfZm9saW8gPyBcXHUwMDI2ZW5kIDogTlVMTCkpXFxuLS1cXG5tbS9zaG1lbS5jLTExODktXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxubW0vc2htZW0uYzoxMTkwOlxcdFxcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXFx1MDAyNmVuZCk7XFxubW0vc2htZW0uYy0xMTkxLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLS1cXG5tbS9zaG1lbS5jLTEyMjctXFx0XFx0XFx0XFx0XFx0ICogSWYgZm91bmQgYSBsYXJnZSBzd2FwIGVudHJ5IGNyb3NzIHRoZSBlbmQgb3Igc3RhcnRcXG5tbS9zaG1lbS5jOjEyMjg6XFx0XFx0XFx0XFx0XFx0ICogYm9yZGVyLCBza2lwIGl0IGFzIHRoZSB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXFxubW0vc2htZW0uYy0xMjI5LVxcdFxcdFxcdFxcdFxcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXFxuLS1cXG5tbS9zaG1lbS5jLTEyNTctXFx0XFx0XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8obWFwcGluZywgZm9saW8pO1xcbm1tL3NobWVtLmM6MTI1ODpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXFxubW0vc2htZW0uYy0xMjU5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGxzdGFydCwgbGVuZCwgTlVMTCkpIHtcXG4tLVxcbm1tL3RydW5jYXRlLmM9MTgwPXN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxcbi0tXFxubW0vdHJ1bmNhdGUuYy0yMTgtICovXFxubW0vdHJ1bmNhdGUuYzoyMTk6Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsXFxubW0vdHJ1bmNhdGUuYy0yMjAtXFx0XFx0XFx0XFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxcbi0tXFxubW0vdHJ1bmNhdGUuYz0zODA9dm9pZCB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3RydW5jYXRlLmMtNDI5LVxcdFxcdHNhbWVfZm9saW8gPSBsZW5kIFxcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xcbm1tL3RydW5jYXRlLmM6NDMwOlxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbm1tL3RydW5jYXRlLmMtNDMxLVxcdFxcdFxcdFxcdFxcdFxcdCAgc2FtZV9mb2xpbyA/IFxcdTAwMjZlbmQgOiBOVUxMKSlcXG4tLVxcbm1tL3RydW5jYXRlLmMtNDQxLVxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbm1tL3RydW5jYXRlLmM6NDQyOlxcdFxcdFxcdHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCwgXFx1MDAyNmVuZCk7XFxubW0vdHJ1bmNhdGUuYy00NDMtXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6MjYuNTM0MDEyMDk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NzQ0NTgxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIHBpZWNlZCB0b2dldGhlciBmcm9tIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBzb21lIHNoYXJlZCBtZW1vcnkgYW5kIHRydW5jYXRpb24gZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdG9wIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBgbW0vc2htZW0uY2AgYW5kIGBtbS90cnVuY2F0ZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQsIGlmIGFueSwgZmxleGliaWxpdHkgaXMgb2ZmZXJlZCBhdCBjb21waWxlIHRpbWUuIEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBvcHRpb25hbCBmZWF0dXJlcyBJIHNob3VsZCBrbm93IGFib3V0PyBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC5cblxuVGhlbiwgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgcHJvY2VzcywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgdGhhdCBkZXRlcm1pbmUgaG93IGBzaG1lbS5vYCBhbmQgYHRydW5jYXRlLm9gIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gV2hhdCBvdGhlciBzb3VyY2UgZmlsZXMgYXJlIGJ1aWx0IGFsb25nc2lkZSB0aGVzZT8gQXJlIHRoZXJlIGFueSBjb21waWxlciBmbGFncyBvciBzcGVjaWZpYyBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMgSSBzaG91bGQga25vdyBhYm91dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGVzZSBmaWxlcyB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gQnkgdW5kZXJzdGFuZGluZyB0aGUgTWFrZWZpbGUgSSBjYW4gZmlndXJlIG91dCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgaGl0cyB0aGUgcm9hZCBpbiB0ZXJtcyBvZiBzZWVpbmcgdGhlIG92ZXJhbGwgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQgYWxsIHdvcmtzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjMwLjQwODQ3MzQ5NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxMDY3NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHRydW5jYXRlfHNobWVtKVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Mi1cXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxubW0vTWFrZWZpbGU6NTM6XFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gZm9saW8ubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU0OlxcdFxcdFxcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU1LVxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG4tLVxcbm1tL3NobWVtLmM9NTIwPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy01NjktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmM6NTcwOi8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cXG5tbS9zaG1lbS5jLTU3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6MzAuNDcwNTg2MzYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MjY3MTE1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBNZW1vcnkgRmlsZXN5c3RlbXMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IG1lbW9yeS1iYXNlZCBmaWxlc3lzdGVtcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBjdXJyZW50bHkgZW5hYmxlZCBpbiB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHJlZ2FyZGluZyBzaGFyZWQgbWVtb3J5LCB0ZW1wb3JhcnkgZmlsZXN5c3RlbXMsIGFuZCB0cmFuc3BhcmVudCBodWdlcGFnZXMuIEl0J3MgYSBjb21tb24gZGVwZW5kZW5jeSBhbmFseXNpcywgbm90aGluZyBuZXcuXG5cbk15IGZpcnN0IGNoZWNrIHdpbGwgYmUgZm9yIGBDT05GSUdfU0hNRU1gLCBgQ09ORklHX1RNUEZTYCwgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGtub3cgdGhlc2UgYXJlIGltcG9ydGFudC4gU3BlY2lmaWNhbGx5IGZvciBgQ09ORklHX1NITUVNYCwgSSdsbCBwcm9iYWJseSBzdGFydCBkaWdnaW5nIGludG8gYG1tL3NobWVtLmNgIG9yIG1heWJlIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGVzZSBmaWxlcyB0ZW5kIHRvIGJlIG15IGdvLXRvJ3MgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIGZvciB0aGF0IHNwZWNpZmljIHN1YnN5c3RlbSBhbmQgaG93IGl0IGhvb2tzIGludG8gdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50LiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhhdCBzaGFyZWQgbWVtb3J5IGlzLCB3ZWxsLCBzaGFyZWQgbWVtb3J5IG1hbmFnZWQgYnkgdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjM0LjA5NzMwMTA3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2OTQ0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NITUVNfENPTkZJR19UTVBGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTQ2PW9iai0kKENPTkZJR19FWEVDTUVNKSArPSBleGVjbWVtLm9cXG5tbS9NYWtlZmlsZToxNDc6b2JqLSQoQ09ORklHX1RNUEZTX1FVT1RBKSArPSBzaG1lbV9xdW90YS5vXFxubW0vTWFrZWZpbGUtMTQ4LW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz02MTk9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmh1Z2VwYWdlX2F0dHJbXSA9IHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjIzLVxcdFxcdTAwMjZocGFnZV9wbWRfc2l6ZV9hdHRyLmF0dHIsXFxubW0vaHVnZV9tZW1vcnkuYzo2MjQ6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjI1LVxcdFxcdTAwMjZzaG1lbV9lbmFibGVkX2F0dHIuYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NzIwPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmaWxlX2N0cmxfYXR0cnNbXSA9IHtcXG5tbS9odWdlX21lbW9yeS5jOjcyMTojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy03MjItXFx0XFx1MDAyNnRocHNpemVfc2htZW1fZW5hYmxlZF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTc4MD1ERUZJTkVfTVRIUF9TVEFUX0FUVFIoc3dwb3V0X2ZhbGxiYWNrLCBNVEhQX1NUQVRfU1dQT1VUX0ZBTExCQUNLKTtcXG5tbS9odWdlX21lbW9yeS5jOjc4MTojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy03ODItREVGSU5FX01USFBfU1RBVF9BVFRSKHNobWVtX2FsbG9jLCBNVEhQX1NUQVRfU0hNRU1fQUxMT0MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz03OTY9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFub25fc3RhdHNfYXR0cnNbXSA9IHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNzk5LVxcdFxcdTAwMjZhbm9uX2ZhdWx0X2ZhbGxiYWNrX2NoYXJnZV9hdHRyLmF0dHIsXFxubW0vaHVnZV9tZW1vcnkuYzo4MDA6I2lmbmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTgwMS1cXHRcXHUwMDI2enN3cG91dF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTgyMj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZmlsZV9zdGF0c19hdHRyc1tdID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODIzOiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTgyNC1cXHRcXHUwMDI2c2htZW1fYWxsb2NfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz04MzY9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFueV9zdGF0c19hdHRyc1tdID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODM3OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTgzOC1cXHRcXHUwMDI2enN3cG91dF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zNDAzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9saWN5X21vZGVzW10gPVxcbi0tXFxubW0vbWVtcG9saWN5LmMtMzQxMy1cXG5tbS9tZW1wb2xpY3kuYzozNDE0OiNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9tZW1wb2xpY3kuYy0zNDE1LS8qKlxcbi0tXFxubW0vbWVtcG9saWN5LmM9MzQyNT1pbnQgbXBvbF9wYXJzZV9zdHIoY2hhciAqc3RyLCBzdHJ1Y3QgbWVtcG9saWN5ICoqbXBvbClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM1NDctfVxcbm1tL21lbXBvbGljeS5jOjM1NDg6I2VuZGlmIC8qIENPTkZJR19UTVBGUyAqL1xcbm1tL21lbXBvbGljeS5jLTM1NDktXFxuLS1cXG5tbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xcbm1tL3NobWVtLmMtNDctXFxubW0vc2htZW0uYzo0ODojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vc2htZW0uYy00OS0vKlxcbi0tXFxubW0vc2htZW0uYz0xNDI9c3RhdGljIGJvb2wgc2htZW1fb3JkZXJzX2NvbmZpZ3VyZWQgX19pbml0ZGF0YTtcXG4tLVxcbm1tL3NobWVtLmMtMTQ0LVxcbm1tL3NobWVtLmM6MTQ1OiNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9zaG1lbS5jLTE0Ni1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9ibG9ja3Modm9pZClcXG4tLVxcbm1tL3NobWVtLmM9Mjk0PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2htZW1fc3dhcGxpc3RfbG9jayk7XFxubW0vc2htZW0uYy0yOTUtXFxubW0vc2htZW0uYzoyOTY6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxcbm1tL3NobWVtLmMtMjk3LVxcbi0tXFxubW0vc2htZW0uYz0zMzE9c3RhdGljIHN0cnVjdCBkcXVvdCBfX3JjdSAqKnNobWVtX2dldF9kcXVvdHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtMzM0LX1cXG5tbS9zaG1lbS5jOjMzNTojZW5kaWYgLyogQ09ORklHX1RNUEZTX1FVT1RBICovXFxubW0vc2htZW0uYy0zMzYtXFxuLS1cXG5tbS9zaG1lbS5jPTY3MD1zdGF0aWMgaW50IHNobWVtX3BhcnNlX2h1Z2UoY29uc3QgY2hhciAqc3RyKVxcbi0tXFxubW0vc2htZW0uYy03MDMtXFxubW0vc2htZW0uYzo3MDQ6I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSB8fCBkZWZpbmVkKENPTkZJR19UTVBGUylcXG5tbS9zaG1lbS5jLTcwNS1zdGF0aWMgY29uc3QgY2hhciAqc2htZW1fZm9ybWF0X2h1Z2UoaW50IGh1Z2UpXFxuLS1cXG5tbS9zaG1lbS5jPTE0MDc9c3RhdGljIHZvaWQgc2htZW1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtMTQ0NS1cXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxubW0vc2htZW0uYzoxNDQ2OiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTE0NDctXFx0ZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7XFxuLS1cXG5tbS9zaG1lbS5jPTE3NTI9RVhQT1JUX1NZTUJPTF9HUEwoc2htZW1fd3JpdGVvdXQpO1xcbm1tL3NobWVtLmMtMTc1My1cXG5tbS9zaG1lbS5jOjE3NTQ6I2lmIGRlZmluZWQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1RNUEZTKVxcbm1tL3NobWVtLmMtMTc1NS1zdGF0aWMgdm9pZCBzaG1lbV9zaG93X21wb2woc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wpXFxuLS1cXG5tbS9zaG1lbS5jPTE3Njc9c3RhdGljIHN0cnVjdCBtZW1wb2xpY3kgKnNobWVtX2dldF9zYm1wb2woc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbylcXG4tLVxcbm1tL3NobWVtLmMtMTc3Ny19XFxubW0vc2htZW0uYzoxNzc4OiNlbHNlIC8qICFDT05GSUdfTlVNQSB8fCAhQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy0xNzc5LXN0YXRpYyBpbmxpbmUgdm9pZCBzaG1lbV9zaG93X21wb2woc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wpXFxuLS1cXG5tbS9zaG1lbS5jPTE3ODI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtcG9saWN5ICpzaG1lbV9nZXRfc2JtcG9sKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8pXFxuLS1cXG5tbS9zaG1lbS5jLTE3ODUtfVxcbm1tL3NobWVtLmM6MTc4NjojZW5kaWYgLyogQ09ORklHX05VTUEgXFx1MDAyNlxcdTAwMjYgQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy0xNzg3LVxcbi0tXFxubW0vc2htZW0uYz0yOTIxPXN0YXRpYyBpbnQgc2htZW1fZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxubW0vc2htZW0uYy0yOTI2LVxcbm1tL3NobWVtLmM6MjkyNzojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXFxubW0vc2htZW0uYy0yOTI4LXN0YXRpYyBpbnQgc2htZW1faW5pdHhhdHRycyhzdHJ1Y3QgaW5vZGUgKiwgY29uc3Qgc3RydWN0IHhhdHRyICosIHZvaWQgKik7XFxuLS1cXG5tbS9zaG1lbS5jPTMwMTI9c3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTMwOTAtXFxubW0vc2htZW0uYzozMDkxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTMwOTItc3RhdGljIHN0cnVjdCBpbm9kZSAqc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxubW0vc2htZW0uYz0zMTIwPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtMzEyNS19XFxubW0vc2htZW0uYzozMTI2OiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfUVVPVEEgKi9cXG5tbS9zaG1lbS5jLTMxMjctXFxuLS1cXG5tbS9zaG1lbS5jPTMyMTU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyBzaG1lbV91ZmZkX29wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtMzIyMy1cXG5tbS9zaG1lbS5jOjMyMjQ6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtMzIyNS1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbi0tXFxubW0vc2htZW0uYz00MDk4PXN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTQxMjktXFxubW0vc2htZW0uYzo0MTMwOiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcXG5tbS9zaG1lbS5jLTQxMzEtXFxuLS1cXG5tbS9zaG1lbS5jPTQzMTQ9c3RhdGljIHNzaXplX3Qgc2htZW1fbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL3NobWVtLmMtNDMxOS19XFxubW0vc2htZW0uYzo0MzIwOiNlbmRpZiAvKiBDT05GSUdfVE1QRlNfWEFUVFIgKi9cXG5tbS9zaG1lbS5jLTQzMjEtXFxubW0vc2htZW0uYz00MzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTQzMjUtXFx0LmdldF9saW5rXFx0PSBzaW1wbGVfZ2V0X2xpbmssXFxubW0vc2htZW0uYzo0MzI2OiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcXG5tbS9zaG1lbS5jLTQzMjctXFx0Lmxpc3R4YXR0clxcdD0gc2htZW1fbGlzdHhhdHRyLFxcbi0tXFxubW0vc2htZW0uYz00MzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTQzMzQtXFx0LmdldF9saW5rXFx0PSBzaG1lbV9nZXRfbGluayxcXG5tbS9zaG1lbS5jOjQzMzU6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcbm1tL3NobWVtLmMtNDMzNi1cXHQubGlzdHhhdHRyXFx0PSBzaG1lbV9saXN0eGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTQ0NTI9Y29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIHNobWVtX2ZzX3BhcmFtZXRlcnNbXSA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNDQ2My1cXHRmc3BhcmFtX2ZsYWcgIChcXFwibm9zd2FwXFxcIixcXHRPcHRfbm9zd2FwKSxcXG5tbS9zaG1lbS5jOjQ0NjQ6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxcbm1tL3NobWVtLmMtNDQ2NS1cXHRmc3BhcmFtX2ZsYWcgIChcXFwicXVvdGFcXFwiLFxcdFxcdE9wdF9xdW90YSksXFxuLS1cXG5tbS9zaG1lbS5jPTQ3MzQ9c3RhdGljIGludCBzaG1lbV9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTQ3ODctXFxubW0vc2htZW0uYzo0Nzg4OiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTQ3ODktI2RlZmluZSBDSEFOR0VEX0xJTUlUKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vc2htZW0uYy00Nzk3LVxcdH1cXG5tbS9zaG1lbS5jOjQ3OTg6I2VuZGlmIC8qIENPTkZJR19UTVBGU19RVU9UQSAqL1xcbm1tL3NobWVtLmMtNDc5OS1cXG4tLVxcbm1tL3NobWVtLmM9NDgzMT1zdGF0aWMgaW50IHNobWVtX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbm1tL3NobWVtLmMtNDg2OC1cXHQgKi9cXG5tbS9zaG1lbS5jOjQ4Njk6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RNUEZTX0lOT0RFNjQpIHx8IHNiaW5mby1cXHUwMDNlZnVsbF9pbnVtcylcXG5tbS9zaG1lbS5jLTQ4NzAtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIsaW5vZGUlZFxcXCIsIChzYmluZm8tXFx1MDAzZWZ1bGxfaW51bXMgPyA2NCA6IDMyKSk7XFxuLS1cXG5tbS9zaG1lbS5jLTQ4ODAtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIsbm9zd2FwXFxcIik7XFxubW0vc2htZW0uYzo0ODgxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTQ4ODItXFx0aWYgKHNiX2hhc19xdW90YV9hY3RpdmUocm9vdC1cXHUwMDNlZF9zYiwgVVNSUVVPVEEpKVxcbi0tXFxubW0vc2htZW0uYy00OTAxLVxcbm1tL3NobWVtLmM6NDkwMjojZW5kaWYgLyogQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy00OTAzLVxcbm1tL3NobWVtLmM9NDkwND1zdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbm1tL3NobWVtLmMtNDkxMi1cXG5tbS9zaG1lbS5jOjQ5MTM6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxcbm1tL3NobWVtLmMtNDkxNC1cXHRzaG1lbV9kaXNhYmxlX3F1b3RhcyhzYik7XFxuLS1cXG5tbS9zaG1lbS5jLTQ5MTgtXFx0bXBvbF9wdXQoc2JpbmZvLVxcdTAwM2VtcG9sKTtcXG5tbS9zaG1lbS5jOjQ5MTk6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcbm1tL3NobWVtLmMtNDkyMC1cXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcXHUwMDI2c2JpbmZvLVxcdTAwM2V4YV9jYWNoZSk7XFxuLS1cXG5tbS9zaG1lbS5jLTQ5MjUtXFxubW0vc2htZW0uYzo0OTI2OiNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19UTVBGUylcXG5tbS9zaG1lbS5jLTQ5Mjctc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzaG1lbV9jaV9kZW50cnlfb3BzID0ge1xcbi0tXFxubW0vc2htZW0uYz00OTMzPXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTQ5NDctXFxubW0vc2htZW0uYzo0OTQ4OiNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9zaG1lbS5jLTQ5NDktXFx0LypcXG4tLVxcbm1tL3NobWVtLmMtNDk1OS1cXHRcXHRpZiAoIShjdHgtXFx1MDAzZXNlZW4gXFx1MDAyNiBTSE1FTV9TRUVOX0lOVU1TKSlcXG5tbS9zaG1lbS5jOjQ5NjA6XFx0XFx0XFx0Y3R4LVxcdTAwM2VmdWxsX2ludW1zID0gSVNfRU5BQkxFRChDT05GSUdfVE1QRlNfSU5PREU2NCk7XFxubW0vc2htZW0uYy00OTYxLVxcdFxcdHNiaW5mby1cXHUwMDNlbm9zd2FwID0gY3R4LVxcdTAwM2Vub3N3YXA7XFxuLS1cXG5tbS9zaG1lbS5jLTQ5ODQtXFx0c2ItXFx1MDAzZXNfZmxhZ3MgfD0gU0JfTk9VU0VSO1xcbm1tL3NobWVtLmM6NDk4NTojZW5kaWYgLyogQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy00OTg2LVxcdHNiLVxcdTAwM2VzX2RfZmxhZ3MgfD0gRENBQ0hFX0RPTlRDQUNIRTtcXG4tLVxcbm1tL3NobWVtLmMtNTAxOS1cXHRzYi1cXHUwMDNlc190aW1lX2dyYW4gPSAxO1xcbm1tL3NobWVtLmM6NTAyMDojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXFxubW0vc2htZW0uYy01MDIxLVxcdHNiLVxcdTAwM2VzX3hhdHRyID0gc2htZW1feGF0dHJfaGFuZGxlcnM7XFxubW0vc2htZW0uYy01MDIyLSNlbmRpZlxcbm1tL3NobWVtLmM6NTAyMzojaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTFxcbm1tL3NobWVtLmMtNTAyNC1cXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9QT1NJWEFDTDtcXG4tLVxcbm1tL3NobWVtLmMtNTAyOS1cXG5tbS9zaG1lbS5jOjUwMzA6I2lmZGVmIENPTkZJR19UTVBGU19RVU9UQVxcbm1tL3NobWVtLmMtNTAzMS1cXHRpZiAoY3R4LVxcdTAwM2VzZWVuIFxcdTAwMjYgU0hNRU1fU0VFTl9RVU9UQSkge1xcbi0tXFxubW0vc2htZW0uYy01MDQyLVxcdH1cXG5tbS9zaG1lbS5jOjUwNDM6I2VuZGlmIC8qIENPTkZJR19UTVBGU19RVU9UQSAqL1xcbm1tL3NobWVtLmMtNTA0NC1cXG4tLVxcbm1tL3NobWVtLmM9NTA3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBzaG1lbV9mc19jb250ZXh0X29wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTA4MS1cXHQuZ2V0X3RyZWVcXHRcXHQ9IHNobWVtX2dldF90cmVlLFxcbm1tL3NobWVtLmM6NTA4MjojaWZkZWYgQ09ORklHX1RNUEZTXFxubW0vc2htZW0uYy01MDgzLVxcdC5wYXJzZV9tb25vbGl0aGljXFx0PSBzaG1lbV9wYXJzZV9tb25vbGl0aGljLFxcbi0tXFxubW0vc2htZW0uYz01MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNobWVtX2FvcHMgPSB7XFxubW0vc2htZW0uYy01MTQxLVxcdC5kaXJ0eV9mb2xpb1xcdD0gbm9vcF9kaXJ0eV9mb2xpbyxcXG5tbS9zaG1lbS5jOjUxNDI6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtNTE0My1cXHQud3JpdGVfYmVnaW5cXHQ9IHNobWVtX3dyaXRlX2JlZ2luLFxcbi0tXFxubW0vc2htZW0uYz01MTUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobWVtX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTE1NS1cXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYSxcXG5tbS9zaG1lbS5jOjUxNTY6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtNTE1Ny1cXHQubGxzZWVrXFx0XFx0PSBzaG1lbV9maWxlX2xsc2VlayxcXG4tLVxcbm1tL3NobWVtLmM9NTE2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1faW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTE3MC1cXHQuc2V0YXR0clxcdD0gc2htZW1fc2V0YXR0cixcXG5tbS9zaG1lbS5jOjUxNzE6I2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcbm1tL3NobWVtLmMtNTE3Mi1cXHQubGlzdHhhdHRyXFx0PSBzaG1lbV9saXN0eGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTUxNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xcbm1tL3NobWVtLmM6NTE4MDojaWZkZWYgQ09ORklHX1RNUEZTXFxubW0vc2htZW0uYy01MTgxLVxcdC5nZXRhdHRyXFx0PSBzaG1lbV9nZXRhdHRyLFxcbi0tXFxubW0vc2htZW0uYy01MTkzLSNlbmRpZlxcbm1tL3NobWVtLmM6NTE5NDojaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXFxubW0vc2htZW0uYy01MTk1LVxcdC5saXN0eGF0dHJcXHQ9IHNobWVtX2xpc3R4YXR0cixcXG4tLVxcbm1tL3NobWVtLmMtNTE5OC0jZW5kaWZcXG5tbS9zaG1lbS5jOjUxOTk6I2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0xcXG5tbS9zaG1lbS5jLTUyMDAtXFx0LnNldGF0dHJcXHQ9IHNobWVtX3NldGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTUyMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5tbS9zaG1lbS5jLTUyMDYtXFx0LmdldGF0dHJcXHQ9IHNobWVtX2dldGF0dHIsXFxubW0vc2htZW0uYzo1MjA3OiNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcXG5tbS9zaG1lbS5jLTUyMDgtXFx0Lmxpc3R4YXR0clxcdD0gc2htZW1fbGlzdHhhdHRyLFxcbm1tL3NobWVtLmMtNTIwOS0jZW5kaWZcXG5tbS9zaG1lbS5jOjUyMTA6I2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0xcXG5tbS9zaG1lbS5jLTUyMTEtXFx0LnNldGF0dHJcXHQ9IHNobWVtX3NldGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTUyMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTIxOS1cXHQuZGVzdHJveV9pbm9kZVxcdD0gc2htZW1fZGVzdHJveV9pbm9kZSxcXG5tbS9zaG1lbS5jOjUyMjA6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtNTIyMS1cXHQuc3RhdGZzXFx0XFx0PSBzaG1lbV9zdGF0ZnMsXFxuLS1cXG5tbS9zaG1lbS5jLTUyMjMtI2VuZGlmXFxubW0vc2htZW0uYzo1MjI0OiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTUyMjUtXFx0LmdldF9kcXVvdHNcXHQ9IHNobWVtX2dldF9kcXVvdHMsXFxuLS1cXG5tbS9zaG1lbS5jPTUyNjA9aW50IHNobWVtX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTUyNzctXFx0ZmMtXFx1MDAzZW9wcyA9IFxcdTAwMjZzaG1lbV9mc19jb250ZXh0X29wcztcXG5tbS9zaG1lbS5jOjUyNzg6I2lmZGVmIENPTkZJR19UTVBGU1xcbm1tL3NobWVtLmMtNTI3OS1cXHRmYy1cXHUwMDNlc2JfZmxhZ3MgfD0gU0JfSV9WRVJTSU9OO1xcbi0tXFxubW0vc2htZW0uYz01Mjg0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBzaG1lbV9mc190eXBlID0ge1xcbi0tXFxubW0vc2htZW0uYy01Mjg3LVxcdC5pbml0X2ZzX2NvbnRleHQgPSBzaG1lbV9pbml0X2ZzX2NvbnRleHQsXFxubW0vc2htZW0uYzo1Mjg4OiNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9zaG1lbS5jLTUyODktXFx0LnBhcmFtZXRlcnNcXHQ9IHNobWVtX2ZzX3BhcmFtZXRlcnMsXFxuLS1cXG5tbS9zaG1lbS5jLTUyOTQtXFxubW0vc2htZW0uYzo1Mjk1OiNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfVE1QRlMpXFxubW0vc2htZW0uYy01Mjk2LVxcbi0tXFxubW0vc2htZW0uYz01MzM5PXN0YXRpYyBpbnQgX19pbml0IHRtcGZzX3N5c2ZzX2luaXQodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtNTM1Mi19XFxubW0vc2htZW0uYzo1MzUzOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHX1RNUEZTICovXFxubW0vc2htZW0uYy01MzU0LVxcbm1tL3NobWVtLmM9NTM1NT12b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXFxuLS1cXG5tbS9zaG1lbS5jLTUzNjAtXFxubW0vc2htZW0uYzo1MzYxOiNpZmRlZiBDT05GSUdfVE1QRlNfUVVPVEFcXG5tbS9zaG1lbS5jLTUzNjItXFx0cmVnaXN0ZXJfcXVvdGFfZm9ybWF0KFxcdTAwMjZzaG1lbV9xdW90YV9mb3JtYXQpO1xcbi0tXFxubW0vc2htZW0uYy01Mzc3LVxcbm1tL3NobWVtLmM6NTM3ODojaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1RNUEZTKVxcbm1tL3NobWVtLmMtNTM3OS1cXHRlcnJvciA9IHRtcGZzX3N5c2ZzX2luaXQoKTtcXG4tLVxcbm1tL3NobWVtLmMtNTQwMy1vdXQyOlxcbm1tL3NobWVtLmM6NTQwNDojaWZkZWYgQ09ORklHX1RNUEZTX1FVT1RBXFxubW0vc2htZW0uYy01NDA1LVxcdHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KFxcdTAwMjZzaG1lbV9xdW90YV9mb3JtYXQpO1xcbi0tXFxubW0vc2htZW0uYz01NzAxPV9fc2V0dXAoXFxcInRocF9zaG1lbT1cXFwiLCBzZXR1cF90aHBfc2htZW0pO1xcbi0tXFxubW0vc2htZW0uYy01NzA0LVxcbm1tL3NobWVtLmM6NTcwNTojZWxzZSAvKiAhQ09ORklHX1NITUVNICovXFxubW0vc2htZW0uYy01NzA2LVxcbi0tXFxubW0vc2htZW0uYz01Nzc0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTU3ODEtXFxubW0vc2htZW0uYzo1NzgyOiNlbmRpZiAvKiBDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU3ODMtXFxuLS1cXG5tbS9zaG1lbS5jPTU5MzY9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNTkzOC17XFxubW0vc2htZW0uYzo1OTM5OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTU5NDAtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjM0LjE1NTAwMjI4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTgzMTYxMDMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzaG1lbV91bmRvX3JhbmdlYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBzaG1lbV91bmRvX3JhbmdlYCBpbiBgbW0vc2htZW0uY2AgaXMgY2xlYXJseSBjb25kaXRpb25hbCwgcHJvdGVjdGVkIGJ5IGAjaWZkZWYgQ09ORklHX1NITUVNYCBhdCBsaW5lIDQ4LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgbmVlZCB0byBrZWVwIGBDT05GSUdfU0hNRU1gIGluIG1pbmQuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC4gVGhpbmtpbmcgYWJvdXQgaXQsIGBDT05GSUdfU0hNRU1gIHdpbGwgYmUgdGllZCB0byBvdGhlciBjb25maWdzLCBwcm9iYWJseSBgQ09ORklHX1RNUEZTYCwgbWF5YmUgZXZlbiBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHNoYXJlZCBtZW1vcnkuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcyB0byBjb25maXJtIHRoZXNlIGxpbmthZ2VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgYGluaXQvS2NvbmZpZ2Agb3IgYSBzaW1pbGFyIGZpbGUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzczOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIxOjU1Ljk4NjYxNTk2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcwMzk3MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODk2PWNvbmZpZyBFVkVOVEZEXFxuLS1cXG5pbml0L0tjb25maWctMTkwNC1cXG5pbml0L0tjb25maWc6MTkwNTpjb25maWcgU0hNRU1cXG5pbml0L0tjb25maWctMTkwNi1cXHRib29sIFxcXCJVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6NTYuMDgzNjYyMTI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzgzNDUzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgbW0vS2NvbmZpZ2AuIEkga25vdyB0aGF0J3Mgd2hlcmUgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gemVybyBpbiBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSdtIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIHRvIGNvbmZpcm0gaXRzIHByZXNlbmNlLCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBpdCBtaWdodCByZWxhdGUgdG8uIEknbSBsb29raW5nIGZvciB0aGUgZGVmaW5pbmcgbWFjcm8sIGl0cyBwb3NzaWJsZSBzdGF0ZXMgKGBib29sYCwgYHRyaXN0YXRlYCksIGFuZCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBvZiB0aGUga2VybmVsLiBVbmRlcnN0YW5kaW5nIHRoaXMgS2NvbmZpZyBvcHRpb24gaXMgZnVuZGFtZW50YWwgdG8gYW5hbHl6aW5nIHRoZSBzeXN0ZW0ncyBUSFAgYmVoYXZpb3IhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjE6NTguMzYyMDExODI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg2NTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODM1PWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzctXFxubW0vS2NvbmZpZzo4Mzg6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM5LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Nj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODYxLVxcbm1tL0tjb25maWc6ODYyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2My1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2OC1cXG5tbS9LY29uZmlnOjg2OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODcwLVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3Ny1cXG5tbS9LY29uZmlnOjg3ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3OS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODg1PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTQtXFxubW0vS2NvbmZpZzo4OTU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5Ni1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTA0LVxcbm1tL0tjb25maWc6OTA1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTA2LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTQtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyMC1cXG5tbS9LY29uZmlnOjkyMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkyMi1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkzMD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM5LVxcbm1tL0tjb25maWc6OTQwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05NDEtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0OC1cXG5tbS9LY29uZmlnOjk0OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk1MC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU4LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjQtXFxubW0vS2NvbmZpZzo5NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjYtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMTo1OC40MTc4ODk0NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkwNDYxMjc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBTeW1ib2wgSXNzdWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgYEZvY3VzU3ltYm9sc2Ag4oCTIHdoYXQgZnVuY3Rpb25zIGFyZSBmbGFnZ2VkIGFzIG1vZGlmaWVkPyBBaCwgaGVyZSB3ZSBnbzogYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gLCBgc2htZW1fdW5kb19yYW5nZWAsIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgYW55IG9mIHRoZXNlIGFyZSBzdGF0aWMgb3Igd2lkZWx5IHVzZWQuIFRoYXQnbGwgaW5mbHVlbmNlIGhvdyBtdWNoIHNjcnV0aW55IHRoZXkgbmVlZC5cblxuTGV0J3MgYnJlYWsgdGhlbSBkb3duOiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgaXMgZGVmaW5lZCBpbiBgbW0vdHJ1bmNhdGUuY2AuIEZyb20gbWVtb3J5LCBpdCdzIG5vdCBzdGF0aWMgYW5kIGlzIGV4cG9ydGVkIGludGVybmFsbHksIGF0IGxlYXN0IGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHZpYSBgbW0vaW50ZXJuYWwuaGAuIEl0IHNlZW1zIHNwZWNpZmljIHRvIHBhcnRpYWwgZm9saW8gdHJ1bmNhdGlvbiwgZGVmaW5pdGVseSBub3Qgc29tZXRoaW5nIHRoYXQncyB1YmlxdWl0b3VzIGFjcm9zcyB0aGUga2VybmVsLlxuXG5OZXh0LCBgc2htZW1fdW5kb19yYW5nZWAuIFRoaXMgaXMgc3RhdGljIGFuZCB3aXRoaW4gYG1tL3NobWVtLmNgLiBJdCdzIGNhbGxlZCBieSBhIGZldyBvdGhlciBzaG1lbS1zcGVjaWZpYyBmdW5jdGlvbnM6IGBzaG1lbV90cnVuY2F0ZV9yYW5nZWAsIGBzaG1lbV9mYWxsb2NhdGVgLCBgc2htZW1fZXZpY3RfaW5vZGVgLCBhbmQgYHNobWVtX2ZyZWVfaW5fbWVtb3J5X3BhZ2VzYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGJlaW5nIHN0YXRpYyBtaWdodCBtZWFuIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgaW4gdGhlIHZtbGludXggc3ltYm9sIHRhYmxlLCBvciBhdCBsZWFzdCBub3QgaW4gYSB3YXkgdGhhdCBpcyBlYXNpbHkgdmlzaWJsZS4gVGhhdCBtYWtlcyBtZSB0aGluayBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaXRzIGNhbGxlcnMuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgd2hldGhlciBgc2htZW1fdHJ1bmNhdGVfcmFuZ2VgIG9yIGBzaG1lbV9mYWxsb2NhdGVgIGFyZSBhbHNvIHRhcmdldHMuXG5cbkZpbmFsbHksIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAgd2hpY2ggaXMgZGVmaW5lZCBpbiBgbW0vdHJ1bmNhdGUuY2AuIFRoaXMgaXMgbm9uLXN0YXRpYywgYW5kIHNlZW1zIHRvIGJlIGludm9sdmVkIGluIGhvbGUgcHVuY2hpbmcgYW5kIHRydW5jYXRpb24gb3BlcmF0aW9ucywgc28gbm90IHViaXF1aXRvdXMgYnV0IG5vdCBhcyB0YXJnZXRlZCBhcyBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhpcyBgc2htZW1fdW5kb19yYW5nZWAgYnVzaW5lc3MgbW9yZSBwcmVjaXNlbHkuIEl0J3Mgc3RhdGljLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgc2VlIGlmIGl0J3MgdmlzaWJsZS4gSWYgbm90LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGxvb2sgYXQgaXRzIGNhbGxlcnMsIGVzcGVjaWFsbHkgYHNobWVtX3RydW5jYXRlX3JhbmdlYCBhbmQgYHNobWVtX2ZhbGxvY2F0ZWAuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBzaG1lbV91bmRvX3JhbmdlYCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9zaG1lbS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDgyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjAyLjMyMjUwNjc4N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1Nzk0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fdW5kb19yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2htZW0uYz0xMDg3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpXFxuLS1cXG5tbS9zaG1lbS5jLTExMTgtICovXFxubW0vc2htZW0uYzoxMTE5OnN0YXRpYyB2b2lkIHNobWVtX3VuZG9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQsXFxubW0vc2htZW0uYy0xMTIwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBib29sIHVuZmFsbG9jKVxcbi0tXFxubW0vc2htZW0uYz0xMjg0PXZvaWQgc2htZW1fdHJ1bmNhdGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQpXFxubW0vc2htZW0uYy0xMjg1LXtcXG5tbS9zaG1lbS5jOjEyODY6XFx0c2htZW1fdW5kb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5kLCBmYWxzZSk7XFxubW0vc2htZW0uYy0xMjg3LVxcdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTtcXG4tLVxcbm1tL3NobWVtLmM9MjYzMT1zdGF0aWMgaW50IHN5bmNocm9ub3VzX3dha2VfZnVuY3Rpb24od2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LFxcbi0tXFxubW0vc2htZW0uYy0yNjQzLSAqIGZhdWx0aW5nIHBhZ2VzIGludG8gdGhlIGhvbGUgd2hpbGUgaXQncyBiZWluZyBwdW5jaGVkLiAgQWx0aG91Z2hcXG5tbS9zaG1lbS5jOjI2NDQ6ICogc2htZW1fdW5kb19yYW5nZSgpIGRvZXMgcmVtb3ZlIHRoZSBhZGRpdGlvbnMsIGl0IG1heSBiZSB1bmFibGUgdG9cXG5tbS9zaG1lbS5jLTI2NDUtICoga2VlcCB1cCwgYXMgZWFjaCBuZXcgcGFnZSBuZWVkcyBpdHMgb3duIHVubWFwX21hcHBpbmdfcmFuZ2UoKSBjYWxsLFxcbi0tXFxubW0vc2htZW0uYz0zNjEwPXN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5tbS9zaG1lbS5jLTM3MjAtXFx0XFx0XFx0aWYgKGluZGV4IFxcdTAwM2Ugc3RhcnQpIHtcXG5tbS9zaG1lbS5jOjM3MjE6XFx0XFx0XFx0XFx0c2htZW1fdW5kb19yYW5nZShpbm9kZSxcXG5tbS9zaG1lbS5jLTM3MjItXFx0XFx0XFx0XFx0ICAgIChsb2ZmX3Qpc3RhcnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6MDIuMzc4MDkyNTAzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODc1NjYzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAgQ2FsbGVycyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCBpcyBiZWluZyB1c2VkLCBzbyBJJ20gaGVhZGluZyBzdHJhaWdodCBpbnRvIGBtbS90cnVuY2F0ZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgaW52b2tpbmcgdGhpcyBmdW5jdGlvbi4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIHdpbGwgaW52b2x2ZSB0cmFjaW5nIGV4ZWN1dGlvbiBwYXRocywgc2luY2UgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB3aGVyZSB0aGUgdHJ1bmNhdGlvbiBpcyB0YWtpbmcgcGxhY2UgaXMga2V5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkganVzdCBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgd2l0aGluIHRoZSBjb2RlLCBidXQgSSBrbm93IGJldHRlciB0aGFuIHRvIGFzc3VtZSB0aGF0J3MgdGhlIHdob2xlIHN0b3J5LiBJJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3JvcyB0b28uIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gdW5yYXZlbGluZyB3aGF0ZXZlciBpc3N1ZSBvciBvcHRpbWl6YXRpb24gSSdtIGxvb2tpbmcgYXQsIGJ1dCBpdCdzIGEgY3JpdGljYWwgb25lLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYW5kc2NhcGUgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgc29sdXRpb25zIG9yIGltcHJvdmVtZW50cy4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCByZWFsbHkgZ3VpZGUgdGhlIHJlc3Qgb2YgbXkgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjowNC41NjU2NjQyMDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDgxOTI0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9sb2NraW5nLnJzdD01Mjc9cGFnZSBjYWNoZSBjb250ZW50cy4gVXN1YWxseSB0aGUgZmlsZXN5c3RlbSBuZWVkcyB0byBjYWxsXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9sb2NraW5nLnJzdDo1Mjg6dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoKSB0byBpbnZhbGlkYXRlIHJlbGV2YW50IHJhbmdlIG9mIHRoZSBwYWdlIGNhY2hlLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbG9ja2luZy5yc3QtNTI5LUhvd2V2ZXIgdGhlIGZpbGVzeXN0ZW0gdXN1YWxseSBhbHNvIG5lZWRzIHRvIHVwZGF0ZSBpdHMgaW50ZXJuYWwgKGFuZCBvbiBkaXNrKVxcbi0tXFxuYmxvY2svYmRldi5jPTExMD1pbnQgdHJ1bmNhdGVfYmRldl9yYW5nZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5ibG9jay9iZGV2LmMtMTIzLVxcbmJsb2NrL2JkZXYuYzoxMjQ6XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoYmRldi1cXHUwMDNlYmRfbWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcXG5ibG9jay9iZGV2LmMtMTI1LVxcdGlmICghKG1vZGUgXFx1MDAyNiBCTEtfT1BFTl9FWENMKSlcXG4tLVxcbmZzL2J0cmZzL3NlbmQuYz01NjAwPXN0YXRpYyBpbnQgc2VuZF9leHRlbnRfZGF0YShzdHJ1Y3Qgc2VuZF9jdHggKnNjdHgsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLFxcbi0tXFxuZnMvYnRyZnMvc2VuZC5jLTU3MDUtXFx0XFx0ICovXFxuZnMvYnRyZnMvc2VuZC5jOjU3MDY6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXFx1MDAyNnNjdHgtXFx1MDAzZWN1cl9pbm9kZS1cXHUwMDNlaV9kYXRhLFxcbmZzL2J0cmZzL3NlbmQuYy01NzA3LVxcdFxcdFxcdFxcdFxcdCAgIHNjdHgtXFx1MDAzZXBhZ2VfY2FjaGVfY2xlYXJfc3RhcnQsXFxuLS1cXG5mcy9idHJmcy9zZW5kLmM9NjcwOD1zdGF0aWMgdm9pZCBjbG9zZV9jdXJyZW50X2lub2RlKHN0cnVjdCBzZW5kX2N0eCAqc2N0eClcXG4tLVxcbmZzL2J0cmZzL3NlbmQuYy02NzIzLVxcdGlmIChzY3R4LVxcdTAwM2VjbGVhbl9wYWdlX2NhY2hlIFxcdTAwMjZcXHUwMDI2IHNjdHgtXFx1MDAzZXBhZ2VfY2FjaGVfY2xlYXJfc3RhcnQgXFx1MDAzYyBpX3NpemUpXFxuZnMvYnRyZnMvc2VuZC5jOjY3MjQ6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXFx1MDAyNnNjdHgtXFx1MDAzZWN1cl9pbm9kZS1cXHUwMDNlaV9kYXRhLFxcbmZzL2J0cmZzL3NlbmQuYy02NzI1LVxcdFxcdFxcdFxcdFxcdCAgIHNjdHgtXFx1MDAzZXBhZ2VfY2FjaGVfY2xlYXJfc3RhcnQsXFxuLS1cXG5mcy9jZXBoL2ZpbGUuYz0xNTE5PWNlcGhfZGlyZWN0X3JlYWRfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9jZXBoL2ZpbGUuYy0xNjM4LVxcdFxcdFxcdCAqL1xcbmZzL2NlcGgvZmlsZS5jOjE2Mzk6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcG9zLFxcbmZzL2NlcGgvZmlsZS5jLTE2NDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgUEFHRV9BTElHTihwb3MgKyBsZW4pIC0gMSk7XFxuLS1cXG5mcy9mMmZzL2YyZnMuaD01MTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBmMmZzX3RydW5jYXRlX21ldGFfaW5vZGVfcGFnZXMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLFxcbi0tXFxuZnMvZjJmcy9mMmZzLmgtNTE0Ny1cXG5mcy9mMmZzL2YyZnMuaDo1MTQ4OlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKE1FVEFfTUFQUElORyhzYmkpLFxcbmZzL2YyZnMvZjJmcy5oLTUxNDktXFx0XFx0XFx0RjJGU19CTEtfVE9fQllURVMoKGxvZmZfdClibGthZGRyKSxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTM5PXN0YXRpYyB2b2lkIGYyZnNfemVyb19wb3N0X2VvZl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy01Mi1cXHQvKiB6ZXJvIG9yIGRyb3AgcGFnZXMgb25seSBpbiByYW5nZSBvZiBbb2xkX3NpemUsIG5ld19zaXplXSAqL1xcbmZzL2YyZnMvZmlsZS5jOjUzOlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIG9sZF9zaXplLCBuZXdfc2l6ZSk7XFxuZnMvZjJmcy9maWxlLmMtNTQtXFx0aWYgKGxvY2spXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz05MDU9aW50IGYyZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTkzMi1cXHRcXHRcXHQgKi9cXG5mcy9mMmZzL2ZpbGUuYzo5MzM6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyxcXG5mcy9mMmZzL2ZpbGUuYy05MzQtXFx0XFx0XFx0XFx0XFx0RjJGU19CTEtfVE9fQllURVMoMCksXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz00MTkxPXN0YXRpYyBpbnQgZjJmc19zZWNfdHJpbV9maWxlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTQyNjMtXFxuZnMvZjJmcy9maWxlLmM6NDI2NDpcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShtYXBwaW5nLCByYW5nZS5zdGFydCxcXG5mcy9mMmZzL2ZpbGUuYy00MjY1LVxcdFxcdFxcdHRvX2VuZCA/IC0xIDogZW5kX2FkZHIgLSAxKTtcXG4tLVxcbmZzL2YyZnMvcmVjb3ZlcnkuYz04NzU9aW50IGYyZnNfcmVjb3Zlcl9mc3luY19kYXRhKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgYm9vbCBjaGVja19vbmx5KVxcbi0tXFxuZnMvZjJmcy9yZWNvdmVyeS5jLTkxOC1cXHQvKiB0cnVuY2F0ZSBtZXRhIHBhZ2VzIHRvIGJlIHVzZWQgYnkgdGhlIHJlY292ZXJ5ICovXFxuZnMvZjJmcy9yZWNvdmVyeS5jOjkxOTpcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShNRVRBX01BUFBJTkcoc2JpKSxcXG5mcy9mMmZzL3JlY292ZXJ5LmMtOTIwLVxcdFxcdFxcdChsb2ZmX3QpTUFJTl9CTEtBRERSKHNiaSkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgLTEpO1xcbi0tXFxuZnMvZnVzZS9maWxlLmM9MjkyMD1zdGF0aWMgc3NpemVfdCBfX2Z1c2VfY29weV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMzAyOS1cXG5mcy9mdXNlL2ZpbGUuYzozMDMwOlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlX291dC1cXHUwMDNlaV9tYXBwaW5nLFxcbmZzL2Z1c2UvZmlsZS5jLTMwMzEtXFx0XFx0XFx0XFx0ICAgQUxJR05fRE9XTihwb3Nfb3V0LCBQQUdFX1NJWkUpLFxcbi0tXFxuZnMvZ2ZzMi9nbG9wcy5jPTIyMT1zdGF0aWMgdm9pZCByZ3JwX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZ2ZzMi9nbG9wcy5jLTIzNS1cXHRnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFhdG9taWNfcmVhZChcXHUwMDI2Z2wtXFx1MDAzZWdsX2FpbF9jb3VudCkpO1xcbmZzL2dmczIvZ2xvcHMuYzoyMzY6XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCk7XFxuZnMvZ2ZzMi9nbG9wcy5jLTIzNy19XFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYz0xOTQzPXN0YXRpYyBpbnQgX19qYmQyX2pvdXJuYWxfZXJhc2Uoam91cm5hbF90ICpqb3VybmFsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDAxLVxcbmZzL2piZDIvam91cm5hbC5jOjIwMDI6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoam91cm5hbC1cXHUwMDNlal9kZXYtXFx1MDAzZWJkX21hcHBpbmcsXFxuZnMvamJkMi9qb3VybmFsLmMtMjAwMy1cXHRcXHRcXHRcXHRieXRlX3N0YXJ0LCBieXRlX3N0b3AgLSAxKTtcXG4tLVxcbmZzL25mcy9uZnM0ZmlsZS5jPTI0Nz1zdGF0aWMgbG9mZl90IG5mczQyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX29mZixcXG4tLVxcbmZzL25mcy9uZnM0ZmlsZS5jLTI5My1cXHRpZiAoIXJldClcXG5mcy9uZnMvbmZzNGZpbGUuYzoyOTQ6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXFx1MDAyNmRzdF9pbm9kZS1cXHUwMDNlaV9kYXRhLCBkc3Rfb2ZmLCBkc3Rfb2ZmICsgY291bnQgLSAxKTtcXG5mcy9uZnMvbmZzNGZpbGUuYy0yOTUtXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmM9MTUzMT1zdGF0aWMgdm9pZCBvY2ZzMl90cnVuY2F0ZV9jbHVzdGVyX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBieXRlX3N0YXJ0LFxcbi0tXFxuZnMvb2NmczIvZmlsZS5jLTE1NDMtXFx0XFx0dW5tYXBfbWFwcGluZ19yYW5nZShtYXBwaW5nLCBzdGFydCwgZW5kIC0gc3RhcnQsIDApO1xcbmZzL29jZnMyL2ZpbGUuYzoxNTQ0OlxcdFxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKG1hcHBpbmcsIHN0YXJ0LCBlbmQgLSAxKTtcXG5mcy9vY2ZzMi9maWxlLmMtMTU0NS1cXHR9XFxuLS1cXG5mcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMjc0Ny1cXHQvKiBaYXAgYW55IHBhZ2UgY2FjaGUgZm9yIHRoZSBkZXN0aW5hdGlvbiBmaWxlJ3MgcmFuZ2UuICovXFxuZnMvb2NmczIvZmlsZS5jOjI3NDg6XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoXFx1MDAyNmlub2RlX291dC1cXHUwMDNlaV9kYXRhLFxcbmZzL29jZnMyL2ZpbGUuYy0yNzQ5LVxcdFxcdFxcdFxcdCAgIHJvdW5kX2Rvd24ocG9zX291dCwgUEFHRV9TSVpFKSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTM3NT1zdGF0aWMgbG9mZl90IGNpZnNfcmVtYXBfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBvZmYsXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE0NjAtXFx0Y2lmc19kYmcoRllJLCBcXFwiYWJvdXQgdG8gZGlzY2FyZCBwYWdlcyAlbGx4LSVsbHhcXFxcblxcXCIsIGZzdGFydCwgZmVuZCk7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxNDYxOlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKFxcdTAwMjZ0YXJnZXRfaW5vZGUtXFx1MDAzZWlfZGF0YSwgZnN0YXJ0LCBmZW5kKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE0NjItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NDI1OD12b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0KTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDI1OTp2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0LFxcbmluY2x1ZGUvbGludXgvbW0uaC00MjYwLVxcdFxcdHVvZmZfdCBsZW5kKTtcXG4tLVxcbm1tL3NobWVtLmM9NTc1NT12b2lkIHNobWVtX3RydW5jYXRlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kKVxcbm1tL3NobWVtLmMtNTc1Ni17XFxubW0vc2htZW0uYzo1NzU3OlxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGxzdGFydCwgbGVuZCk7XFxubW0vc2htZW0uYy01NzU4LX1cXG4tLVxcbm1tL3RydW5jYXRlLmM9MzM5PWxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3RydW5jYXRlLmMtMzU2LS8qKlxcbm1tL3RydW5jYXRlLmM6MzU3OiAqIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlIC0gdHJ1bmNhdGUgcmFuZ2Ugb2YgcGFnZXMgc3BlY2lmaWVkIGJ5IHN0YXJ0IFxcdTAwMjYgZW5kIGJ5dGUgb2Zmc2V0c1xcbm1tL3RydW5jYXRlLmMtMzU4LSAqIEBtYXBwaW5nOiBtYXBwaW5nIHRvIHRydW5jYXRlXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTM3Ni0gKiBOb3RlIHRoYXQgc2luY2UgLVxcdTAwM2VpbnZhbGlkYXRlX2ZvbGlvKCkgYWNjZXB0cyByYW5nZSB0byBpbnZhbGlkYXRlXFxubW0vdHJ1bmNhdGUuYzozNzc6ICogdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UgaXMgYWJsZSB0byBoYW5kbGUgY2FzZXMgd2hlcmUgbGVuZCArIDEgaXMgbm90XFxubW0vdHJ1bmNhdGUuYy0zNzgtICogcGFnZSBhbGlnbmVkIHByb3Blcmx5Llxcbm1tL3RydW5jYXRlLmMtMzc5LSAqL1xcbm1tL3RydW5jYXRlLmM6MzgwOnZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vdHJ1bmNhdGUuYy0zODEtXFx0XFx0XFx0XFx0bG9mZl90IGxzdGFydCwgdW9mZl90IGxlbmQpXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTQ3OC19XFxubW0vdHJ1bmNhdGUuYzo0Nzk6RVhQT1JUX1NZTUJPTCh0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSk7XFxubW0vdHJ1bmNhdGUuYy00ODAtXFxuLS1cXG5tbS90cnVuY2F0ZS5jPTQ5ND12b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgbHN0YXJ0KVxcbm1tL3RydW5jYXRlLmMtNDk1LXtcXG5tbS90cnVuY2F0ZS5jOjQ5NjpcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShtYXBwaW5nLCBsc3RhcnQsIChsb2ZmX3QpLTEpO1xcbm1tL3RydW5jYXRlLmMtNDk3LX1cXG4tLVxcbm1tL3RydW5jYXRlLmM9OTE1PXZvaWQgdHJ1bmNhdGVfcGFnZWNhY2hlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy05MzUtXFx0XFx0XFx0XFx0ICAgIDEgKyB1bm1hcF9lbmQgLSB1bm1hcF9zdGFydCwgMCk7XFxubW0vdHJ1bmNhdGUuYzo5MzY6XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UobWFwcGluZywgbHN0YXJ0LCBsZW5kKTtcXG5tbS90cnVuY2F0ZS5jLTkzNy19XFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTIzMD1zdGF0aWMgbG9uZyBrdm1fZ21lbV9wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTI0Mi1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjI0MzpcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBvZmZzZXQsIG9mZnNldCArIGxlbiAtIDEpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMjQ0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjowNi45MTM4NjUxNDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NjIzNjM2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRydW5jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgdGhhdCBhcmUga2V5OiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AsIGBzaG1lbV91bmRvX3JhbmdlYCwgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCwgYW5kIGBzaG1lbV90cnVuY2F0ZV9yYW5nZWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0YXJnZXRpbmcsIGFuZCB0aGV5J3JlIGFsbCByZWxhdGVkIHRvIHRydW5jYXRpb24sIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcGFydGlhbCBmb2xpb3MgYW5kIHNoYXJlZCBtZW1vcnkgKHNobWVtKS5cblxuTmV4dCwgSSdtIG5vdGluZyB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgU0hNRU1gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGlzIGdpdmVzIG1lIHNvbWUgaW1wb3J0YW50IGNvbnRleHQuIEkga25vdyBgU0hNRU1gIGVuYWJsZXMgc2hhcmVkIG1lbW9yeSBmdW5jdGlvbmFsaXR5LCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCByZWxhdGVzIHRvIHVzaW5nIGxhcmdlIHBhZ2VzIChodWdlIHBhZ2VzKSBmb3IgaW1wcm92ZWQgbWVtb3J5IHBlcmZvcm1hbmNlLiBUaGUgY29kZSBpbmRpY2F0ZXMgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWN0aXZlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2Ugc2htZW0gc2V0dXBzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgb3RoZXIgY29uZmlncyBhcmUgcmVxdWlyZWQsIGJ1dCBmcm9tIGluaXRpYWwgcmV2aWV3LCBgbW0vdHJ1bmNhdGUuY2AgYW5kIGBtbS9zaG1lbS5jYCBhcmUgYnVpbHQgdW5jb25kaXRpb25hbGx5LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgc2htZW1fdW5kb19yYW5nZWAgcmVxdWlyZXMgYENPTkZJR19TSE1FTWAgd2l0aGluIGBzaG1lbS5jYC5cblxuVGhlIFwiUmVhc29uaW5nXCIgcHJvdmlkZWQgaXMgYWxzbyBjcnVjaWFsLiBJdCBoaWdobGlnaHRzIHRoYXQgdGhlIHBhdGNoIGlzIGFib3V0IGNvcnJlY3RseSBoYW5kbGluZyBib3VuZGFyaWVzIGFuZCBpc29sYXRpb24gd2hlbiAqc3BsaXR0aW5nKiBmb2xpb3MsIHdoaWNoIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgZHVyaW5nIGZpbGUgdHJ1bmNhdGlvbiBhbmQgaG9sZSBwdW5jaGluZy4gRXNzZW50aWFsbHksIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgcGFnZSBjYWNoZSBhbmQgc2htZW0gd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggcGFydGlhbCBmb2xpb3MgYW5kIHBvdGVudGlhbGx5IFRIUC5cblxuVGhpcyBpcyBhbGwgY29uc2lzdGVudCB3aXRoIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGJlaW5nIHNldCB0byBgdHJ1ZWAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBmdXp6aW5nIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgd2lsbCBiZSBiZW5lZmljaWFsLCBhcyB0aGV5IGFyZSBub3cgc2VlbiBhcyBiZWluZyBtb3JlIHN1c2NlcHRpYmxlIHRvIGVkZ2UtY2FzZSBidWdzIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxpbmcgY29tcGxpY2F0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuXG5cbkFscmlnaHQsIGl0J3MgdGltZSB0byB2ZXJpZnkgZXZlcnl0aGluZyBhcyByZXF1ZXN0ZWQgYW5kIHRoZW4gY2FsbCBgc2V0LXJlc3VsdHNgLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJIGZlZWwgY29uZmlkZW50IGFib3V0IHRoZSBpbmZvcm1hdGlvbiBJJ3ZlIGdhdGhlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU4MSwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6MjkuODc2MjMyMjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgxNzY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0hNRU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb1wiLFxuICAgIFwic2htZW1fdW5kb19yYW5nZVwiLFxuICAgIFwidHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2VcIixcbiAgICBcInNobWVtX3RydW5jYXRlX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBjYWNoZSB0cnVuY2F0aW9uIGxvZ2ljIChpbiBtbS90cnVuY2F0ZS5jIGFuZCBtbS9zaG1lbS5jKSBmb3IgcGFydGlhbCBmb2xpb3MsIGFsdGVyaW5nIGJvdW5kYXJ5IHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgc2VtYW50aWNzIG9mIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8gdG8gcHJldmVudCBpbXByb3BlciBkaXNjYXJkIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGFjdGl2ZWx5IHJlYWNoYWJsZSBrZXJuZWwgY29kZSBleGVyY2lzZWQgYnkgZmlsZSB0cnVuY2F0aW9uLCBmdHJ1bmNhdGUsIGFuZCBmYWxsb2NhdGUgaG9sZS1wdW5jaGluZyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cIixcbiAgICBcInNobWVtX3VuZG9fcmFuZ2VcIixcbiAgICBcInRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlXCIsXG4gICAgXCJzaG1lbV90cnVuY2F0ZV9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgY2FjaGUgdHJ1bmNhdGlvbiBsb2dpYyAoaW4gbW0vdHJ1bmNhdGUuYyBhbmQgbW0vc2htZW0uYykgZm9yIHBhcnRpYWwgZm9saW9zLCBhbHRlcmluZyBib3VuZGFyeSB0cmFja2luZyBhbmQgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBvZiB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvIHRvIHByZXZlbnQgaW1wcm9wZXIgZGlzY2FyZCBkdXJpbmcgZm9saW8gc3BsaXR0aW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBhY3RpdmVseSByZWFjaGFibGUga2VybmVsIGNvZGUgZXhlcmNpc2VkIGJ5IGZpbGUgdHJ1bmNhdGlvbiwgZnRydW5jYXRlLCBhbmQgZmFsbG9jYXRlIGhvbGUtcHVuY2hpbmcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6MjkuOTU1MDU5NjY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY5NjMzNjA1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjI5Ljk1NTcwMTk1NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ4Njk1Njg5MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBmb2xpbyB0cnVuY2F0aW9uIGFuZCBzcGxpdHRpbmcgbG9naWMgaW4gYG1tL3RydW5jYXRlLmNgLCBgbW0vc2htZW0uY2AsIGFuZCBgbW0vaW50ZXJuYWwuaGAgKGB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvYCBhbmQgaXRzIGNhbGxlcnMpLiBJdCByZWZhY3RvcnMgaG93IHRoZSBwYXJ0aWFsIGZvbGlvIHRydW5jYXRpb24gcmV0dXJuIHZhbHVlIGFuZCB0aGUgYGVuZGAgcGFnZSBvZmZzZXQgYXJlIGhhbmRsZWQgYW5kIHVwZGF0ZWQgd2hlbiBzcGxpdHRpbmcgb3Iga2VlcGluZyBzdHJhZGRsaW5nIGZvbGlvcy5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBpbnRyb2R1Y2VkIG9yIHJlYWQsIG5vIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGFsdGVyYXRpb25zIHRvIGRhdGEgYm91bmRzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyBwYWdlIGNhY2hlIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmVmY291bnRpbmcgYnVncywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHBhZ2UgY2FjaGUgYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZmZlMTgyMGRmYjA3YjY5ZDE0YjM0MTVhNWU1MmRmNDZmNDU2ZGIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNjoyMDo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA2OGRiNWFiZDBhNGNlLi5kYjdkOWQ5ZmI1YzllIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTYyNyw4ICs2MjcsOCBAQCB1bnNpZ25lZCBmaW5kX2xvY2tfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXG4gdW5zaWduZWQgZmluZF9nZXRfZW50cmllcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXG4gXHRcdHBnb2ZmX3QgZW5kLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgcGdvZmZfdCAqaW5kaWNlcyk7XG4gaW50IHRydW5jYXRlX2lub2RlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LFxuLVx0XHRsb2ZmX3QgZW5kKTtcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbitcdFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XG4gbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB1bnNpZ25lZCBsb25nIG1hcHBpbmdfdHJ5X2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kLCB1bnNpZ25lZCBsb25nICpucl9mYWlsZWQpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA4OWExNDk1ZTU1ZjdlLi5jYzE1NDhmZjUwOWFlIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTExNzUsMTEgKzExNzUsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuIFx0aWYgKGZvbGlvKSB7XG4gXHRcdHNhbWVfZm9saW8gPSBsZW5kIFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuLVx0XHRpZiAoIXRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sIGxzdGFydCwgbGVuZCkpIHtcbitcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXG4rXHRcdFx0XHRcdFx0ICBzYW1lX2ZvbGlvID8gXHUwMDI2ZW5kIDogTlVMTCkpXG4gXHRcdFx0c3RhcnQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcbi1cdFx0XHRpZiAoc2FtZV9mb2xpbylcbi1cdFx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuLVx0XHR9XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdGZvbGlvID0gTlVMTDtcbkBAIC0xMTg5LDggKzExODcsNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuIFx0XHRmb2xpbyA9IHNobWVtX2dldF9wYXJ0aWFsX2ZvbGlvKGlub2RlLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdGlmIChmb2xpbykge1xuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbi1cdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKVxuLVx0XHRcdGVuZCA9IGZvbGlvLVx1MDAzZWluZGV4O1xuK1x0XHR0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsIFx1MDAyNmVuZCk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHR9XG5AQCAtMTI1OCw3ICsxMjU1LDggQEAgc3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbiBcdFx0XHRcdFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8obWFwcGluZywgZm9saW8pO1xuLVx0XHRcdFx0fSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XG4rXHRcdFx0XHR9IGVsc2UgaWYgKHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oZm9saW8sXG4rXHRcdFx0XHRcdFx0XHRsc3RhcnQsIGxlbmQsIE5VTEwpKSB7XG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cbiBcdFx0XHRcdFx0ICogdGhhdCB3ZSBwaWNrIHVwIHRoZSBuZXcgc3ViIHBhZ2VzLlxuZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jXG5pbmRleCBiNThiYTk0MGJlNDc0Li4yZWJiMDBmNmMzNzkzIDEwMDY0NFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xuKysrIGIvbW0vdHJ1bmNhdGUuY1xuQEAgLTIwNiwxNSArMjA2LDE4IEBAIHN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxuIC8qXG4gICogSGFuZGxlIHBhcnRpYWwgZm9saW9zLiAgVGhlIGZvbGlvIG1heSBiZSBlbnRpcmVseSB3aXRoaW4gdGhlXG4gICogcmFuZ2UgaWYgYSBzcGxpdCBoYXMgcmFjZWQgd2l0aCB1cy4gIElmIG5vdCwgd2UgemVybyB0aGUgcGFydCBvZiB0aGVcbi0gKiBmb2xpbyB0aGF0J3Mgd2l0aGluIHRoZSBbc3RhcnQsIGVuZF0gcmFuZ2UsIGFuZCB0aGVuIHNwbGl0IHRoZSBmb2xpbyBpZlxuKyAqIGZvbGlvIHRoYXQncyB3aXRoaW4gdGhlIFtsc3RhcnQsIGxlbmRdIHJhbmdlLCBhbmQgdGhlbiBzcGxpdCB0aGUgZm9saW8gaWZcbiAgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxuICAqIGlfc2l6ZSwgYW5kIHdlIHJlbHkgb24gdGhlIGNhbGxlciB0byBkaXNjYXJkIHBhZ2VzIHdoaWNoIGxpZSB3aXRoaW4gYVxuICAqIG5ld2x5IGNyZWF0ZWQgaG9sZS5cbiAgKlxuLSAqIFJldHVybnMgZmFsc2UgaWYgc3BsaXR0aW5nIGZhaWxlZCBzbyB0aGUgY2FsbGVyIGNhbiBhdm9pZFxuLSAqIGRpc2NhcmRpbmcgdGhlIGVudGlyZSBmb2xpbyB3aGljaCBpcyBzdHViYm9ybmx5IHVuc3BsaXQuXG4rICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXG4rICogYW5kIG11c3QgYmUga2VwdCBieSB0aGUgY2FsbGVyJ3MgdHJ1bmNhdGUgbG9vcC4gIFJldHVybiAldHJ1ZSBpZiB0aGVcbisgKiBmb2xpbyB3YXMgc3BsaXQsICVmYWxzZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIGZvbGlvIGlzIGRyb3BwZWQgb3JcbisgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXG4gICovXG4tYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbitib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcbitcdFx0XHRcdCAgbG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZClcbiB7XG4gXHRsb2ZmX3QgcG9zID0gZm9saW9fcG9zKGZvbGlvKTtcbiBcdHNpemVfdCBzaXplID0gZm9saW9fc2l6ZShmb2xpbyk7XG5AQCAtMjIyLDE5ICsyMjUsMjIgQEAgYm9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiBcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgKnNwbGl0X2F0MjtcbiBcdHVuc2lnbmVkIGludCBtaW5fb3JkZXI7XG4gXG4tXHRpZiAocG9zIFx1MDAzYyBzdGFydClcbi1cdFx0b2Zmc2V0ID0gc3RhcnQgLSBwb3M7XG4rXHRpZiAoZW5kIFx1MDAyNlx1MDAyNiBwb3MgKyBzaXplIFx1MDAzZSAodTY0KWxlbmQpXG4rXHRcdCplbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbitcbitcdGlmIChwb3MgXHUwMDNjIGxzdGFydClcbitcdFx0b2Zmc2V0ID0gbHN0YXJ0IC0gcG9zO1xuIFx0ZWxzZVxuIFx0XHRvZmZzZXQgPSAwO1xuLVx0aWYgKHBvcyArIHNpemUgXHUwMDNjPSAodTY0KWVuZClcbitcdGlmIChwb3MgKyBzaXplIFx1MDAzYz0gKHU2NClsZW5kKVxuIFx0XHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xuIFx0ZWxzZVxuLVx0XHRsZW5ndGggPSBlbmQgKyAxIC0gcG9zIC0gb2Zmc2V0O1xuK1x0XHRsZW5ndGggPSBsZW5kICsgMSAtIHBvcyAtIG9mZnNldDtcbiBcbiBcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xuIFx0XHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI0OCw3ICsyNTQsNyBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxuIFx0XHRmb2xpb19pbnZhbGlkYXRlKGZvbGlvLCBvZmZzZXQsIGxlbmd0aCk7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4gXHRzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTtcbkBAIC0yNTksNiArMjY1LDEwIEBAIGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4gXHRcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbzI7XG4rXHRcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XG4rXG4rXHRcdGlmIChlbmQpXG4rXHRcdFx0KmVuZCA9IChwb3MgKyBvZmZzZXQgKyBsZW5ndGgpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0XHRpZiAob2Zmc2V0ICsgbGVuZ3RoID09IHNpemUpXG4gXHRcdFx0Z290byBub19zcGxpdDtcbkBAIC0yNzMsMjQgKzI4MywyOCBAQCBib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvMikpXG4rXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbzIpKSB7XG4rXHRcdFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xuIFx0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXG4gXHRcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xuIFx0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbzIpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZm9saW8yLVx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXHUwMDNlbWFwcGluZylcbi1cdFx0XHRmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKTtcbitcdFx0ICAgIGZvbGlvMi1cdTAwM2VtYXBwaW5nID09IGZvbGlvLVx1MDAzZW1hcHBpbmcgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKSlcbitcdFx0XHR0YWlsX2lzb2xhdGVkID0gZmFsc2U7XG4gXG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbzIpO1xuIG91dDpcbitcdFx0aWYgKCF0YWlsX2lzb2xhdGVkIFx1MDAyNlx1MDAyNiBlbmQpXG4rXHRcdFx0KmVuZCA9IGZvbGlvMi1cdTAwM2VpbmRleDtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvMik7XG4gbm9fc3BsaXQ6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuLVx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpbyk7XG4tXHRyZXR1cm4gdHJ1ZTtcbitcdGlmICghZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4rXHRcdHRydW5jYXRlX2lub2RlX2ZvbGlvKGZvbGlvLVx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLypcbkBAIC00MTMsMTEgKzQyNyw5IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgbHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7XG4gXHRpZiAoIUlTX0VSUihmb2xpbykpIHtcbiBcdFx0c2FtZV9mb2xpbyA9IGxlbmQgXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcbi1cdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKSB7XG4rXHRcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxuK1x0XHRcdFx0XHRcdCAgc2FtZV9mb2xpbyA/IFx1MDAyNmVuZCA6IE5VTEwpKVxuIFx0XHRcdHN0YXJ0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4tXHRcdFx0aWYgKHNhbWVfZm9saW8pXG4tXHRcdFx0XHRlbmQgPSBmb2xpby1cdTAwM2VpbmRleDtcbi1cdFx0fVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpbyA9IE5VTEw7XG5AQCAtNDI3LDggKzQzOSw3IEBAIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBsZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRcdEZHUF9MT0NLLCAwKTtcbiBcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQpKVxuLVx0XHRcdFx0ZW5kID0gZm9saW8tXHUwMDNlaW5kZXg7XG4rXHRcdFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcdTAwMjZlbmQpO1xuIFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6MjkuOTU1NzAyOTU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwMDM5NDM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRmlsZSBUcnVuY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byBwaW5wb2ludCBpZiB0aGlzIGNvZGUgaW50cm9kdWNlcyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpa2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKEtNU0FOIGlzIHRoZSBwcmltYXJ5IHdvcnJ5IGhlcmUpIG9yIGlmIGl0IG1lc3NlcyB1cCBtZW1vcnkgbWFuYWdlbWVudCBvciB0cnVuY2F0aW9uIGxvZ2ljIGluIGFueSB3YXkgKEtBU0FOIGFuZCBvdGhlciBzYW5pdGl6ZXJzIHdpbGwgYmUgbXkgZnJpZW5kcyBmb3IgdGhhdCkuIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBzdXJyb3VuZGluZyBjYWxsZXJzIHdpdGhpbiBgbW0vc2htZW0uY2AgYW5kIGBtbS90cnVuY2F0ZS5jYC5cblxuTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSBhIGNsb3NlIHJlYWRpbmcgb2YgdGhvc2Ugc3BlY2lmaWMgZmlsZXMg4oCTIGBtbS90cnVuY2F0ZS5jYCBhbmQgYG1tL3NobWVtLmNgIOKAkyBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIHRob3NlIGZ1bmN0aW9uIGNhbGxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIHBpY3R1cmUsIHNlZSBob3cgdGhpcyBwYXJ0aWFsIGZvbGlvIHRydW5jYXRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiBmaWxlIHRydW5jYXRpb24gYW5kIHNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudC4gSSdtIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBlZGdlIGNhc2VzLCBhbmQgb2YgY291cnNlLCBhbnkgcG90ZW50aWFsIGZvciB0aGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uLiBMZXQncyBnZXQgdG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjozNS45NTk2NTE2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2Nzg1Mjg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NjI5PWludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaDo2MzA6Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBsc3RhcnQsXFxubW0vaW50ZXJuYWwuaC02MzEtXFx0XFx0bG9mZl90IGxlbmQsIHBnb2ZmX3QgKmVuZCk7XFxuLS1cXG5tbS9zaG1lbS5jPTExMTk9c3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcXG4tLVxcbm1tL3NobWVtLmMtMTE3Ny1cXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG5tbS9zaG1lbS5jOjExNzg6XFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxubW0vc2htZW0uYy0xMTc5LVxcdFxcdFxcdFxcdFxcdFxcdCAgc2FtZV9mb2xpbyA/IFxcdTAwMjZlbmQgOiBOVUxMKSlcXG4tLVxcbm1tL3NobWVtLmMtMTE4OS1cXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG5tbS9zaG1lbS5jOjExOTA6XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG5tbS9zaG1lbS5jLTExOTEtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL3NobWVtLmMtMTIyNy1cXHRcXHRcXHRcXHRcXHQgKiBJZiBmb3VuZCBhIGxhcmdlIHN3YXAgZW50cnkgY3Jvc3MgdGhlIGVuZCBvciBzdGFydFxcbm1tL3NobWVtLmM6MTIyODpcXHRcXHRcXHRcXHRcXHQgKiBib3JkZXIsIHNraXAgaXQgYXMgdGhlIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cXG5tbS9zaG1lbS5jLTEyMjktXFx0XFx0XFx0XFx0XFx0ICogYWJvdmUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgemVyb2QgaXRzIGNvbnRlbnQgb25jZS5cXG4tLVxcbm1tL3NobWVtLmMtMTI1Ny1cXHRcXHRcXHRcXHRcXHR0cnVuY2F0ZV9pbm9kZV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XFxubW0vc2htZW0uYzoxMjU4OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAodHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbyxcXG5tbS9zaG1lbS5jLTEyNTktXFx0XFx0XFx0XFx0XFx0XFx0XFx0bHN0YXJ0LCBsZW5kLCBOVUxMKSkge1xcbi0tXFxubW0vdHJ1bmNhdGUuYz0xODA9c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTIxOC0gKi9cXG5tbS90cnVuY2F0ZS5jOjIxOTpib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IGxzdGFydCxcXG5tbS90cnVuY2F0ZS5jLTIyMC1cXHRcXHRcXHRcXHQgIGxvZmZfdCBsZW5kLCBwZ29mZl90ICplbmQpXFxuLS1cXG5tbS90cnVuY2F0ZS5jPTM4MD12b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vdHJ1bmNhdGUuYy00MjktXFx0XFx0c2FtZV9mb2xpbyA9IGxlbmQgXFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XFxubW0vdHJ1bmNhdGUuYzo0MzA6XFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxubW0vdHJ1bmNhdGUuYy00MzEtXFx0XFx0XFx0XFx0XFx0XFx0ICBzYW1lX2ZvbGlvID8gXFx1MDAyNmVuZCA6IE5VTEwpKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy00NDEtXFx0XFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XFxubW0vdHJ1bmNhdGUuYzo0NDI6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG5tbS90cnVuY2F0ZS5jLTQ0My1cXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjozOC42Mjc1MjE3MDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk4ODgzMTc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vdHJ1bmNhdGUuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0cnVuY2F0aW9uIHdvcmtzIGluIHRoZSBtZW1vcnkgbWFuYWdlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vdHJ1bmNhdGUuY2AuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyb3VuZCBsaW5lcyAyMDAgdGhyb3VnaCAzMDUgYW5kIHRoZW4gYWdhaW4gb24gbGluZXMgNDEwIHRocm91Z2ggNDYwLiBJIHN1c3BlY3QgdGhlc2Ugc2VjdGlvbnMgZGVhbCB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIHJlZHVjaW5nIHRoZSBzaXplIG9mIGEgbWFwcGVkIG1lbW9yeSByZWdpb24gb3IgcGVyaGFwcyB0aGUgaGFuZGxpbmcgb2YgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIG1lbW9yeSBvcGVyYXRpb25zIHJlbGF0ZWQgdG8gdGhlc2UgZnVuY3Rpb25zIGlzIGVzc2VudGlhbCBpbiBkZXRlcm1pbmluZyB0aGUgYmVoYXZpb3IuIFRoaXMgYWxzbyBoZWxwcyBtZSBkZXRlcm1pbmUgaWYgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cnVuY2F0aW9uIGZ1bmN0aW9ucyBoYXMgYmVlbiBhbHRlcmVkIG9yIG1vZGlmaWVkIGluIGFueSB3YXkgYW5kIGlmIHRoaXMgaXMgdGhlIGNhdXNlIG9mIGFueSBlcnJvcnMgSSBtaWdodCBoYXZlIGVuY291bnRlcmVkIG9yIG9ic2VydmVkLiBXaXRoIHRoaXMgcmV2aWV3IEknbGwgY29uZmlybSBvciByZWZpbmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgdGhleSBpbnRlcmFjdCBkdXJpbmcgYSB0cnVuY2F0aW9uIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjQ2LjYxNjM1Njk4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdHJ1bmNhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdFxcdFxcdFdBUk5fT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxuIDIwMTpcXHRcXHR9XFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdHJldHVybiByZXQ7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdC8qXFxuIDIwNzpcXHQgKiBIYW5kbGUgcGFydGlhbCBmb2xpb3MuICBUaGUgZm9saW8gbWF5IGJlIGVudGlyZWx5IHdpdGhpbiB0aGVcXG4gMjA4OlxcdCAqIHJhbmdlIGlmIGEgc3BsaXQgaGFzIHJhY2VkIHdpdGggdXMuICBJZiBub3QsIHdlIHplcm8gdGhlIHBhcnQgb2YgdGhlXFxuIDIwOTpcXHQgKiBmb2xpbyB0aGF0J3Mgd2l0aGluIHRoZSBbbHN0YXJ0LCBsZW5kXSByYW5nZSwgYW5kIHRoZW4gc3BsaXQgdGhlIGZvbGlvIGlmXFxuIDIxMDpcXHQgKiBpdCdzIGxhcmdlLiAgc3BsaXRfcGFnZV9yYW5nZSgpIHdpbGwgZGlzY2FyZCBwYWdlcyB3aGljaCBub3cgbGllIGJleW9uZFxcbiAyMTE6XFx0ICogaV9zaXplLCBhbmQgd2UgcmVseSBvbiB0aGUgY2FsbGVyIHRvIGRpc2NhcmQgcGFnZXMgd2hpY2ggbGllIHdpdGhpbiBhXFxuIDIxMjpcXHQgKiBuZXdseSBjcmVhdGVkIGhvbGUuXFxuIDIxMzpcXHQgKlxcbiAyMTQ6XFx0ICogV2hlbiBAZW5kIG5vbi1OVUxMLCBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmb2xpbyB0aGF0IGNvbnRhaW5zIEBsZW5kXFxuIDIxNTpcXHQgKiBhbmQgbXVzdCBiZSBrZXB0IGJ5IHRoZSBjYWxsZXIncyB0cnVuY2F0ZSBsb29wLiAgUmV0dXJuICV0cnVlIGlmIHRoZVxcbiAyMTY6XFx0ICogZm9saW8gd2FzIHNwbGl0LCAlZmFsc2Ugb3RoZXJ3aXNlLCBpbiB3aGljaCBjYXNlIHRoZSBmb2xpbyBpcyBkcm9wcGVkIG9yXFxuIDIxNzpcXHQgKiBtYXkgc3RpbGwgc3RyYWRkbGUgdGhlIHJhbmdlLCBzbyB0aGUgY2FsbGVyIG11c3Qgbm90IGRpc2NhcmQgaXQuXFxuIDIxODpcXHQgKi9cXG4gMjE5OlxcdGJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgbHN0YXJ0LFxcbiAyMjA6XFx0XFx0XFx0XFx0XFx0ICBsb2ZmX3QgbGVuZCwgcGdvZmZfdCAqZW5kKVxcbiAyMjE6XFx0e1xcbiAyMjI6XFx0XFx0bG9mZl90IHBvcyA9IGZvbGlvX3Bvcyhmb2xpbyk7XFxuIDIyMzpcXHRcXHRzaXplX3Qgc2l6ZSA9IGZvbGlvX3NpemUoZm9saW8pO1xcbiAyMjQ6XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuZ3RoO1xcbiAyMjU6XFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCAqc3BsaXRfYXQyO1xcbiAyMjY6XFx0XFx0dW5zaWduZWQgaW50IG1pbl9vcmRlcjtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0aWYgKGVuZCBcXHUwMDI2XFx1MDAyNiBwb3MgKyBzaXplIFxcdTAwM2UgKHU2NClsZW5kKVxcbiAyMjk6XFx0XFx0XFx0KmVuZCA9IGZvbGlvLVxcdTAwM2VpbmRleDtcXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0aWYgKHBvcyBcXHUwMDNjIGxzdGFydClcXG4gMjMyOlxcdFxcdFxcdG9mZnNldCA9IGxzdGFydCAtIHBvcztcXG4gMjMzOlxcdFxcdGVsc2VcXG4gMjM0OlxcdFxcdFxcdG9mZnNldCA9IDA7XFxuIDIzNTpcXHRcXHRpZiAocG9zICsgc2l6ZSBcXHUwMDNjPSAodTY0KWxlbmQpXFxuIDIzNjpcXHRcXHRcXHRsZW5ndGggPSBzaXplIC0gb2Zmc2V0O1xcbiAyMzc6XFx0XFx0ZWxzZVxcbiAyMzg6XFx0XFx0XFx0bGVuZ3RoID0gbGVuZCArIDEgLSBwb3MgLSBvZmZzZXQ7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG4gMjQxOlxcdFxcdGlmIChsZW5ndGggPT0gc2l6ZSkge1xcbiAyNDI6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmcsIGZvbGlvKTtcXG4gMjQzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQ0OlxcdFxcdH1cXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0LypcXG4gMjQ3OlxcdFxcdCAqIFdlIG1heSBiZSB6ZXJvaW5nIHBhZ2VzIHdlJ3JlIGFib3V0IHRvIGRpc2NhcmQsIGJ1dCBpdCBhdm9pZHNcXG4gMjQ4OlxcdFxcdCAqIGRvaW5nIGEgY29tcGxleCBjYWxjdWxhdGlvbiBoZXJlLCBhbmQgdGhlbiBkb2luZyB0aGUgemVyb2luZ1xcbiAyNDk6XFx0XFx0ICogYW55d2F5IGlmIHRoZSBwYWdlIHNwbGl0IGZhaWxzLlxcbiAyNTA6XFx0XFx0ICovXFxuIDI1MTpcXHRcXHRpZiAoIW1hcHBpbmdfaW5hY2Nlc3NpYmxlKGZvbGlvLVxcdTAwM2VtYXBwaW5nKSlcXG4gMjUyOlxcdFxcdFxcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgbGVuZ3RoKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0aWYgKGZvbGlvX25lZWRzX3JlbGVhc2UoZm9saW8pKVxcbiAyNTU6XFx0XFx0XFx0Zm9saW9faW52YWxpZGF0ZShmb2xpbywgb2Zmc2V0LCBsZW5ndGgpO1xcbiAyNTY6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4gMjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0bWluX29yZGVyID0gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXFx1MDAzZW1hcHBpbmcpO1xcbiAyNjA6XFx0XFx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XFxuIDI2MTpcXHRcXHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xcbiAyNjI6XFx0XFx0XFx0LypcXG4gMjYzOlxcdFxcdFxcdCAqIHRyeSB0byBzcGxpdCBhdCBvZmZzZXQgKyBsZW5ndGggdG8gbWFrZSBzdXJlIGZvbGlvcyB3aXRoaW5cXG4gMjY0OlxcdFxcdFxcdCAqIHRoZSByYW5nZSBjYW4gYmUgZHJvcHBlZCwgZXNwZWNpYWxseSB0byBhdm9pZCBtZW1vcnkgd2FzdGVcXG4gMjY1OlxcdFxcdFxcdCAqIGZvciBzaG1lbSB0cnVuY2F0ZVxcbiAyNjY6XFx0XFx0XFx0ICovXFxuIDI2NzpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvMjtcXG4gMjY4OlxcdFxcdFxcdGJvb2wgdGFpbF9pc29sYXRlZCA9IHRydWU7XFxuIDI2OTpcXHRcXG4gMjcwOlxcdFxcdFxcdGlmIChlbmQpXFxuIDI3MTpcXHRcXHRcXHRcXHQqZW5kID0gKHBvcyArIG9mZnNldCArIGxlbmd0aCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0XFx0aWYgKG9mZnNldCArIGxlbmd0aCA9PSBzaXplKVxcbiAyNzQ6XFx0XFx0XFx0XFx0Z290byBub19zcGxpdDtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0XFx0c3BsaXRfYXQyID0gZm9saW9fcGFnZShmb2xpbyxcXG4gMjc3OlxcdFxcdFxcdFxcdFxcdFBBR0VfQUxJR05fRE9XTihvZmZzZXQgKyBsZW5ndGgpIC8gUEFHRV9TSVpFKTtcXG4gMjc4OlxcdFxcdFxcdGZvbGlvMiA9IHBhZ2VfZm9saW8oc3BsaXRfYXQyKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0XFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvMikpXFxuIDI4MTpcXHRcXHRcXHRcXHRnb3RvIG5vX3NwbGl0O1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSlcXG4gMjg0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8yKSkge1xcbiAyODc6XFx0XFx0XFx0XFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xcbiAyODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI4OTpcXHRcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdFxcdC8qIG1ha2Ugc3VyZSBmb2xpbzIgaXMgbGFyZ2UgYW5kIGRvZXMgbm90IGNoYW5nZSBpdHMgbWFwcGluZyAqL1xcbiAyOTI6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8yKSBcXHUwMDI2XFx1MDAyNlxcbiAyOTM6XFx0XFx0XFx0ICAgIGZvbGlvMi1cXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cXHUwMDNlbWFwcGluZyBcXHUwMDI2XFx1MDAyNlxcbiAyOTQ6XFx0XFx0XFx0ICAgIGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpKVxcbiAyOTU6XFx0XFx0XFx0XFx0dGFpbF9pc29sYXRlZCA9IGZhbHNlO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8yKTtcXG4gMjk4OlxcdG91dDpcXG4gMjk5OlxcdFxcdFxcdGlmICghdGFpbF9pc29sYXRlZCBcXHUwMDI2XFx1MDAyNiBlbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjQ2LjYxNjUxNTUxNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzkwNzA2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBgbW0vdHJ1bmNhdGUuY2AgQ29kZSoqXG5cbk9rYXksIGJlZm9yZSB3ZSBtb3ZlIG9uLCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgc29tZXRoaW5nIHNwZWNpZmljLiBMZXQncyBoZWFkIG92ZXIgdG8gYG1tL3RydW5jYXRlLmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDQwMCB0aHJvdWdoIDQ2MC4gSSBrbm93IHdlJ3ZlIGJlZW4gd29ya2luZyBvbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2lkZSwgYW5kIHRydW5jYXRpb24gb3BlcmF0aW9ucyBjYW4gYmUgdHJpY2t5LCBlc3BlY2lhbGx5IHdpdGggY29uY3VycmVudCBhY2Nlc3MgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFRoaXMgc2VjdGlvbidzIGxpa2VseSBoYW5kbGluZyB0aGUgbWVjaGFuaWNzIG9mIGZyZWVpbmcgcGFnZXMgb3IgdXBkYXRpbmcgaW5vZGUgbWV0YWRhdGEgYWZ0ZXIgYSBmaWxlIHRydW5jYXRpb24uIEkgd2FudCB0byBxdWlja2x5IHJldmlldyBob3cgaXQncyBkZWFsaW5nIHdpdGggcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gYW5kIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kuIEdpdmVuIG91ciB3b3JrLCBpdOKAmXMgYmVzdCBwcmFjdGljZSB0byB2ZXJpZnkgd2UgYXJlIG5vdCBleHBvc2luZyBhbnkgcmFjZSBjb25kaXRpb25zLiBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHRoZSB0cnVuY2F0aW9uIGxvZ2ljIGlzIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8gb3RoZXIgb3BlcmF0aW9ucywgc3VjaCBhcyB3cml0ZXMgb3IgcmVhZHMuIExldCdzIHNlZSB3aGF04oCZcyBnb2luZyBvbiBpbiB0aGF0IGJsb2NrIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIyOjUyLjQwNzIyNDEyNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdHJ1bmNhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDA6XFx0XFx0ICovXFxuIDQwMTpcXHRcXHRzdGFydCA9IChsc3RhcnQgKyBQQUdFX1NJWkUgLSAxKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA0MDI6XFx0XFx0aWYgKGxlbmQgPT0gLTEpXFxuIDQwMzpcXHRcXHRcXHQvKlxcbiA0MDQ6XFx0XFx0XFx0ICogbGVuZCA9PSAtMSBpbmRpY2F0ZXMgZW5kLW9mLWZpbGUgc28gd2UgaGF2ZSB0byBzZXQgJ2VuZCdcXG4gNDA1OlxcdFxcdFxcdCAqIHRvIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHBnb2ZmX3QgYW5kIHNpbmNlIHRoZSB0eXBlIGlzXFxuIDQwNjpcXHRcXHRcXHQgKiB1bnNpZ25lZCB3ZSdyZSB1c2luZyAtMS5cXG4gNDA3OlxcdFxcdFxcdCAqL1xcbiA0MDg6XFx0XFx0XFx0ZW5kID0gLTE7XFxuIDQwOTpcXHRcXHRlbHNlXFxuIDQxMDpcXHRcXHRcXHRlbmQgPSAobGVuZCArIDEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdGZvbGlvX2JhdGNoX2luaXQoXFx1MDAyNmZiYXRjaCk7XFxuIDQxMzpcXHRcXHRpbmRleCA9IHN0YXJ0O1xcbiA0MTQ6XFx0XFx0d2hpbGUgKGluZGV4IFxcdTAwM2MgZW5kIFxcdTAwMjZcXHUwMDI2IGZpbmRfbG9ja19lbnRyaWVzKG1hcHBpbmcsIFxcdTAwMjZpbmRleCwgZW5kIC0gMSxcXG4gNDE1OlxcdFxcdFxcdFxcdFxcdTAwMjZmYmF0Y2gsIGluZGljZXMpKSB7XFxuIDQxNjpcXHRcXHRcXHR0cnVuY2F0ZV9mb2xpb19iYXRjaF9leGNlcHRpb25hbHMobWFwcGluZywgXFx1MDAyNmZiYXRjaCwgaW5kaWNlcyk7XFxuIDQxNzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fYmF0Y2hfY291bnQoXFx1MDAyNmZiYXRjaCk7IGkrKylcXG4gNDE4OlxcdFxcdFxcdFxcdHRydW5jYXRlX2NsZWFudXBfZm9saW8oZmJhdGNoLmZvbGlvc1tpXSk7XFxuIDQxOTpcXHRcXHRcXHRkZWxldGVfZnJvbV9wYWdlX2NhY2hlX2JhdGNoKG1hcHBpbmcsIFxcdTAwMjZmYmF0Y2gpO1xcbiA0MjA6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX2JhdGNoX2NvdW50KFxcdTAwMjZmYmF0Y2gpOyBpKyspXFxuIDQyMTpcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZmJhdGNoLmZvbGlvc1tpXSk7XFxuIDQyMjpcXHRcXHRcXHRmb2xpb19iYXRjaF9yZWxlYXNlKFxcdTAwMjZmYmF0Y2gpO1xcbiA0MjM6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdHNhbWVfZm9saW8gPSAobHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpID09IChsZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiA0Mjc6XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBGR1BfTE9DSywgMCk7XFxuIDQyODpcXHRcXHRpZiAoIUlTX0VSUihmb2xpbykpIHtcXG4gNDI5OlxcdFxcdFxcdHNhbWVfZm9saW8gPSBsZW5kIFxcdTAwM2MgZm9saW9fbmV4dF9wb3MoZm9saW8pO1xcbiA0MzA6XFx0XFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxuIDQzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHNhbWVfZm9saW8gPyBcXHUwMDI2ZW5kIDogTlVMTCkpXFxuIDQzMjpcXHRcXHRcXHRcXHRzdGFydCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xcbiA0MzM6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gNDM0OlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDQzNTpcXHRcXHRcXHRmb2xpbyA9IE5VTEw7XFxuIDQzNjpcXHRcXHR9XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdGlmICghc2FtZV9mb2xpbykge1xcbiA0Mzk6XFx0XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGxlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4gNDQwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdEZHUF9MT0NLLCAwKTtcXG4gNDQxOlxcdFxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbiA0NDI6XFx0XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG4gNDQzOlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIDQ0NDpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0NDU6XFx0XFx0XFx0fVxcbiA0NDY6XFx0XFx0fVxcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRpbmRleCA9IHN0YXJ0O1xcbiA0NDk6XFx0XFx0d2hpbGUgKGluZGV4IFxcdTAwM2MgZW5kKSB7XFxuIDQ1MDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNDUxOlxcdFxcdFxcdGlmICghZmluZF9nZXRfZW50cmllcyhtYXBwaW5nLCBcXHUwMDI2aW5kZXgsIGVuZCAtIDEsIFxcdTAwMjZmYmF0Y2gsXFxuIDQ1MjpcXHRcXHRcXHRcXHRcXHRpbmRpY2VzKSkge1xcbiA0NTM6XFx0XFx0XFx0XFx0LyogSWYgYWxsIGdvbmUgZnJvbSBzdGFydCBvbndhcmRzLCB3ZSdyZSBkb25lICovXFxuIDQ1NDpcXHRcXHRcXHRcXHRpZiAoaW5kZXggPT0gc3RhcnQpXFxuIDQ1NTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNDU2OlxcdFxcdFxcdFxcdC8qIE90aGVyd2lzZSByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xcbiA0NTc6XFx0XFx0XFx0XFx0aW5kZXggPSBzdGFydDtcXG4gNDU4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0NTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjo1Mi40MDczMzIxMjRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI0ODE1MzMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipFeGFtaW5pbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gU2hhcmVkIE1lbW9yeSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhpcyBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9zaG1lbS5jYCBhbmQgZm9jdXMgb24gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDExNTAgdG8gMTI3MC4gVGhhdCB1c3VhbGx5IGNvdmVycyB0aGUgY29yZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiByb3V0aW5lcywgb3IgcG90ZW50aWFsbHkgc29tZSBjcml0aWNhbCBwYWdlLXRhYmxlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBzaGFyZWQgbWVtb3J5IGNvbnRleHQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIHBoeXNpY2FsIHBhZ2UgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGluIHRoaXMgcmVnaW9uLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGNvbmN1cnJlbmN5IGFyb3VuZCB0aGlzIHNlY3Rpb24uIE5lZWQgdG8gYmUgc3VyZSBhbGwgdGhlIHByb3BlciBsb2NrcyBhcmUgYmVpbmcgdGFrZW4uIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBtZW1vcnkgbGVha3MgYmVpbmcgaW50cm9kdWNlZCBieSB0aGlzIHJvdXRpbmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHNpbmNlIHNoYXJlZCBtZW1vcnkgaXMgYWxsIGFib3V0IGNvbmN1cnJlbnQgYWNjZXNzLiBJJ20gZXhwZWN0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgY2FjaGUsIHRvby4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMjo1OS42NTU0ODk0OTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NobWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNzA6XFx0XFx0aWYgKHVuZmFsbG9jKVxcbjExNzE6XFx0XFx0XFx0Z290byB3aG9sZV9mb2xpb3M7XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdHNhbWVfZm9saW8gPSAobHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpID09IChsZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbjExNzQ6XFx0XFx0Zm9saW8gPSBzaG1lbV9nZXRfcGFydGlhbF9mb2xpbyhpbm9kZSwgbHN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbjExNzU6XFx0XFx0aWYgKGZvbGlvKSB7XFxuMTE3NjpcXHRcXHRcXHRzYW1lX2ZvbGlvID0gbGVuZCBcXHUwMDNjIGZvbGlvX25leHRfcG9zKGZvbGlvKTtcXG4xMTc3OlxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbjExNzg6XFx0XFx0XFx0aWYgKCF0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLCBsc3RhcnQsIGxlbmQsXFxuMTE3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHNhbWVfZm9saW8gPyBcXHUwMDI2ZW5kIDogTlVMTCkpXFxuMTE4MDpcXHRcXHRcXHRcXHRzdGFydCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xcbjExODE6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4xMTgyOlxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMTE4MzpcXHRcXHRcXHRmb2xpbyA9IE5VTEw7XFxuMTE4NDpcXHRcXHR9XFxuMTE4NTpcXHRcXG4xMTg2OlxcdFxcdGlmICghc2FtZV9mb2xpbylcXG4xMTg3OlxcdFxcdFxcdGZvbGlvID0gc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oaW5vZGUsIGxlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuMTE4ODpcXHRcXHRpZiAoZm9saW8pIHtcXG4xMTg5OlxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbjExOTA6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLCBcXHUwMDI2ZW5kKTtcXG4xMTkxOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTE5MjpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjExOTM6XFx0XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHR3aG9sZV9mb2xpb3M6XFxuMTE5NjpcXHRcXG4xMTk3OlxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuMTE5ODpcXHRcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBlbmQpIHtcXG4xMTk5OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjEyMDA6XFx0XFxuMTIwMTpcXHRcXHRcXHRpZiAoIWZpbmRfZ2V0X2VudHJpZXMobWFwcGluZywgXFx1MDAyNmluZGV4LCBlbmQgLSAxLCBcXHUwMDI2ZmJhdGNoLFxcbjEyMDI6XFx0XFx0XFx0XFx0XFx0aW5kaWNlcykpIHtcXG4xMjAzOlxcdFxcdFxcdFxcdC8qIElmIGFsbCBnb25lIG9yIGhvbGUtcHVuY2ggb3IgdW5mYWxsb2MsIHdlJ3JlIGRvbmUgKi9cXG4xMjA0OlxcdFxcdFxcdFxcdGlmIChpbmRleCA9PSBzdGFydCB8fCBlbmQgIT0gLTEpXFxuMTIwNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMjA2OlxcdFxcdFxcdFxcdC8qIEJ1dCBpZiB0cnVuY2F0aW5nLCByZXN0YXJ0IHRvIG1ha2Ugc3VyZSBhbGwgZ29uZSAqL1xcbjEyMDc6XFx0XFx0XFx0XFx0aW5kZXggPSBzdGFydDtcXG4xMjA4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMDk6XFx0XFx0XFx0fVxcbjEyMTA6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX2JhdGNoX2NvdW50KFxcdTAwMjZmYmF0Y2gpOyBpKyspIHtcXG4xMjExOlxcdFxcdFxcdFxcdGZvbGlvID0gZmJhdGNoLmZvbGlvc1tpXTtcXG4xMjEyOlxcdFxcbjEyMTM6XFx0XFx0XFx0XFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xcbjEyMTQ6XFx0XFx0XFx0XFx0XFx0aW50IG9yZGVyO1xcbjEyMTU6XFx0XFx0XFx0XFx0XFx0bG9uZyBzd2Fwc19mcmVlZDtcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0XFx0XFx0XFx0aWYgKHVuZmFsbG9jKVxcbjEyMTg6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTIxOTpcXHRcXHRcXHRcXHRcXHRzd2Fwc19mcmVlZCA9IHNobWVtX2ZyZWVfc3dhcChtYXBwaW5nLCBpbmRpY2VzW2ldLFxcbjEyMjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW5kIC0gMSwgZm9saW8pO1xcbjEyMjE6XFx0XFx0XFx0XFx0XFx0aWYgKCFzd2Fwc19mcmVlZCkge1xcbjEyMjI6XFx0XFx0XFx0XFx0XFx0XFx0cGdvZmZfdCBiYXNlID0gaW5kaWNlc1tpXTtcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0XFx0XFx0XFx0XFx0XFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kaWNlc1tpXSxcXG4xMjI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHJhZGl4X3RvX3N3cF9lbnRyeShmb2xpbykpO1xcbjEyMjY6XFx0XFx0XFx0XFx0XFx0XFx0LypcXG4xMjI3OlxcdFxcdFxcdFxcdFxcdFxcdCAqIElmIGZvdW5kIGEgbGFyZ2Ugc3dhcCBlbnRyeSBjcm9zcyB0aGUgZW5kIG9yIHN0YXJ0XFxuMTIyODpcXHRcXHRcXHRcXHRcXHRcXHQgKiBib3JkZXIsIHNraXAgaXQgYXMgdGhlIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9cXG4xMjI5OlxcdFxcdFxcdFxcdFxcdFxcdCAqIGFib3ZlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHplcm9kIGl0cyBjb250ZW50IG9uY2UuXFxuMTIzMDpcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4xMjMxOlxcdFxcdFxcdFxcdFxcdFxcdGlmIChvcmRlciBcXHUwMDNlIDApIHtcXG4xMjMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGJhc2UgPSByb3VuZF9kb3duKGJhc2UsIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbjEyMzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aWYgKGJhc2UgXFx1MDAzYyBzdGFydCB8fCBiYXNlICsgKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIFxcdTAwM2UgZW5kKVxcbjEyMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTIzNTpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuMTIzNjpcXHRcXHRcXHRcXHRcXHRcXHQvKiBTd2FwIHdhcyByZXBsYWNlZCBieSBwYWdlIG9yIGV4dGVuZGVkLCByZXRyeSAqL1xcbjEyMzc6XFx0XFx0XFx0XFx0XFx0XFx0aW5kZXggPSBiYXNlO1xcbjEyMzg6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIzOTpcXHRcXHRcXHRcXHRcXHR9XFxuMTI0MDpcXHRcXHRcXHRcXHRcXHRucl9zd2Fwc19mcmVlZCArPSBzd2Fwc19mcmVlZDtcXG4xMjQxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNDI6XFx0XFx0XFx0XFx0fVxcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHRcXHRcXHRmb2xpb19sb2NrKGZvbGlvKTtcXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0XFx0XFx0aWYgKCF1bmZhbGxvYyB8fCAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG4xMjQ3OlxcdFxcdFxcdFxcdFxcdGlmIChmb2xpb19tYXBwaW5nKGZvbGlvKSAhPSBtYXBwaW5nKSB7XFxuMTI0ODpcXHRcXHRcXHRcXHRcXHRcXHQvKiBQYWdlIHdhcyByZXBsYWNlZCBieSBzd2FwOiByZXRyeSAqL1xcbjEyNDk6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4xMjUwOlxcdFxcdFxcdFxcdFxcdFxcdGluZGV4ID0gaW5kaWNlc1tpXTtcXG4xMjUxOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyNTI6XFx0XFx0XFx0XFx0XFx0fVxcbjEyNTM6XFx0XFx0XFx0XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSxcXG4xMjU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvKTtcXG4xMjU1OlxcdFxcbjEyNTY6XFx0XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbjEyNTc6XFx0XFx0XFx0XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfZm9saW8obWFwcGluZywgZm9saW8pO1xcbjEyNTg6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIGlmICh0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKGZvbGlvLFxcbjEyNTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bHN0YXJ0LCBsZW5kLCBOVUxMKSkge1xcbjEyNjA6XFx0XFx0XFx0XFx0XFx0XFx0LypcXG4xMjYxOlxcdFxcdFxcdFxcdFxcdFxcdCAqIElmIHdlIHNwbGl0IGEgcGFnZSwgcmVzZXQgdGhlIGxvb3Agc29cXG4xMjYyOlxcdFxcdFxcdFxcdFxcdFxcdCAqIHRoYXQgd2UgcGljayB1cCB0aGUgbmV3IHN1YiBwYWdlcy5cXG4xMjYzOlxcdFxcdFxcdFxcdFxcdFxcdCAqIE90aGVyd2lzZSB0aGUgVEhQIHdhcyBlbnRpcmVseVxcbjEyNjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICogZHJvcHBlZCBvciB0aGUgdGFyZ2V0IHJhbmdlIHdhc1xcbjEyNjU6XFx0XFx0XFx0XFx0XFx0XFx0ICogemVyb2VkLCBzbyBqdXN0IGNvbnRpbnVlIHRoZSBsb29wIGFzXFxuMTI2NjpcXHRcXHRcXHRcXHRcXHRcXHQgKiBpcy5cXG4xMjY3OlxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbjEyNjg6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbjEyNjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjI6NTkuNjU1NzUyOTc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTk5NjI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUcnVuY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgdHJ1bmNhdGlvbiBhbmQgaG9sZS1wdW5jaGluZyBvZiBwYXJ0aWFsIGZvbGlvcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIGZ1bmN0aW9uLlxuXG5QcmV2aW91c2x5LCBJIGhhZCBhIHNwZWNpZmljIHBhdHRlcm4gZm9yIGhhbmRsaW5nIHRoZSByZXR1cm4gdmFsdWVzIGFuZCBhZGp1c3RpbmcgdGhlIGBlbmRgIGluZGV4IGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhhdC4gTm93LCBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgZGlyZWN0bHkgdXBkYXRlcyB0aGUgYCplbmRgIHBvaW50ZXIgdGhhdCB0aGUgY2FsbGVyIHBhc3NlcywgKmRlcGVuZGluZyogb24gd2hldGhlciB0aGUgZm9saW8gd2FzIHNwbGl0IG9yIGlmIGl0IG5lZWRzIHRvIGJlIHJldGFpbmVkLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IHNoaWZ0IGluIHJlc3BvbnNpYmlsaXR5LlxuXG5UaGUgcmV0dXJuIHZhbHVlIGl0c2VsZiBoYXMgYWxzbyBjaGFuZ2VkIHNlbWFudGljcy4gSXQgbm93IHJldHVybnMgYHRydWVgIGlmIHRoZSBmb2xpbyB3YXMgc3BsaXQgKG1lYW5pbmcgd2UgbmVlZGVkIHRvIGRvIHNvbWV0aGluZyBsaWtlIHplcm8tcmFuZ2VzKSwgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLCBmb3IgZXhhbXBsZSwgaWYgdGhlIGZvbGlvIHdhcyBmdWxseSB0cnVuY2F0ZWQgb3IgaWYgaXQgd2Fzbid0IHNwbGl0LlxuXG5UaGUgY2FsbGVycywgc3BlY2lmaWNhbGx5IGBzaG1lbV91bmRvX3JhbmdlYCBhbmQgYHRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlYCwgcGFzcyBgXHUwMDI2ZW5kYCAob3IgYHNhbWVfZm9saW8gPyBcdTAwMjZlbmQgOiBOVUxMYCkgdG8gYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gLiBUaGUgY2FsbGVycyBhcmUgYWxzbyByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIGBzdGFydGAgaW5kZXgsICpidXQgb25seSBpZiogYHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW9gIHJldHVybnMgYGZhbHNlYCAqYW5kKiBpdCB3YXMgdGhlIHN0YXJ0IGZvbGlvLlxuXG5Ob3csIGEgcXVpY2sgbWVtb3J5IHNhZmV0eSBjaGVjay4gSXQncyBjcnVjaWFsLCBzbyBsZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6XG5cbjEuICBJcyB0aGVyZSBhbnkgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZT8gTm8sIG5vdGhpbmcgb2J2aW91cyBpbiB0aGUgY29udGV4dC4gR29vZC5cbjIuICBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHRoYXQgd2UncmUgdXNpbmcgaW4gY29uZGl0aW9uYWxzIG9yIHJlYWRpbmc/XG4gICAgKiAgIEluIHRoZSBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgZnVuY3Rpb24gaXRzZWxmLCBgZW5kYCBpcyBhIHBvaW50ZXIgb2YgdHlwZSBgcGdvZmZfdGAuIEl0J3MgYWx3YXlzIGNoZWNrZWQgZm9yIGBOVUxMYCwgc28gdGhhdCdzIHNhZmUuXG4gICAgKiAgIGBzdGFydGAgYW5kIGBlbmRgIHdpdGhpbiBgc2htZW1fdW5kb19yYW5nZWAgYW5kIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAgYXJlIGxvY2FsIHZhcmlhYmxlcyBvZiB0eXBlIGBwZ29mZl90YC4gV2UgKm11c3QqIHZlcmlmeSB0aGVpciBpbml0aWFsaXphdGlvbiBiZWZvcmUgY2FsbGluZyBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AuXG4gICAgKiAgIEluIGB0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZWAsIGBlbmRgIGlzIGluaXRpYWxpemVkIHRvIGAtMWAgb3IgYChsZW5kICsgMSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlRgLCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYXQgbGluZSA0MjcuIFRoaXMgc2VlbXMgY29ycmVjdC5cbiAgICAqICAgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBsaW5lcyAxMTIwLTExNzUgaW4gYG1tL3NobWVtLmNgIHdpdGhpbiBgc2htZW1fdW5kb19yYW5nZWAsIHRvIHNlZSBob3cgYGVuZGAgaXMgaW5pdGlhbGl6ZWQgdGhlcmUuIE5lZWQgdG8gZW5zdXJlIGBlbmRgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjYwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTY6MjM6MDUuNzE1NzE4NTg0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgdW5mYWxsb2MpXFxuMTEyMTpcXHR7XFxuMTEyMjpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuMTEyMzpcXHRcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbjExMjQ6XFx0XFx0cGdvZmZfdCBzdGFydCA9IChsc3RhcnQgKyBQQUdFX1NJWkUgLSAxKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbjExMjU6XFx0XFx0cGdvZmZfdCBlbmQgPSAobGVuZCArIDEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuMTEyNjpcXHRcXHRzdHJ1Y3QgZm9saW9fYmF0Y2ggZmJhdGNoO1xcbjExMjc6XFx0XFx0cGdvZmZfdCBpbmRpY2VzW0ZPTElPX0JBVENIX1NJWkVdO1xcbjExMjg6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4xMTI5OlxcdFxcdGJvb2wgc2FtZV9mb2xpbztcXG4xMTMwOlxcdFxcdGxvbmcgbnJfc3dhcHNfZnJlZWQgPSAwO1xcbjExMzE6XFx0XFx0cGdvZmZfdCBpbmRleDtcXG4xMTMyOlxcdFxcdGludCBpO1xcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHRpZiAobGVuZCA9PSAtMSlcXG4xMTM1OlxcdFxcdFxcdGVuZCA9IC0xO1xcdC8qIHVuc2lnbmVkLCBzbyBhY3R1YWxseSB2ZXJ5IGJpZyAqL1xcbjExMzY6XFx0XFxuMTEzNzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlZmFsbG9jZW5kIFxcdTAwM2Ugc3RhcnQgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlZmFsbG9jZW5kIFxcdTAwM2M9IGVuZCBcXHUwMDI2XFx1MDAyNiAhdW5mYWxsb2MpXFxuMTEzODpcXHRcXHRcXHRpbmZvLVxcdTAwM2VmYWxsb2NlbmQgPSBzdGFydDtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0Zm9saW9fYmF0Y2hfaW5pdChcXHUwMDI2ZmJhdGNoKTtcXG4xMTQxOlxcdFxcdGluZGV4ID0gc3RhcnQ7XFxuMTE0MjpcXHRcXHR3aGlsZSAoaW5kZXggXFx1MDAzYyBlbmQgXFx1MDAyNlxcdTAwMjYgZmluZF9sb2NrX2VudHJpZXMobWFwcGluZywgXFx1MDAyNmluZGV4LCBlbmQgLSAxLFxcbjExNDM6XFx0XFx0XFx0XFx0XFx1MDAyNmZiYXRjaCwgaW5kaWNlcykpIHtcXG4xMTQ0OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19iYXRjaF9jb3VudChcXHUwMDI2ZmJhdGNoKTsgaSsrKSB7XFxuMTE0NTpcXHRcXHRcXHRcXHRmb2xpbyA9IGZiYXRjaC5mb2xpb3NbaV07XFxuMTE0NjpcXHRcXG4xMTQ3OlxcdFxcdFxcdFxcdGlmICh4YV9pc192YWx1ZShmb2xpbykpIHtcXG4xMTQ4OlxcdFxcdFxcdFxcdFxcdGlmICh1bmZhbGxvYylcXG4xMTQ5OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExNTA6XFx0XFx0XFx0XFx0XFx0bnJfc3dhcHNfZnJlZWQgKz0gc2htZW1fZnJlZV9zd2FwKG1hcHBpbmcsIGluZGljZXNbaV0sXFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGVuZCAtIDEsIGZvbGlvKTtcXG4xMTUyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjExNTM6XFx0XFx0XFx0XFx0fVxcbjExNTQ6XFx0XFxuMTE1NTpcXHRcXHRcXHRcXHRpZiAoIXVuZmFsbG9jIHx8ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdHRydW5jYXRlX2lub2RlX2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4xMTU3OlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTE1ODpcXHRcXHRcXHR9XFxuMTE1OTpcXHRcXHRcXHRmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKFxcdTAwMjZmYmF0Y2gpO1xcbjExNjA6XFx0XFx0XFx0Zm9saW9fYmF0Y2hfcmVsZWFzZShcXHUwMDI2ZmJhdGNoKTtcXG4xMTYxOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjExNjI6XFx0XFx0fVxcbjExNjM6XFx0XFxuMTE2NDpcXHRcXHQvKlxcbjExNjU6XFx0XFx0ICogV2hlbiB1bmRvaW5nIGEgZmFpbGVkIGZhbGxvY2F0ZSwgd2Ugd2FudCBub25lIG9mIHRoZSBwYXJ0aWFsIGZvbGlvXFxuMTE2NjpcXHRcXHQgKiB6ZXJvaW5nIGFuZCBzcGxpdHRpbmcgYmVsb3csIGJ1dCBzaGFsbCB3YW50IHRvIHRydW5jYXRlIHRoZSB3aG9sZVxcbjExNjc6XFx0XFx0ICogZm9saW8gd2hlbiAhdXB0b2RhdGUgaW5kaWNhdGVzIHRoYXQgaXQgd2FzIGFkZGVkIGJ5IHRoaXMgZmFsbG9jYXRlLFxcbjExNjg6XFx0XFx0ICogZXZlbiB3aGVuIFtsc3RhcnQsIGxlbmRdIGNvdmVycyBvbmx5IGEgcGFydCBvZiB0aGUgZm9saW8uXFxuMTE2OTpcXHRcXHQgKi9cXG4xMTcwOlxcdFxcdGlmICh1bmZhbGxvYylcXG4xMTcxOlxcdFxcdFxcdGdvdG8gd2hvbGVfZm9saW9zO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRzYW1lX2ZvbGlvID0gKGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSA9PSAobGVuZCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMTc0OlxcdFxcdGZvbGlvID0gc2htZW1fZ2V0X3BhcnRpYWxfZm9saW8oaW5vZGUsIGxzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMTc1OlxcdFxcdGlmIChmb2xpbykge1xcbjExNzY6XFx0XFx0XFx0c2FtZV9mb2xpbyA9IGxlbmQgXFx1MDAzYyBmb2xpb19uZXh0X3Bvcyhmb2xpbyk7XFxuMTE3NzpcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4xMTc4OlxcdFxcdFxcdGlmICghdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhmb2xpbywgbHN0YXJ0LCBsZW5kLFxcbjExNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzYW1lX2ZvbGlvID8gXFx1MDAyNmVuZCA6IE5VTEwpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNjoyMzowNS43MTU5NDg5MDRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5MzU0MTg2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgYXQgY2F0Y2hpbmcsIGdpdmVuIG15IGFyZWEgb2YgZXhwZXJ0aXNlLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGBlbmRgIHZhcmlhYmxlIGluIGBzaG1lbV91bmRvX3JhbmdlYCBpbml0aWFsaXplZCwgYW5kIGB0YWlsX2lzb2xhdGVkYCBpbiBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgaXMgZXhwbGljaXRseSBzZXQgdG8gYHRydWVgLiBHb29kIHN0YXJ0LCB0aG9zZSBhcmUgY292ZXJlZC5cblxuTXkgbWFpbiBjb25jZXJuIGlzIGFsd2F5cyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsIGxlYWthZ2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhLiBIb3dldmVyLCBJIGNvbmZpcm1lZCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucy4gSXQgcHJpbWFyaWx5IGRlYWxzIHdpdGggcGFnZSBjYWNoZSBhbmQgZm9saW8gbWFuaXB1bGF0aW9uczogdHJ1bmNhdGlvbiwgc3BsaXR0aW5nICh1c2luZyBgZm9saW9fc3BsaXRfb3JfdW5tYXBgKSwgYW5kIGludmFsaWRhdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogYW0gSSBjaGFuZ2luZyB0aGUga2VybmVsIG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2Ugb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIHBhZ2VzL21lbW9yeT8gTm9wZS4gSXQgaXMgb3BlcmF0aW5nIHdpdGhpbiB0aGUga2VybmVsLXBhZ2UgY2FjaGUuXG5cblRoZSBwb3RlbnRpYWwgaXNzdWVzIEkgZm9yZXNlZSBoZXJlIHJlbGF0ZSB0byBwYWdlIGNhY2hlIGNvbnNpc3RlbmN5LCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIHRydW5jYXRpb24gb3Igc3BsaXR0aW5nIGxvZ2ljLCBhbmQgbG9ja2luZywgYW55IG9mIHdoaWNoIGFyZSBpc3N1ZXMgSSdkIGxvb2sgYXQgaW4gYW55IHBhdGNoIGRlYWxpbmcgd2l0aCBzaGFyZWQgbWVtb3J5LiBIb3dldmVyLCB0aG9zZSBhcmUgaGFuZGxlZCB2aWEgS0FTQU4sIExPQ0tERVAsIGFuZCBgQlVHYCBjaGVja3MuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIHRoZSBmb3VyIGNyaXRlcmlhIGZvciBLTVNBTiwgYXMgSSBrbm93IHRoZW06XG5cbjEuICAqKktlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSB1c3VhbCBzdXNwZWN0cyAoY29weVxcX3RvXFxfdXNlciwgZXRjLikuIFRoaXMgaXMgc3RyaWN0bHkga2VybmVsLWludGVybmFsLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBBbGwga2V5IHZhcmlhYmxlcyAoZW5kLCB0YWlsXFxfaXNvbGF0ZWQsIHNwbGl0XFxfYXQsIHNwbGl0XFxfYXQyLCBldGMuKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXMgSSBzYXcuXG4zLiAgKipVbmluaXRpYWxpemVkIGZpZWxkcyBpbiBjb21wbGV4IGFsbG9jYXRpb25zOioqIE5vIG5ldyBhbGxvY2F0aW9ucy4gVGhpcyBwYXRjaCBpcyB3b3JraW5nIHdpdGggZXhpc3RpbmcgbWVtb3J5LlxuNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeToqKiBOby4gVGhpcyBpbnZvbHZlcyBtb2RpZnlpbmcgZm9saW8gYm91bmRzIGZvciBwYWdlY2FjaGUgbWFuYWdlbWVudC5cblxuR2l2ZW4gdGhpcywgSSBjb25jbHVkZSB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBjaGVja3MgYW5kIHRoZSBleGlzdGluZyBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgYXJlIGVudGlyZWx5IGFwcHJvcHJpYXRlLiBUaGlzIGRvZXNuJ3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gc3VibWl0IG15IGBzZXQtcmVzdWx0c2AgcmVzcG9uc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA4LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE2OjIzOjE4LjY1MTM3MTM2NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgaW50cm9kdWNlZCBvciByZWFkLCBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBhbHRlcmF0aW9ucyB0byBkYXRhIGJvdW5kcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgcGFnZSBjYWNoZSBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIGNhY2hlIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gdHJ1bmNhdGlvbiBhbmQgc3BsaXR0aW5nIGxvZ2ljIGluIGBtbS90cnVuY2F0ZS5jYCwgYG1tL3NobWVtLmNgLCBhbmQgYG1tL2ludGVybmFsLmhgIChgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYW5kIGl0cyBjYWxsZXJzKS4gSXQgcmVmYWN0b3JzIGhvdyB0aGUgcGFydGlhbCBmb2xpbyB0cnVuY2F0aW9uIHJldHVybiB2YWx1ZSBhbmQgdGhlIGBlbmRgIHBhZ2Ugb2Zmc2V0IGFyZSBoYW5kbGVkIGFuZCB1cGRhdGVkIHdoZW4gc3BsaXR0aW5nIG9yIGtlZXBpbmcgc3RyYWRkbGluZyBmb2xpb3MuXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgaW50cm9kdWNlZCBvciByZWFkLCBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBhbHRlcmF0aW9ucyB0byBkYXRhIGJvdW5kcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgcGFnZSBjYWNoZSBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBwYWdlIGNhY2hlIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[1] Phase: Succeeded StartedAt: 2026-09-04 16:23:30 +0000 UTC FinishedAt: 2026-09-04 16:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 16:23:30 +0000 UTC FinishedAt: 2026-09-04 16:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2] Phase: Succeeded StartedAt: 2026-09-04 16:23:30 +0000 UTC FinishedAt: 2026-09-04 20:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:23:30 +0000 UTC FinishedAt: 2026-09-04 20:08:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:23:30 +0000 UTC FinishedAt: 2026-09-04 16:23:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:23:30 +0000 UTC FinishedAt: 2026-09-04 16:23:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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-workflowwxwd2/series-workflowwxwd2-convert-artifact-819816367/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:23:40 +0000 UTC FinishedAt: 2026-09-04 16:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:23:40 +0000 UTC FinishedAt: 2026-09-04 16:42:09 +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:*6a7b86a6-d652-44b9-85f9-a9f6ec9102aa,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-workflowwxwd2/series-workflowwxwd2-convert-artifact-819816367/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": "a3ef81e6-3824-41aa-8c99-cf385a17487d", "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-workflowwxwd2/series-workflowwxwd2-build-action-3540708725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:23:40 +0000 UTC FinishedAt: 2026-09-04 16:41:59 +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:*6a7b86a6-d652-44b9-85f9-a9f6ec9102aa,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-workflowwxwd2/series-workflowwxwd2-convert-artifact-819816367/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": "a3ef81e6-3824-41aa-8c99-cf385a17487d", "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-workflowwxwd2/series-workflowwxwd2-build-action-3540708725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:42:09 +0000 UTC FinishedAt: 2026-09-04 16:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:42:09 +0000 UTC FinishedAt: 2026-09-04 16:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:42:09 +0000 UTC FinishedAt: 2026-09-04 16:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:42:09 +0000 UTC FinishedAt: 2026-09-04 16:42:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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-workflowwxwd2/series-workflowwxwd2-convert-artifact-3928108030/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:42:31 +0000 UTC FinishedAt: 2026-09-04 16:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:42:31 +0000 UTC FinishedAt: 2026-09-04 16:44:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3ef81e6-3824-41aa-8c99-cf385a17487d,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-workflowwxwd2/series-workflowwxwd2-build-action-3540708725/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-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:44:39 +0000 UTC FinishedAt: 2026-09-04 16:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:44:39 +0000 UTC FinishedAt: 2026-09-04 16:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:44:39 +0000 UTC FinishedAt: 2026-09-04 17:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:44:39 +0000 UTC FinishedAt: 2026-09-04 17:04:41 +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:*6a7b86a6-d652-44b9-85f9-a9f6ec9102aa,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-workflowwxwd2/series-workflowwxwd2-convert-artifact-3928108030/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": "8fa1ebf9-ced2-403b-a2df-477dfdbd8846", "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-workflowwxwd2/series-workflowwxwd2-build-action-2727934034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 16:44:39 +0000 UTC FinishedAt: 2026-09-04 17:04: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:*6a7b86a6-d652-44b9-85f9-a9f6ec9102aa,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-workflowwxwd2/series-workflowwxwd2-convert-artifact-3928108030/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": "8fa1ebf9-ced2-403b-a2df-477dfdbd8846", "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-workflowwxwd2/series-workflowwxwd2-build-action-2727934034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:04:41 +0000 UTC FinishedAt: 2026-09-04 17:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:04:41 +0000 UTC FinishedAt: 2026-09-04 17:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:04:41 +0000 UTC FinishedAt: 2026-09-04 17:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:04:41 +0000 UTC FinishedAt: 2026-09-04 17:06:52 +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:*8fa1ebf9-ced2-403b-a2df-477dfdbd8846,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-workflowwxwd2/series-workflowwxwd2-build-action-2727934034/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-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:03 +0000 UTC FinishedAt: 2026-09-04 20:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:03 +0000 UTC FinishedAt: 2026-09-04 20:08:38 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"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:*a3ef81e6-3824-41aa-8c99-cf385a17487d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8fa1ebf9-ced2-403b-a2df-477dfdbd8846,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-workflowwxwd2/series-workflowwxwd2-build-action-3540708725/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-workflowwxwd2/series-workflowwxwd2-build-action-2727934034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:03 +0000 UTC FinishedAt: 2026-09-04 17:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:03 +0000 UTC FinishedAt: 2026-09-04 17:07:13 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"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-workflowwxwd2/series-workflowwxwd2-convert-artifact-2842083587/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:03 +0000 UTC FinishedAt: 2026-09-04 17:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:03 +0000 UTC FinishedAt: 2026-09-04 17:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:03 +0000 UTC FinishedAt: 2026-09-04 17:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:23 +0000 UTC FinishedAt: 2026-09-04 20:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxwd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["truncate_inode_partial_folio","shmem_undo_range","truncate_inode_pages_range","shmem_truncate_range"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ef6a1dca8de41a408019310649e6d1b7b21ac4bc","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TRANSPARENT_HUGEPAGE"],"series_id":"a02ecab0-6b5d-44e6-86cf-e6abc167b6a4","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 17:07:23 +0000 UTC FinishedAt: 2026-09-04 20:08:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3ef81e6-3824-41aa-8c99-cf385a17487d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8fa1ebf9-ced2-403b-a2df-477dfdbd8846,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-workflowwxwd2/series-workflowwxwd2-build-action-3540708725/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-workflowwxwd2/series-workflowwxwd2-build-action-2727934034/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-workflowwxwd2/series-workflowwxwd2-convert-artifact-2842083587/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,}