Name: series-workflowx97vd Phase: Succeeded StartedAt: 2026-08-13 20:29:19 +0000 UTC FinishedAt: 2026-08-14 00:26:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[0] Phase: Succeeded StartedAt: 2026-08-13 20:29:19 +0000 UTC FinishedAt: 2026-08-13 20:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 20:29:19 +0000 UTC FinishedAt: 2026-08-13 20:35:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SND", "SND_DUMMY", "SND_ALOOP", "SND_PCMTEST", "DEBUG_FS", "SND_VIRMIDI", "SND_SEQUENCER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SND", "SND_DUMMY", "SND_ALOOP", "SND_PCMTEST", "DEBUG_FS", "SND_VIRMIDI", "SND_SEQUENCER" ], "series_id": "c98ddf48-5cfb-4f6e-b682-9716e4af7a41" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "snd_card_free", "snd_card_free_when_closed", "snd_devm_card_new" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NORCYjMzQ7LAogICAgJiMzNDtTTkRfRFVNTVkmIzM0OywKICAgICYjMzQ7U05EX0FMT09QJiMzNDssCiAgICAmIzM0O1NORF9QQ01URVNUJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDssCiAgICAmIzM0O1NORF9WSVJNSURJJiMzNDssCiAgICAmIzM0O1NORF9TRVFVRU5DRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbmRfY2FyZF9mcmVlJiMzNDssCiAgICAmIzM0O3NuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQmIzM0OywKICAgICYjMzQ7c25kX2Rldm1fY2FyZF9uZXcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBCeSBzYXZpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGNoZWNrZWQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSBpbiB0aGUgQUxTQSBjb3JlIGZyYW1ld29yayAoYHNuZF9jYXJkX2RvX2ZyZWVgKS4gV2hlbiBhbiBBTFNBIGNhcmQgaXMgYWxsb2NhdGVkIHVzaW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIGl0cyBtZW1vcnkgaXMgbWFuYWdlZCBieSBgZGV2cmVzYC4gRHVyaW5nIGRldmljZSByZW1vdmFsIG9yIGVycm9yIHBhdGhzLCBgZGV2cmVzYCB0cmlnZ2VycyBgc25kX2NhcmRfZnJlZWAsIHdoaWNoIHdhaXRzIG9uIGEgY29tcGxldGlvbiAoYHJlbGVhc2VfY29tcGxldGlvbmApIHVudGlsIGFsbCBkZXZpY2UgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gT25jZSB0aGUgbGFzdCByZWZlcmVuY2UgaXMgZHJvcHBlZCwgYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGV4ZWN1dGVkLCB3aGljaCBzaWduYWxzIHRoZSBjb21wbGV0aW9uLiBUaGlzIHdha2VzIHVwIHRoZSB3YWl0aW5nIHRocmVhZCwgYWxsb3dpbmcgYGRldnJlc2AgdG8gcHJvY2VlZCBhbmQgZnJlZSB0aGUgY2FyZCYjMzk7cyBtZW1vcnkuIEhvd2V2ZXIsIGBzbmRfY2FyZF9kb19mcmVlYCBwcmV2aW91c2x5IGFjY2Vzc2VkIGBjYXJkLVx1MDAzZW1hbmFnZWRgICphZnRlciogc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLCBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgaWYgYGRldnJlc2AgZnJlZWQgdGhlIGNhcmQgY29uY3VycmVudGx5LiBUaGUgcGF0Y2ggcmVzb2x2ZXMgdGhpcyBieSBjYWNoaW5nIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBhbnkgQUxTQSBkcml2ZXIgdXRpbGl6aW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIGluY2x1ZGluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkcml2ZXJzIGxpa2UgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODRjNjEyYTA0NDgyMDU4ZmFhMWIwYjA5NDgwZmNmOTg3MWRiNDBlMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDIwOjMxOjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmNcbmluZGV4IDU2ZGRlNWJkNzNjNGUuLjU3NzMzODUyNjI0YTcgMTAwNjQ0XG4tLS0gYS9zb3VuZC9jb3JlL2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc291bmQvY29yZS9pbml0LmNcbkBAIC01ODQsNiAmIzQzOzU4NCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XG4gXG4gc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiB7XG4mIzQzO1x0Ym9vbCBtYW5hZ2VkID0gY2FyZC1cdTAwM2VtYW5hZ2VkO1xuJiM0MztcbiBcdGNhcmQtXHUwMDNlcmVsZWFzaW5nID0gdHJ1ZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfU05EX01JWEVSX09TUylcbiBcdGlmIChzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaylcbkBAIC02MDEsNyAmIzQzOzYwMyw3IEBAIHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG4gXHR9XG4gXHRpZiAoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pXG4gXHRcdGNvbXBsZXRlKGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcbi1cdGlmICghY2FyZC1cdTAwM2VtYW5hZ2VkKVxuJiM0MztcdGlmICghbWFuYWdlZClcbiBcdFx0a2ZyZWUoY2FyZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NORCYjMzQ7LAogICAgJiMzNDtTTkRfRFVNTVkmIzM0OywKICAgICYjMzQ7U05EX0FMT09QJiMzNDssCiAgICAmIzM0O1NORF9QQ01URVNUJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDssCiAgICAmIzM0O1NORF9WSVJNSURJJiMzNDssCiAgICAmIzM0O1NORF9TRVFVRU5DRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbmRfY2FyZF9mcmVlJiMzNDssCiAgICAmIzM0O3NuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQmIzM0OywKICAgICYjMzQ7c25kX2Rldm1fY2FyZF9uZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IGluIHRoZSBBTFNBIGNvcmUgZnJhbWV3b3JrIChgc25kX2NhcmRfZG9fZnJlZWApLiBXaGVuIGFuIEFMU0EgY2FyZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaXRzIG1lbW9yeSBpcyBtYW5hZ2VkIGJ5IGBkZXZyZXNgLiBEdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgZXJyb3IgcGF0aHMsIGBkZXZyZXNgIHRyaWdnZXJzIGBzbmRfY2FyZF9mcmVlYCwgd2hpY2ggd2FpdHMgb24gYSBjb21wbGV0aW9uIChgcmVsZWFzZV9jb21wbGV0aW9uYCkgdW50aWwgYWxsIGRldmljZSByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBPbmNlIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBgc25kX2NhcmRfZG9fZnJlZWAgaXMgZXhlY3V0ZWQsIHdoaWNoIHNpZ25hbHMgdGhlIGNvbXBsZXRpb24uIFRoaXMgd2FrZXMgdXAgdGhlIHdhaXRpbmcgdGhyZWFkLCBhbGxvd2luZyBgZGV2cmVzYCB0byBwcm9jZWVkIGFuZCBmcmVlIHRoZSBjYXJkJiMzOTtzIG1lbW9yeS4gSG93ZXZlciwgYHNuZF9jYXJkX2RvX2ZyZWVgIHByZXZpb3VzbHkgYWNjZXNzZWQgYGNhcmQtXHUwMDNlbWFuYWdlZGAgKmFmdGVyKiBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24sIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiBgZGV2cmVzYCBmcmVlZCB0aGUgY2FyZCBjb25jdXJyZW50bHkuIFRoZSBwYXRjaCByZXNvbHZlcyB0aGlzIGJ5IGNhY2hpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaW4gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGFueSBBTFNBIGRyaXZlciB1dGlsaXppbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaW5jbHVkaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRyaXZlcnMgbGlrZSBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGM2MTJhMDQ0ODIwNThmYWExYjBiMDk0ODBmY2Y5ODcxZGI0MGUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMjA6MzE6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IDU2ZGRlNWJkNzNjNGUuLjU3NzMzODUyNjI0YTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NvdW5kL2NvcmUvaW5pdC5jCkBAIC01ODQsNiAmIzQzOzU4NCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7CiAKIHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCiB7CiYjNDM7CWJvb2wgbWFuYWdlZCA9IGNhcmQtJmd0O21hbmFnZWQ7CiYjNDM7CiAJY2FyZC0mZ3Q7cmVsZWFzaW5nID0gdHJ1ZTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19TTkRfTUlYRVJfT1NTKQogCWlmIChzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaykKQEAgLTYwMSw3ICYjNDM7NjAzLDcgQEAgc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIAl9CiAJaWYgKGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbikKIAkJY29tcGxldGUoY2FyZC0mZ3Q7cmVsZWFzZV9jb21wbGV0aW9uKTsKLQlpZiAoIWNhcmQtJmd0O21hbmFnZWQpCiYjNDM7CWlmICghbWFuYWdlZCkKIAkJa2ZyZWUoY2FyZCk7CiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU291bmQgQ2FyZCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBzb3VuZC9jb3JlL2luaXQuY2AuIEl0JiMzOTtzIHRvdWNoaW5nIGBzbmRfY2FyZF9kb19mcmVlYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBjYWNoaW5nIGBjYXJkLSZndDttYW5hZ2VkYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIGdldHRpbmcgaW50byB0aGUgY2xlYW51cCBhbmQgdGhlbiB1c2luZyBgIW1hbmFnZWRgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGAhY2FyZC0mZ3Q7bWFuYWdlZGAgaW4gdGhlIGBrZnJlZShjYXJkKWAgY2hlY2suIEltbWVkaWF0ZWx5LCBteSBpbnRlcm5hbCBhbGFybXMgYXJlIGdvaW5nIG9mZi4gVGhpcyBzbWVsbHMgbGlrZSBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3IgYSByZWxhdGVkIGNvbmN1cnJlbmN5IGlzc3VlLiBUaGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJvdGVjdCBzb21ldGhpbmcsIGNsZWFybHkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY2FyZGAgaXRzZWxmIGlzIHBvdGVudGlhbGx5IGJlaW5nIGZyZWVkIGR1cmluZyB0aGUgY2xlYW51cCBwaGFzZS4gT3IsIG1heWJlLCBgY2FyZC0mZ3Q7bWFuYWdlZGAgaXMgYmVpbmcgbW9kaWZpZWQg4oCTIGFjY2Vzc2VkIGFmdGVyIGBjYXJkYCBoYXMgYmVlbiBmcmVlZC4gQnV0IHdhaXQuLi4gaWYgYGNhcmRgICppcyogZnJlZWQsIHRoZW4gYGtmcmVlKGNhcmQpYCB3b3VsZCBiZSBhICpkb3VibGUgZnJlZSogc2l0dWF0aW9uLCBhbmQgdGhhdCYjMzk7cyBnZW5lcmFsbHkgY2F0YXN0cm9waGljLiBTbyB0aGF0IHBvaW50cyB0byB0aGUgZmllbGQgYGNhcmQtJmd0O21hbmFnZWRgIGJlaW5nIHRoZSBwcm9ibGVtLCBvciBhdCBsZWFzdCBob3cgaXQgcmVsYXRlcyB0byBgY2FyZGAuIElzIGBjYXJkYCBiZWluZyBpbnZhbGlkYXRlZCBieSBzb21ldGhpbmcgbGlrZSBgZGV2aWNlX2RlbCgmYW1wO2NhcmQtJmd0O2NhcmRfZGV2KWA/CgpSaWdodCwgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgc25kX2NhcmRfZG9fZnJlZWAgZnVuY3Rpb24gaW4gZGV0YWlsIGFuZCBzZWUgd2hhdOKAmXMgZ29pbmcgb24gaW4gdGhvc2UgY2xlYW51cCBzdGVwcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgb2JqZWN0IGxpZmV0aW1lIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHZ1bG5lcmFiaWxpdHkgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9jYXJkX2RvX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYz0xNDU9c3RhdGljIGludCBzbmRfY2FyZF9pbml0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50LFxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTE0Ny1cdFx0XHQgc2l6ZV90IGV4dHJhX3NpemUpO1xuc291bmQvY29yZS9pbml0LmM6MTQ4OnN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpO1xuc291bmQvY29yZS9pbml0LmMtMTQ5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNhcmRfZGV2X2F0dHJfZ3JvdXA7XG4tLVxuc291bmQvY29yZS9pbml0LmM9MTUxPXN0YXRpYyB2b2lkIHJlbGVhc2VfY2FyZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuc291bmQvY29yZS9pbml0LmMtMTUyLXtcbnNvdW5kL2NvcmUvaW5pdC5jOjE1MzpcdHNuZF9jYXJkX2RvX2ZyZWUoZGV2X3RvX3NuZF9jYXJkKGRldikpO1xuc291bmQvY29yZS9pbml0LmMtMTU0LX1cbi0tXG5zb3VuZC9jb3JlL2luaXQuYz01ODM9RVhQT1JUX1NZTUJPTF9HUEwoc25kX2NhcmRfZGlzY29ubmVjdF9zeW5jKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTU4NC1cbnNvdW5kL2NvcmUvaW5pdC5jOjU4NTpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxuc291bmQvY29yZS9pbml0LmMtNTg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBzbmRfY2FyZF9kb19mcmVlYCwgZmlsdGVyZWQgdGhyb3VnaCBteSBleHBlcmllbmNlOgoKKipEZWNvbnN0cnVjdGluZyBgc25kX2NhcmRfZG9fZnJlZWAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgc25kX2NhcmRfZG9fZnJlZWAuIEp1c3QgdGhlIG5hbWUgYWxvbmUgdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgY29uY2VybmVkIHdpdGggZnJlZWluZyByZXNvdXJjZXMgcmVsYXRlZCB0byBhIHNvdW5kIGNhcmQsIGxpa2VseSB3aXRoaW4gYSBkcml2ZXIgY29udGV4dC4gSSBiZXQgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBjYXJkIHJlbW92YWwsIGRyaXZlciB1bmxvYWQsIG9yIG1heWJlIGV2ZW4gaW4gZXJyb3IgaGFuZGxpbmcgc2NlbmFyaW9zIHdpdGhpbiB0aGUgc291bmQgc3lzdGVtLiBHaXZlbiB3aGF0IEkga25vdyBhYm91dCBhdWRpbyBkcml2ZXIgYXJjaGl0ZWN0dXJlcywgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBtZXRpY3Vsb3VzbHkgY2xlYW4gdXAgYWxsb2NhdGVkIGJ1ZmZlcnMsIHJlbGVhc2UgaGFyZHdhcmUgcmVzb3VyY2VzLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24gbG9ja3MgdG8gcHJldmVudCBhbnkgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGlzIGRlYWxsb2NhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBtZW1vcnkgbWFuYWdlbWVudCBjYWxscyBsaWtlIGBrZnJlZWAsIGBzbmRfY2FyZF9mcmVlYCwgb3Igc2ltaWxhciBmdW5jdGlvbnMsIGFzIHRob3NlIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiByZXNvdXJjZSBjbGVhbnVwLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gYmUgc2VhcmNoaW5nIGZvciBhbnkgY2FsbHMgdG8gcmVsYXRlZCBoYXJkd2FyZSBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbnMgdXNlZCB3aXRoaW4gdGhpcyBjb2RlYmFzZSwgSSB3aWxsIGFudGljaXBhdGUgYW55IHBvdGVudGlhbCBuYW1pbmcgY29sbGlzaW9ucy4gQW55IG1pc3NpbmcgbWVtb3J5IHJlbGVhc2VzIG9yIGluY29ycmVjdCBsb2NraW5nIHdpbGwgc3RhbmQgb3V0IGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGZ1bmN0aW9uIGhhcyBjb3JyZWN0IGNoZWNrcyBmb3IgcmVzb3VyY2VzIHRvIGZyZWUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCByZXNvdXJjZXMgaXQgaXMgcmVzcG9uc2libGUgZm9yLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgYWxsIG9mIHRoZSBmdW5jdGlvbiBjYWxscywgc28gdGhhdCBJIHVuZGVyc3RhbmQgd2hlcmUgaXQgbWF5IGhhdmUgYmVlbiBjYWxsZWQsIGFuZCB2ZXJpZnkgaXRzIGV4cGVjdGVkIGJlaGF2aW91ci4gSSBob3BlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnJlZXMgcmVzb3VyY2VzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgd2hlbiB0aGUgc291bmQgY2FyZCB3YXMgbG9hZGVkLiBJJiMzOTttIG1lbnRhbGx5IGdvaW5nIG92ZXIgdGhlIHVzdWFsIHN1c3BlY3RzOiBETUEgYnVmZmVycywgaW50ZXJydXB0IGhhbmRsZXJzLCBjb250cm9sIHJlZ2lzdGVycywgYW5kIGFueSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgc3BlY2lmaWMgdG8gdGhlIGF1ZGlvIGNhcmQuIEkgd2FudCB0byBzZWUgaWYgaXQgZ3JhY2VmdWxseSBoYW5kbGVzIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24sIG9yIGlmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiBjcmFzaGVzIGlmLCBzYXksIHRoZSBjYXJkIGZhaWxlZCB0byBpbml0aWFsaXplIGNvbXBsZXRlbHkuIEkgaG9wZSBpdCBoYXMgc29tZSBzYW5pdHkgY2hlY2tzIGluIHBsYWNlIHRvIGF2b2lkIGRvdWJsZS1mcmVlaW5nIG9yIGZyZWVpbmcgdW5hbGxvY2F0ZWQgbWVtb3J5LiBJIGFtIHN1cmUgaXQmIzM5O3MgYW4gaW1wb3J0YW50IHBpZWNlIG9mIGNvZGUsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGNhcmVmdWxseSBhbmFseXNlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4NTpcdHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG4gNTg2Olx0e1xuIDU4NzpcdFx0Ym9vbCBtYW5hZ2VkID0gY2FyZC1cdTAwM2VtYW5hZ2VkO1xuIDU4ODpcdFxuIDU4OTpcdFx0Y2FyZC1cdTAwM2VyZWxlYXNpbmcgPSB0cnVlO1xuIDU5MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19TTkRfTUlYRVJfT1NTKVxuIDU5MTpcdFx0aWYgKHNuZF9taXhlcl9vc3Nfbm90aWZ5X2NhbGxiYWNrKVxuIDU5MjpcdFx0XHRzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjayhjYXJkLCBTTkRfTUlYRVJfT1NTX05PVElGWV9GUkVFKTtcbiA1OTM6XHQjZW5kaWZcbiA1OTQ6XHRcdHNuZF9kZXZpY2VfZnJlZV9hbGwoY2FyZCk7XG4gNTk1Olx0XHRpZiAoY2FyZC1cdTAwM2Vwcml2YXRlX2ZyZWUpXG4gNTk2Olx0XHRcdGNhcmQtXHUwMDNlcHJpdmF0ZV9mcmVlKGNhcmQpO1xuIDU5NzpcdCNpZmRlZiBDT05GSUdfU05EX0NUTF9ERUJVR1xuIDU5ODpcdFx0a2ZyZWUoY2FyZC1cdTAwM2V2YWx1ZV9idWYpO1xuIDU5OTpcdCNlbmRpZlxuIDYwMDpcdFx0aWYgKHNuZF9pbmZvX2NhcmRfZnJlZShjYXJkKSBcdTAwM2MgMCkge1xuIDYwMTpcdFx0XHRkZXZfd2FybihjYXJkLVx1MDAzZWRldiwgXCYjMzQ7dW5hYmxlIHRvIGZyZWUgY2FyZCBpbmZvXFxuXCYjMzQ7KTtcbiA2MDI6XHRcdFx0LyogTm90IGZhdGFsIGVycm9yICovXG4gNjAzOlx0XHR9XG4gNjA0Olx0XHRpZiAoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pXG4gNjA1Olx0XHRcdGNvbXBsZXRlKGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcbiA2MDY6XHRcdGlmICghbWFuYWdlZClcbiA2MDc6XHRcdFx0a2ZyZWUoY2FyZCk7XG4gNjA4Olx0XHRyZXR1cm4gMDtcbiA2MDk6XHR9XG4gNjEwOlx0XG4gNjExOlx0LyoqXG4gNjEyOlx0ICogc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCAtIERpc2Nvbm5lY3QgdGhlIGNhcmQsIGZyZWUgaXQgbGF0ZXIgZXZlbnR1YWxseVxuIDYxMzpcdCAqIEBjYXJkOiBzb3VuZGNhcmQgc3RydWN0dXJlXG4gNjE0Olx0ICpcbiA2MTU6XHQgKiBVbmxpa2Ugc25kX2NhcmRfZnJlZSgpLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IHRyeSB0byByZWxlYXNlIHRoZSBjYXJkXG4gNjE2Olx0ICogcmVzb3VyY2UgaW1tZWRpYXRlbHksIGJ1dCB0cmllcyB0byBkaXNjb25uZWN0IGF0IGZpcnN0LiAgV2hlbiB0aGUgY2FyZFxuIDYxNzpcdCAqIGlzIHN0aWxsIGluIHVzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYmVmb3JlIGZyZWVpbmcgdGhlIHJlc291cmNlcy5cbiA2MTg6XHQgKiBUaGUgY2FyZCByZXNvdXJjZXMgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSByZWZjb3VudCBnZXRzIHRvIHplcm8uXG4gNjE5Olx0ICpcbiA2MjA6XHQgKiBSZXR1cm46IHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlXG4gNjIxOlx0ICovXG4gNjIyOlx0dm9pZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiA2MjM6XHR7XG4gNjI0Olx0XHRpZiAoIWNhcmQpXG4gNjI1Olx0XHRcdHJldHVybjtcbiA2MjY6XHRcbiA2Mjc6XHRcdHNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7XG4gNjI4Olx0XHRwdXRfZGV2aWNlKFx1MDAyNmNhcmQtXHUwMDNlY2FyZF9kZXYpO1xuIDYyOTpcdFx0cmV0dXJuO1xuIDYzMDpcdH1cbiA2MzE6XHRFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQpO1xuIDYzMjpcdFxuIDYzMzpcdC8qKlxuIDYzNDpcdCAqIHNuZF9jYXJkX2ZyZWUgLSBmcmVlcyBnaXZlbiBzb3VuZGNhcmQgc3RydWN0dXJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFMU0EgQ29yZSBQYXRjaDogc25kX2NhcmRfZG9fZnJlZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBzbmRfY2FyZF9kb19mcmVlYCwgd2hpY2ggaXMgaW4gdGhlIEFMU0EgY29yZS4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSByZWxhdGVkIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBjb25jZXJucyBzaXR1YXRpb25zIHdoZXJlIGBjYXJkLSZndDttYW5hZ2VkYCBpcyBiZWluZyBhY2Nlc3NlZCBhZnRlciBgY2FyZC0mZ3Q7cHJpdmF0ZV9mcmVlYCBvciBgc25kX2RldmljZV9mcmVlX2FsbGAgbWlnaHQgaGF2ZSBhbHJlYWR5IGZyZWVkIHRoZSBgY2FyZGAgc3RydWN0dXJlLiBIb3dldmVyLCB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBzY2VuYXJpbyBoZXJlLiBJZiBgY2FyZGAgKmlzKiBmcmVlZCwgdGhlbiBga2ZyZWUoY2FyZClgIHdvdWxkIGluZGVlZCBiZSBhIGRvdWJsZS1mcmVlLCB3aGljaCBpc24mIzM5O3QgZGVzaXJhYmxlLgoKQnV0IHdhaXQgYSBtaW51dGUsIGlmIGBjYXJkYCBpcyBtYW5hZ2VkLCBga2ZyZWUoY2FyZClgIGlzbiYjMzk7dCAqc3VwcG9zZWQqIHRvIGJlIGNhbGxlZCBkaXJlY3RseS4gSXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgaGFuZGxlZCBieSBgZGV2cmVzYCB1c2luZyBzb21ldGhpbmcgbGlrZSBgZGV2bV9remFsbG9jYC4gU28sIGlmIHRoZSBjYXJkIGlzIG1hbmFnZWQsIGRldnJlcyB3b3VsZCBiZSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdC4gTm93LCBkb2VzIGBjYXJkLSZndDtwcml2YXRlX2ZyZWVgIG9yIGBzbmRfZGV2aWNlX2ZyZWVfYWxsYCB0cmlnZ2VyIHRoZSBkZXZyZXMgcmVsZWFzZT8gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0OyBkZXZyZXMgcmVsZWFzZSBpcyB0aWVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgcmVtb3ZhbCwgbm90IGFuIGludGVybmFsIGNsZWFudXAuCgpBaGEsIGlmIGBjYXJkYCBpcyBtYW5hZ2VkLCBgZGV2cmVzYCB0YWtlcyBjYXJlIG9mIHRoZSBmcmVlaW5nLiBBbmQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBgcmVsZWFzZV9jYXJkX2RldmljZWAsIHdoaWNoIGlzIHRoZSBgcmVsZWFzZWAgY2FsbGJhY2sgb2YgYGNhcmQtJmd0O2NhcmRfZGV2YC4gSWYgYGNhcmQtJmd0O21hbmFnZWRgIGlzIHRydWUsIHRoZW4gYGRldm1fc25kX2NhcmRfYWxsb2NgIHdhcyB1c2VkIHRvIGFsbG9jYXRlIGl0LCBhbmQgaXQgd2lsbCBiZSBmcmVlZCBieSBgZGV2cmVzYCB3aGVuIHRoZSBwYXJlbnQgZGV2aWNlIGlzIHJlbW92ZWQuCgpCdXQgdGhlbiwgaWYgYGRldnJlc2AgZnJlZXMgdGhlIGNhcmQgKmJlZm9yZSogYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGZpbmlzaGVkLCB0aGF0IHdvdWxkIGJlIGEgcHJvYmxlbS4gSG93ZXZlciwgYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGByZWxlYXNlX2NhcmRfZGV2aWNlYCwgd2hpY2ggaXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgYGNhcmQtJmd0O2NhcmRfZGV2YCBzbyB0aGVyZSBzaG91bGQgbm90IGJlIGEgcmFjZSBjb25kaXRpb24uCgpNYXliZSBhIHByZXZpb3VzIGNvbW1pdCBoYXMgYSBjbHVlLiBMZXQmIzM5O3Mgc2VlIGlmIGEgc2ltaWxhciBwYXRjaCBoYXMgYW4gZXhwbGFuYXRpb24gaW4gaXRzIGNvbW1pdCBtZXNzYWdlLiBJIG5lZWQgdG8gc2VhcmNoIHRoZSBnaXQgbG9nIGZvciBgc25kX2NhcmRfZG9fZnJlZWAgYW5kIGBtYW5hZ2VkYCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9zbmRfY2FyZF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL2NvcmUvaW5pdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIFNvdW5kIERyaXZlciBSZWxlYXNlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBhdWRpbyBpc3N1ZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB3aGVyZSB0aGUgcmVzb3VyY2VzIGFyZSBmcmVlZCwgcGFydGljdWxhcmx5IGFmdGVyIGEgc291bmQgY2FyZCBpcyBkb25lIGJlaW5nIHVzZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYHNuZF9jYXJkX2RvX2ZyZWVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYHNvdW5kL2NvcmUvaW5pdC5jYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHNwb3QgZm9yIHRoZSBrZXJuZWwgdG8gcmVsZWFzZSB0aGUgc291bmQgY2FyZCByZXNvdXJjZXMgd2hlbiBpdCYjMzk7cyBiZWluZyB1bnJlZ2lzdGVyZWQuIEl0IGlzIGhpZ2hseSBsaWtlbHkgdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoaXMgaXNzdWUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbmRfY2FyZF9kb19mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmM9MTQ1PXN0YXRpYyBpbnQgc25kX2NhcmRfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0xNDctXHRcdFx0IHNpemVfdCBleHRyYV9zaXplKTtcbnNvdW5kL2NvcmUvaW5pdC5jOjE0ODpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTE0OS1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjYXJkX2Rldl9hdHRyX2dyb3VwO1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTE1MT1zdGF0aWMgdm9pZCByZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbnNvdW5kL2NvcmUvaW5pdC5jLTE1Mi17XG5zb3VuZC9jb3JlL2luaXQuYzoxNTM6XHRzbmRfY2FyZF9kb19mcmVlKGRldl90b19zbmRfY2FyZChkZXYpKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTE1NC19XG4tLVxuc291bmQvY29yZS9pbml0LmM9NTgzPUVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XG5zb3VuZC9jb3JlL2luaXQuYy01ODQtXG5zb3VuZC9jb3JlL2luaXQuYzo1ODU6c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbnNvdW5kL2NvcmUvaW5pdC5jLTU4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIGBjYXJkLSZndDttYW5hZ2VkYCBGbGFnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBgY2FyZGAgb2JqZWN0IGFuZCBzcGVjaWZpY2FsbHksIGhvdyB0aGUgYG1hbmFnZWRgIGZsYWcgaXMgYmVpbmcgc2V0IGFuZCB1c2VkLiBGaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHRoZSBhc3NpZ25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGNhcmQtJmd0O21hbmFnZWRgIGlzIGJlaW5nIG1vZGlmaWVkLiBJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciBhc3NpZ25tZW50cyB0byBgY2FyZC0mZ3Q7bWFuYWdlZGAuIEkmIzM5O2xsIHByb2JhYmx5IGFsc28gd2FudCB0byBsb29rIGZvciB1c2VzIG9mIGEgc2ltaWxhciB2YXJpYWJsZSBpbiB0aGUgc2FtZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgcGF0dGVybnMgaW52b2x2ZWQuIEkgZXhwZWN0IEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgZm9yIGluaXRpYWxpemF0aW9ucyBhbmQgcG90ZW50aWFsIHJlLWFzc2lnbm1lbnRzIHRvbywgdG8gYnVpbGQgYSBmdWxsIHBpY3R1cmUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gdW5kZXJzdGFuZCAqd2h5KiBhbmQgKndoZW4qIGl0JiMzOTtzIGJlaW5nIHNldCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRob3NlIGFzc2lnbm1lbnRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgYWJvdXQgdGhlIGludGVuZGVkICYjMzQ7bWFuYWdlZCYjMzQ7IHN0YXRlIOKAkyBpcyBpdCByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCByZXNvdXJjZSBvd25lcnNoaXAsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBPbmNlIEkgaGF2ZSB0aGF0IGNvbnRleHQsIEkmIzM5O2xsIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBzaWduaWZpY2FuY2UgYW5kIGNhbiBzdGFydCByZWFzb25pbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYXJkLVx1MDAzZW1hbmFnZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYz0yMjc9aW50IHNuZF9kZXZtX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLFxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTIzOS1cdFx0cmV0dXJuIC1FTk9NRU07XG5zb3VuZC9jb3JlL2luaXQuYzoyNDA6XHRjYXJkLVx1MDAzZW1hbmFnZWQgPSB0cnVlO1xuc291bmQvY29yZS9pbml0LmMtMjQxLVx0ZXJyID0gc25kX2NhcmRfaW5pdChjYXJkLCBwYXJlbnQsIGlkeCwgeGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpO1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTI3Nz1zdGF0aWMgaW50IHNuZF9jYXJkX2luaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXG4tLVxuc291bmQvY29yZS9pbml0LmMtMzA4LVx0XHRcdGlkeCwgc25kX2VjYXJkc19saW1pdCAtIDEsIGVycik7XG5zb3VuZC9jb3JlL2luaXQuYzozMDk6XHRcdGlmICghY2FyZC1cdTAwM2VtYW5hZ2VkKVxuc291bmQvY29yZS9pbml0LmMtMzEwLVx0XHRcdGtmcmVlKGNhcmQpOyAvKiBtYW51YWxseSBmcmVlIGhlcmUsIGFzIG5vIGRlc3RydWN0b3IgY2FsbGVkICovXG4tLVxuc291bmQvY29yZS9pbml0LmM9NTg1PXN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG5zb3VuZC9jb3JlL2luaXQuYy01ODYte1xuc291bmQvY29yZS9pbml0LmM6NTg3Olx0Ym9vbCBtYW5hZ2VkID0gY2FyZC1cdTAwM2VtYW5hZ2VkO1xuc291bmQvY29yZS9pbml0LmMtNTg4LVxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTg4MD1pbnQgc25kX2NhcmRfcmVnaXN0ZXIoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTg5Mi1cdH0gZWxzZSB7XG5zb3VuZC9jb3JlL2luaXQuYzo4OTM6XHRcdGlmIChjYXJkLVx1MDAzZW1hbmFnZWQpXG5zb3VuZC9jb3JlL2luaXQuYy04OTQtXHRcdFx0ZGV2bV9yZW1vdmVfYWN0aW9uKGNhcmQtXHUwMDNlZGV2LCB0cmlnZ2VyX2NhcmRfZnJlZSwgY2FyZCk7XG4tLVxuc291bmQvY29yZS9pbml0LmMtODk2LVxuc291bmQvY29yZS9pbml0LmM6ODk3Olx0aWYgKGNhcmQtXHUwMDNlbWFuYWdlZCkge1xuc291bmQvY29yZS9pbml0LmMtODk4LVx0XHRlcnIgPSBkZXZtX2FkZF9hY3Rpb24oY2FyZC1cdTAwM2VkZXYsIHRyaWdnZXJfY2FyZF9mcmVlLCBjYXJkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gYXVkaW8gZHJpdmVyIGRldmVsb3BtZW50OgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQ2FyZCBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNuZF9kZXZtX2NhcmRfbmV3YC4gVGhlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBhbGxvY2F0aW5nIGFuIGF1ZGlvIGNhcmQgb2JqZWN0LCBhbmQgdGhlICYjMzQ7ZGV2bSYjMzQ7IHByZWZpeCBzY3JlYW1zICYjMzQ7ZGV2aWNlIHJlc291cmNlJiMzNDsgbWFuYWdlbWVudCwgbWVhbmluZyBpdCYjMzk7cyB1c2luZyB0aGUgZGV2aWNlIHJlc291cmNlIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCBndWVzcywgd2hpY2ggSSYjMzk7bGwgY29uZmlybSwgaXMgdGhhdCB0aGlzIHByb2JhYmx5IHJlbGllcyBvbiBgZGV2bV9remFsbG9jYCBvciBzb21ldGhpbmcgc2ltaWxhciBmb3IgdGhlIGFsbG9jYXRpb24uIE5vdyBsZXQmIzM5O3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBieSBjaGVja2luZyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgYHNuZF9kZXZtX2NhcmRfbmV3YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI3Olx0aW50IHNuZF9kZXZtX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLFxuIDIyODpcdFx0XHQgICAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIHNpemVfdCBleHRyYV9zaXplLFxuIDIyOTpcdFx0XHQgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkX3JldClcbiAyMzA6XHR7XG4gMjMxOlx0XHRzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7XG4gMjMyOlx0XHRpbnQgZXJyO1xuIDIzMzpcdFxuIDIzNDpcdFx0KmNhcmRfcmV0ID0gTlVMTDtcbiAyMzU6XHRcdGNhcmQgPSBkZXZyZXNfYWxsb2MoX19zbmRfY2FyZF9yZWxlYXNlLFxuIDIzNjpcdFx0XHRcdCAgICBzdHJ1Y3Rfc2l6ZShjYXJkLCBwcml2YXRlX2RhdGFfYXJlYSwgZXh0cmFfc2l6ZSksXG4gMjM3Olx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuIDIzODpcdFx0aWYgKCFjYXJkKVxuIDIzOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNDA6XHRcdGNhcmQtXHUwMDNlbWFuYWdlZCA9IHRydWU7XG4gMjQxOlx0XHRlcnIgPSBzbmRfY2FyZF9pbml0KGNhcmQsIHBhcmVudCwgaWR4LCB4aWQsIG1vZHVsZSwgZXh0cmFfc2l6ZSk7XG4gMjQyOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gMjQzOlx0XHRcdGRldnJlc19mcmVlKGNhcmQpOyAvKiBpbiBtYW5hZ2VkIG1vZGUsIHdlIG5lZWQgdG8gZnJlZSBtYW51YWxseSAqL1xuIDI0NDpcdFx0XHRyZXR1cm4gZXJyO1xuIDI0NTpcdFx0fVxuIDI0NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODUwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLgoKKipBbmFseXppbmcgdGhlIENhcmQgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgc28gdGhlIGBjYXJkYCBzdHJ1Y3R1cmUsIHRoYXQgY3JpdGljYWwgcGllY2UsIGlzIGJlaW5nIGFsbG9jYXRlZCB1c2luZyBgZGV2cmVzX2FsbG9jYC4gSSBrbm93IHRoaXMsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBhbmFseXplIHRoZSBmbG93LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgZGVhbGxvY2F0aW9uIHBhdGgsIG5hdHVyYWxseS4gV2hlbiBgc25kX2NhcmRfZG9fZnJlZWAgZ2V0cyBpbnZva2VkLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBtZW1vcnkgc2hvdWxkIGJlIHJlbGVhc2VkLiBBIGtleSBxdWVzdGlvbiBhcmlzZXM6IHdoYXQgY2FsbHMgYHNuZF9jYXJkX2RvX2ZyZWVgPyBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgX19zbmRfY2FyZF9yZWxlYXNlYCBpcyBpbnZvbHZlZCwgYW5kIGl0IGhhcyB0byBiZSwgZ2l2ZW4gdGhlIG5hbWVzLiBMZXQgbWUgY29uZmlybSB0aGlzIGFzc3VtcHRpb24gYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgc2NydXRpbml6aW5nIGBfX3NuZF9jYXJkX3JlbGVhc2VgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb25uZWN0aW9uIHdpbGwgYmVjb21lIGNsZWFyLiBHb3R0YSB0cmFjZSB0aGUgY2FsbHMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGhhbmRsZWQsIG5vIG1lbW9yeSBsZWFrcyBhbGxvd2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NuZF9jYXJkX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYz0xOTU9RVhQT1JUX1NZTUJPTChzbmRfY2FyZF9uZXcpO1xuc291bmQvY29yZS9pbml0LmMtMTk2LVxuc291bmQvY29yZS9pbml0LmM6MTk3OnN0YXRpYyB2b2lkIF9fc25kX2NhcmRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXG5zb3VuZC9jb3JlL2luaXQuYy0xOTgte1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTIyNz1pbnQgc25kX2Rldm1fY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsXG4tLVxuc291bmQvY29yZS9pbml0LmMtMjM0LVx0KmNhcmRfcmV0ID0gTlVMTDtcbnNvdW5kL2NvcmUvaW5pdC5jOjIzNTpcdGNhcmQgPSBkZXZyZXNfYWxsb2MoX19zbmRfY2FyZF9yZWxlYXNlLFxuc291bmQvY29yZS9pbml0LmMtMjM2LVx0XHRcdCAgICBzdHJ1Y3Rfc2l6ZShjYXJkLCBwcml2YXRlX2RhdGFfYXJlYSwgZXh0cmFfc2l6ZSksXG4tLVxuc291bmQvY29yZS9pbml0LmM9MjY0PWludCBzbmRfY2FyZF9mcmVlX29uX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldClcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0yNjktXHRcdHJldHVybiAwO1xuc291bmQvY29yZS9pbml0LmM6MjcwOlx0Y2FyZCA9IGRldnJlc19maW5kKGRldiwgX19zbmRfY2FyZF9yZWxlYXNlLCBOVUxMLCBOVUxMKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTI3MS1cdGlmIChjYXJkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBfX3NuZF9jYXJkX3JlbGVhc2VgOgoKKipBbmFseXppbmcgYF9fc25kX2NhcmRfcmVsZWFzZWAqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgYF9fc25kX2NhcmRfcmVsZWFzZWAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIGNsZWFudXAgcHJvY2VzcyBmb3IgYW4gYXVkaW8gY2FyZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBzb3VuZCBzdWJzeXN0ZW0sIHByb2JhYmx5IGluIHRoZSBBTFNBIGZyYW1ld29yay4gTW9yZSBzcGVjaWZpY2FsbHksIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VuZCBjYXJkLgoKSSBiZXQgaXQmIzM5O2xsIGludm9sdmU6CgoqICAgKipVbnJlZ2lzdGVyaW5nIHRoZSBjYXJkOioqIERlcmVnaXN0ZXJpbmcgdGhlIHNvdW5kIGNhcmQgd2l0aCB0aGUgQUxTQSBjb3JlLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UsIHRvIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGtub3dpbmcgYWJvdXQgaXQuCiogICAqKlJlbGVhc2luZyBEcml2ZXItc3BlY2lmaWMgcmVzb3VyY2VzOioqIEZyZWVpbmcgYW55IG1lbW9yeSwgbXV0ZXhlcywgc2VtYXBob3Jlcywgb3Igb3RoZXIgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSB0aGUgc291bmQgY2FyZCBkcml2ZXIgc3BlY2lmaWMgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBga2ZyZWVgLCBgbXV0ZXhfZGVzdHJveWAsIGBzbmRfY2FyZF9mcmVlYCwgb3IgYW55IGRyaXZlci1zcGVjaWZpYyByZWxlYXNlIGZ1bmN0aW9ucyB0aGF0IHRoZSBjYXJkIGRyaXZlciB1c2VzLgoqICAgKipDbG9zaW5nIGRldmljZSBmaWxlczoqKiBQb3RlbnRpYWxseSBjbG9zaW5nIGFueSBkZXZpY2UgZmlsZXMgb3IgcmVtb3ZpbmcgdGhlbSBmcm9tIGRldmljZSBmaWxlIHN0cnVjdHVyZXMuIFRoaXMgZW5zdXJlcyB0aGF0IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgY2FuJiMzOTt0IGFjY2lkZW50YWxseSBhY2Nlc3MgZGFuZ2xpbmcgcmVmZXJlbmNlcy4KKiAgICoqU3RvcHBpbmcgYWxsIGFjdGl2ZSBzdHJlYW1zOioqIEVuc3VyaW5nIHRoYXQgYW55IGN1cnJlbnRseSBhY3RpdmUgYXVkaW8gc3RyZWFtcyBvciBwbGF5YmFjayBidWZmZXJzIGFyZSBncmFjZWZ1bGx5IHN0b3BwZWQgYW5kIGNsZWFyZWQgdG8gYXZvaWQgZGF0YSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzLgoKSSYjMzk7bGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBvcmRlciBvZiB0aGVzZSBvcGVyYXRpb25zIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBJcyBpdCByb2J1c3QgdG8gcGFydGlhbCBmYWlsdXJlcywgZm9yIGluc3RhbmNlPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eT8gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zPyBUaGVzZSBhcmUgY3J1Y2lhbCBhc3BlY3RzIHRvIGNvbnNpZGVyIGR1cmluZyB0aGlzIHJldmlldy4KTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NzpcdHN0YXRpYyB2b2lkIF9fc25kX2NhcmRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXG4gMTk4Olx0e1xuIDE5OTpcdFx0c25kX2NhcmRfZnJlZShkYXRhKTtcbiAyMDA6XHR9XG4gMjAxOlx0XG4gMjAyOlx0LyoqXG4gMjAzOlx0ICogc25kX2Rldm1fY2FyZF9uZXcgLSBtYW5hZ2VkIHNuZF9jYXJkIG9iamVjdCBjcmVhdGlvblxuIDIwNDpcdCAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgZGV2aWNlIG9iamVjdFxuIDIwNTpcdCAqIEBpZHg6IGNhcmQgaW5kZXggKGFkZHJlc3MpIFswIC4uLiAoU05EUlZfQ0FSRFMtMSldXG4gMjA2Olx0ICogQHhpZDogY2FyZCBpZGVudGlmaWNhdGlvbiAoQVNDSUkgc3RyaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgQXVkaW8gU3Vic3lzdGVtIFNodXRkb3duKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHNodXRkb3duIHNlcXVlbmNlLiBUaGUgYF9fc25kX2NhcmRfcmVsZWFzZWAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBOb3csIEkgc2VlIGl0IGNhbGxzIGBzbmRfY2FyZF9mcmVlKGRhdGEpYC4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBwb2ludC4gU28sIHdoYXQgZXhhY3RseSBpcyBgc25kX2NhcmRfZnJlZWAgZG9pbmcgd2l0aCB0aGF0IGBkYXRhYCBwb2ludGVyPyBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc25kX2NhcmRfZnJlZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNsZWFuZWQgdXAgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlIGZsb3cgZnJvbSB0aGVyZSB0byBidWlsZCBteSBtZW50YWwgbW9kZWwgb2YgdGhpcyBwYXJ0IG9mIHRoZSBhdWRpbyBzdWJzeXN0ZW0uIEl0JiMzOTtzIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgcmVzb3VyY2UgcmVsZWFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMzOlx0LyoqXG4gNjM0Olx0ICogc25kX2NhcmRfZnJlZSAtIGZyZWVzIGdpdmVuIHNvdW5kY2FyZCBzdHJ1Y3R1cmVcbiA2MzU6XHQgKiBAY2FyZDogc291bmRjYXJkIHN0cnVjdHVyZVxuIDYzNjpcdCAqXG4gNjM3Olx0ICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgc291bmRjYXJkIHN0cnVjdHVyZSBhbmQgdGhlIGFsbCBhc3NpZ25lZFxuIDYzODpcdCAqIGRldmljZXMgYXV0b21hdGljYWxseS4gIFRoYXQgaXMsIHlvdSBkb24mIzM5O3QgaGF2ZSB0byByZWxlYXNlIHRoZSBkZXZpY2VzXG4gNjM5Olx0ICogYnkgeW91cnNlbGYuXG4gNjQwOlx0ICpcbiA2NDE6XHQgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIHVudGlsIHRoZSBhbGwgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSByZWxlYXNlZC5cbiA2NDI6XHQgKlxuIDY0MzpcdCAqIFJldHVybjogWmVyby4gRnJlZXMgYWxsIGFzc29jaWF0ZWQgZGV2aWNlcyBhbmQgZnJlZXMgdGhlIGNvbnRyb2xcbiA2NDQ6XHQgKiBpbnRlcmZhY2UgYXNzb2NpYXRlZCB0byBnaXZlbiBzb3VuZGNhcmQuXG4gNjQ1Olx0ICovXG4gNjQ2Olx0dm9pZCBzbmRfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiA2NDc6XHR7XG4gNjQ4Olx0XHRERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhyZWxlYXNlZCk7XG4gNjQ5Olx0XG4gNjUwOlx0XHQvKiBUaGUgY2FsbCBvZiBzbmRfY2FyZF9mcmVlKCkgaXMgYWxsb3dlZCBmcm9tIHZhcmlvdXMgY29kZSBwYXRocztcbiA2NTE6XHRcdCAqIGEgbWFudWFsIGNhbGwgZnJvbSB0aGUgZHJpdmVyIGFuZCB0aGUgY2FsbCB2aWEgZGV2cmVzX2ZyZWUsIGFuZFxuIDY1MjpcdFx0ICogd2UgbmVlZCB0byBhdm9pZCBkb3VibGUtZnJlZS4gTW9yZW92ZXIsIHRoZSByZWxlYXNlIHZpYSBkZXZyZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXBseSBmYW1pbGlhciB3aXRoIGNvZGUgYW5kIHNvdW5kIGNhcmQgZHJpdmVyczoKCioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIgb2YgYHNuZF9jYXJkX2ZyZWVgKioKCkFscmlnaHQsIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyBjbGVhcjogbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVtYWluaW5nIHNlY3Rpb25zIG9mIHRoZSBgc25kX2NhcmRfZnJlZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjbGVhbnVwIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgcm91dGluZS4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IGVhY2ggcGFydCB0byBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgaG9saXN0aWMgdmlldyBvZiBob3cgYSBzb3VuZCBjYXJkIHJlc291cmNlIGlzIGRlYWxsb2NhdGVkLCBzbyB0aGF0IEkgZG9uJiMzOTt0IG1pc3MgYW55IGNyaXRpY2FsIGRldGFpbHMgZHVyaW5nIHJlc291cmNlIHRlYXJkb3duLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGNsZWFuIHVwIGFsbCB0aG9zZSBhdWRpbyBkZXZpY2UgY29tcG9uZW50cy4gTXkgZXhwZWN0YXRpb24gaXMgdGhlcmUgd2lsbCBiZSBhIGxvdCBvZiBkZXZpY2UgdW5yZWdpc3RyYXRpb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjUzOlx0XHQgKiBtYXkgY2FsbCBzbmRfY2FyZF9mcmVlKCkgdHdpY2UgZHVlIHRvIGl0cyBuYXR1cmUsIHdlIG5lZWQgdG8gaGF2ZVxuIDY1NDpcdFx0ICogdGhlIGNoZWNrIGhlcmUgYXQgdGhlIGJlZ2lubmluZy5cbiA2NTU6XHRcdCAqL1xuIDY1NjpcdFx0aWYgKGNhcmQtXHUwMDNlcmVsZWFzaW5nKVxuIDY1NzpcdFx0XHRyZXR1cm47XG4gNjU4Olx0XG4gNjU5Olx0XHRjYXJkLVx1MDAzZXJlbGVhc2VfY29tcGxldGlvbiA9IFx1MDAyNnJlbGVhc2VkO1xuIDY2MDpcdFx0c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChjYXJkKTtcbiA2NjE6XHRcbiA2NjI6XHRcdC8qIHdhaXQsIHVudGlsIGFsbCBkZXZpY2VzIGFyZSByZWFkeSBmb3IgdGhlIGZyZWUgb3BlcmF0aW9uICovXG4gNjYzOlx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNnJlbGVhc2VkKTtcbiA2NjQ6XHR9XG4gNjY1Olx0RVhQT1JUX1NZTUJPTChzbmRfY2FyZF9mcmVlKTtcbiA2NjY6XHRcbiA2Njc6XHQvKiBjaGVjaywgaWYgdGhlIGNoYXJhY3RlciBpcyBpbiB0aGUgdmFsaWQgQVNDSUkgcmFuZ2UgKi9cbiA2Njg6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2FmZV9hc2NpaV9jaGFyKGNoYXIgYylcbiA2Njk6XHR7XG4gNjcwOlx0XHRyZXR1cm4gaXNhc2NpaShjKSBcdTAwMjZcdTAwMjYgaXNhbG51bShjKTtcbiA2NzE6XHR9XG4gNjcyOlx0XG4gNjczOlx0LyogcmV0cmlldmUgdGhlIGxhc3Qgd29yZCBvZiBzaG9ydG5hbWUgb3IgbG9uZ25hbWUgKi9cbiA2NzQ6XHRzdGF0aWMgY29uc3QgY2hhciAqcmV0cmlldmVfaWRfZnJvbV9jYXJkX25hbWUoY29uc3QgY2hhciAqbmFtZSlcbiA2NzU6XHR7XG4gNjc2Olx0XHRjb25zdCBjaGFyICpzcG9zID0gbmFtZTtcbiA2Nzc6XHRcbiA2Nzg6XHRcdHdoaWxlICgqbmFtZSkge1xuIDY3OTpcdFx0XHRpZiAoaXNzcGFjZSgqbmFtZSkgXHUwMDI2XHUwMDI2IHNhZmVfYXNjaWlfY2hhcihuYW1lWzFdKSlcbiA2ODA6XHRcdFx0XHRzcG9zID0gbmFtZSAmIzQzOyAxO1xuIDY4MTpcdFx0XHRuYW1lJiM0MzsmIzQzOztcbiA2ODI6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBBTFNBIENvcmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEFMU0EgY29kZSBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIHRoZXJlJiMzOTtzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBidWcgbHVya2luZyBpbiBgc25kX2NhcmRfZnJlZWAuIEl0IGFsbCBzdGFydHMgd2l0aCBgc25kX2NhcmRfZnJlZWAgY2FsbGluZyBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gdGhlIGBwdXRfZGV2aWNlYCBhbmQgdWx0aW1hdGVseSBgcmVsZWFzZV9jYXJkX2RldmljZWAsIHdoaWNoIHRyaWdnZXJzIGBzbmRfY2FyZF9kb19mcmVlYC4gIGBzbmRfY2FyZF9kb19mcmVlYCBzZXRzIGBjYXJkLSZndDtyZWxlYXNpbmcgPSB0cnVlO2AgYmVmb3JlIGl0IGRvZXMgYW55dGhpbmcgZWxzZS4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBjb21lcyBkb3duIHRvIGhvdyB0aGUgYGNhcmRgIHN0cnVjdHVyZSBpcyBoYW5kbGVkIGFmdGVyIGl0JiMzOTtzIGJlZW4gZnJlZWQuIEluc2lkZSBgc25kX2NhcmRfZG9fZnJlZWAsIHRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIGBjYXJkLSZndDttYW5hZ2VkYC4gSWYgdGhlIGBjYXJkYCBpc24mIzM5O3QgbWFuYWdlZCAobWVhbmluZyBpdCB3YXNuJiMzOTt0IGFsbG9jYXRlZCB3aXRoIGBkZXZtYCksIHRoZW4gYGtmcmVlKGNhcmQpYCBpcyBjYWxsZWQgcmlnaHQgdGhlcmUuIEJ1dCB0aGUgY29kZSBoYXMgYSByYWNlIGNvbmRpdGlvbi4gSXQgc2V0cyB1cCBhIGNvbXBsZXRpb24sIGBjYXJkLSZndDtyZWxlYXNlX2NvbXBsZXRpb25gLCBhbmQgdGhlbiAqY29tcGxldGVzKiBpdCwgYGNvbXBsZXRlKGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbilgLCBiZWZvcmUgdGhlIGNoZWNrIGZvciBgY2FyZC0mZ3Q7bWFuYWdlZGAuIFRoZSBrZXkgaXMgdGhhdCBgc25kX2NhcmRfZnJlZWAgd2FpdHMgb24gdGhpcyBjb21wbGV0aW9uLgoKSWYgdGhlIGBjYXJkYCAqaXMqIG1hbmFnZWQsIHRoZSBga2ZyZWVgIGlzIHNraXBwZWQuICBUaGUgcmFjZSBpcyB0aGF0IGBjb21wbGV0ZWAgd2FrZXMgdXAgdGhlIHdhaXRpbmcgYHNuZF9jYXJkX2ZyZWVgIGJlZm9yZSB0aGUgZXhlY3V0aW9uIGluIGBzbmRfY2FyZF9kb19mcmVlYCBoYXMgY29tcGxldGVseSBmaW5pc2hlZC4gU2luY2UgYHNuZF9jYXJkX2ZyZWVgIGlzIHdhaXRpbmcgb24gYCZhbXA7cmVsZWFzZWRgLCBvbiB0aGUgc3RhY2ssIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGFmdGVyIGBjb21wbGV0ZSgpYCBpcyBjYWxsZWQsIHRoZSBzdGFjayB2YXJpYWJsZSBgcmVsZWFzZWRgIGlzIHN0aWxsIHZhbGlkLiBCdXQgaWYgYGNhcmRgICppcyogbWFuYWdlZCwgYW5kIHRoZSBgY29tcGxldGVgIHdha2VzIHVwIGBzbmRfY2FyZF9mcmVlYCwgdGhlbiBgZGV2cmVzYCBpcyBnb2luZyB0byAqYWxzbyogZnJlZSBgY2FyZGAuIFRoaXMgY3JlYXRlcyBhIHVzZS1hZnRlci1mcmVlIGJlY2F1c2UgYHNuZF9jYXJkX2RvX2ZyZWVgIG1pZ2h0IGF0dGVtcHQgdG8gYWNjZXNzIGBjYXJkLSZndDttYW5hZ2VkYCAqYWZ0ZXIqIHRoZSBgY2FyZGAgaGFzIGJlZW4gZnJlZWQgYnkgYGRldnJlc2AuIFRoaXMgaGFwcGVucyBiZWNhdXNlIGBzbmRfY2FyZF9mcmVlYCBmaW5pc2hlcywgYW5kIGBfX3NuZF9jYXJkX3JlbGVhc2VgIGFsc28gZmluaXNoZXMuIFRoZW4gYGRldnJlc2AgZnJlZXMgdGhlIG1lbW9yeSBmb3IgYGNhcmRgLCBhbmQgdGhlbiBgc25kX2NhcmRfZG9fZnJlZWAgdHJpZXMgdG8gY2hlY2sgYGlmICghY2FyZC0mZ3Q7bWFuYWdlZClgLCB3aGljaCBpcyBub3cgaW52YWxpZCBtZW1vcnkuCgpUaGUgb3JpZ2luYWwgcGF0Y2ggY2xldmVybHkgZml4ZXMgdGhpcyBieSBjYWNoaW5nIGBjYXJkLSZndDttYW5hZ2VkYCAqYmVmb3JlKiBjYWxsaW5nIGBjb21wbGV0ZWAuIFRoaXMgZW5zdXJlcyB0aGF0IHdlJiMzOTtyZSBvcGVyYXRpbmcgb24gYSB2YWxpZCBjb3B5IG9mIHRoZSBgbWFuYWdlZGAgZmxhZy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IEFic29sdXRlbHkhIEFueSBBTFNBIGRyaXZlciB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHZ1bG5lcmFibGUuIFRoaXMgaW5jbHVkZXMgc2NlbmFyaW9zIG9uIG1vZHVsZSB1bmxvYWQsIGRldmljZSB1bmJpbmQsIG9yLCBjcnVjaWFsbHksIGVycm9yIHBhdGhzIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFN5emthbGxlciwgd2l0aCBpdHMgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIG9mIFVTQiBhdWRpbyBkZXZpY2VzLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBmYXVsdCBpbmplY3Rpb24gYW5kIG1hbGZvcm1lZCBkZXNjcmlwdG9ycywgY2FuIGVhc2lseSB0cmlnZ2VyIHRoaXMgZHVyaW5nIHByb2JlIGZhaWx1cmVzLiBBbmQgeWVzLCBzeXprYWxsZXIgZG9lcyB0ZXN0IFVTQiBhdWRpbyBkZXZpY2VzLgoKVGhlIHByb21wdCBzcGVjaWZpZWQgY2VydGFpbiBjb25kaXRpb25zIGluIHdoaWNoIEkgc2hvdWxkIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuIEl0IHRhbGtzIGFib3V0ICYjMzQ7RHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyYjMzQ7LiBUaGlzIGlzIGEgY29yZSBBTFNBIGZyYW1ld29yayBmdW5jdGlvbiwgbm90IGEgc3BlY2lmaWMgZHJpdmVyJiMzOTtzIHRlYXJkb3duIGNhbGxiYWNrLiBJdCYjMzk7cyB0cmlnZ2VyZWQgbm90IGp1c3QgZHVyaW5nIHVuYmluZC9yZW1vdmUsIGJ1dCBhbHNvIG9uIHByb2JlIGVycm9ycy4gVGhlIHByb21wdCBkb2VzIHNheTogJiMzNDt0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuJiMzNDsgSG93ZXZlciwgdGhpcyBpcyB3cm9uZy4gSXQgaXMgYWxzbyBleGVjdXRlZCBkdXJpbmcgZXJyb3IgcGF0aHMgb2YgbW9kdWxlIGxvYWRpbmcgb3IgZGV2aWNlIHByb2JpbmcuIFRoZSBjb21iaW5hdGlvbiBvZiBgc25kX2Rldm1fY2FyZF9uZXdgIHdpdGggYSBsYXRlciBmYWlsdXJlIGluIHRoZSBwcm9iZSByb3V0aW5lLCBtZWFucyB0aGF0IGBkZXZyZXNgIGZyZWVzIHRoZSBjYXJkIHdoaWNoIGNhbGxzIGBzbmRfY2FyZF9kb19mcmVlYCwgd2hpY2ggaXMgd2hhdCBjYXVzZXMgdGhlIHVzZS1hZnRlci1mcmVlLgoKU28geWVzLCBpdCBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSwgdmVyeSBmdXp6YWJsZSwgYW5kIHJlcHJlc2VudHMgYSByZWFsIHZ1bG5lcmFiaWxpdHkuIFRoaXMgcGF0Y2ggaXMgYSB2ZXJ5IGdvb2QgZml4IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbmRfY2FyZF9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvdXNiL2NhcmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC91c2IvY2FyZC5jPTkxOD1zdGF0aWMgaW50IHVzYl9hdWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5zb3VuZC91c2IvY2FyZC5jLTEwODAtXHRcdGlmICghY2hpcC1cdTAwM2VudW1faW50ZXJmYWNlcylcbnNvdW5kL3VzYi9jYXJkLmM6MTA4MTpcdFx0XHRzbmRfY2FyZF9mcmVlKGNoaXAtXHUwMDNlY2FyZCk7XG5zb3VuZC91c2IvY2FyZC5jLTEwODItXHR9XG4tLVxuc291bmQvdXNiL2NhcmQuYz0xMTQ5PXN0YXRpYyB2b2lkIHVzYl9hdWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbnNvdW5kL3VzYi9jYXJkLmMtMTE1OC1cdGlmIChfX3VzYl9hdWRpb19kaXNjb25uZWN0KGludGYsIGNoaXAsIGNhcmQpKVxuc291bmQvdXNiL2NhcmQuYzoxMTU5Olx0XHRzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKGNhcmQpO1xuc291bmQvdXNiL2NhcmQuYy0xMTYwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3OTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFVTQiBBdWRpbyBQcm9iZSBFcnJvciBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBhdWRpbyBkcml2ZXIgYW5kIGhvdyBpdCBoYW5kbGVzIGVycm9ycyBkdXJpbmcgdGhlIFVTQiBhdWRpbyBwcm9iZSBwcm9jZXNzLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBzbmRfY2FyZF9mcmVlYCAqaXMqIGNhbGxlZCBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgYHVzYl9hdWRpb19wcm9iZWAuIEdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLiBCdXQsIHdhaXQgYSBzZWNvbmQuLi4gYHVzYl9hdWRpb19wcm9iZWAgdXNlcyBgc25kX2NhcmRfZnJlZWAsIHdoaWNoIGlzIGdvb2QsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gdGhpbmtpbmcgb2YgdGhlIGNvbnRleHQuIERvZXMgYHVzYl9hdWRpb19wcm9iZWAgcHJvcGVybHkgYWxsb2NhdGUgYSBjYXJkIHdpdGggYHNuZF9kZXZtX2NhcmRfbmV3YCBzbyB0aGF0IGl0IGFsc28gZnJlZXMgdGhlIGNhcmQ/IExldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB3aGVyZSBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHNvdW5kL3VzYi9jYXJkLmNgLCB0byBjb25maXJtIHRoYXQgdGhlIHByb3BlciBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIHBhaXJpbmcgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMgY29ycmVjdGx5IHRvIGF2b2lkIGxlYWtzIG9yIGRvdWJsZSBmcmVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbmRfZGV2bV9jYXJkX25ldyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU291bmQgRGV2aWNlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGBzb3VuZC91c2IvYCBzdWJzeXN0ZW0gaXNuJiMzOTt0IGVtcGxveWluZyBgc25kX2Rldm1fY2FyZF9uZXdgLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhbmQgaXQgbWVhbnMgSSBuZWVkIHRvIGFkanVzdCBteSBsaW5lIG9mIGlucXVpcnkuIEluc3RlYWQgb2YgZm9jdXNpbmcgb24gKmhvdyogaXQmIzM5O3MgdXNlZCB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQmIzM5O3Mgbm90IGJlaW5nIHVzZWQgYW5kIHdoYXQgYWx0ZXJuYXRpdmVzIGFyZSBpbXBsZW1lbnRlZC4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHNuZF9kZXZtX2NhcmRfbmV3YCAqaXMqIHVzZWQuIExldCYjMzk7cyB0cmFjZSBpdHMgY2FsbHMgYW5kIHNlZSB3aGljaCBvdGhlciBhdWRpbyBkcml2ZXJzIG9yIHN1YnN5c3RlbXMgcmVseSBvbiBpdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIEFMU0EgZnJhbWV3b3JrIGFuZCBwb3RlbnRpYWxseSBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5kIHRoZSBgc291bmQvdXNiL2AgYXBwcm9hY2guIFVuZGVyc3RhbmRpbmcgdGhlIGVzdGFibGlzaGVkIHBhdHRlcm5zIGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgZW1wbG95ZWQgbWlnaHQgaWxsdW1pbmF0ZSB0aGUgc3BlY2lmaWMgcmF0aW9uYWxlIGZvciBpdHMgYWJzZW5jZSBpbiB0aGUgVVNCIGF1ZGlvIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUgdG8gZm9ybXVsYXRlIHRoZSByaWdodCBxdWVzdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9kZXZtX2NhcmRfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbnNvdW5kL2NvcmUvaW5pdC5jPTE5Nz1zdGF0aWMgdm9pZCBfX3NuZF9jYXJkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTIwMi0vKipcbnNvdW5kL2NvcmUvaW5pdC5jOjIwMzogKiBzbmRfZGV2bV9jYXJkX25ldyAtIG1hbmFnZWQgc25kX2NhcmQgb2JqZWN0IGNyZWF0aW9uXG5zb3VuZC9jb3JlL2luaXQuYy0yMDQtICogQHBhcmVudDogdGhlIHBhcmVudCBkZXZpY2Ugb2JqZWN0XG4tLVxuc291bmQvY29yZS9pbml0LmMtMjI2LSAqL1xuc291bmQvY29yZS9pbml0LmM6MjI3OmludCBzbmRfZGV2bV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCxcbnNvdW5kL2NvcmUvaW5pdC5jLTIyOC1cdFx0ICAgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBzaXplX3QgZXh0cmFfc2l6ZSxcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0yNTAtfVxuc291bmQvY29yZS9pbml0LmM6MjUxOkVYUE9SVF9TWU1CT0xfR1BMKHNuZF9kZXZtX2NhcmRfbmV3KTtcbnNvdW5kL2NvcmUvaW5pdC5jLTI1Mi1cbi0tXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmM9MTc5OD1zdGF0aWMgaW50IGxvb3BiYWNrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cilcbi0tXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmMtMTgwNC1cbnNvdW5kL2RyaXZlcnMvYWxvb3AuYzoxODA1Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2ZGV2cHRyLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmMtMTgwNi1cdFx0XHRcdHNpemVvZihzdHJ1Y3QgbG9vcGJhY2spLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9kcml2ZXJzL2R1bW15LmM9MTAxMj1zdGF0aWMgaW50IHNuZF9kdW1teV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXG4tLVxuc291bmQvZHJpdmVycy9kdW1teS5jLTEwMTktXG5zb3VuZC9kcml2ZXJzL2R1bW15LmM6MTAyMDpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNmRldnB0ci1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvZHJpdmVycy9kdW1teS5jLTEwMjEtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9kdW1teSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jPTUyPXN0YXRpYyBpbnQgc25kX21wdTQwMV9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2cHRyLCBpbnQgZGV2LFxuLS1cbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jLTYxLVx0KnJjYXJkID0gTlVMTDtcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jOjYyOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2cHRyLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jLTYzLVx0XHRcdFx0MCwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvZHJpdmVycy9tdHBhdi5jPTY1Mj1zdGF0aWMgaW50IHNuZF9tdHBhdl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXG4tLVxuc291bmQvZHJpdmVycy9tdHBhdi5jLTY1Ny1cbnNvdW5kL2RyaXZlcnMvbXRwYXYuYzo2NTg6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZkZXYtXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvZHJpdmVycy9tdHBhdi5jLTY1OS1cdFx0XHRcdHNpemVvZigqbXRwX2NhcmQpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYz02MDA9c3RhdGljIGludCBwY210c3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYy02MDktXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYzo2MTA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgXHUwMDI2Y2FyZCk7XG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYy02MTEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmM9OTg9c3RhdGljIGludCBzbmRfY2FyZF9wY3NwX3Byb2JlKGludCBkZXZudW0sIHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jLTEwNy1cbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmM6MTA4Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCBcdTAwMjZjYXJkKTtcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMtMTA5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmM9MzIxPXN0YXRpYyBpbnQgc25kX3NlcmlhbF9nZW5lcmljX3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXG4tLVxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jLTMyNi1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYzozMjc6XHRlcnIgID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2c2VyZGV2LVx1MDAzZWRldiwgU05EUlZfREVGQVVMVF9JRFgxLFxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jLTMyOC1cdFx0XHRcdFNORFJWX0RFRkFVTFRfU1RSMSwgVEhJU19NT0RVTEUsXG4tLVxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmM9ODQyPXN0YXRpYyBpbnQgc25kX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXG4tLVxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMtODg0LVxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmM6ODg1Olx0ZXJyICA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNmRldnB0ci1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMtODg2LVx0XHRcdFx0IDAsIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jPTcxPXN0YXRpYyBpbnQgc25kX3Zpcm1pZGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxuLS1cbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jLTc3LVxuc291bmQvZHJpdmVycy92aXJtaWRpLmM6Nzg6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZkZXZwdHItXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jLTc5LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jPTExNz1zdGF0aWMgaW50IHNuZF9jYXJkX2FkMTgxNmFfcHJvYmUoaW50IGRldiwgc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLFxuLS1cbnNvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYy0xMjQtXG5zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmM6MTI1Olx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2FyZC1cdTAwM2VjYXJkLVx1MDAzZWRldixcbnNvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYy0xMjYtXHRcdFx0XHQgIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmM9Njk9c3RhdGljIGludCBzbmRfYWQxODQ4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYy03NC1cbnNvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmM6NzU6XHRlcnJvciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgXHUwMDI2Y2FyZCk7XG5zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jLTc2LVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLS1cbnNvdW5kL2lzYS9hZGxpYi5jPTQ2PXN0YXRpYyBpbnQgc25kX2FkbGliX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL2FkbGliLmMtNTEtXG5zb3VuZC9pc2EvYWRsaWIuYzo1MjpcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcdTAwMjZjYXJkKTtcbnNvdW5kL2lzYS9hZGxpYi5jLTUzLVx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4tLVxuc291bmQvaXNhL2FsczEwMC5jPTE2MT1zdGF0aWMgaW50IHNuZF9jYXJkX2FsczEwMF9wcm9iZShpbnQgZGV2LFxuLS1cbnNvdW5kL2lzYS9hbHMxMDAuYy0xNzAtXG5zb3VuZC9pc2EvYWxzMTAwLmM6MTcxOlx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2FyZC1cdTAwM2VjYXJkLVx1MDAzZWRldixcbnNvdW5kL2lzYS9hbHMxMDAuYy0xNzItXHRcdFx0XHQgIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2lzYS9henQyMzIwLmM9MTYwPXN0YXRpYyBpbnQgc25kX2NhcmRfYXp0MjMyMF9wcm9iZShpbnQgZGV2LFxuLS1cbnNvdW5kL2lzYS9henQyMzIwLmMtMTY5LVxuc291bmQvaXNhL2F6dDIzMjAuYzoxNzA6XHRlcnJvciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjYXJkLVx1MDAzZWNhcmQtXHUwMDNlZGV2LFxuc291bmQvaXNhL2F6dDIzMjAuYy0xNzEtXHRcdFx0XHQgIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2lzYS9jbWk4MzI4LmM9MjE4PXN0YXRpYyBpbnQgc25kX2NtaTgzMjhfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IG5kZXYpXG4tLVxuc291bmQvaXNhL2NtaTgzMjguYy0yOTYtXG5zb3VuZC9pc2EvY21pODMyOC5jOjI5NzpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W25kZXZdLCBpZFtuZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2EvY21pODMyOC5jLTI5OC1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX2NtaTgzMjgpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9pc2EvY21pODMzMC5jPTUwMD1zdGF0aWMgaW50IHNuZF9jbWk4MzMwX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBkZXYsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL2NtaTgzMzAuYy01MDYtXG5zb3VuZC9pc2EvY21pODMzMC5jOjUwNzpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL2NtaTgzMzAuYy01MDgtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzMwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYz03Nj1zdGF0aWMgaW50IHNuZF9jczQyMzFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcbi0tXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jLTgxLVxuc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYzo4MjpcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcdTAwMjZjYXJkKTtcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMtODMtXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tLVxuc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYz0zMTM9c3RhdGljIGludCBzbmRfY3M0MjN4X2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBkZXYsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYy0zMTgtXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jOjMxOTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYy0zMjAtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2NzNDIzNiksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmM9MTY0PXN0YXRpYyBpbnQgc25kX2VzMTY4OF9pc2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcbi0tXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jLTE2OC1cbnNvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmM6MTY5Olx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jLTE3MC1cdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBzbmRfZXMxNjg4KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYz0yNTk9c3RhdGljIGludCBzbmRfZXM5NjhfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXG4tLVxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYy0yNzQtXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jOjI3NTpcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNhcmQtXHUwMDNlY2FyZC1cdTAwM2VkZXYsXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jLTI3Ni1cdFx0XHRcdCAgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG4tLVxuc291bmQvaXNhL2VzMTh4eC5jPTIwMzg9c3RhdGljIGludCBzbmRfZXMxOHh4X2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBkZXYsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL2VzMTh4eC5jLTIwNDAte1xuc291bmQvaXNhL2VzMTh4eC5jOjIwNDE6XHRyZXR1cm4gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2EvZXMxOHh4LmMtMjA0Mi1cdFx0XHRcdCBzaXplb2Yoc3RydWN0IHNuZF9lczE4eHgpLCBjYXJkcCk7XG4tLVxuc291bmQvaXNhL2dhbGF4eS9nYWxheHkuYz00ODE9c3RhdGljIGludCBfX3NuZF9nYWxheHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcbi0tXG5zb3VuZC9pc2EvZ2FsYXh5L2dhbGF4eS5jLTQ4OC1cbnNvdW5kL2lzYS9nYWxheHkvZ2FsYXh5LmM6NDg5Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL2dhbGF4eS9nYWxheHkuYy00OTAtXHRcdFx0XHRzaXplb2YoKmdhbGF4eSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jPTEzMj1zdGF0aWMgaW50IHNuZF9ndXNjbGFzc2ljX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMtMTM3LVxuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmM6MTM4Olx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsIFx1MDAyNmNhcmQpO1xuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMtMTM5LVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLS1cbnNvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jPTIzMj1zdGF0aWMgaW50IHNuZF9ndXNleHRyZW1lX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMtMjQwLVxuc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmM6MjQxOlx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYy0yNDItXHRcdFx0XHQgIHNpemVvZigqZ3VzZXh0cmVtZSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmM9MTg1PXN0YXRpYyBpbnQgc25kX2d1c21heF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KVxuLS1cbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmMtMTk0LVxuc291bmQvaXNhL2d1cy9ndXNtYXguYzoxOTU6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmMtMTk2LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfZ3VzbWF4KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYz02MjU9c3RhdGljIGludCBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBkZXYsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYy02MzEtXG5zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jOjYzMjpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYy02MzMtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9pbnRlcndhdmUpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmM9ODU3PXN0YXRpYyBpbnQgc25kX21zbmRfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpZHgpXG4tLVxuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jLTg3MS1cbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYzo4NzI6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYy04NzMtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9tc25kKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jPTEwOTA9c3RhdGljIGludCBzbmRfbXNuZF9wbnBfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCxcbi0tXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMtMTEzMS1cdCAqL1xuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jOjExMzI6XHRyZXQgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2FyZC1cdTAwM2VjYXJkLVx1MDAzZWRldixcbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYy0xMTMzLVx0XHRcdFx0aW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsXG4tLVxuc291bmQvaXNhL29wbDNzYTIuYz01OTU9c3RhdGljIGludCBzbmRfb3BsM3NhMl9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxuLS1cbnNvdW5kL2lzYS9vcGwzc2EyLmMtNjAxLVxuc291bmQvaXNhL29wbDNzYTIuYzo2MDI6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9vcGwzc2EyLmMtNjAzLVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfb3BsM3NhMiksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9vcHRpOXh4L21pcm8uYz0xNTYwPXN0YXRpYyBpbnQgc25kX21pcm9faXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE1NzMtXG5zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmM6MTU3NDpcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2cHRyLCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE1NzUtXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc25kX21pcm8pLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmM9MTc3ND1zdGF0aWMgaW50IHNuZF9taXJvX3BucF9wcm9iZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXG4tLVxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE3ODQtXHRcdHJldHVybiAtRU5PREVWO1xuc291bmQvaXNhL29wdGk5eHgvbWlyby5jOjE3ODU6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2FyZC1cdTAwM2VjYXJkLVx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9vcHRpOXh4L21pcm8uYy0xNzg2LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfbWlybyksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmM9OTA4PXN0YXRpYyBpbnQgc25kX29wdGk5eHhfY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApXG4tLVxuc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYy05MTItXG5zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jOjkxMzpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jLTkxNC1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9pc2Evc2IvamF6ejE2LmM9MjE1PXN0YXRpYyBpbnQgc25kX2phenoxNl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpXG4tLVxuc291bmQvaXNhL3NiL2phenoxNi5jLTIyNS1cbnNvdW5kL2lzYS9zYi9qYXp6MTYuYzoyMjY6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXZwdHIsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL3NiL2phenoxNi5jLTIyNy1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL3NiL3NiMTYuYz0yODk9c3RhdGljIGludCBzbmRfc2IxNl9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL3NiL3NiMTYuYy0yOTQtXG5zb3VuZC9pc2Evc2Ivc2IxNi5jOjI5NTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldnB0ciwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2Evc2Ivc2IxNi5jLTI5Ni1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfc2IxNiksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9zYi9zYjguYz03Mz1zdGF0aWMgaW50IHNuZF9zYjhfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldilcbi0tXG5zb3VuZC9pc2Evc2Ivc2I4LmMtODAtXG5zb3VuZC9pc2Evc2Ivc2I4LmM6ODE6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9zYi9zYjguYy04Mi1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX3NiOCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9zYzYwMDAuYz01NzU9c3RhdGljIGludCBfX3NuZF9zYzYwMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgZGV2KVxuLS1cbnNvdW5kL2lzYS9zYzYwMDAuYy01ODgtXG5zb3VuZC9pc2Evc2M2MDAwLmM6NTg5Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2cHRyLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9zYzYwMDAuYy01OTAtXHRcdFx0XHRzaXplb2YoKnNjNjAwMCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9zc2NhcGUuYz0xMjE0PXN0YXRpYyBpbnQgc25kX3NzY2FwZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KVxuLS1cbnNvdW5kL2lzYS9zc2NhcGUuYy0xMjE5LVxuc291bmQvaXNhL3NzY2FwZS5jOjEyMjA6XHRyZXQgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9zc2NhcGUuYy0xMjIxLVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL3NzY2FwZS5jPTEyNjg9c3RhdGljIGludCBzc2NhcGVfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXG4tLVxuc291bmQvaXNhL3NzY2FwZS5jLTEzMDItXHQgKi9cbnNvdW5kL2lzYS9zc2NhcGUuYzoxMzAzOlx0cmV0ID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNhcmQtXHUwMDNlY2FyZC1cdTAwM2VkZXYsXG5zb3VuZC9pc2Evc3NjYXBlLmMtMTMwNC1cdFx0XHRcdGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmM9MzEyPXN0YXRpYyBpbnQgc25kX3dhdmVmcm9udF9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxuLS1cbnNvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMtMzE4LVxuc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYzozMTk6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMtMzIwLVx0XHRcdFx0c2l6ZW9mKHNuZF93YXZlZnJvbnRfY2FyZF90KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2FkMTg4OS5jPTg0MD1fX3NuZF9hZDE4ODlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvYWQxODg5LmMtODU2LVx0LyogKDIpICovXG5zb3VuZC9wY2kvYWQxODg5LmM6ODU3Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2FkMTg4OS5jLTg1OC1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYz0yMDg5PXN0YXRpYyBpbnQgX19zbmRfYWxpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jLTIwOTctXG5zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmM6MjA5ODpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMtMjA5OS1cdFx0XHRcdHNpemVvZigqY29kZWMpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvYWxzMzAwLmM9Njc0PXN0YXRpYyBpbnQgc25kX2FsczMwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9hbHMzMDAuYy02ODgtXG5zb3VuZC9wY2kvYWxzMzAwLmM6Njg5Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvYWxzMzAwLmMtNjkwLVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2FsczQwMDAuYz04MDE9c3RhdGljIGludCBfX3NuZF9jYXJkX2FsczQwMDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvYWxzNDAwMC5jLTgzOS1cdFxuc291bmQvcGNpL2FsczQwMDAuYzo4NDA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9hbHM0MDAwLmMtODQxLVx0XHRcdFx0c2l6ZW9mKCphY2FyZCkgLyogcHJpdmF0ZV9kYXRhOiBhY2FyZCAqLyxcbi0tXG5zb3VuZC9wY2kvYXRpaXhwLmM9MTU1Mz1zdGF0aWMgaW50IF9fc25kX2F0aWl4cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9hdGlpeHAuYy0xNTU5LVxuc291bmQvcGNpL2F0aWl4cC5jOjE1NjA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2F0aWl4cC5jLTE1NjEtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmM9MTE4NT1zdGF0aWMgaW50IF9fc25kX2F0aWl4cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYy0xMTkxLVxuc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jOjExOTI6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jLTExOTMtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jPTE5NT1fX3NuZF92b3J0ZXhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcbi0tXG5zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jLTIwOS1cdC8vICgyKVxuc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYzoyMTA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMtMjExLVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jPTI1MD1zdGF0aWMgaW50IHNuZF9hdzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMtMjY2LVx0LyogKDIpIENyZWF0ZSBjYXJkIGluc3RhbmNlICovXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmM6MjY3Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMtMjY4LVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2F6dDMzMjguYz0yNDA2PV9fc25kX2F6ZjMzMjhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcbi0tXG5zb3VuZC9wY2kvYXp0MzMyOC5jLTI0MjAtXG5zb3VuZC9wY2kvYXp0MzMyOC5jOjI0MjE6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9henQzMzI4LmMtMjQyMi1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9idDg3eC5jPTgwMT1zdGF0aWMgaW50IF9fc25kX2J0ODd4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2J0ODd4LmMtODI0LVxuc291bmQvcGNpL2J0ODd4LmM6ODI1Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvYnQ4N3guYy04MjYtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmM9MTcxMz1zdGF0aWMgaW50IF9fc25kX2NhMDEwNl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYy0xNzI3LVxuc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jOjE3Mjg6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYy0xNzI5LVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2NtaXBjaS5jPTMxNjk9c3RhdGljIGludCBzbmRfY21pcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2NtaXBjaS5jLTMxODItXG5zb3VuZC9wY2kvY21pcGNpLmM6MzE4MzpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2NtaXBjaS5jLTMxODQtXHRcdFx0XHRzaXplb2Yoc3RydWN0IGNtaXBjaSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9jczQyODEuYz0xODE0PXN0YXRpYyBpbnQgX19zbmRfY3M0MjgxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2NzNDI4MS5jLTE4MjktXG5zb3VuZC9wY2kvY3M0MjgxLmM6MTgzMDpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2NzNDI4MS5jLTE4MzEtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jPTU0PXN0YXRpYyBpbnQgc25kX2NhcmRfY3M0Nnh4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYy02OC1cbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmM6Njk6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMtNzAtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvY3M1NTMwLmM9MTg1PXN0YXRpYyBpbnQgc25kX2NzNTUzMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9jczU1MzAuYy0xOTktXG5zb3VuZC9wY2kvY3M1NTMwLmM6MjAwOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvY3M1NTMwLmMtMjAxLVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmM9Mjg2PXN0YXRpYyBpbnQgX19zbmRfY3M1NTM1YXVkaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYy0zMDAtXG5zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYzozMDE6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jLTMwMi1cdFx0XHRcdHNpemVvZigqY3M1NTM1YXUpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jPTE5Mzc9c3RhdGljIGludCBfX3NuZF9lY2hvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYy0xOTUyLVxuc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYzoxOTUzOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jLTE5NTQtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmM9Njk9c3RhdGljIGludCBzbmRfY2FyZF9lbXUxMGsxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jLTg2LVxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jOjg3Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMtODgtXHRcdFx0XHRzaXplb2YoKmVtdSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmM9MTQ1MD1zdGF0aWMgaW50IF9fc25kX2VtdTEwazF4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYy0xNDY0LVxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYzoxNDY1Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jLTE0NjYtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvZW5zMTM3MC5jPTIyNzA9c3RhdGljIGludCBfX3NuZF9hdWRpb3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9lbnMxMzcwLmMtMjI4NC1cbnNvdW5kL3BjaS9lbnMxMzcwLmM6MjI4NTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2VuczEzNzAuYy0yMjg2LVx0XHRcdFx0c2l6ZW9mKCplbnNvbmlxKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2VzMTkzOC5jPTE2ODY9c3RhdGljIGludCBfX3NuZF9lczE5MzhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvZXMxOTM4LmMtMTcwMS1cbnNvdW5kL3BjaS9lczE5MzguYzoxNzAyOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZXMxOTM4LmMtMTcwMy1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9lczE5NjguYz0yNjk1PXN0YXRpYyBpbnQgX19zbmRfZXMxOTY4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2VzMTk2OC5jLTI3MTAtXG5zb3VuZC9wY2kvZXMxOTY4LmM6MjcxMTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2VzMTk2OC5jLTI3MTItXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvZm04MDEuYz0xMjY3PXN0YXRpYyBpbnQgX19zbmRfY2FyZF9mbTgwMV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9mbTgwMS5jLTEyODItXG5zb3VuZC9wY2kvZm04MDEuYzoxMjgzOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZm04MDEuYy0xMjg0LVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jPTI1Mjc9c3RhdGljIGludCBfX3NuZF92dDE3MjRfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMjU0Mi1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYzoyNTQzOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMjU0NC1cdFx0XHRcdHNpemVvZigqaWNlKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2ludGVsOHgwLmM9MzE3MD1zdGF0aWMgaW50IF9fc25kX2ludGVsOHgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2ludGVsOHgwLmMtMzE3Ny1cbnNvdW5kL3BjaS9pbnRlbDh4MC5jOjMxNzg6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2ludGVsOHgwLmMtMzE3OS1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9pbnRlbDh4MG0uYz0xMjIxPXN0YXRpYyBpbnQgX19zbmRfaW50ZWw4eDBtX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2ludGVsOHgwbS5jLTEyMjgtXG5zb3VuZC9wY2kvaW50ZWw4eDBtLmM6MTIyOTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvaW50ZWw4eDBtLmMtMTIzMC1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jPTIyMTg9c25kX2tvcmcxMjEyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMtMjIzMi1cdH1cbnNvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jOjIyMzM6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jLTIyMzQtXHRcdFx0XHRzaXplb2YoKmtvcmcxMjEyKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2xvbGEvbG9sYS5jPTY0ND1zdGF0aWMgaW50IF9fbG9sYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9sb2xhL2xvbGEuYy02NTgtXG5zb3VuZC9wY2kvbG9sYS9sb2xhLmM6NjU5Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvbG9sYS9sb2xhLmMtNjYwLVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmM9OTgwPXN0YXRpYyBpbnQgc25kX2x4NjQ2NGVzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMtOTk2LVxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmM6OTk3Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYy05OTgtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvbWFlc3RybzMuYz0yNjMyPV9fc25kX20zX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpXG4tLVxuc291bmQvcGNpL21hZXN0cm8zLmMtMjY0OS1cbnNvdW5kL3BjaS9tYWVzdHJvMy5jOjI2NTA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9tYWVzdHJvMy5jLTI2NTEtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYz0xNTUxPXN0YXRpYyBpbnQgc25kX25tMjU2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL25tMjU2L25tMjU2LmMtMTU3Ni1cbnNvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jOjE1Nzc6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL25tMjU2L25tMjU2LmMtMTU3OC1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jPTU3NT1zdGF0aWMgaW50IF9fb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLFxuLS1cbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jLTU4Ny1cbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jOjU4ODpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4LCBpZCwgb3duZXIsXG5zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYy01ODktXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmM9MjAyMz1fX3NuZF9jYXJkX3JpcHRpZGVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcbi0tXG5zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMtMjAzNy1cbnNvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYzoyMDM4Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMtMjAzOS1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9ybWUzMi5jPTE4MTM9X19zbmRfcm1lMzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcbi0tXG5zb3VuZC9wY2kvcm1lMzIuYy0xODI3LVxuc291bmQvcGNpL3JtZTMyLmM6MTgyODpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL3JtZTMyLmMtMTgyOS1cdFx0XHRcdHNpemVvZigqcm1lMzIpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvcm1lOTYuYz0yMzU5PV9fc25kX3JtZTk2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL3JtZTk2LmMtMjM3NC1cdH1cbnNvdW5kL3BjaS9ybWU5Ni5jOjIzNzU6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9ybWU5Ni5jLTIzNzYtXHRcdFx0XHRzaXplb2YoKnJtZTk2KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jPTUzMjY9c3RhdGljIGludCBzbmRfaGRzcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYy01MzQwLVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jOjUzNDE6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYy01MzQyLVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBoZHNwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYz02ODAwPXN0YXRpYyBpbnQgc25kX2hkc3BtX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYy02ODE0LVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYzo2ODE1Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSxcbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMtNjgxNi1cdFx0XHRcdFRISVNfTU9EVUxFLCBzaXplb2YoKmhkc3BtKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jPTI0NzA9c3RhdGljIGludCBzbmRfcm1lOTY1Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYy0yNDg0LVxuc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jOjI0ODU6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYy0yNDg2LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfcm1lOTY1MiksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9zaXM3MDE5LmM9MTMxMj1zdGF0aWMgaW50IF9fc25kX3NpczcwMTlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvc2lzNzAxOS5jLTEzMzItXG5zb3VuZC9wY2kvc2lzNzAxOS5jOjEzMzM6XHRyYyA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvc2lzNzAxOS5jLTEzMzQtXHRcdFx0ICAgICAgIHNpemVvZigqc2lzKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3NvbmljdmliZXMuYz0xMzY1PXN0YXRpYyBpbnQgX19zbmRfc29uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvc29uaWN2aWJlcy5jLTEzODEtIFxuc291bmQvcGNpL3NvbmljdmliZXMuYzoxMzgyOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvc29uaWN2aWJlcy5jLTEzODMtXHRcdFx0XHRzaXplb2YoKnNvbmljKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jPTUzPXN0YXRpYyBpbnQgc25kX3RyaWRlbnRfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMtNjgtXG5zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmM6Njk6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYy03MC1cdFx0XHRcdHNpemVvZigqdHJpZGVudCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS92aWE4Mnh4LmM9MjQzOD1zdGF0aWMgaW50IF9fc25kX3ZpYTgyeHhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvdmlhODJ4eC5jLTI0NDYtXG5zb3VuZC9wY2kvdmlhODJ4eC5jOjI0NDc6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL3ZpYTgyeHguYy0yNDQ4LVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDU0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIC0gQSBDcml0aWNhbCBDb25jdXJyZW5jeSBVQUYgaW4gQUxTQSBDb3JlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dvdywgYHNuZF9kZXZtX2NhcmRfbmV3YCBpcyB1c2VkIGV2ZXJ5d2hlcmUgaW4gQUxTQSBkcml2ZXJzISYjMzQ7IFRoZW4gSSBzZWUgdGhhdCBldmVuIGBzb3VuZC9kcml2ZXJzL2R1bW15LmNgIGFuZCBgc291bmQvZHJpdmVycy9hbG9vcC5jYCB1c2UgaXQsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoaXMgaXMgd2l0aGluIFN5emthbGxlciYjMzk7cyByZWFjaC4gVGhlIGZhY3QgdGhhdCB0aGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgJiMzNDtzeXotY2x1c3RlciYjMzQ7IGFuZCBhICYjMzQ7cGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgc3Ryb25nbHkgaGludHMgdGhpcyBpcyBhIGZpeCBmb3IgYSBTeXprYWxsZXItZm91bmQgYnVnIOKAkyBhIFVBRiwgbm8gbGVzcywgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgIHJlbGF0ZWQgdG8gdGhlIGBjYXJkLSZndDttYW5hZ2VkYCBmaWVsZC4KClRoZSBwcm9tcHQsIG9mIGNvdXJzZSwgdGhyb3dzIGEgY3VydmViYWxsIGFib3V0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYnV0IGNvbnNpZGVyaW5nIHRoYXQgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgIGFyZSBlYXNpbHkgZW11bGF0ZWQgd2l0aGluIHN1Y2ggZW52aXJvbm1lbnRzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29uZGl0aW9ucyBuZWVkZWQgdG8gdHJpZ2dlciB0aGUgVUFGLiBUaGUgdnVsbmVyYWJpbGl0eSBib2lscyBkb3duIHRvIGBjYXJkYCBiZWluZyBmcmVlZCBieSBgZGV2cmVzYCBiZWZvcmUgYHNuZF9jYXJkX2RvX2ZyZWVgIGNvbXBsZXRlcy4gVGhpcyByZXF1aXJlcyBgc25kX2NhcmRfZnJlZWAgdG8gYmUgY2FsbGVkLCB3aGljaCwgaW4gdHVybiwgd2FpdHMgb24gYHJlbGVhc2VfY29tcGxldGlvbmAuIGBzbmRfY2FyZF9mcmVlYCBpcyBjYWxsZWQgYnkgYF9fc25kX2NhcmRfcmVsZWFzZWAsIHdoaWNoIGlzIHRoZSBgZGV2cmVzYCByZWxlYXNlIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd291bGQgYmUgc3luY2hyb25vdXMuCgpTbywgSSB0cmFjZSB0aGUgZXhlY3V0aW9uOiBgZGV2cmVzYCBjYWxscyBgX19zbmRfY2FyZF9yZWxlYXNlYCwgd2hpY2ggY2FsbHMgYHNuZF9jYXJkX2ZyZWVgLiBgc25kX2NhcmRfZnJlZWAgY2FsbHMgYHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWRgLCB3aGljaCBjYWxscyBgcHV0X2RldmljZSgmYW1wO2NhcmQtJmd0O2NhcmRfZGV2KWAuIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCBgcmVsZWFzZV9jYXJkX2RldmljZWAgaXMgY2FsbGVkLCB3aGljaCB0aGVuIGNhbGxzIGBzbmRfY2FyZF9kb19mcmVlYC4gSW5zaWRlIGBzbmRfY2FyZF9kb19mcmVlYCwgYGNvbXBsZXRlKGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbilgIGlzIGNhbGxlZC4gVGhlbiBgc25kX2NhcmRfZnJlZWAgd2FrZXMgdXAgYW5kIHJldHVybnMuIFRoZW4gYF9fc25kX2NhcmRfcmVsZWFzZWAgcmV0dXJucy4gVGhlbiBgZGV2cmVzYCBmcmVlcyB0aGUgbWVtb3J5IG9mIGBjYXJkYCEgSXQmIzM5O3MgYWxsIHN5bmNocm9ub3VzLCBhbmQgSSB3YXMgc3RhcnRpbmcgdG8gdGhpbmsgdGhpcyB3YXNuJiMzOTt0IGEgcmVhbCBidWcuCgpCdXQgd2FpdCwgYHB1dF9kZXZpY2VgIGlzIHRoZSBrZXkuIElmIGl0IGRyb3BzIHRoZSAqbGFzdCogcmVmZXJlbmNlLCB0aGUgb3BlcmF0aW9uIElTIHN5bmNocm9ub3VzLiBIb3dldmVyLCBpZiB0aGVyZSBhcmUgc3RpbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzLCB0aGUgcmVmY291bnQgaXMgZ3JlYXRlciB0aGFuIDAuIGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCByZXR1cm5zLCBhbmQgYHNuZF9jYXJkX2ZyZWVgIHdhaXRzLiBMYXRlciwgd2hlbiB0aGUgbGFzdCBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIChlLmcuLCBpbiBgZnB1dGApLCBgcHV0X2RldmljZWAgaXMgY2FsbGVkICpmcm9tIGEgZGlmZmVyZW50IHRocmVhZCouIGBwdXRfZGV2aWNlYCBjYWxscyBgcmVsZWFzZV9jYXJkX2RldmljZWAgLSZndDsgYHNuZF9jYXJkX2RvX2ZyZWVgLiBJbnNpZGUgYHNuZF9jYXJkX2RvX2ZyZWVgLCBpdCBjYWxscyBgY29tcGxldGUoY2FyZC0mZ3Q7cmVsZWFzZV9jb21wbGV0aW9uKWAsIHdoaWNoIHdha2VzIHVwIHRoZSBvcmlnaW5hbCB0aHJlYWQgd2FpdGluZyBpbiBgc25kX2NhcmRfZnJlZWAuIFRoYXQgZmlyc3QgdGhyZWFkIHJldHVybnMsIGFuZCBUSEVOIGBkZXZyZXNgIGZyZWVzIHRoZSBgY2FyZGAgc3RydWN0dXJlLiBNZWFud2hpbGUsIHRoZSBzZWNvbmQgdGhyZWFkIGNvbnRpbnVlcyBleGVjdXRpb24sIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGBjYXJkLSZndDttYW5hZ2VkYCEgQmluZ28hCgpUaGlzIGlzIGEgY2xhc3NpYyBhbmQgdmVyeSBleHBsb2l0YWJsZSBjb25jdXJyZW5jeSBVQUYuIFRocmVhZCAxIChkZXZpY2UgcmVtb3ZhbCkgY2FsbHMgdGhlIGBkZXZyZXNgIHJlbGVhc2UgZnVuY3Rpb24sIGFuZCBUaHJlYWQgMiAoY2xvc2luZyB0aGUgbGFzdCBmaWxlIGRlc2NyaXB0b3IpIGV4ZWN1dGVzIHRoZSBmaW5hbCByZWxlYXNlIHBhdGguIFRocmVhZCAyIGFjY2Vzc2VzIHRoZSBmcmVlZCBtZW1vcnksIGNhdXNpbmcgdGhlIFVBRi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRvIHRhcmdldCB0aGlzLCB0aGUgZnV6emluZyBlZmZvcnRzIHNob3VsZCBjb25jZW50cmF0ZSBvbiBgc25kX2NhcmRfZG9fZnJlZWAsIGBzbmRfY2FyZF9mcmVlYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AsIHdpdGggdGhlIEFMU0EgZnJhbWV3b3JrIGVuYWJsZWQsIGFsb25nIHdpdGggZHJpdmVycyBsaWtlIGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNORF9EVU1NWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWc9NDk9Y29uZmlnIFNORF9QQ1NQXG4tLVxuc291bmQvZHJpdmVycy9LY29uZmlnLTc4LVxuc291bmQvZHJpdmVycy9LY29uZmlnOjc5OmNvbmZpZyBTTkRfRFVNTVlcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0R1bW15ICgvZGV2L251bGwpIHNvdW5kY2FyZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYyNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgdGhlc2Ugc291bmQgZHJpdmVycyBhcmUgY29uZmlndXJlZCwgc3BlY2lmaWNhbGx5IGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIHNvdW5kIHN1YnN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLCB3aGljaCBJIGtub3cgaXMgdHlwaWNhbGx5IG1hbmFnZWQgdW5kZXIgdGhlIGBzb3VuZC9kcml2ZXJzL2AgZGlyZWN0b3J5LiBUaGF0IGBLY29uZmlnYCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHRob3NlIGtpbmRzIG9mIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgdGhvc2Ugc3ltYm9scy4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBwcm9iYWJseSBLY29uZmlnLCBpcyBnb2luZyB0byBkaWN0YXRlIHdoZXRoZXIgb3Igbm90IHRoZXNlIGRyaXZlcnMgYXJlIGV2ZW4gY29tcGlsZWQgaW4sIGJ1aWx0IGFzIG1vZHVsZXMsIG9yIGNvbXBsZXRlbHkgZXhjbHVkZWQuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBhcmNoaXRlY3R1cmVzLiBJdCYjMzk7cyBhIGJyZWFkY3J1bWIgdHJhaWwgSSBjYW4gZm9sbG93IHRvIHVuZGVyc3RhbmQgdGhlaXIgYXZhaWxhYmlsaXR5IGFuZCBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc5Olx0Y29uZmlnIFNORF9EVU1NWVxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7RHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkXCYjMzQ7XG4gIDgxOlx0XHRzZWxlY3QgU05EX1BDTVxuICA4MjpcdFx0aGVscFxuICA4MzpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIGR1bW15IGRyaXZlci4gIFRoaXMgZHJpdmVyIGRvZXNcbiAgODQ6XHRcdCAgbm90aGluZywgYnV0IGVtdWxhdGVzIHZhcmlvdXMgbWl4ZXIgY29udHJvbHMgYW5kIFBDTSBkZXZpY2VzLlxuICA4NTpcdFxuICA4NjpcdFx0ICBZb3UgZG9uJiMzOTt0IG5lZWQgdGhpcyB1bmxlc3MgeW91JiMzOTtyZSB0ZXN0aW5nIHRoZSBoYXJkd2FyZSBzdXBwb3J0XG4gIDg3Olx0XHQgIG9mIHByb2dyYW1zIHVzaW5nIHRoZSBBTFNBIEFQSS5cbiAgODg6XHRcbiAgODk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA5MDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzbmQtZHVtbXkuXG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIFNORF9BTE9PUFxuICA5MzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBsb29wYmFjayBkcml2ZXIgKFBDTSlcJiMzNDtcbiAgOTQ6XHRcdHNlbGVjdCBTTkRfUENNXG4gIDk1Olx0XHRzZWxlY3QgU05EX1RJTUVSXG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQQ00gbG9vcGJhY2sgZGV2aWNlLlxuICA5ODpcdFx0ICBUaGlzIG1vZHVsZSByZXR1cm5zIHBsYXllZCBzYW1wbGVzIGJhY2sgdG8gdGhlIHVzZXIgc3BhY2UgdXNpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIGEgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZpbmRpbmcgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZyBiYXNlZCBvbiBhIHN1c3BlY3RlZCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBjb25kaXRpb24uIGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYCBhcmUgbG9va2luZyBsaWtlIHN0cm9uZyBjb250ZW5kZXJzIGluaXRpYWxseS4gQW5kIGBTTkRfVVNCX0FVRElPYCBpcyBhbHNvIGF0dHJhY3RpdmUgYmVjYXVzZSBvZiBpdHMgaG90cGx1ZyBjYXBhYmlsaXRpZXMgd2l0aGluIHN5emthbGxlciB1c2luZyBgZHVtbXlfaGNkYC4KCkhhbmcgb24sIGxldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHZ1bG5lcmFiaWxpdHkgc2VlbXMgdGllZCB0byBob3cgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgaXMgbWFuYWdlZCwgcGFydGljdWxhcmx5IHRoZSBgY2FyZC0mZ3Q7bWFuYWdlZGAgZmxhZy4gSSBrbm93IGZyb20gbG9va2luZyBhdCBgc291bmQvdXNiL2NhcmQuY2AgdGhhdCBpdCAqZG9lc24mIzM5O3QqIHVzZSBgc25kX2Rldm1fY2FyZF9uZXdgLiBTbyB0aGF0JiMzOTtzIGltcG9ydGFudC4gRG9lcyBpdCB1c2UgYHNuZF9jYXJkX2ZyZWVgPyBZZXMsIGl0IGRvZXMuIEJ1dCB0aGUgY29yZSBvZiB0aGlzIGJ1ZyBoaW5nZXMgb24gdGhhdCBgY2FyZC0mZ3Q7bWFuYWdlZGAgZmxhZywgd2hpY2ggaXMgKm9ubHkqIHNldCB0byB0cnVlIHdoZW4gYHNuZF9kZXZtX2NhcmRfbmV3YCBpcyB1c2VkLgoKUmlnaHQsIGlmIGBjYXJkLSZndDttYW5hZ2VkYCBpcyBmYWxzZSwgYHNuZF9jYXJkX2RvX2ZyZWVgIHdpbGwganVzdCBjYWxsIGBrZnJlZShjYXJkKWAuIE9rYXksIHRoYXQmIzM5O3MgY3JpdGljYWwuIElmIGBjYXJkLSZndDttYW5hZ2VkYCBpcyBmYWxzZSwgbWVhbmluZyBpdCAqd2FzbiYjMzk7dCogYWxsb2NhdGVkIHVzaW5nIHRoZSAmIzM0O21hbmFnZWQmIzM0OyB2ZXJzaW9uLCBga2ZyZWUoY2FyZClgIGdldHMgY2FsbGVkIHdpdGhpbiBgc25kX2NhcmRfZG9fZnJlZWAuCgpOb3csIGlmIHdlIGhhdmUgdHdvIHRocmVhZHMsIFRocmVhZCAyLCBpdCBzZWVtcywgZG9lcyB0aGUgZm9sbG93aW5nOgotICAgYGNvbXBsZXRlKGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbilgCi0gICBgaWYgKCFjYXJkLSZndDttYW5hZ2VkKWAgd2hpY2ggcmVhZHMgYGNhcmQtJmd0O21hbmFnZWRgCi0gICBga2ZyZWUoY2FyZClgCgpBbmQgVGhyZWFkIDEgaXMgZG9pbmcgdGhpczoKLSAgIGB3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7cmVsZWFzZWQpYAotICAgcmV0dXJucyBmcm9tIGBzbmRfY2FyZF9mcmVlYAotICAgcmV0dXJucyBmcm9tIGBfX3NuZF9jYXJkX3JlbGVhc2VgIChidXQgdGhpcyBpcyAqbm90KiBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIGNhcmQgaXNuJiMzOTt0IG1hbmFnZWQpCi0gICByZXR1cm5zIGZyb20gd2hhdGV2ZXIgY2FsbGVkIGBzbmRfY2FyZF9mcmVlYAoKSWYgdGhlIGBjYXJkYCAqaXNuJiMzOTt0KiBtYW5hZ2VkLCBUaHJlYWQgMSAqZG9lc24mIzM5O3QqIGZyZWUgYGNhcmRgLiBUaHJlYWQgMiAqZG9lcyouCgpTbywgd2FpdCwgcmVhZGluZyBgY2FyZC0mZ3Q7bWFuYWdlZGAgaW4gVGhyZWFkIDIgaXMgc2FmZSBiZWNhdXNlIHRoZSBgY2FyZGAgaXRzZWxmIGlzbiYjMzk7dCBmcmVlZCB1bnRpbCB0aGUgc3Vic2VxdWVudCBsaW5lLCBga2ZyZWUoY2FyZClgLiBUaGUgVUFGICpvbmx5KiBoYXBwZW5zIHdoZW4gYGNhcmQtJmd0O21hbmFnZWRgIGlzIHRydWUuIFRoaXMgaW4gdHVybiBtZWFucyB0aGUgY2FyZCBoYWQgdG8gaGF2ZSBiZWVuIGFsbG9jYXRlZCB3aXRoIGBzbmRfZGV2bV9jYXJkX25ld2AuCgpUaGVyZWZvcmUsIHdlIGFic29sdXRlbHkgKm11c3QqIGZvY3VzIG9uIGRyaXZlcnMgdGhhdCB1c2UgYHNuZF9kZXZtX2NhcmRfbmV3YC4gYFNORF9EVU1NWWAgYW5kIGBTTkRfQUxPT1BgIGFyZSBsb29raW5nIGV2ZW4gYmV0dGVyIG5vdy4gVGhlaXIgdmlydHVhbCBuYXR1cmUgaXMgcGVyZmVjdCBmb3IgdGVzdGluZyB0aGlzLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGtlcm5lbCBmb3IgYW55IG90aGVyIHZpcnR1YWwgZHJpdmVycyB0aGF0IGFyZSB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBqdXN0IHRvIGJlIGNlcnRhaW4gd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgbW9yZSBpbnRlcmVzdGluZyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9kZXZtX2NhcmRfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy9hbG9vcC5jPTE3OTg9c3RhdGljIGludCBsb29wYmFja19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXG4tLVxuc291bmQvZHJpdmVycy9hbG9vcC5jLTE4MDQtXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmM6MTgwNTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNmRldnB0ci1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvZHJpdmVycy9hbG9vcC5jLTE4MDYtXHRcdFx0XHRzaXplb2Yoc3RydWN0IGxvb3BiYWNrKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvZHJpdmVycy9kdW1teS5jPTEwMTI9c3RhdGljIGludCBzbmRfZHVtbXlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxuLS1cbnNvdW5kL2RyaXZlcnMvZHVtbXkuYy0xMDE5LVxuc291bmQvZHJpdmVycy9kdW1teS5jOjEwMjA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZkZXZwdHItXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvZHVtbXkuYy0xMDIxLVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfZHVtbXkpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYz01Mj1zdGF0aWMgaW50IHNuZF9tcHU0MDFfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgaW50IGRldixcbi0tXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYy02MS1cdCpyY2FyZCA9IE5VTEw7XG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYzo2MjpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldnB0ciwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYy02My1cdFx0XHRcdDAsIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2RyaXZlcnMvbXRwYXYuYz02NTI9c3RhdGljIGludCBzbmRfbXRwYXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbnNvdW5kL2RyaXZlcnMvbXRwYXYuYy02NTctXG5zb3VuZC9kcml2ZXJzL210cGF2LmM6NjU4Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2ZGV2LVx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvbXRwYXYuYy02NTktXHRcdFx0XHRzaXplb2YoKm10cF9jYXJkKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvZHJpdmVycy9wY210ZXN0LmM9NjAwPXN0YXRpYyBpbnQgcGNtdHN0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuc291bmQvZHJpdmVycy9wY210ZXN0LmMtNjA5LVxuc291bmQvZHJpdmVycy9wY210ZXN0LmM6NjEwOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsIFx1MDAyNmNhcmQpO1xuc291bmQvZHJpdmVycy9wY210ZXN0LmMtNjExLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jPTk4PXN0YXRpYyBpbnQgc25kX2NhcmRfcGNzcF9wcm9iZShpbnQgZGV2bnVtLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYy0xMDctXG5zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jOjEwODpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgXHUwMDI2Y2FyZCk7XG5zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jLTEwOS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jPTMyMT1zdGF0aWMgaW50IHNuZF9zZXJpYWxfZ2VuZXJpY19wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxuLS1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYy0zMjYtXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmM6MzI3Olx0ZXJyICA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnNlcmRldi1cdTAwM2VkZXYsIFNORFJWX0RFRkFVTFRfSURYMSxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYy0zMjgtXHRcdFx0XHRTTkRSVl9ERUZBVUxUX1NUUjEsIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jPTg0Mj1zdGF0aWMgaW50IHNuZF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxuLS1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jLTg4NC1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jOjg4NTpcdGVyciAgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZkZXZwdHItXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jLTg4Ni1cdFx0XHRcdCAwLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYz03MT1zdGF0aWMgaW50IHNuZF92aXJtaWRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cilcbi0tXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYy03Ny1cbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jOjc4Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2ZGV2cHRyLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYy03OS1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfdmlybWlkaSksIFx1MDAyNmNhcmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQXVkaW8gRHJpdmVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gQmV5b25kIHRoZSB1c3VhbCBzdXNwZWN0cywgSSByZWNhbGwgdGhhdCBgU05EX1BDTVRFU1RgIGFuZCBgU05EX1ZJUk1JRElgIGFyZSBsaWtlbHkgYWxzbyB3b3J0aCBhIGxvb2suIFRoZXkgb2Z0ZW4gcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBvciBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMuIE15IG5leHQgbW92ZSBpcyBjbGVhciDigJMgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGF1ZGlvIGRyaXZlcnMuIEkgbmVlZCB0byBleGFtaW5lIGBzb3VuZC9kcml2ZXJzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRldGFpbHMsIGRlcGVuZGVuY2llcywgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYm90aCBgU05EX1BDTVRFU1RgIGFuZCBgU05EX1ZJUk1JRElgLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZWlyIHB1cnBvc2UgYW5kIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoaW4gdGhlIG92ZXJhbGwgYXVkaW8gc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU05EX1BDTVRFU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy9LY29uZmlnPTkyPWNvbmZpZyBTTkRfQUxPT1Bcbi0tXG5zb3VuZC9kcml2ZXJzL0tjb25maWctMTExLVxuc291bmQvZHJpdmVycy9LY29uZmlnOjExMjpjb25maWcgU05EX1BDTVRFU1RcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFBDTSB0ZXN0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTczMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYFNORF9WSVJNSURJYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIGBTTkRfVklSTUlESWAuLi4gdGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBjZXJ0YWluIGFzc29jaWF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHdoZXJlIHRoYXQgZml0cyBpbiB0aGUgY3VycmVudCBwcm9qZWN0LCBvciBkZWJ1Z2dpbmcgc2NlbmFyaW8uIElzIHRoaXMgYWJvdXQgYSBwb3RlbnRpYWwgZHJpdmVyIGNvbmZsaWN0LCBhIHNwZWNpZmljIHNvdW5kIHN5bnRoZXNpcyBwcm9jZXNzLCBvciBwZXJoYXBzIGEgTUlESSByb3V0aW5nIGlzc3VlPyBUaGUgbmFtZSBzdWdnZXN0cyBzb21ldGhpbmcgdmlydHVhbCwgc28gSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvZnR3YXJlLWJhc2VkIE1JREkgaW50ZXJhY3Rpb24sIHdoaWNoIG5hcnJvd3MgaXQgZG93biBzb21ld2hhdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJldmlldyB0aGUgY29kZSByZWxhdGVkIHRvIHRoYXQgc3Vic3lzdGVtLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBtb2R1bGVzIGFyZSBsb2FkZWQgYW5kIHRoYXQgSSBoYXZlIHRoZSBjb3JyZWN0IHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGUgdmlydHVhbCBNSURJIHBvcnQuIFRoZW4sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBjb3VsZCBoYXZlIGltcGFjdGVkIHRoaXMgYXJlYS4gQXJlIHRoZXJlIGFueSBrbm93biBidWdzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmlndXJhdGlvbiBpbmNvbnNpc3RlbmNpZXM/IEkmIzM5O2xsIHByb2JhYmx5IGFsc28gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgc291bmQgY2FyZCBvciB0aGUgTUlESSBzZXR1cC4gSXQmIzM5O3MgYSBxdWljayB0cmlhZ2U7IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbW9zdCBsaWtlbHkgcHJvYmxlbSBhcmVhcyBxdWlja2x5IHNvIEkgY2FuIGVmZmljaWVudGx5IGRpYWdub3NlIHRoZSBpc3N1ZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTkRfVklSTUlESSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL2RyaXZlcnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWc9MTEyPWNvbmZpZyBTTkRfUENNVEVTVFxuLS1cbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy0xMjgtXG5zb3VuZC9kcml2ZXJzL0tjb25maWc6MTI5OmNvbmZpZyBTTkRfVklSTUlESVxuc291bmQvZHJpdmVycy9LY29uZmlnLTEzMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgTUlESSBzb3VuZGNhcmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAxMDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBTb3VuZCBEcml2ZXIgVnVsbmVyYWJpbGl0eSBMYW5kc2NhcGUqKgoKUmlnaHQsIG9rYXksIGJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHdlIHNob3VsZCBkZWZpbml0ZWx5IGJlIGJ1aWxkaW5nIHdpdGggc3VwcG9ydCBmb3IgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBhbmQgYFNORF9WSVJNSURJYC4gVGhlc2UgYXJlIHRoZSBrZXkgbW9kdWxlcyB3ZSBuZWVkIHRvIGhhdmUgYWN0aXZlIGZvciBlZmZlY3RpdmUgZnV6emluZy4gTXkgZm9jdXMsIGhvd2V2ZXIsIGlzIGdvaW5nIHRvIGJlIGRpcmVjdGVkIGF0IHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNvdW5kIGNhcmQgbWFuYWdlbWVudCBjb2RlLiBXZSBuZWVkIHRvIHplcm8gaW4gb24gYHNuZF9jYXJkX2RvX2ZyZWVgLCBgc25kX2NhcmRfZnJlZWAsIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgLiBUaGVzZSBhcmUgbGlrZWx5IGFyZWFzIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBjb3VsZCBtYW5pZmVzdCBhcyB2dWxuZXJhYmlsaXRpZXMuIEhtbSwgaGFuZyBvbiBhIHNlY29uZC4uLiBpcyBgc25kX2NhcmRfZG9fZnJlZWAgYWN0dWFsbHkgYSBzdGF0aWMgZnVuY3Rpb24/IFRoYXQmIzM5O3MgZ29pbmcgdG8gY2hhbmdlIHRoaW5ncy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQ7IGlmIGl0JiMzOTtzIHN0YXRpYywgaXQgbGltaXRzIHRoZSBzY29wZSBhbmQgaG93IGVhc2lseSB3ZSBjYW4gdGFyZ2V0IGl0LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBkZWZpbml0aW9u4oCmIHRoYXQgZGVmaW5pdGVseSBpbXBhY3RzIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbmRfY2FyZF9kb19mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmM9MTQ1PXN0YXRpYyBpbnQgc25kX2NhcmRfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0xNDctXHRcdFx0IHNpemVfdCBleHRyYV9zaXplKTtcbnNvdW5kL2NvcmUvaW5pdC5jOjE0ODpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTE0OS1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjYXJkX2Rldl9hdHRyX2dyb3VwO1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTE1MT1zdGF0aWMgdm9pZCByZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbnNvdW5kL2NvcmUvaW5pdC5jLTE1Mi17XG5zb3VuZC9jb3JlL2luaXQuYzoxNTM6XHRzbmRfY2FyZF9kb19mcmVlKGRldl90b19zbmRfY2FyZChkZXYpKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTE1NC19XG4tLVxuc291bmQvY29yZS9pbml0LmM9NTgzPUVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XG5zb3VuZC9jb3JlL2luaXQuYy01ODQtXG5zb3VuZC9jb3JlL2luaXQuYzo1ODU6c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbnNvdW5kL2NvcmUvaW5pdC5jLTU4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBhdWRpbyBzeXN0ZW1zIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBBdWRpbyBDYXJkIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKUmlnaHQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gU28sIGl0JiMzOTtzIG5vdCBhIHB1YmxpYyBlbnRyeSBwb2ludCB3ZSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIGRpcmVjdGx5IGluIHRoaXMgYnJvYWRlciBjb250ZXh0IG9mIGF1ZGlvIGRldmljZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYW4gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbi4gVGhhdCBtZWFucyBteSBhdHRlbnRpb24gc2hvdWxkIHNoaWZ0IHRvIHRoZSBtb3JlIHB1YmxpYyBmYWNpbmcgY291bnRlcnBhcnRzOiBgc25kX2NhcmRfZnJlZWAgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHJlYWxseSBmb2N1cyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgYXQgYSBoaWdoZXIgbGV2ZWwuIFdhaXQgYSBtaW51dGUuLi4gYHNuZF9jYXJkX2ZyZWVgIGlzICpleHBvcnRlZCo/IFRoYXTigJlzIGludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl04oCZcyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCBkb2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhhdCByZXNvdXJjZXMgYXJlIGNvbnNpc3RlbnRseSBhbmQgY29ycmVjdGx5IG1hbmFnZWQsIGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIGNhcmQgbWlnaHQgYmUgdW5leHBlY3RlZGx5IGNsb3NlZCBvciByZW1vdmVkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJpbmcgc3RhYmxlIGF1ZGlvIHN5c3RlbSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYz01ODU9c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy02MTEtLyoqXG5zb3VuZC9jb3JlL2luaXQuYzo2MTI6ICogc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCAtIERpc2Nvbm5lY3QgdGhlIGNhcmQsIGZyZWUgaXQgbGF0ZXIgZXZlbnR1YWxseVxuc291bmQvY29yZS9pbml0LmMtNjEzLSAqIEBjYXJkOiBzb3VuZGNhcmQgc3RydWN0dXJlXG4tLVxuc291bmQvY29yZS9pbml0LmMtNjIxLSAqL1xuc291bmQvY29yZS9pbml0LmM6NjIyOnZvaWQgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG5zb3VuZC9jb3JlL2luaXQuYy02MjMte1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTYzMC19XG5zb3VuZC9jb3JlL2luaXQuYzo2MzE6RVhQT1JUX1NZTUJPTChzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTYzMi1cbi0tXG5zb3VuZC9jb3JlL2luaXQuYz02NDY9dm9pZCBzbmRfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy02NTktXHRjYXJkLVx1MDAzZXJlbGVhc2VfY29tcGxldGlvbiA9IFx1MDAyNnJlbGVhc2VkO1xuc291bmQvY29yZS9pbml0LmM6NjYwOlx0c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChjYXJkKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTY2MS1cbi0tXG5zb3VuZC9jb3JlL2luaXQuYz0xMDg4PUVYUE9SVF9TWU1CT0woc25kX2NhcmRfZmlsZV9hZGQpO1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTEwOTYtICogIHNuZF9jYXJkX2ZpbGVfYWRkKCkgZnVuY3Rpb24uXG5zb3VuZC9jb3JlL2luaXQuYzoxMDk3OiAqICBJZiBhbGwgZmlsZXMgYXJlIHJlbW92ZWQgYW5kIHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoKSB3YXNcbnNvdW5kL2NvcmUvaW5pdC5jLTEwOTgtICogIGNhbGxlZCBiZWZvcmVoYW5kLCBpdCBwcm9jZXNzZXMgdGhlIHBlbmRpbmcgcmVsZWFzZSBvZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTUzNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgQUxTQSBBdWRpbyBDYXJkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGdpdmVuIGEgdGFzayBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gQUxTQSBzb3VuZCBjYXJkcywgZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBlbnRyeXBvaW50cy4gUmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGxlYWRpbmcgbWUgdG8gZm9jdXMgb24gYHNuZF9jYXJkX2ZyZWVgLCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgLiBUaGVzZSBzZWVtIGxpa2Ugc3Ryb25nIGNhbmRpZGF0ZXMuIFdhaXQgYSBtaW51dGUgdGhvdWdoLi4uIEkgcmVjYWxsIGBzbmRfY2FyZF9mcmVlYCBpcyBjYWxsZWQgaW50ZXJuYWxseSBieSBgX19zbmRfY2FyZF9yZWxlYXNlYCB3aGljaCBpcyBpdHNlbGYgdGllZCB0byB0aGUgYGRldnJlc2AgbWVjaGFuaXNtLiBIbW1tLCBpcyBgX19zbmRfY2FyZF9yZWxlYXNlYCBzdGF0aWM/IFllcywgaXQgaXMuCgpBaCwgdGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiB3YW50cyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIFBlcmZlY3QhIFRoaXMgY29uZmlybXMgdGhhdCBgc25kX2NhcmRfZnJlZWAsIGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AgYXJlIGV4YWN0bHkgd2hhdCBJIHNob3VsZCBiZSBsb29raW5nIGF0LiBUaGVzZSBhcmUgdGhlIG9uZXMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLiBJIGtub3cgYFNORGAgaXMgdGhlIGdlbmVyYWwgQUxTQSBjb25maWd1cmF0aW9uIHN5bWJvbCwgc28gbGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYHNvdW5kL0tjb25maWdgIGZpbGUgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBwZWFjZSBvZiBtaW5kIGJlZm9yZSBJIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTkQkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9LY29uZmlnPTQwPXNvdXJjZSBcJiMzNDtzb3VuZC9vc3MvZG1hc291bmQvS2NvbmZpZ1wmIzM0O1xuc291bmQvS2NvbmZpZy00MS1cbnNvdW5kL0tjb25maWc6NDI6bWVudWNvbmZpZyBTTkRcbnNvdW5kL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxNTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGF1ZGlvIGV4cGVydDoKCioqQXVkaW8gRGV2aWNlIERpc2NvdmVyeSBhbmQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHB1dHRpbmcgdG9nZXRoZXIgbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgYXVkaW8gc3lzdGVtLiBGaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBTTkRgIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdlIG5lZWQuIFRoZW4sIEkgc2VlIGEgbGlzdCBvZiBvdGhlciBhdWRpbyBkZXZpY2UgdHlwZXM6IGBTTkRfRFVNTVlgLCBgU05EX0FMT09QYCwgYFNORF9QQ01URVNUYCwgYW5kIGBTTkRfVklSTUlESWAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBhbGwgdXNlZnVsIGNvbXBvbmVudHMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpbmtpbmcgYWJvdXQgdGhlc2UgbmV3IHBpZWNlcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlaXIgaW1wb3J0YW5jZSBhbmQgcG9zc2libGUgY29tcGxleGl0eS4gSG9sZCBvbi4uLiBkb2VzIGBTTkRfRFVNTVlgIGFjdHVhbGx5IHJlbHkgb24gYW55IG90aGVyIG1vZHVsZSBvciBwaWVjZSBvZiB0aGUgY29yZSBzeXN0ZW0/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBiZWNhdXNlIGlmIGl0ICpkb2VzKiBkZXBlbmQgb24gc29tZXRoaW5nLCB0aGF0IGNoYW5nZXMgdGhlIHdob2xlIHBpY3R1cmUuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBmbG93LCB0aGUgaGllcmFyY2h5LCB0aGUgZGVwZW5kZW5jaWVzLiBOZWVkIHRvIGZpZ3VyZSB0aGF0IG91dCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTkRfRFVNTVkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy9LY29uZmlnPTQ5PWNvbmZpZyBTTkRfUENTUFxuLS1cbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy03OC1cbnNvdW5kL2RyaXZlcnMvS2NvbmZpZzo3OTpjb25maWcgU05EX0RVTU1ZXG5zb3VuZC9kcml2ZXJzL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtEdW1teSAoL2Rldi9udWxsKSBzb3VuZGNhcmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIFNORF9EVU1NWSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgc291bmQvZHJpdmVycy9LY29uZmlnYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBTTkRfRFVNTVlgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBsb2dpYyB0aGF0IGRlZmluZXMgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIGR1bW15IHNvdW5kIGRyaXZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGNvbW1lbnRzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgaW50ZW5kZWQgdXNlIGNhc2UuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZToKCiogICAqKkRlcGVuZGVuY2llczoqKiBEb2VzIGl0IHJlbHkgb24gYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucz8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGRyaXZlciBtaWdodCBiZSBzZWxlY3RlZCBpbiBzb21lIGJ1aWxkcyBidXQgbm90IGluIG90aGVycy4KKiAgICoqRGVmYXVsdCBTdGF0ZToqKiBJcyBgU05EX0RVTU1ZYCB1c3VhbGx5IGVuYWJsZWQsIGRpc2FibGVkLCBvciBkZXRlcm1pbmVkIGJ5IHNvbWUgb3RoZXIgZmFjdG9yPyBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc3RyYXRlZ3kuCiogICAqKkhlbHAgVGV4dDoqKiBIb3BlZnVsbHksIHRoZXJlJiMzOTtzIHNvbWUgZGVjZW50IGhlbHAgdGV4dC4gSSBhbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgdGhpcyBkcml2ZXIgcHJvdmlkZXMsIGFuZCB0aGUgdHlwZXMgb2Ygc2NlbmFyaW9zIHdoZXJlIHRoaXMgaXMgbWVhbnQgdG8gYmUgZW5hYmxlZC4KKiAgICoqTG9jYXRpb246KiogV2hlcmUgZG9lcyB0aGlzIGRyaXZlciBwaHlzaWNhbGx5IHJlc2lkZSwgYW5kIGNhbiBJIGlkZW50aWZ5IHNpbWlsYXIgZHJpdmVycyB0aGF0IHdpbGwgcG9pbnQgdG8gYSBsYXJnZXIgcmVsYXRpb25zaGlwLgoKTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkmIzM5O20gcmVhZHkgZm9yIGFueXRoaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NvdW5kL2RyaXZlcnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcbiAgNzE6XHRcdCAgWW91IGRvbiYjMzk7dCBuZWVkIHRoaXMgZHJpdmVyIGlmIHlvdSBvbmx5IHdhbnQgeW91ciBwYy1zcGVha2VyIHRvIGJlZXAuXG4gIDcyOlx0XHQgIFlvdSBkb24mIzM5O3QgbmVlZCB0aGlzIGRyaXZlciBpZiB5b3UgaGF2ZSBhIHRhYmxldCBwaWV6byBiZWVwZXJcbiAgNzM6XHRcdCAgaW4geW91ciBQQyBpbnN0ZWFkIG9mIHRoZSByZWFsIHNwZWFrZXIuXG4gIDc0Olx0XG4gIDc1Olx0XHQgIFNheSBOIGlmIHlvdSBoYXZlIGEgc291bmQgY2FyZC5cbiAgNzY6XHRcdCAgU2F5IE0gaWYgeW91IGRvbiYjMzk7dC5cbiAgNzc6XHRcdCAgU2F5IFkgb25seSBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgZG8uXG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnIFNORF9EVU1NWVxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7RHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkXCYjMzQ7XG4gIDgxOlx0XHRzZWxlY3QgU05EX1BDTVxuICA4MjpcdFx0aGVscFxuICA4MzpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIGR1bW15IGRyaXZlci4gIFRoaXMgZHJpdmVyIGRvZXNcbiAgODQ6XHRcdCAgbm90aGluZywgYnV0IGVtdWxhdGVzIHZhcmlvdXMgbWl4ZXIgY29udHJvbHMgYW5kIFBDTSBkZXZpY2VzLlxuICA4NTpcdFxuICA4NjpcdFx0ICBZb3UgZG9uJiMzOTt0IG5lZWQgdGhpcyB1bmxlc3MgeW91JiMzOTtyZSB0ZXN0aW5nIHRoZSBoYXJkd2FyZSBzdXBwb3J0XG4gIDg3Olx0XHQgIG9mIHByb2dyYW1zIHVzaW5nIHRoZSBBTFNBIEFQSS5cbiAgODg6XHRcbiAgODk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzIxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbnNpZGVyaW5nIERlcGVuZGVuY2llcyBhbmQgU05EX0FMT09QKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoZXJlIGNlbnRlcnMgb24gZGVwZW5kZW5jaWVzIOKAkyBvciByYXRoZXIsIHRoZSAqbGFjayogdGhlcmVvZi4gV2hlbiBldmFsdWF0aW5nIGEgbmV3IHN5c3RlbSwgcHJvdG9jb2wsIG9yIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiwgSSBhbHdheXMgYmVnaW4gYnkgYXNzZXNzaW5nIGl0cyByZWxpYW5jZSBvbiBleHRlcm5hbCBjb21wb25lbnRzLiAmIzM0O05vIGRlcGVuZGVuY2llcyYjMzQ7IGlzIGEgc2lnbmlmaWNhbnQgc3RhdGVtZW50LiBJdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIGNlcnRhaW4gbGV2ZWwgb2Ygc2VsZi1jb250YWlubWVudCwgcG90ZW50aWFsbHkgaW5jcmVhc2VkIHBvcnRhYmlsaXR5LCBvciBtYXliZSBldmVuIGEgc2ltcGxlciBkZXBsb3ltZW50IG1vZGVsLiBUaGF0IHNpbXBsaWNpdHkgaXMgYXR0cmFjdGl2ZSwgb2J2aW91c2x5LgoKSG93ZXZlciwgdGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyDigJMgJiMzNDtXaGF0IGFib3V0IGBTTkRfQUxPT1BgPyYjMzQ7IOKAkyBjdXRzIHJpZ2h0IHRvIHRoZSBoZWFydCBvZiBwcmFjdGljYWwgYXBwbGljYXRpb24uIFRoZSBsb29wYmFjayBzb3VuZCBkZXZpY2UgKGBTTkRfQUxPT1BgKSBpcyBmdW5kYW1lbnRhbCBpbiBtYW55IGF1ZGlvIHN5c3RlbXMsIHBhcnRpY3VsYXJseSBmb3IgY2FwdHVyaW5nIGFuZCByb3V0aW5nIHNvdW5kIGludGVybmFsbHkgd2l0aGluIGEgc3lzdGVtLiBFdmVuIGlmIHNvbWV0aGluZyBpcyBkZXNpZ25lZCB3aXRoICpubyBkZWNsYXJlZCogZGVwZW5kZW5jaWVzLCBpdCBpcyBsaWtlbHkgdG8gaGF2ZSBwcmFjdGljYWwgaW1wbGljYXRpb25zLiBUaGlzIHJhaXNlcyBjb25jZXJucy4gRG9lcyB0aGlzIG1lYW4gaXQgd29uJiMzOTt0ICp3b3JrKiB3aXRoIGBTTkRfQUxPT1BgPyBJcyBpdCBpbnRlbnRpb25hbGx5IGJ5cGFzc2luZyBpdD8gT3IgcGVyaGFwcywgdGhlIGludGVncmF0aW9uIGlzIGRlc2lnbmVkIHdpdGggYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIGxvb3BiYWNrIGRldmljZS4KCkkgd291bGQgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGNvbnRleHQuIEtub3dpbmcgdGhlIGFuc3dlciB0byB0aGF0IHF1ZXN0aW9uIHdvdWxkIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gdGhlIGZsZXhpYmlsaXR5IG9mIHRoZSBkZXNpZ24sIGFuZCB0byB3aGljaCBzeXN0ZW1zIGl0IGNhbiBiZSBpbXBsZW1lbnRlZC4gVWx0aW1hdGVseSwgdGhlIHF1ZXN0aW9uIHNpZ25hbHMgbXkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgZmVhdHVyZSwgYW5kIGl0JiMzOTtzIHJlbGF0aW9uc2hpcCB3aXRoIHN0YW5kYXJkIGF1ZGlvIHNldHVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHNuZC1kdW1teS5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgU05EX0FMT09QXG4gIDkzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGxvb3BiYWNrIGRyaXZlciAoUENNKVwmIzM0O1xuICA5NDpcdFx0c2VsZWN0IFNORF9QQ01cbiAgOTU6XHRcdHNlbGVjdCBTTkRfVElNRVJcbiAgOTY6XHRcdGhlbHBcbiAgOTc6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFBDTSBsb29wYmFjayBkZXZpY2UuXG4gIDk4Olx0XHQgIFRoaXMgbW9kdWxlIHJldHVybnMgcGxheWVkIHNhbXBsZXMgYmFjayB0byB0aGUgdXNlciBzcGFjZSB1c2luZ1xuICA5OTpcdFx0ICB0aGUgc3RhbmRhcmQgQUxTQSBQQ00gZGV2aWNlLiBUaGUgZGV2aWNlcyBhcmUgcm91dGVkIDAtXHUwMDNlMSBhbmRcbiAxMDA6XHRcdCAgMS1cdTAwM2UwLCB3aGVyZSBmaXJzdCBudW1iZXIgaXMgdGhlIHBsYXliYWNrIFBDTSBkZXZpY2UgYW5kIHNlY29uZFxuIDEwMTpcdFx0ICBudW1iZXIgaXMgdGhlIGNhcHR1cmUgZGV2aWNlLiBNb2R1bGUgY3JlYXRlcyB0d28gUENNIGRldmljZXMgYW5kXG4gMTAyOlx0XHQgIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHN1YnN0cmVhbXMgKHNlZSB0aGUgcGNtX3N1YnN0cmVhbXMgbW9kdWxlXG4gMTAzOlx0XHQgIHBhcmFtZXRlcikuXG4gMTA0Olx0XG4gMTA1Olx0XHQgIFRoZSBsb29wYmFjayBkZXZpY2UgYWxsb3dzIHRpbWUgc3luY2hyb25pemF0aW9uIHdpdGggYW4gZXh0ZXJuYWxcbiAxMDY6XHRcdCAgdGltaW5nIHNvdXJjZSB1c2luZyB0aGUgdGltZSBzaGlmdCB1bml2ZXJzYWwgY29udHJvbCAoJiM0MzstMjAlXG4gMTA3Olx0XHQgIG9mIHN5c3RlbSB0aW1lKS5cbiAxMDg6XHRcbiAxMDk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzg5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5kZXBlbmRlbnQgQXNzZXNzbWVudCAmYW1wOyBQQ00gQ29uc2lkZXJhdGlvbioqCgpSaWdodCwgbm8gaW1tZWRpYXRlLCBvYnZpb3VzIGRlcGVuZGVuY2llcyBqdW1wIG91dCBhdCBtZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgY2xlYW4gZXZhbHVhdGlvbi4gQnV0IGhvbGQgb24sIGJlZm9yZSBJIGdldCB0b28gY2FycmllZCBhd2F5IHdpdGggdGhhdCwgSSBuZWVkIHRvIGNvbnNpZGVyIGBTTkRfUENNVEVTVGAuIEkga25vdyBpdCYjMzk7cyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSAqaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlKiwgYnV0IGl0JiMzOTtzIGEgY3JpdGljYWwgdG9vbCBmb3IgdmFsaWRhdGlvbiBhbmQgcmVncmVzc2lvbiB0ZXN0aW5nIGluIHRoaXMgc3BhY2UsIHJpZ2h0PyBJZ25vcmluZyBpdCB3b3VsZCBiZSBmb29saXNoLCBldmVuIGlmIGl0IGRvZXNuJiMzOTt0IGFwcGVhciBpbiBhIGRpcmVjdCBsaW5raW5nIG9yIGNvbXBpbGF0aW9uIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBmYWN0b3IgaW4gaG93IEkmIzM5O2xsIHVzZSBgU05EX1BDTVRFU1RgIG9yIHNpbWlsYXIgdXRpbGl0aWVzIGR1cmluZyB2YWxpZGF0aW9uLCBhcyBJIHByb2dyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NvdW5kL2RyaXZlcnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHNuZC1hbG9vcC5cbiAxMTE6XHRcbiAxMTI6XHRjb25maWcgU05EX1BDTVRFU1RcbiAxMTM6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgUENNIHRlc3QgZHJpdmVyXCYjMzQ7XG4gMTE0Olx0XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG4gMTE1Olx0XHRzZWxlY3QgU05EX1BDTVxuIDExNjpcdFx0aGVscFxuIDExNzpcdFx0ICBTYXkgJiMzOTtZJiMzOTsgb3IgJiMzOTtNJiMzOTsgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgVmlydHVhbCBQQ00gdGVzdCBkcml2ZXIuXG4gMTE4Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGFpbWVkIGF0IGV4dGVuZGVkIHRlc3Rpbmcgb2YgdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnNcbiAxMTk6XHRcdCAgd2hpY2ggdXNlIHRoZSBBTFNBIEFQSSwgYXMgd2VsbCBhcyB0aGUgUENNIG1pZGRsZSBsYXllciB0ZXN0aW5nLlxuIDEyMDpcdFxuIDEyMTpcdFx0ICBJdCBjYW4gZ2VuZXJhdGUgcmFuZG9tIG9yIHBhdHRlcm4tYmFzZWQgZGF0YSBpbnRvIHRoZSBjYXB0dXJlIHN0cmVhbSxcbiAxMjI6XHRcdCAgY2hlY2sgdGhlIHBsYXliYWNrIHN0cmVhbSBmb3IgY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgcGF0dGVybiwgaW5qZWN0XG4gMTIzOlx0XHQgIHRpbWUgZGVsYXlzIGR1cmluZyBjYXB0dXJlL3BsYXliYWNrLCByZWRlZmluZSB0aGUgUkVTRVQgaW9jdGwgb3BlcmF0aW9uXG4gMTI0Olx0XHQgIHRvIHBlcmZvcm0gdGhlIFBDTSBtaWRkbGUgbGF5ZXIgdGVzdGluZyBhbmQgaW5qZWN0IGVycm9ycyBkdXJpbmcgdGhlXG4gMTI1Olx0XHQgIFBDTSBjYWxsYmFja3MuIEl0IHN1cHBvcnRzIGJvdGggaW50ZXJsZWF2ZWQgYW5kIG5vbi1pbnRlcmxlYXZlZCBhY2Nlc3NcbiAxMjY6XHRcdCAgbW9kZXMuIFlvdSBjYW4gZmluZCB0aGUgY29ycmVzcG9uZGluZyBzZWxmdGVzdCBpbiB0aGUgJiMzOTthbHNhJiMzOTtcbiAxMjc6XHRcdCAgc2VsZnRlc3RzIGZvbGRlci5cbiAxMjg6XHRcbiAxMjk6XHRjb25maWcgU05EX1ZJUk1JRElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0MzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMgaW4gdGhlIEFMU0EgS2VybmVsIE1vZHVsZSBMYW5kc2NhcGUqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCBgU05EX1BDTVRFU1RgIOKAkyBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBtb2R1bGUgcmVxdWlyZXMgYERFQlVHX0ZTYC4gVGhhdCYjMzk7cyBub3QgdW5leHBlY3RlZDsgaXQgbWFrZXMgc2Vuc2UgZm9yIHRlc3RpbmcgdXRpbGl0aWVzIHRvIHVzZSB0aGUgZGVidWdnaW5nIGZpbGUgc3lzdGVtLiBCdXQsIGl0IGdvdCBtZSB0aGlua2luZy4uLiB3aGF0JiMzOTtzIHRoZSBkZXBlbmRlbmN5IHNpdHVhdGlvbiB3aXRoIGBTTkRfVklSTUlESWA/IEkgd29uZGVyIGlmIGl0IGhhcyBhbnkgc2ltaWxhciByZXF1aXJlbWVudHMsIG9yIGlmIGl0cyBmdW5jdGlvbmFsaXR5IGlzIHNlbGYtY29udGFpbmVkLiBOZWVkIHRvIGRyaWxsIGRvd24gb24gdGhhdCBvbmUgYW5kIGNoZWNrIGl0cyBjb25maWcgb3B0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBzaGFyZWQgY29kZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBpZiBgVklSTUlESWAgaXMgYW5vdGhlciBjYW5kaWRhdGUgdG8gYmUgcHVsbGVkIGluIGNvbmRpdGlvbmFsbHkgb3IgaWYgaXQgaXMgaW5kZXBlbmRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjk6XHRjb25maWcgU05EX1ZJUk1JRElcbiAxMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgTUlESSBzb3VuZGNhcmRcJiMzNDtcbiAxMzE6XHRcdGRlcGVuZHMgb24gU05EX1NFUVVFTkNFUlxuIDEzMjpcdFx0c2VsZWN0IFNORF9USU1FUlxuIDEzMzpcdFx0c2VsZWN0IFNORF9SQVdNSURJXG4gMTM0Olx0XHRzZWxlY3QgU05EX1NFUV9WSVJNSURJXG4gMTM1Olx0XHRzZWxlY3QgU05EX1NFUV9NSURJX0VWRU5UXG4gMTM2Olx0XHRoZWxwXG4gMTM3Olx0XHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSB0aGUgdmlydHVhbCBNSURJIGRyaXZlci4gIFRoaXMgZHJpdmVyXG4gMTM4Olx0XHQgIGFsbG93cyB0byBjb25uZWN0IGFwcGxpY2F0aW9ucyB1c2luZyByYXcgTUlESSBkZXZpY2VzIHRvXG4gMTM5Olx0XHQgIHNlcXVlbmNlciBjbGllbnRzLlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCBNSURJIGlzLCBzYXkgTiBoZXJlLlxuIDE0MjpcdFxuIDE0MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTQ0Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHNuZC12aXJtaWRpLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBTTkRfTVRQQVZcbiAxNDc6XHRcdHRyaXN0YXRlIFwmIzM0O01PVFUgTWlkaVRpbWVQaWVjZSBBViBtdWx0aXBvcnQgTUlESVwmIzM0O1xuIDE0ODpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9QT1JUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgc29tZSBzb3VuZCBkcml2ZXJzIHRvIHNlZSBpZiBJIGNhbiBzaGFrZSBsb29zZSBhbnkgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLiBgU05EX1ZJUk1JRElgIGlzIHRoZSBmaXJzdCBvbmUgdGhhdCBqdW1wcyBvdXQsIGJ1dCB0aGF0JiMzOTtzIGRlcGVuZGVudCBvbiBgU05EX1NFUVVFTkNFUmAsIHNvIEkmIzM5O2xsIG5lZWQgdG8gaW5jbHVkZSBib3RoIG9mIHRoZW0uIExldCYjMzk7cyBzdGFydCB3aXRoIGEgYmFzZSBjb25maWd1cmF0aW9uOiBgU05EYCwgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBgREVCVUdfRlNgLCBgU05EX1ZJUk1JRElgLCBhbmQgYFNORF9TRVFVRU5DRVJgIHRvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uLgoKSGFuZyBvbiwgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIGBTTkRfVVNCX0FVRElPYCBtaWdodCBiZSBhIGdvb2QgYWRkaXRpb24gYXMgd2VsbC4gSSByZWNhbGwgdGhhdCBpdCYjMzk7cyBnb3Qgc29tZSBlcnJvciBwYXRocyB0aGF0IHV0aWxpemUgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIGFyZWEgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcuIFBsdXMsIFVTQiBpcyBhIHByZXR0eSByaWNoIGF0dGFjayBzdXJmYWNlLiBZZWFoLCBsZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBTTkRfVVNCX0FVRElPYCBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIHVwIHRvIHNudWZmIGZvciB0aGlzIGV4ZXJjaXNlLiBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCB0aGUgZWZmb3J0IHRvIGFkZCBpdCB0byB0aGUgbWl4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU05EX1VTQl9BVURJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi9LY29uZmlnPTExPWlmIFNORF9VU0IgXHUwMDI2XHUwMDI2IFVTQlxuc291bmQvdXNiL0tjb25maWctMTItXG5zb3VuZC91c2IvS2NvbmZpZzoxMzpjb25maWcgU05EX1VTQl9BVURJT1xuc291bmQvdXNiL0tjb25maWctMTQtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgQXVkaW8vTUlESSBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy0yNy1cbnNvdW5kL3VzYi9LY29uZmlnOjI4OmNvbmZpZyBTTkRfVVNCX0FVRElPX01JRElfVjJcbnNvdW5kL3VzYi9LY29uZmlnLTI5LVx0Ym9vbCBcJiMzNDtNSURJIDIuMCBzdXBwb3J0IGJ5IFVTQiBBdWRpbyBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy0zNy1cbnNvdW5kL3VzYi9LY29uZmlnOjM4OmNvbmZpZyBTTkRfVVNCX0FVRElPX1VTRV9NRURJQV9DT05UUk9MTEVSXG5zb3VuZC91c2IvS2NvbmZpZy0zOS1cdGJvb2xcbi0tXG5zb3VuZC91c2IvS2NvbmZpZz0xNzg9Y29uZmlnIFNORF9CQ0QyMDAwXG4tLVxuc291bmQvdXNiL0tjb25maWctMTkwLVxuc291bmQvdXNiL0tjb25maWc6MTkxOmNvbmZpZyBTTkRfVVNCX0FVRElPX1FNSVxuc291bmQvdXNiL0tjb25maWctMTkyLVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gQXVkaW8gT2ZmbG9hZCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2MjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEZXBlbmRlbmN5IEFuYWx5c2lzOiBBdWRpbyBPdmVyIFVTQioqCgpPa2F5LCBzbyBgU05EX1VTQl9BVURJT2AuLi4gdGhhdCYjMzk7cyBvdXIgYXVkaW8gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgVVNCIGRldmljZXMsIHJpZ2h0PyBNYWtlcyBzZW5zZS4gTm93LCBiZWZvcmUgSSBldmVuIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mICp0aGF0KiBwYXJ0aWN1bGFyIGRyaXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBkZXBlbmRlbmNpZXMuIFRoZSB0ZXh0IGNsZWFybHkgc3RhdGVzIHRoYXQgYFNORF9VU0JfQVVESU9gIGlzIGJ1aWx0IHVwb24gYm90aCBgU05EX1VTQmAgYW5kIGBVU0JgLiBUaGF0IHRlbGxzIG1lIEkgY2FuJiMzOTt0IGV2ZW4gYmVnaW4gdG8gdHJvdWJsZXNob290IG9yIGNvbmZpZ3VyZSB0aGUgYXVkaW8gc2lkZSB1bnRpbCBJIHZlcmlmeSB0aGUgbG93ZXItbGV2ZWwgVVNCIGFuZCBnZW5lcmljIFVTQiBzb3VuZCBzdXBwb3J0IGFyZSBjb3JyZWN0bHkgZW5hYmxlZCBhbmQgZnVuY3Rpb25pbmcuIFRoZXJlZm9yZSwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgU05EX1VTQmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZ2VuZXJhbCBVU0Igc291bmQgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLiBObyBwb2ludCBpbiBsb29raW5nIGF0IHRoZSBhdWRpbyBkZXRhaWxzIGlmIHRoZSBVU0IgcGx1bWJpbmcgaXMgYnJva2VuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU05EX1VTQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi9LY29uZmlnLTMtXG5zb3VuZC91c2IvS2NvbmZpZzo0Om1lbnVjb25maWcgU05EX1VTQlxuc291bmQvdXNiL0tjb25maWctNS1cdGJvb2wgXCYjMzQ7VVNCIHNvdW5kIGRldmljZXNcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZz0xMT1pZiBTTkRfVVNCIFx1MDAyNlx1MDAyNiBVU0JcbnNvdW5kL3VzYi9LY29uZmlnLTEyLVxuc291bmQvdXNiL0tjb25maWc6MTM6Y29uZmlnIFNORF9VU0JfQVVESU9cbnNvdW5kL3VzYi9LY29uZmlnLTE0LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIEF1ZGlvL01JREkgZHJpdmVyXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWctMjctXG5zb3VuZC91c2IvS2NvbmZpZzoyODpjb25maWcgU05EX1VTQl9BVURJT19NSURJX1YyXG5zb3VuZC91c2IvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7TUlESSAyLjAgc3VwcG9ydCBieSBVU0IgQXVkaW8gZHJpdmVyXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWctMzctXG5zb3VuZC91c2IvS2NvbmZpZzozODpjb25maWcgU05EX1VTQl9BVURJT19VU0VfTUVESUFfQ09OVFJPTExFUlxuc291bmQvdXNiL0tjb25maWctMzktXHRib29sXG5zb3VuZC91c2IvS2NvbmZpZy00MC1cbnNvdW5kL3VzYi9LY29uZmlnOjQxOmNvbmZpZyBTTkRfVVNCX1VBMTAxXG5zb3VuZC91c2IvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0VkaXJvbCBVQS0xMDEvVUEtMTAwMCBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy01MS1cbnNvdW5kL3VzYi9LY29uZmlnOjUyOmNvbmZpZyBTTkRfVVNCX1VTWDJZXG5zb3VuZC91c2IvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O1Rhc2NhbSBVUy0xMjIsIFVTLTIyNCBhbmQgVVMtNDI4IFVTQiBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy02NC1cbnNvdW5kL3VzYi9LY29uZmlnOjY1OmNvbmZpZyBTTkRfVVNCX0NBSUFRXG5zb3VuZC91c2IvS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O05hdGl2ZSBJbnN0cnVtZW50cyBVU0IgYXVkaW8gZGV2aWNlc1wmIzM0O1xuLS1cbnNvdW5kL3VzYi9LY29uZmlnLTkxLVxuc291bmQvdXNiL0tjb25maWc6OTI6Y29uZmlnIFNORF9VU0JfQ0FJQVFfSU5QVVRcbnNvdW5kL3VzYi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtlbmFibGUgaW5wdXQgZGV2aWNlIGZvciBjb250cm9sbGVyc1wmIzM0O1xuLS1cbnNvdW5kL3VzYi9LY29uZmlnLTEwNy1cbnNvdW5kL3VzYi9LY29uZmlnOjEwODpjb25maWcgU05EX1VTQl9VUzEyMkxcbnNvdW5kL3VzYi9LY29uZmlnLTEwOS1cdHRyaXN0YXRlIFwmIzM0O1Rhc2NhbSBVUy0xMjJMIFVTQiBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy0xMTktXG5zb3VuZC91c2IvS2NvbmZpZzoxMjA6Y29uZmlnIFNORF9VU0JfVVMxNDRNS0lJXG5zb3VuZC91c2IvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtUYXNjYW0gVVMtMTQ0TUtJSSBVU0IgZHJpdmVyXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWctMTMxLVxuc291bmQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBTTkRfVVNCXzZGSVJFXG5zb3VuZC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtUZXJyYVRlYyBETVggNkZpcmUgVVNCXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWctMTQ2LVxuc291bmQvdXNiL0tjb25maWc6MTQ3OmNvbmZpZyBTTkRfVVNCX0hJRkFDRVxuc291bmQvdXNiL0tjb25maWctMTQ4LVx0dHJpc3RhdGUgXCYjMzQ7TTJUZWNoIGhpRmFjZSBVU0ItU1BESUYgZHJpdmVyXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWc9MTc4PWNvbmZpZyBTTkRfQkNEMjAwMFxuLS1cbnNvdW5kL3VzYi9LY29uZmlnLTE5MC1cbnNvdW5kL3VzYi9LY29uZmlnOjE5MTpjb25maWcgU05EX1VTQl9BVURJT19RTUlcbnNvdW5kL3VzYi9LY29uZmlnLTE5Mi1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIEF1ZGlvIE9mZmxvYWQgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVVNCIEF1ZGlvIENhcmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYWRkaW5nIGBTTkRfVVNCYCwgYFVTQmAsIGFuZCBgU05EX1VTQl9BVURJT2AgdG8gdGhlIGNvbmZpZ3VyYXRpb24uIE1ha2VzIHNlbnNlLiBCdXQgd2FpdCwgSSBuZWVkIHRvIGJhY2t0cmFjay4gVGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJ1ZywgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBsaWtlbHkgcmVzaWRpbmcgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBgY2FyZC0mZ3Q7bWFuYWdlZGAgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gTXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYFNORF9VU0JfQVVESU9gICpkb2VzbiYjMzk7dCogdXRpbGl6ZSBgc25kX2Rldm1fY2FyZF9uZXdgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCBtZSBxdWlja2x5IHZlcmlmeSBpZiB0aGUgYFNORF9VU0JfQVVESU9gIHBhdGggaW5kZWVkIGRldmlhdGVzIGZyb20gdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YC4gVGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZXMgaGluZ2VzIG9uIHRoaXMgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9kZXZtX2NhcmRfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVUFGIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gdGhlIGBTTkRfVVNCX0FVRElPYCBkcml2ZXIgaXMgYSBkZWFkIGVuZC4gVGhlIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1ZyAqd29uJiMzOTt0KiB0cmlnZ2VyIHRoZXJlIGJlY2F1c2UgYGNhcmQtJmd0O21hbmFnZWRgIHdpbGwgYmUgZmFsc2UuICBJZiBgY2FyZC0mZ3Q7bWFuYWdlZGAgaXMgZmFsc2UsIGBzbmRfY2FyZF9kb19mcmVlYCBqdXN0IGNhbGxzIGBrZnJlZShjYXJkKWAsIHdoaWNoIGF2b2lkcyB0aGUgcmFjZSBjb25kaXRpb24uIFRoZSBVQUYgKm9ubHkqIGhhcHBlbnMgd2hlbiBgY2FyZC0mZ3Q7bWFuYWdlZGAgaXMgdHJ1ZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGBkZXZyZXNgIGZyZWVzIHRoZSBjYXJkLCBhbmQgdGhlbiBgc25kX2NhcmRfZG9fZnJlZWAgYWNjZXNzZXMgYGNhcmQtJmd0O21hbmFnZWRgIGFmdGVyIHRoZSBgY29tcGxldGVgIGNhbGwgd2FrZXMgdXAgdGhlIHRocmVhZC4gIFRoZXJlZm9yZSwgdG8gZXhwbG9pdCB0aGlzLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZm9jdXMgb24gZHJpdmVycyB0aGF0IHV0aWxpemUgYHNuZF9kZXZtX2NhcmRfbmV3YC4KCk15IGF0dGVudGlvbiBub3cgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGRyaXZlcnMgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YC4gQmFzZWQgb24gdGhhdCwgdGhlIGxpa2VseSBjYW5kaWRhdGVzIGFyZSBgU05EX0RVTU1ZYCwgYFNORF9BTE9PUGAsIGBTTkRfUENNVEVTVGAsIGFuZCBgU05EX1ZJUk1JRElgLiBUaG9zZSBhcmUgdGhlIG9uZXMgdG8gcHJpb3JpdGl6ZS4KCkxldCBtZSByZWNhcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6CiogICBgU05EYAoqICAgYFNORF9EVU1NWWAKKiAgIGBTTkRfQUxPT1BgCiogICBgU05EX1BDTVRFU1RgCiogICBgREVCVUdfRlNgCiogICBgU05EX1ZJUk1JRElgCiogICBgU05EX1NFUVVFTkNFUmAKCkFuZCB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kOgoqICAgYHNuZF9jYXJkX2ZyZWVgCiogICBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAKKiAgIGBzbmRfZGV2bV9jYXJkX25ld2AKCk5vdywgYHNuZF9jYXJkX2ZyZWVgIGFuZCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAgYXJlIGNhbGxlZCB3aGVuIHRoZSBjYXJkIGlzIGZyZWVkLCBzbyB0aGV5JiMzOTtyZSBpbXBvcnRhbnQuICBUaGUgYWxsb2NhdGlvbiBmdW5jdGlvbiBpcyBjbGVhcmx5IGBzbmRfZGV2bV9jYXJkX25ld2AuICBgc25kX2NhcmRfZG9fZnJlZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi4KCkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBwcm9iZS9yZW1vdmUgZnVuY3Rpb25zIGZvciB0aGVzZSBkcml2ZXJzOiBgc25kX2R1bW15X3Byb2JlYCwgYGxvb3BiYWNrX3Byb2JlYCwgYHBjbXRzdF9wcm9iZWAsIGFuZCBgc25kX3Zpcm1pZGlfcHJvYmVgLiBIb3dldmVyLCBzeXprYWxsZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZnV6eiB0aGVzZSBpZiB0aGUgY29uZmlncyBhcmUgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBoZWxwZnVsLgoKRmluYWxseSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBzbmRfZGV2bV9jYXJkX25ld2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNuZF9kZXZtX2NhcmRfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmM9MjI3PWludCBzbmRfZGV2bV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCxcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0yNTAtfVxuc291bmQvY29yZS9pbml0LmM6MjUxOkVYUE9SVF9TWU1CT0xfR1BMKHNuZF9kZXZtX2NhcmRfbmV3KTtcbnNvdW5kL2NvcmUvaW5pdC5jLTI1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxNjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIEV4cG9ydCBTdGF0dXMgYW5kIEZ1bmN0aW9uIEF2YWlsYWJpbGl0eSoqCgpSaWdodCwgc28gSSYjMzk7dmUgY29uZmlybWVkIGl0JiMzOTtzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGEga2V5IGZpcnN0IHN0ZXA7IG90aGVyd2lzZSwgd2UmIzM5O3JlIG5vdCBldmVuIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IGZ1bmN0aW9uLiBOb3csIGEgZm9sbG93LXVwIHF1ZXN0aW9uIHBvcHMgdXA6IFdoYXQmIzM5O3MgdGhlIHN0YXR1cyBvZiBgc25kX2NhcmRfZnJlZWA/IFdlJiMzOTtyZSBvbiB0aGlzIHNwZWNpZmljIGF1ZGlvIGNhcmQgZnVuY3Rpb24sIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQgaXRzIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFzIHdlbGwuIERvZXMgYHNuZF9jYXJkX2ZyZWVgIGV4aXN0PyBBbmQgbW9yZSBpbXBvcnRhbnRseSBpcyBpdCBhbHNvIGV4cG9ydGVkPyBJcyBpdCBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3Igb3VyIGN1cnJlbnQgcHJvYmxlbSBvciBpbnZlc3RpZ2F0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGF2YWlsYWJpbGl0eSBhbmQgcmVsZXZhbmNlIHRvIHdoYXQgSSYjMzk7bSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc25kX2NhcmRfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL2NvcmUvaW5pdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NvdW5kL2NvcmUvaW5pdC5jPTI2ND1pbnQgc25kX2NhcmRfZnJlZV9vbl9lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQpXG4tLVxuc291bmQvY29yZS9pbml0LmMtMjc0LX1cbnNvdW5kL2NvcmUvaW5pdC5jOjI3NTpFWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9mcmVlX29uX2Vycm9yKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTI3Ni1cbi0tXG5zb3VuZC9jb3JlL2luaXQuYz02MjI9dm9pZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy02MzAtfVxuc291bmQvY29yZS9pbml0LmM6NjMxOkVYUE9SVF9TWU1CT0woc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCk7XG5zb3VuZC9jb3JlL2luaXQuYy02MzItXG4tLVxuc291bmQvY29yZS9pbml0LmM9NjQ2PXZvaWQgc25kX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG4tLVxuc291bmQvY29yZS9pbml0LmMtNjY0LX1cbnNvdW5kL2NvcmUvaW5pdC5jOjY2NTpFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWUpO1xuc291bmQvY29yZS9pbml0LmMtNjY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODY0OAoJCQkJCQkJb3V0cHV0OiAzNTgKCQkJCQkJCXRob3VnaHRzOiAzODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBBTFNBIFVzZS1BZnRlci1GcmVlIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgeWVzLCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBleHBvc2VkIGFuZCBleHBvcnRhYmxlLiBJIG5lZWQgdG8gZG9jdW1lbnQgbXkgcmVhc29uaW5nIGNvbmNpc2VseS4KClRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBpbiBgc25kX2NhcmRfZG9fZnJlZWAuIFRoZSBpc3N1ZSBhcmlzZXMgd2hlbiBhbiBBTFNBIGNhcmQgaXMgYWxsb2NhdGVkIHVzaW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIHdoaWNoIHV0aWxpemVzIGBkZXZyZXNgIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LiBEdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgZXJyb3Igc2NlbmFyaW9zLCBgZGV2cmVzYCB0cmlnZ2VycyBgX19zbmRfY2FyZF9yZWxlYXNlYCwgZXZlbnR1YWxseSBsZWFkaW5nIHRvIGBzbmRfY2FyZF9mcmVlYC4gVGhpcyBmdW5jdGlvbiB3YWl0cyBvbiBhIGByZWxlYXNlX2NvbXBsZXRpb25gIGZvciBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgdG8gYmUgcmVsZWFzZWQuIE9uY2UgdGhlIGZpbmFsIHJlZmVyZW5jZSBkcm9wcywgYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGludm9rZWQsIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gSGVyZSYjMzk7cyB0aGUgY2F0Y2g6IHRoZSBvcmlnaW5hbCBjb2RlIGFjY2Vzc2VkIGBjYXJkLSZndDttYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgb3BlbmluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBkZXZyZXNgIGNvdWxkIGZyZWUgdGhlIGNhcmQmIzM5O3MgbWVtb3J5IGNvbmN1cnJlbnRseSwgcmVzdWx0aW5nIGluIGEgdXNlLWFmdGVyLWZyZWUuCgpUaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDsgY2FjaGUgYGNhcmQtJmd0O21hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gU2ltcGxlLCBidXQgZWZmZWN0aXZlLgoKVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoaXMgYnVnIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGFueSBBTFNBIGRyaXZlciB0aGF0IHVzZXMgYHNuZF9kZXZtX2NhcmRfbmV3YCwgd2hpY2ggaW5jbHVkZXMgdmlydHVhbCBkcml2ZXJzIGxpa2UgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgLCB3aGljaCBJIGtub3cgYXJlIGhlYXZpbHkgdGFyZ2V0ZWQgYnkgc3l6a2FsbGVyLiBUaGF0IG1ha2VzIHRoaXMgYSBoaWdoLXByaW9yaXR5IGl0ZW0gZm9yIGZ1enppbmcgZWZmb3J0cy4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSByZWxldmFudCBFbmFibGVDb25maWdzOiBgU05EYCwgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBgREVCVUdfRlNgLCBgU05EX1ZJUk1JRElgLCBhbmQgYFNORF9TRVFVRU5DRVJgLgoKQW5kLCBmb3IgdGhlIEZvY3VzU3ltYm9sczogYHNuZF9jYXJkX2ZyZWVgLCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgLiBBbGwgdGhlIHJpZ2h0IHBpZWNlcyBhcmUgdGhlcmUuCgpTZWVtcyBsaWtlIGEgY29tcHJlaGVuc2l2ZSBhbmFseXNpcyBhbmQgYSBjbGVhciBwYXRoIGZvciBtaXRpZ2F0aW9uIGFuZCB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U05EJiMzNDssCiAgICAmIzM0O1NORF9EVU1NWSYjMzQ7LAogICAgJiMzNDtTTkRfQUxPT1AmIzM0OywKICAgICYjMzQ7U05EX1BDTVRFU1QmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7U05EX1ZJUk1JREkmIzM0OywKICAgICYjMzQ7U05EX1NFUVVFTkNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NuZF9jYXJkX2ZyZWUmIzM0OywKICAgICYjMzQ7c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCYjMzQ7LAogICAgJiMzNDtzbmRfZGV2bV9jYXJkX25ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmsgKGBzbmRfY2FyZF9kb19mcmVlYCkuIFdoZW4gYW4gQUxTQSBjYXJkIGlzIGFsbG9jYXRlZCB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpdHMgbWVtb3J5IGlzIG1hbmFnZWQgYnkgYGRldnJlc2AuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBwYXRocywgYGRldnJlc2AgdHJpZ2dlcnMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCB3YWl0cyBvbiBhIGNvbXBsZXRpb24gKGByZWxlYXNlX2NvbXBsZXRpb25gKSB1bnRpbCBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIE9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBleGVjdXRlZCwgd2hpY2ggc2lnbmFscyB0aGUgY29tcGxldGlvbi4gVGhpcyB3YWtlcyB1cCB0aGUgd2FpdGluZyB0aHJlYWQsIGFsbG93aW5nIGBkZXZyZXNgIHRvIHByb2NlZWQgYW5kIGZyZWUgdGhlIGNhcmQmIzM5O3MgbWVtb3J5LiBIb3dldmVyLCBgc25kX2NhcmRfZG9fZnJlZWAgcHJldmlvdXNseSBhY2Nlc3NlZCBgY2FyZC1cdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGlmIGBkZXZyZXNgIGZyZWVkIHRoZSBjYXJkIGNvbmN1cnJlbnRseS4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgY2FjaGluZyBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpbiBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgYW55IEFMU0EgZHJpdmVyIHV0aWxpemluZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpbmNsdWRpbmcgc29mdHdhcmUtZW11bGF0ZWQgZHJpdmVycyBsaWtlIGBzbmQtZHVtbXlgIGFuZCBgc25kLWFsb29wYCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U05EJiMzNDssCiAgICAmIzM0O1NORF9EVU1NWSYjMzQ7LAogICAgJiMzNDtTTkRfQUxPT1AmIzM0OywKICAgICYjMzQ7U05EX1BDTVRFU1QmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7U05EX1ZJUk1JREkmIzM0OywKICAgICYjMzQ7U05EX1NFUVVFTkNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NuZF9jYXJkX2ZyZWUmIzM0OywKICAgICYjMzQ7c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCYjMzQ7LAogICAgJiMzNDtzbmRfZGV2bV9jYXJkX25ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmsgKGBzbmRfY2FyZF9kb19mcmVlYCkuIFdoZW4gYW4gQUxTQSBjYXJkIGlzIGFsbG9jYXRlZCB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpdHMgbWVtb3J5IGlzIG1hbmFnZWQgYnkgYGRldnJlc2AuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBwYXRocywgYGRldnJlc2AgdHJpZ2dlcnMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCB3YWl0cyBvbiBhIGNvbXBsZXRpb24gKGByZWxlYXNlX2NvbXBsZXRpb25gKSB1bnRpbCBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIE9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBleGVjdXRlZCwgd2hpY2ggc2lnbmFscyB0aGUgY29tcGxldGlvbi4gVGhpcyB3YWtlcyB1cCB0aGUgd2FpdGluZyB0aHJlYWQsIGFsbG93aW5nIGBkZXZyZXNgIHRvIHByb2NlZWQgYW5kIGZyZWUgdGhlIGNhcmQmIzM5O3MgbWVtb3J5LiBIb3dldmVyLCBgc25kX2NhcmRfZG9fZnJlZWAgcHJldmlvdXNseSBhY2Nlc3NlZCBgY2FyZC1cdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGlmIGBkZXZyZXNgIGZyZWVkIHRoZSBjYXJkIGNvbmN1cnJlbnRseS4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgY2FjaGluZyBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpbiBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgYW55IEFMU0EgZHJpdmVyIHV0aWxpemluZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpbmNsdWRpbmcgc29mdHdhcmUtZW11bGF0ZWQgZHJpdmVycyBsaWtlIGBzbmQtZHVtbXlgIGFuZCBgc25kLWFsb29wYCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBCeSBzYXZpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGNoZWNrZWQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg0YzYxMmEwNDQ4MjA1OGZhYTFiMGIwOTQ4MGZjZjk4NzFkYjQwZTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDozMTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggNTZkZGU1YmQ3M2M0ZS4uNTc3MzM4NTI2MjRhNyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvc291bmQvY29yZS9pbml0LmMKQEAgLTU4NCw2ICYjNDM7NTg0LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoc25kX2NhcmRfZGlzY29ubmVjdF9zeW5jKTsKIAogc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIHsKJiM0MzsJYm9vbCBtYW5hZ2VkID0gY2FyZC0mZ3Q7bWFuYWdlZDsKJiM0MzsKIAljYXJkLSZndDtyZWxlYXNpbmcgPSB0cnVlOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9NSVhFUl9PU1MpCiAJaWYgKHNuZF9taXhlcl9vc3Nfbm90aWZ5X2NhbGxiYWNrKQpAQCAtNjAxLDcgJiM0Mzs2MDMsNyBAQCBzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQogCX0KIAlpZiAoY2FyZC0mZ3Q7cmVsZWFzZV9jb21wbGV0aW9uKQogCQljb21wbGV0ZShjYXJkLSZndDtyZWxlYXNlX2NvbXBsZXRpb24pOwotCWlmICghY2FyZC0mZ3Q7bWFuYWdlZCkKJiM0MzsJaWYgKCFtYW5hZ2VkKQogCQlrZnJlZShjYXJkKTsKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTMKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogNTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNvdW5kIENhcmQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGBzb3VuZC9jb3JlL2luaXQuY2AgdGhhdCYjMzk7cyB0d2Vha2luZyBgc25kX2NhcmRfZG9fZnJlZWAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2FsIHZhcmlhYmxlLCBgbWFuYWdlZGAsIGFuZCBjb3BpZXMgYGNhcmQtJmd0O21hbmFnZWRgIGludG8gaXQgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFRoZW4sIGxhdGVyLCB0aGUgY29kZSB1c2VzIGBtYW5hZ2VkYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGBjYXJkLSZndDttYW5hZ2VkYCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gYGtmcmVlKGNhcmQpYC4KCkxvb2tpbmcgY2xvc2VyLCB0aGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBmaXgsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYnV0IGl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB3aGF0IHdlIGFyZSBmaXhpbmcuIFRoZSBsb2dpYyBoZXJlIGlzIHRoYXQgaWYgYGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbmAgaXMgY29tcGxldGVkLCBhbm90aGVyIHRocmVhZCAqbWlnaHQqIGF0dGVtcHQgdG8gZnJlZSB0aGUgYGNhcmRgLCBvciB0aGUgbWVtb3J5IGJhY2tpbmcgaXQgaWYgaXQgaXMgbWFuYWdlZCwgZXZlbiB0aG91Z2ggdGhlIGNhcmQgaXMgc3RpbGwgaW4gdXNlLiBJZiBgY2FyZC0mZ3Q7bWFuYWdlZGAgaXMgdHJ1ZSwgdGhlIGNhcmQgaXMgZnJlZWQgYnkgZGV2cmVzLiBUaGF0IG1lYW5zIGEgdGhyZWFkIGNvdWxkIHByb2NlZWQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gc2lnbmFsIGFuZCB0aGVuIHBvdGVudGlhbGx5IHRyaWdnZXIgdGhlIGRldnJlcyBmcmVlLiBUaGlzIHBhdGNoIGVzc2VudGlhbGx5IHNlcmlhbGl6ZXMgdGhlIGFjY2VzcyB0byBgY2FyZC0mZ3Q7bWFuYWdlZGAgYnkgY29weWluZyBpdCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHRoZSB2dWxuZXJhYmxlIHNlY3Rpb24gaXMgZW50ZXJlZC4gSWYgdGhlIGNhcmQgaXMgbWFuYWdlZCwgdGhlIGRldnJlcyBjbGVhbnVwIGlzIHRyaWdnZXJlZC4gU28sIGJ5IHRoZSB0aW1lIHRoZSBjb2RlIGdldHMgdG8gYGlmICghY2FyZC0mZ3Q7bWFuYWdlZClgLCB0aGUgbWVtb3J5IGJhY2tpbmcgYGNhcmRgIG1pZ2h0IGFscmVhZHkgYmUgZ29uZS4gIEJ5IHVzaW5nIHRoZSBsb2NhbCBgbWFuYWdlZGAgdmFyaWFibGUsIHdlJiMzOTtyZSBlbnN1cmluZyB0aGF0IHdlJiMzOTtyZSBtYWtpbmcgdGhlIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdG8gZnJlZSB0aGUgY2FyZCBiYXNlZCBvbiBhIHZhbHVlIHRoYXQmIzM5O3Mgbm8gbG9uZ2VyIHZ1bG5lcmFibGUgdG8gY2hhbmdlcyBieSBhbm90aGVyIHRocmVhZC4KClRoZSBwYXRjaCBzZWVtcyBzb3VuZCBpbiByZXNvbHZpbmcgdGhpcyBpc3N1ZSwgYnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGFzayBteXNlbGYgaWYgdGhpcyBmaXggaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgdGhlIHBhdGNoIG9ubHkgc2F2ZXMgYSBib29sZWFuLCB3aGljaCBpcyBpbml0aWFsaXplZCwgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBhdm9pZCBhIFVBRiwgSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIGhlcmUuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgdGhhdCYjMzk7cyBub3Qgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBhZGRyZXNzZWQgYnkgS0FTQU4uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgaXQgc2ltcGx5IHNhdmVzIHRoZSB2YWx1ZSBvZiBhIGJvb2xlYW4gZmllbGQgdG8gYXZvaWQgYSBVQUYgY29uZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBCeSBzYXZpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGNoZWNrZWQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBCeSBzYXZpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGNoZWNrZWQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjMxLjU4OTU4MjYwOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTcxNjEzMTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTkRcIixcbiAgICBcIlNORF9EVU1NWVwiLFxuICAgIFwiU05EX0FMT09QXCIsXG4gICAgXCJTTkRfUENNVEVTVFwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIlNORF9WSVJNSURJXCIsXG4gICAgXCJTTkRfU0VRVUVOQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic25kX2NhcmRfZnJlZVwiLFxuICAgIFwic25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZFwiLFxuICAgIFwic25kX2Rldm1fY2FyZF9uZXdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eSBpbiBgc25kX2NhcmRfZG9fZnJlZWAuIEJ5IHNhdmluZyBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKWAsIGl0IHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgY291bGQgYmUgZnJlZWQgYnkgYW5vdGhlciB0aHJlYWQgKGUuZy4sIHZpYSBkZXZyZXMpIGJlZm9yZSBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgaXMgY2hlY2tlZC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmsgKGBzbmRfY2FyZF9kb19mcmVlYCkuIFdoZW4gYW4gQUxTQSBjYXJkIGlzIGFsbG9jYXRlZCB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpdHMgbWVtb3J5IGlzIG1hbmFnZWQgYnkgYGRldnJlc2AuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBwYXRocywgYGRldnJlc2AgdHJpZ2dlcnMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCB3YWl0cyBvbiBhIGNvbXBsZXRpb24gKGByZWxlYXNlX2NvbXBsZXRpb25gKSB1bnRpbCBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIE9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBleGVjdXRlZCwgd2hpY2ggc2lnbmFscyB0aGUgY29tcGxldGlvbi4gVGhpcyB3YWtlcyB1cCB0aGUgd2FpdGluZyB0aHJlYWQsIGFsbG93aW5nIGBkZXZyZXNgIHRvIHByb2NlZWQgYW5kIGZyZWUgdGhlIGNhcmQncyBtZW1vcnkuIEhvd2V2ZXIsIGBzbmRfY2FyZF9kb19mcmVlYCBwcmV2aW91c2x5IGFjY2Vzc2VkIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGlmIGBkZXZyZXNgIGZyZWVkIHRoZSBjYXJkIGNvbmN1cnJlbnRseS4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgY2FjaGluZyBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgaW4gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGFueSBBTFNBIGRyaXZlciB1dGlsaXppbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaW5jbHVkaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRyaXZlcnMgbGlrZSBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjMxLjU4OTU5MTA0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MDY3OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRjNjEyYTA0NDgyMDU4ZmFhMWIwYjA5NDgwZmNmOTg3MWRiNDBlMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDozMTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jXFxuaW5kZXggNTZkZGU1YmQ3M2M0ZS4uNTc3MzM4NTI2MjRhNyAxMDA2NDRcXG4tLS0gYS9zb3VuZC9jb3JlL2luaXQuY1xcbisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jXFxuQEAgLTU4NCw2ICs1ODQsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9kaXNjb25uZWN0X3N5bmMpO1xcbiBcXG4gc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG4ge1xcbitcXHRib29sIG1hbmFnZWQgPSBjYXJkLVxcdTAwM2VtYW5hZ2VkO1xcbitcXG4gXFx0Y2FyZC1cXHUwMDNlcmVsZWFzaW5nID0gdHJ1ZTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9NSVhFUl9PU1MpXFxuIFxcdGlmIChzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaylcXG5AQCAtNjAxLDcgKzYwMyw3IEBAIHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuIFxcdH1cXG4gXFx0aWYgKGNhcmQtXFx1MDAzZXJlbGVhc2VfY29tcGxldGlvbilcXG4gXFx0XFx0Y29tcGxldGUoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcXG4tXFx0aWYgKCFjYXJkLVxcdTAwM2VtYW5hZ2VkKVxcbitcXHRpZiAoIW1hbmFnZWQpXFxuIFxcdFxcdGtmcmVlKGNhcmQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTozMi4wODc0NTUyMTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTA0Mjk3NjU4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU05EXCIsXG4gICAgXCJTTkRfRFVNTVlcIixcbiAgICBcIlNORF9BTE9PUFwiLFxuICAgIFwiU05EX1BDTVRFU1RcIixcbiAgICBcIkRFQlVHX0ZTXCIsXG4gICAgXCJTTkRfVklSTUlESVwiLFxuICAgIFwiU05EX1NFUVVFTkNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNuZF9jYXJkX2ZyZWVcIixcbiAgICBcInNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWRcIixcbiAgICBcInNuZF9kZXZtX2NhcmRfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IGluIHRoZSBBTFNBIGNvcmUgZnJhbWV3b3JrIChgc25kX2NhcmRfZG9fZnJlZWApLiBXaGVuIGFuIEFMU0EgY2FyZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaXRzIG1lbW9yeSBpcyBtYW5hZ2VkIGJ5IGBkZXZyZXNgLiBEdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgZXJyb3IgcGF0aHMsIGBkZXZyZXNgIHRyaWdnZXJzIGBzbmRfY2FyZF9mcmVlYCwgd2hpY2ggd2FpdHMgb24gYSBjb21wbGV0aW9uIChgcmVsZWFzZV9jb21wbGV0aW9uYCkgdW50aWwgYWxsIGRldmljZSByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBPbmNlIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBgc25kX2NhcmRfZG9fZnJlZWAgaXMgZXhlY3V0ZWQsIHdoaWNoIHNpZ25hbHMgdGhlIGNvbXBsZXRpb24uIFRoaXMgd2FrZXMgdXAgdGhlIHdhaXRpbmcgdGhyZWFkLCBhbGxvd2luZyBgZGV2cmVzYCB0byBwcm9jZWVkIGFuZCBmcmVlIHRoZSBjYXJkJ3MgbWVtb3J5LiBIb3dldmVyLCBgc25kX2NhcmRfZG9fZnJlZWAgcHJldmlvdXNseSBhY2Nlc3NlZCBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgKmFmdGVyKiBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24sIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiBgZGV2cmVzYCBmcmVlZCB0aGUgY2FyZCBjb25jdXJyZW50bHkuIFRoZSBwYXRjaCByZXNvbHZlcyB0aGlzIGJ5IGNhY2hpbmcgYGNhcmQtXFx1MDAzZW1hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBhbnkgQUxTQSBkcml2ZXIgdXRpbGl6aW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIGluY2x1ZGluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkcml2ZXJzIGxpa2UgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NGM2MTJhMDQ0ODIwNThmYWExYjBiMDk0ODBmY2Y5ODcxZGI0MGUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6MzE6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jXG5pbmRleCA1NmRkZTViZDczYzRlLi41NzczMzg1MjYyNGE3IDEwMDY0NFxuLS0tIGEvc291bmQvY29yZS9pbml0LmNcbisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jXG5AQCAtNTg0LDYgKzU4NCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XG4gXG4gc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiB7XG4rXHRib29sIG1hbmFnZWQgPSBjYXJkLVx1MDAzZW1hbmFnZWQ7XG4rXG4gXHRjYXJkLVx1MDAzZXJlbGVhc2luZyA9IHRydWU7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9NSVhFUl9PU1MpXG4gXHRpZiAoc25kX21peGVyX29zc19ub3RpZnlfY2FsbGJhY2spXG5AQCAtNjAxLDcgKzYwMyw3IEBAIHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG4gXHR9XG4gXHRpZiAoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pXG4gXHRcdGNvbXBsZXRlKGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcbi1cdGlmICghY2FyZC1cdTAwM2VtYW5hZ2VkKVxuK1x0aWYgKCFtYW5hZ2VkKVxuIFx0XHRrZnJlZShjYXJkKTtcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjMyLjA4NzQ1Nzc2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjc4NzM5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU291bmQgQ2FyZCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc291bmQvY29yZS9pbml0LmNgLiBJdCdzIHRvdWNoaW5nIGBzbmRfY2FyZF9kb19mcmVlYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBjYWNoaW5nIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGludG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgZ2V0dGluZyBpbnRvIHRoZSBjbGVhbnVwIGFuZCB0aGVuIHVzaW5nIGAhbWFuYWdlZGAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYCFjYXJkLVx1MDAzZW1hbmFnZWRgIGluIHRoZSBga2ZyZWUoY2FyZClgIGNoZWNrLiBJbW1lZGlhdGVseSwgbXkgaW50ZXJuYWwgYWxhcm1zIGFyZSBnb2luZyBvZmYuIFRoaXMgc21lbGxzIGxpa2UgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIGEgcmVsYXRlZCBjb25jdXJyZW5jeSBpc3N1ZS4gVGhleSdyZSB0cnlpbmcgdG8gcHJvdGVjdCBzb21ldGhpbmcsIGNsZWFybHkuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBjYXJkYCBpdHNlbGYgaXMgcG90ZW50aWFsbHkgYmVpbmcgZnJlZWQgZHVyaW5nIHRoZSBjbGVhbnVwIHBoYXNlLiBPciwgbWF5YmUsIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGJlaW5nIG1vZGlmaWVkIOKAkyBhY2Nlc3NlZCBhZnRlciBgY2FyZGAgaGFzIGJlZW4gZnJlZWQuIEJ1dCB3YWl0Li4uIGlmIGBjYXJkYCAqaXMqIGZyZWVkLCB0aGVuIGBrZnJlZShjYXJkKWAgd291bGQgYmUgYSAqZG91YmxlIGZyZWUqIHNpdHVhdGlvbiwgYW5kIHRoYXQncyBnZW5lcmFsbHkgY2F0YXN0cm9waGljLiBTbyB0aGF0IHBvaW50cyB0byB0aGUgZmllbGQgYGNhcmQtXHUwMDNlbWFuYWdlZGAgYmVpbmcgdGhlIHByb2JsZW0sIG9yIGF0IGxlYXN0IGhvdyBpdCByZWxhdGVzIHRvIGBjYXJkYC4gSXMgYGNhcmRgIGJlaW5nIGludmFsaWRhdGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBkZXZpY2VfZGVsKFx1MDAyNmNhcmQtXHUwMDNlY2FyZF9kZXYpYD9cblxuUmlnaHQsIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgZGlnIGludG8gdGhhdCBgc25kX2NhcmRfZG9fZnJlZWAgZnVuY3Rpb24gaW4gZGV0YWlsIGFuZCBzZWUgd2hhdOKAmXMgZ29pbmcgb24gaW4gdGhvc2UgY2xlYW51cCBzdGVwcy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBvYmplY3QgbGlmZXRpbWUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgdnVsbmVyYWJpbGl0eSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTozNy4zMTUzMzUyMjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMjY0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25kX2NhcmRfZG9fZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9jb3JlL2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC9jb3JlL2luaXQuYz0xNDU9c3RhdGljIGludCBzbmRfY2FyZF9pbml0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMTQ3LVxcdFxcdFxcdCBzaXplX3QgZXh0cmFfc2l6ZSk7XFxuc291bmQvY29yZS9pbml0LmM6MTQ4OnN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTE0OS1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjYXJkX2Rldl9hdHRyX2dyb3VwO1xcbi0tXFxuc291bmQvY29yZS9pbml0LmM9MTUxPXN0YXRpYyB2b2lkIHJlbGVhc2VfY2FyZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbnNvdW5kL2NvcmUvaW5pdC5jLTE1Mi17XFxuc291bmQvY29yZS9pbml0LmM6MTUzOlxcdHNuZF9jYXJkX2RvX2ZyZWUoZGV2X3RvX3NuZF9jYXJkKGRldikpO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTE1NC19XFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz01ODM9RVhQT1JUX1NZTUJPTF9HUEwoc25kX2NhcmRfZGlzY29ubmVjdF9zeW5jKTtcXG5zb3VuZC9jb3JlL2luaXQuYy01ODQtXFxuc291bmQvY29yZS9pbml0LmM6NTg1OnN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuc291bmQvY29yZS9pbml0LmMtNTg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6MzcuMzY1NTY5NTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MTY1NTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBzbmRfY2FyZF9kb19mcmVlYCwgZmlsdGVyZWQgdGhyb3VnaCBteSBleHBlcmllbmNlOlxuXG4qKkRlY29uc3RydWN0aW5nIGBzbmRfY2FyZF9kb19mcmVlYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgc25kX2NhcmRfZG9fZnJlZWAuIEp1c3QgdGhlIG5hbWUgYWxvbmUgdGVsbHMgbWUgaXQncyBwcm9iYWJseSBjb25jZXJuZWQgd2l0aCBmcmVlaW5nIHJlc291cmNlcyByZWxhdGVkIHRvIGEgc291bmQgY2FyZCwgbGlrZWx5IHdpdGhpbiBhIGRyaXZlciBjb250ZXh0LiBJIGJldCBpdCdzIGNhbGxlZCBkdXJpbmcgY2FyZCByZW1vdmFsLCBkcml2ZXIgdW5sb2FkLCBvciBtYXliZSBldmVuIGluIGVycm9yIGhhbmRsaW5nIHNjZW5hcmlvcyB3aXRoaW4gdGhlIHNvdW5kIHN5c3RlbS4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgYXVkaW8gZHJpdmVyIGFyY2hpdGVjdHVyZXMsIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBtZXRpY3Vsb3VzbHkgY2xlYW4gdXAgYWxsb2NhdGVkIGJ1ZmZlcnMsIHJlbGVhc2UgaGFyZHdhcmUgcmVzb3VyY2VzLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24gbG9ja3MgdG8gcHJldmVudCBhbnkgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGlzIGRlYWxsb2NhdGlvbi4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGNhbGxzIGxpa2UgYGtmcmVlYCwgYHNuZF9jYXJkX2ZyZWVgLCBvciBzaW1pbGFyIGZ1bmN0aW9ucywgYXMgdGhvc2UgYXJlIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIHJlc291cmNlIGNsZWFudXAuIEknbSBhbHNvIGdvaW5nIHRvIGJlIHNlYXJjaGluZyBmb3IgYW55IGNhbGxzIHRvIHJlbGF0ZWQgaGFyZHdhcmUgZnVuY3Rpb25zLiBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIHVzZWQgd2l0aGluIHRoaXMgY29kZWJhc2UsIEkgd2lsbCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgbmFtaW5nIGNvbGxpc2lvbnMuIEFueSBtaXNzaW5nIG1lbW9yeSByZWxlYXNlcyBvciBpbmNvcnJlY3QgbG9ja2luZyB3aWxsIHN0YW5kIG91dCBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBmdW5jdGlvbiBoYXMgY29ycmVjdCBjaGVja3MgZm9yIHJlc291cmNlcyB0byBmcmVlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCByZXNvdXJjZXMgaXQgaXMgcmVzcG9uc2libGUgZm9yLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgYWxsIG9mIHRoZSBmdW5jdGlvbiBjYWxscywgc28gdGhhdCBJIHVuZGVyc3RhbmQgd2hlcmUgaXQgbWF5IGhhdmUgYmVlbiBjYWxsZWQsIGFuZCB2ZXJpZnkgaXRzIGV4cGVjdGVkIGJlaGF2aW91ci4gSSBob3BlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnJlZXMgcmVzb3VyY2VzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgd2hlbiB0aGUgc291bmQgY2FyZCB3YXMgbG9hZGVkLiBJJ20gbWVudGFsbHkgZ29pbmcgb3ZlciB0aGUgdXN1YWwgc3VzcGVjdHM6IERNQSBidWZmZXJzLCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBzcGVjaWZpYyB0byB0aGUgYXVkaW8gY2FyZC4gSSB3YW50IHRvIHNlZSBpZiBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgcGFydGlhbCBpbml0aWFsaXphdGlvbiwgb3IgaWYgdGhlcmUncyBhIHJpc2sgb2YgY3Jhc2hlcyBpZiwgc2F5LCB0aGUgY2FyZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wbGV0ZWx5LiBJIGhvcGUgaXQgaGFzIHNvbWUgc2FuaXR5IGNoZWNrcyBpbiBwbGFjZSB0byBhdm9pZCBkb3VibGUtZnJlZWluZyBvciBmcmVlaW5nIHVuYWxsb2NhdGVkIG1lbW9yeS4gSSBhbSBzdXJlIGl0J3MgYW4gaW1wb3J0YW50IHBpZWNlIG9mIGNvZGUsIGFuZCBJJ20gcmVhZHkgdG8gY2FyZWZ1bGx5IGFuYWx5c2UgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTo0MS40MTcyMjk5NjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic291bmQvY29yZS9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg1OlxcdHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuIDU4NjpcXHR7XFxuIDU4NzpcXHRcXHRib29sIG1hbmFnZWQgPSBjYXJkLVxcdTAwM2VtYW5hZ2VkO1xcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHRjYXJkLVxcdTAwM2VyZWxlYXNpbmcgPSB0cnVlO1xcbiA1OTA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9NSVhFUl9PU1MpXFxuIDU5MTpcXHRcXHRpZiAoc25kX21peGVyX29zc19ub3RpZnlfY2FsbGJhY2spXFxuIDU5MjpcXHRcXHRcXHRzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjayhjYXJkLCBTTkRfTUlYRVJfT1NTX05PVElGWV9GUkVFKTtcXG4gNTkzOlxcdCNlbmRpZlxcbiA1OTQ6XFx0XFx0c25kX2RldmljZV9mcmVlX2FsbChjYXJkKTtcXG4gNTk1OlxcdFxcdGlmIChjYXJkLVxcdTAwM2Vwcml2YXRlX2ZyZWUpXFxuIDU5NjpcXHRcXHRcXHRjYXJkLVxcdTAwM2Vwcml2YXRlX2ZyZWUoY2FyZCk7XFxuIDU5NzpcXHQjaWZkZWYgQ09ORklHX1NORF9DVExfREVCVUdcXG4gNTk4OlxcdFxcdGtmcmVlKGNhcmQtXFx1MDAzZXZhbHVlX2J1Zik7XFxuIDU5OTpcXHQjZW5kaWZcXG4gNjAwOlxcdFxcdGlmIChzbmRfaW5mb19jYXJkX2ZyZWUoY2FyZCkgXFx1MDAzYyAwKSB7XFxuIDYwMTpcXHRcXHRcXHRkZXZfd2FybihjYXJkLVxcdTAwM2VkZXYsIFxcXCJ1bmFibGUgdG8gZnJlZSBjYXJkIGluZm9cXFxcblxcXCIpO1xcbiA2MDI6XFx0XFx0XFx0LyogTm90IGZhdGFsIGVycm9yICovXFxuIDYwMzpcXHRcXHR9XFxuIDYwNDpcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKVxcbiA2MDU6XFx0XFx0XFx0Y29tcGxldGUoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcXG4gNjA2OlxcdFxcdGlmICghbWFuYWdlZClcXG4gNjA3OlxcdFxcdFxcdGtmcmVlKGNhcmQpO1xcbiA2MDg6XFx0XFx0cmV0dXJuIDA7XFxuIDYwOTpcXHR9XFxuIDYxMDpcXHRcXG4gNjExOlxcdC8qKlxcbiA2MTI6XFx0ICogc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCAtIERpc2Nvbm5lY3QgdGhlIGNhcmQsIGZyZWUgaXQgbGF0ZXIgZXZlbnR1YWxseVxcbiA2MTM6XFx0ICogQGNhcmQ6IHNvdW5kY2FyZCBzdHJ1Y3R1cmVcXG4gNjE0OlxcdCAqXFxuIDYxNTpcXHQgKiBVbmxpa2Ugc25kX2NhcmRfZnJlZSgpLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdHJ5IHRvIHJlbGVhc2UgdGhlIGNhcmRcXG4gNjE2OlxcdCAqIHJlc291cmNlIGltbWVkaWF0ZWx5LCBidXQgdHJpZXMgdG8gZGlzY29ubmVjdCBhdCBmaXJzdC4gIFdoZW4gdGhlIGNhcmRcXG4gNjE3OlxcdCAqIGlzIHN0aWxsIGluIHVzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYmVmb3JlIGZyZWVpbmcgdGhlIHJlc291cmNlcy5cXG4gNjE4OlxcdCAqIFRoZSBjYXJkIHJlc291cmNlcyB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlIHJlZmNvdW50IGdldHMgdG8gemVyby5cXG4gNjE5OlxcdCAqXFxuIDYyMDpcXHQgKiBSZXR1cm46IHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuIDYyMTpcXHQgKi9cXG4gNjIyOlxcdHZvaWQgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuIDYyMzpcXHR7XFxuIDYyNDpcXHRcXHRpZiAoIWNhcmQpXFxuIDYyNTpcXHRcXHRcXHRyZXR1cm47XFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdHNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7XFxuIDYyODpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZjYXJkLVxcdTAwM2VjYXJkX2Rldik7XFxuIDYyOTpcXHRcXHRyZXR1cm47XFxuIDYzMDpcXHR9XFxuIDYzMTpcXHRFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQpO1xcbiA2MzI6XFx0XFxuIDYzMzpcXHQvKipcXG4gNjM0OlxcdCAqIHNuZF9jYXJkX2ZyZWUgLSBmcmVlcyBnaXZlbiBzb3VuZGNhcmQgc3RydWN0dXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjQxLjQxNzM5MDg0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MTcwMjcxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBTFNBIENvcmUgUGF0Y2g6IHNuZF9jYXJkX2RvX2ZyZWUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBzbmRfY2FyZF9kb19mcmVlYCwgd2hpY2ggaXMgaW4gdGhlIEFMU0EgY29yZS4gSXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIHJlbGF0ZWQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGNvbmNlcm5zIHNpdHVhdGlvbnMgd2hlcmUgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaXMgYmVpbmcgYWNjZXNzZWQgYWZ0ZXIgYGNhcmQtXHUwMDNlcHJpdmF0ZV9mcmVlYCBvciBgc25kX2RldmljZV9mcmVlX2FsbGAgbWlnaHQgaGF2ZSBhbHJlYWR5IGZyZWVkIHRoZSBgY2FyZGAgc3RydWN0dXJlLiBIb3dldmVyLCB0aGVyZSdzIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvIGhlcmUuIElmIGBjYXJkYCAqaXMqIGZyZWVkLCB0aGVuIGBrZnJlZShjYXJkKWAgd291bGQgaW5kZWVkIGJlIGEgZG91YmxlLWZyZWUsIHdoaWNoIGlzbid0IGRlc2lyYWJsZS5cblxuQnV0IHdhaXQgYSBtaW51dGUsIGlmIGBjYXJkYCBpcyBtYW5hZ2VkLCBga2ZyZWUoY2FyZClgIGlzbid0ICpzdXBwb3NlZCogdG8gYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCdzIHN1cHBvc2VkIHRvIGJlIGhhbmRsZWQgYnkgYGRldnJlc2AgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGRldm1fa3phbGxvY2AuIFNvLCBpZiB0aGUgY2FyZCBpcyBtYW5hZ2VkLCBkZXZyZXMgd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQuIE5vdywgZG9lcyBgY2FyZC1cdTAwM2Vwcml2YXRlX2ZyZWVgIG9yIGBzbmRfZGV2aWNlX2ZyZWVfYWxsYCB0cmlnZ2VyIHRoZSBkZXZyZXMgcmVsZWFzZT8gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQ7IGRldnJlcyByZWxlYXNlIGlzIHRpZWQgdG8gdGhlIGRldmljZSdzIHJlbW92YWwsIG5vdCBhbiBpbnRlcm5hbCBjbGVhbnVwLlxuXG5BaGEsIGlmIGBjYXJkYCBpcyBtYW5hZ2VkLCBgZGV2cmVzYCB0YWtlcyBjYXJlIG9mIHRoZSBmcmVlaW5nLiBBbmQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBgcmVsZWFzZV9jYXJkX2RldmljZWAsIHdoaWNoIGlzIHRoZSBgcmVsZWFzZWAgY2FsbGJhY2sgb2YgYGNhcmQtXHUwMDNlY2FyZF9kZXZgLiBJZiBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpcyB0cnVlLCB0aGVuIGBkZXZtX3NuZF9jYXJkX2FsbG9jYCB3YXMgdXNlZCB0byBhbGxvY2F0ZSBpdCwgYW5kIGl0IHdpbGwgYmUgZnJlZWQgYnkgYGRldnJlc2Agd2hlbiB0aGUgcGFyZW50IGRldmljZSBpcyByZW1vdmVkLlxuXG5CdXQgdGhlbiwgaWYgYGRldnJlc2AgZnJlZXMgdGhlIGNhcmQgKmJlZm9yZSogYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGZpbmlzaGVkLCB0aGF0IHdvdWxkIGJlIGEgcHJvYmxlbS4gSG93ZXZlciwgYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGByZWxlYXNlX2NhcmRfZGV2aWNlYCwgd2hpY2ggaXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgYGNhcmQtXHUwMDNlY2FyZF9kZXZgIHNvIHRoZXJlIHNob3VsZCBub3QgYmUgYSByYWNlIGNvbmRpdGlvbi5cblxuTWF5YmUgYSBwcmV2aW91cyBjb21taXQgaGFzIGEgY2x1ZS4gTGV0J3Mgc2VlIGlmIGEgc2ltaWxhciBwYXRjaCBoYXMgYW4gZXhwbGFuYXRpb24gaW4gaXRzIGNvbW1pdCBtZXNzYWdlLiBJIG5lZWQgdG8gc2VhcmNoIHRoZSBnaXQgbG9nIGZvciBgc25kX2NhcmRfZG9fZnJlZWAgYW5kIGBtYW5hZ2VkYCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6NDguMjM0NDIxMDA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjI0MDc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZtX3NuZF9jYXJkX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTo0OC4yODc2NTQzMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxNTQzNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgU291bmQgRHJpdmVyIFJlbGVhc2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYXVkaW8gaXNzdWUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgemVybyBpbiBvbiB3aGVyZSB0aGUgcmVzb3VyY2VzIGFyZSBmcmVlZCwgcGFydGljdWxhcmx5IGFmdGVyIGEgc291bmQgY2FyZCBpcyBkb25lIGJlaW5nIHVzZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYHNuZF9jYXJkX2RvX2ZyZWVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYHNvdW5kL2NvcmUvaW5pdC5jYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgdGhlIGtlcm5lbCB0byByZWxlYXNlIHRoZSBzb3VuZCBjYXJkIHJlc291cmNlcyB3aGVuIGl0J3MgYmVpbmcgdW5yZWdpc3RlcmVkLiBJdCBpcyBoaWdobHkgbGlrZWx5IHRvIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGlzIGlzc3VlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDA1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6NTEuMzY5MjAwNzQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk5NDI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbmRfY2FyZF9kb19mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jPTE0NT1zdGF0aWMgaW50IHNuZF9jYXJkX2luaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy0xNDctXFx0XFx0XFx0IHNpemVfdCBleHRyYV9zaXplKTtcXG5zb3VuZC9jb3JlL2luaXQuYzoxNDg6c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7XFxuc291bmQvY29yZS9pbml0LmMtMTQ5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNhcmRfZGV2X2F0dHJfZ3JvdXA7XFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz0xNTE9c3RhdGljIHZvaWQgcmVsZWFzZV9jYXJkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuc291bmQvY29yZS9pbml0LmMtMTUyLXtcXG5zb3VuZC9jb3JlL2luaXQuYzoxNTM6XFx0c25kX2NhcmRfZG9fZnJlZShkZXZfdG9fc25kX2NhcmQoZGV2KSk7XFxuc291bmQvY29yZS9pbml0LmMtMTU0LX1cXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jPTU4Mz1FWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9kaXNjb25uZWN0X3N5bmMpO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTU4NC1cXG5zb3VuZC9jb3JlL2luaXQuYzo1ODU6c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG5zb3VuZC9jb3JlL2luaXQuYy01ODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTo1MS40MTYyMDEzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMxNzY2NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIEZsYWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYGNhcmRgIG9iamVjdCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhlIGBtYW5hZ2VkYCBmbGFnIGlzIGJlaW5nIHNldCBhbmQgdXNlZC4gRmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB0aGUgYXNzaWdubWVudC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaXMgYmVpbmcgbW9kaWZpZWQuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlYmFzZSBmb3IgYXNzaWdubWVudHMgdG8gYGNhcmQtXHUwMDNlbWFuYWdlZGAuIEknbGwgcHJvYmFibHkgYWxzbyB3YW50IHRvIGxvb2sgZm9yIHVzZXMgb2YgYSBzaW1pbGFyIHZhcmlhYmxlIGluIHRoZSBzYW1lIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBwYXR0ZXJucyBpbnZvbHZlZC4gSSBleHBlY3QgSSdsbCB3YW50IHRvIGNoZWNrIGZvciBpbml0aWFsaXphdGlvbnMgYW5kIHBvdGVudGlhbCByZS1hc3NpZ25tZW50cyB0b28sIHRvIGJ1aWxkIGEgZnVsbCBwaWN0dXJlLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gdW5kZXJzdGFuZCAqd2h5KiBhbmQgKndoZW4qIGl0J3MgYmVpbmcgc2V0LCBhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhvc2UgYXNzaWdubWVudHMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNsdWVzIGFib3V0IHRoZSBpbnRlbmRlZCBcIm1hbmFnZWRcIiBzdGF0ZSDigJMgaXMgaXQgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgcmVzb3VyY2Ugb3duZXJzaGlwLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gT25jZSBJIGhhdmUgdGhhdCBjb250ZXh0LCBJJ2xsIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBzaWduaWZpY2FuY2UgYW5kIGNhbiBzdGFydCByZWFzb25pbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6NTQuNjQ3OTcxODg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI1NjQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FyZC1cXHUwMDNlbWFuYWdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9jb3JlL2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC9jb3JlL2luaXQuYz0yMjc9aW50IHNuZF9kZXZtX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLFxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMjM5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbnNvdW5kL2NvcmUvaW5pdC5jOjI0MDpcXHRjYXJkLVxcdTAwM2VtYW5hZ2VkID0gdHJ1ZTtcXG5zb3VuZC9jb3JlL2luaXQuYy0yNDEtXFx0ZXJyID0gc25kX2NhcmRfaW5pdChjYXJkLCBwYXJlbnQsIGlkeCwgeGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpO1xcbi0tXFxuc291bmQvY29yZS9pbml0LmM9Mjc3PXN0YXRpYyBpbnQgc25kX2NhcmRfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTMwOC1cXHRcXHRcXHRpZHgsIHNuZF9lY2FyZHNfbGltaXQgLSAxLCBlcnIpO1xcbnNvdW5kL2NvcmUvaW5pdC5jOjMwOTpcXHRcXHRpZiAoIWNhcmQtXFx1MDAzZW1hbmFnZWQpXFxuc291bmQvY29yZS9pbml0LmMtMzEwLVxcdFxcdFxcdGtmcmVlKGNhcmQpOyAvKiBtYW51YWxseSBmcmVlIGhlcmUsIGFzIG5vIGRlc3RydWN0b3IgY2FsbGVkICovXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz01ODU9c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG5zb3VuZC9jb3JlL2luaXQuYy01ODYte1xcbnNvdW5kL2NvcmUvaW5pdC5jOjU4NzpcXHRib29sIG1hbmFnZWQgPSBjYXJkLVxcdTAwM2VtYW5hZ2VkO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTU4OC1cXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jPTg4MD1pbnQgc25kX2NhcmRfcmVnaXN0ZXIoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtODkyLVxcdH0gZWxzZSB7XFxuc291bmQvY29yZS9pbml0LmM6ODkzOlxcdFxcdGlmIChjYXJkLVxcdTAwM2VtYW5hZ2VkKVxcbnNvdW5kL2NvcmUvaW5pdC5jLTg5NC1cXHRcXHRcXHRkZXZtX3JlbW92ZV9hY3Rpb24oY2FyZC1cXHUwMDNlZGV2LCB0cmlnZ2VyX2NhcmRfZnJlZSwgY2FyZCk7XFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy04OTYtXFxuc291bmQvY29yZS9pbml0LmM6ODk3OlxcdGlmIChjYXJkLVxcdTAwM2VtYW5hZ2VkKSB7XFxuc291bmQvY29yZS9pbml0LmMtODk4LVxcdFxcdGVyciA9IGRldm1fYWRkX2FjdGlvbihjYXJkLVxcdTAwM2VkZXYsIHRyaWdnZXJfY2FyZF9mcmVlLCBjYXJkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6NTQuOTkwNTQxNjg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQ2NTI1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gYXVkaW8gZHJpdmVyIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBDYXJkIEFsbG9jYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYHNuZF9kZXZtX2NhcmRfbmV3YC4gVGhlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBhbGxvY2F0aW5nIGFuIGF1ZGlvIGNhcmQgb2JqZWN0LCBhbmQgdGhlIFwiZGV2bVwiIHByZWZpeCBzY3JlYW1zIFwiZGV2aWNlIHJlc291cmNlXCIgbWFuYWdlbWVudCwgbWVhbmluZyBpdCdzIHVzaW5nIHRoZSBkZXZpY2UgcmVzb3VyY2UgbWVjaGFuaXNtLiBNeSBpbml0aWFsIGd1ZXNzLCB3aGljaCBJJ2xsIGNvbmZpcm0sIGlzIHRoYXQgdGhpcyBwcm9iYWJseSByZWxpZXMgb24gYGRldm1fa3phbGxvY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgZm9yIHRoZSBhbGxvY2F0aW9uLiBOb3cgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBieSBjaGVja2luZyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgYHNuZF9kZXZtX2NhcmRfbmV3YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjU4LjQxNTE5NzA0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic291bmQvY29yZS9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI3OlxcdGludCBzbmRfZGV2bV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCxcXG4gMjI4OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgc2l6ZV90IGV4dHJhX3NpemUsXFxuIDIyOTpcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkX3JldClcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdHN0cnVjdCBzbmRfY2FyZCAqY2FyZDtcXG4gMjMyOlxcdFxcdGludCBlcnI7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdFxcdCpjYXJkX3JldCA9IE5VTEw7XFxuIDIzNTpcXHRcXHRjYXJkID0gZGV2cmVzX2FsbG9jKF9fc25kX2NhcmRfcmVsZWFzZSxcXG4gMjM2OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Rfc2l6ZShjYXJkLCBwcml2YXRlX2RhdGFfYXJlYSwgZXh0cmFfc2l6ZSksXFxuIDIzNzpcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuIDIzODpcXHRcXHRpZiAoIWNhcmQpXFxuIDIzOTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjQwOlxcdFxcdGNhcmQtXFx1MDAzZW1hbmFnZWQgPSB0cnVlO1xcbiAyNDE6XFx0XFx0ZXJyID0gc25kX2NhcmRfaW5pdChjYXJkLCBwYXJlbnQsIGlkeCwgeGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpO1xcbiAyNDI6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gMjQzOlxcdFxcdFxcdGRldnJlc19mcmVlKGNhcmQpOyAvKiBpbiBtYW5hZ2VkIG1vZGUsIHdlIG5lZWQgdG8gZnJlZSBtYW51YWxseSAqL1xcbiAyNDQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMjQ1OlxcdFxcdH1cXG4gMjQ2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTo1OC40MTUzMjg1ODJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MTQ5NTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi5cblxuKipBbmFseXppbmcgdGhlIENhcmQgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYGNhcmRgIHN0cnVjdHVyZSwgdGhhdCBjcml0aWNhbCBwaWVjZSwgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBkZXZyZXNfYWxsb2NgLiBJIGtub3cgdGhpcywgYW5kIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGFuYWx5emUgdGhlIGZsb3cuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBkZWFsbG9jYXRpb24gcGF0aCwgbmF0dXJhbGx5LiBXaGVuIGBzbmRfY2FyZF9kb19mcmVlYCBnZXRzIGludm9rZWQsIHRoYXQncyB3aGVyZSB0aGUgbWVtb3J5IHNob3VsZCBiZSByZWxlYXNlZC4gQSBrZXkgcXVlc3Rpb24gYXJpc2VzOiB3aGF0IGNhbGxzIGBzbmRfY2FyZF9kb19mcmVlYD8gSXQncyBsaWtlbHkgdGhhdCBgX19zbmRfY2FyZF9yZWxlYXNlYCBpcyBpbnZvbHZlZCwgYW5kIGl0IGhhcyB0byBiZSwgZ2l2ZW4gdGhlIG5hbWVzLiBMZXQgbWUgY29uZmlybSB0aGlzIGFzc3VtcHRpb24gYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgc2NydXRpbml6aW5nIGBfX3NuZF9jYXJkX3JlbGVhc2VgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvbm5lY3Rpb24gd2lsbCBiZWNvbWUgY2xlYXIuIEdvdHRhIHRyYWNlIHRoZSBjYWxscyBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaGFuZGxlZCwgbm8gbWVtb3J5IGxlYWtzIGFsbG93ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMyOjAyLjE4NjgyNzQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4Mzk3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zbmRfY2FyZF9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jPTE5NT1FWFBPUlRfU1lNQk9MKHNuZF9jYXJkX25ldyk7XFxuc291bmQvY29yZS9pbml0LmMtMTk2LVxcbnNvdW5kL2NvcmUvaW5pdC5jOjE5NzpzdGF0aWMgdm9pZCBfX3NuZF9jYXJkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbnNvdW5kL2NvcmUvaW5pdC5jLTE5OC17XFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz0yMjc9aW50IHNuZF9kZXZtX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLFxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMjM0LVxcdCpjYXJkX3JldCA9IE5VTEw7XFxuc291bmQvY29yZS9pbml0LmM6MjM1OlxcdGNhcmQgPSBkZXZyZXNfYWxsb2MoX19zbmRfY2FyZF9yZWxlYXNlLFxcbnNvdW5kL2NvcmUvaW5pdC5jLTIzNi1cXHRcXHRcXHQgICAgc3RydWN0X3NpemUoY2FyZCwgcHJpdmF0ZV9kYXRhX2FyZWEsIGV4dHJhX3NpemUpLFxcbi0tXFxuc291bmQvY29yZS9pbml0LmM9MjY0PWludCBzbmRfY2FyZF9mcmVlX29uX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldClcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTI2OS1cXHRcXHRyZXR1cm4gMDtcXG5zb3VuZC9jb3JlL2luaXQuYzoyNzA6XFx0Y2FyZCA9IGRldnJlc19maW5kKGRldiwgX19zbmRfY2FyZF9yZWxlYXNlLCBOVUxMLCBOVUxMKTtcXG5zb3VuZC9jb3JlL2luaXQuYy0yNzEtXFx0aWYgKGNhcmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMyOjAyLjMzNDY3MzU1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg3OTUxMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYF9fc25kX2NhcmRfcmVsZWFzZWA6XG5cbioqQW5hbHl6aW5nIGBfX3NuZF9jYXJkX3JlbGVhc2VgKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgYF9fc25kX2NhcmRfcmVsZWFzZWAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgcmVsYXRlZCB0byB0aGUgY2xlYW51cCBwcm9jZXNzIGZvciBhbiBhdWRpbyBjYXJkIHdpdGhpbiB0aGUga2VybmVsJ3Mgc291bmQgc3Vic3lzdGVtLCBwcm9iYWJseSBpbiB0aGUgQUxTQSBmcmFtZXdvcmsuIE1vcmUgc3BlY2lmaWNhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc291bmQgY2FyZC5cblxuSSBiZXQgaXQnbGwgaW52b2x2ZTpcblxuKiAgICoqVW5yZWdpc3RlcmluZyB0aGUgY2FyZDoqKiBEZXJlZ2lzdGVyaW5nIHRoZSBzb3VuZCBjYXJkIHdpdGggdGhlIEFMU0EgY29yZS4gSXQncyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UsIHRvIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGtub3dpbmcgYWJvdXQgaXQuXG4qICAgKipSZWxlYXNpbmcgRHJpdmVyLXNwZWNpZmljIHJlc291cmNlczoqKiBGcmVlaW5nIGFueSBtZW1vcnksIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIG90aGVyIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIHNvdW5kIGNhcmQgZHJpdmVyIHNwZWNpZmljIGNvZGUuIEknbGwgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBga2ZyZWVgLCBgbXV0ZXhfZGVzdHJveWAsIGBzbmRfY2FyZF9mcmVlYCwgb3IgYW55IGRyaXZlci1zcGVjaWZpYyByZWxlYXNlIGZ1bmN0aW9ucyB0aGF0IHRoZSBjYXJkIGRyaXZlciB1c2VzLlxuKiAgICoqQ2xvc2luZyBkZXZpY2UgZmlsZXM6KiogUG90ZW50aWFsbHkgY2xvc2luZyBhbnkgZGV2aWNlIGZpbGVzIG9yIHJlbW92aW5nIHRoZW0gZnJvbSBkZXZpY2UgZmlsZSBzdHJ1Y3R1cmVzLiBUaGlzIGVuc3VyZXMgdGhhdCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGNhbid0IGFjY2lkZW50YWxseSBhY2Nlc3MgZGFuZ2xpbmcgcmVmZXJlbmNlcy5cbiogICAqKlN0b3BwaW5nIGFsbCBhY3RpdmUgc3RyZWFtczoqKiBFbnN1cmluZyB0aGF0IGFueSBjdXJyZW50bHkgYWN0aXZlIGF1ZGlvIHN0cmVhbXMgb3IgcGxheWJhY2sgYnVmZmVycyBhcmUgZ3JhY2VmdWxseSBzdG9wcGVkIGFuZCBjbGVhcmVkIHRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbiBvciByZXNvdXJjZSBsZWFrcy5cblxuSSdsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIG9yZGVyIG9mIHRoZXNlIG9wZXJhdGlvbnMgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIElzIGl0IHJvYnVzdCB0byBwYXJ0aWFsIGZhaWx1cmVzLCBmb3IgaW5zdGFuY2U/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc21zIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5PyBBbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnM/IFRoZXNlIGFyZSBjcnVjaWFsIGFzcGVjdHMgdG8gY29uc2lkZXIgZHVyaW5nIHRoaXMgcmV2aWV3LlxuTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6MDYuNDIyNjI3ODA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NzpcXHRzdGF0aWMgdm9pZCBfX3NuZF9jYXJkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbiAxOTg6XFx0e1xcbiAxOTk6XFx0XFx0c25kX2NhcmRfZnJlZShkYXRhKTtcXG4gMjAwOlxcdH1cXG4gMjAxOlxcdFxcbiAyMDI6XFx0LyoqXFxuIDIwMzpcXHQgKiBzbmRfZGV2bV9jYXJkX25ldyAtIG1hbmFnZWQgc25kX2NhcmQgb2JqZWN0IGNyZWF0aW9uXFxuIDIwNDpcXHQgKiBAcGFyZW50OiB0aGUgcGFyZW50IGRldmljZSBvYmplY3RcXG4gMjA1OlxcdCAqIEBpZHg6IGNhcmQgaW5kZXggKGFkZHJlc3MpIFswIC4uLiAoU05EUlZfQ0FSRFMtMSldXFxuIDIwNjpcXHQgKiBAeGlkOiBjYXJkIGlkZW50aWZpY2F0aW9uIChBU0NJSSBzdHJpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMyOjA2LjQyMjcyMjIxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDEwNzU3MDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgQXVkaW8gU3Vic3lzdGVtIFNodXRkb3duKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgc2h1dGRvd24gc2VxdWVuY2UuIFRoZSBgX19zbmRfY2FyZF9yZWxlYXNlYCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIE5vdywgSSBzZWUgaXQgY2FsbHMgYHNuZF9jYXJkX2ZyZWUoZGF0YSlgLiBUaGF0J3MgdGhlIGNydWNpYWwgcG9pbnQuIFNvLCB3aGF0IGV4YWN0bHkgaXMgYHNuZF9jYXJkX2ZyZWVgIGRvaW5nIHdpdGggdGhhdCBgZGF0YWAgcG9pbnRlcj8gTGV0J3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc25kX2NhcmRfZnJlZWAgYW5kIHNlZSB3aGF0J3MgYmVpbmcgY2xlYW5lZCB1cCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBJJ20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgY29kZSBmbG93IGZyb20gdGhlcmUgdG8gYnVpbGQgbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUgYXVkaW8gc3Vic3lzdGVtLiBJdCdzIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgcmVzb3VyY2UgcmVsZWFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6MTYuNTMwMjk3MDE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzb3VuZC9jb3JlL2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzM6XFx0LyoqXFxuIDYzNDpcXHQgKiBzbmRfY2FyZF9mcmVlIC0gZnJlZXMgZ2l2ZW4gc291bmRjYXJkIHN0cnVjdHVyZVxcbiA2MzU6XFx0ICogQGNhcmQ6IHNvdW5kY2FyZCBzdHJ1Y3R1cmVcXG4gNjM2OlxcdCAqXFxuIDYzNzpcXHQgKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBzb3VuZGNhcmQgc3RydWN0dXJlIGFuZCB0aGUgYWxsIGFzc2lnbmVkXFxuIDYzODpcXHQgKiBkZXZpY2VzIGF1dG9tYXRpY2FsbHkuICBUaGF0IGlzLCB5b3UgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIHRoZSBkZXZpY2VzXFxuIDYzOTpcXHQgKiBieSB5b3Vyc2VsZi5cXG4gNjQwOlxcdCAqXFxuIDY0MTpcXHQgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIHVudGlsIHRoZSBhbGwgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSByZWxlYXNlZC5cXG4gNjQyOlxcdCAqXFxuIDY0MzpcXHQgKiBSZXR1cm46IFplcm8uIEZyZWVzIGFsbCBhc3NvY2lhdGVkIGRldmljZXMgYW5kIGZyZWVzIHRoZSBjb250cm9sXFxuIDY0NDpcXHQgKiBpbnRlcmZhY2UgYXNzb2NpYXRlZCB0byBnaXZlbiBzb3VuZGNhcmQuXFxuIDY0NTpcXHQgKi9cXG4gNjQ2OlxcdHZvaWQgc25kX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuIDY0NzpcXHR7XFxuIDY0ODpcXHRcXHRERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhyZWxlYXNlZCk7XFxuIDY0OTpcXHRcXG4gNjUwOlxcdFxcdC8qIFRoZSBjYWxsIG9mIHNuZF9jYXJkX2ZyZWUoKSBpcyBhbGxvd2VkIGZyb20gdmFyaW91cyBjb2RlIHBhdGhzO1xcbiA2NTE6XFx0XFx0ICogYSBtYW51YWwgY2FsbCBmcm9tIHRoZSBkcml2ZXIgYW5kIHRoZSBjYWxsIHZpYSBkZXZyZXNfZnJlZSwgYW5kXFxuIDY1MjpcXHRcXHQgKiB3ZSBuZWVkIHRvIGF2b2lkIGRvdWJsZS1mcmVlLiBNb3Jlb3ZlciwgdGhlIHJlbGVhc2UgdmlhIGRldnJlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMjoxNi41MzAzOTkwODRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMjEzMTk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgc291bmQgY2FyZCBkcml2ZXJzOlxuXG4qKkFuYWx5emluZyB0aGUgUmVtYWluZGVyIG9mIGBzbmRfY2FyZF9mcmVlYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyBjbGVhcjogbGV0J3MgZGl2ZSBpbnRvIHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb2YgdGhlIGBzbmRfY2FyZF9mcmVlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNsZWFudXAgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyByb3V0aW5lLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCBlYWNoIHBhcnQgdG8gZW5zdXJlIEknbSBnZXR0aW5nIGEgaG9saXN0aWMgdmlldyBvZiBob3cgYSBzb3VuZCBjYXJkIHJlc291cmNlIGlzIGRlYWxsb2NhdGVkLCBzbyB0aGF0IEkgZG9uJ3QgbWlzcyBhbnkgY3JpdGljYWwgZGV0YWlscyBkdXJpbmcgcmVzb3VyY2UgdGVhcmRvd24uIExldCdzIHNlZSBob3cgdGhleSBjbGVhbiB1cCBhbGwgdGhvc2UgYXVkaW8gZGV2aWNlIGNvbXBvbmVudHMuIE15IGV4cGVjdGF0aW9uIGlzIHRoZXJlIHdpbGwgYmUgYSBsb3Qgb2YgZGV2aWNlIHVucmVnaXN0cmF0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMyOjE5LjY2MjUzNDEwMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzb3VuZC9jb3JlL2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTMsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NTM6XFx0XFx0ICogbWF5IGNhbGwgc25kX2NhcmRfZnJlZSgpIHR3aWNlIGR1ZSB0byBpdHMgbmF0dXJlLCB3ZSBuZWVkIHRvIGhhdmVcXG4gNjU0OlxcdFxcdCAqIHRoZSBjaGVjayBoZXJlIGF0IHRoZSBiZWdpbm5pbmcuXFxuIDY1NTpcXHRcXHQgKi9cXG4gNjU2OlxcdFxcdGlmIChjYXJkLVxcdTAwM2VyZWxlYXNpbmcpXFxuIDY1NzpcXHRcXHRcXHRyZXR1cm47XFxuIDY1ODpcXHRcXG4gNjU5OlxcdFxcdGNhcmQtXFx1MDAzZXJlbGVhc2VfY29tcGxldGlvbiA9IFxcdTAwMjZyZWxlYXNlZDtcXG4gNjYwOlxcdFxcdHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoY2FyZCk7XFxuIDY2MTpcXHRcXG4gNjYyOlxcdFxcdC8qIHdhaXQsIHVudGlsIGFsbCBkZXZpY2VzIGFyZSByZWFkeSBmb3IgdGhlIGZyZWUgb3BlcmF0aW9uICovXFxuIDY2MzpcXHRcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZyZWxlYXNlZCk7XFxuIDY2NDpcXHR9XFxuIDY2NTpcXHRFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWUpO1xcbiA2NjY6XFx0XFxuIDY2NzpcXHQvKiBjaGVjaywgaWYgdGhlIGNoYXJhY3RlciBpcyBpbiB0aGUgdmFsaWQgQVNDSUkgcmFuZ2UgKi9cXG4gNjY4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlX2FzY2lpX2NoYXIoY2hhciBjKVxcbiA2Njk6XFx0e1xcbiA2NzA6XFx0XFx0cmV0dXJuIGlzYXNjaWkoYykgXFx1MDAyNlxcdTAwMjYgaXNhbG51bShjKTtcXG4gNjcxOlxcdH1cXG4gNjcyOlxcdFxcbiA2NzM6XFx0LyogcmV0cmlldmUgdGhlIGxhc3Qgd29yZCBvZiBzaG9ydG5hbWUgb3IgbG9uZ25hbWUgKi9cXG4gNjc0OlxcdHN0YXRpYyBjb25zdCBjaGFyICpyZXRyaWV2ZV9pZF9mcm9tX2NhcmRfbmFtZShjb25zdCBjaGFyICpuYW1lKVxcbiA2NzU6XFx0e1xcbiA2NzY6XFx0XFx0Y29uc3QgY2hhciAqc3BvcyA9IG5hbWU7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdHdoaWxlICgqbmFtZSkge1xcbiA2Nzk6XFx0XFx0XFx0aWYgKGlzc3BhY2UoKm5hbWUpIFxcdTAwMjZcXHUwMDI2IHNhZmVfYXNjaWlfY2hhcihuYW1lWzFdKSlcXG4gNjgwOlxcdFxcdFxcdFxcdHNwb3MgPSBuYW1lICsgMTtcXG4gNjgxOlxcdFxcdFxcdG5hbWUrKztcXG4gNjgyOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6MTkuNjYyNjM1MjIxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzQ2ODAyMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVzZS1BZnRlci1GcmVlIFZ1bG5lcmFiaWxpdHkgaW4gQUxTQSBDb3JlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQUxTQSBjb2RlIGFuZCBpdCdzIGxvb2tpbmcgbGlrZSB0aGVyZSdzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBidWcgbHVya2luZyBpbiBgc25kX2NhcmRfZnJlZWAuIEl0IGFsbCBzdGFydHMgd2l0aCBgc25kX2NhcmRfZnJlZWAgY2FsbGluZyBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gdGhlIGBwdXRfZGV2aWNlYCBhbmQgdWx0aW1hdGVseSBgcmVsZWFzZV9jYXJkX2RldmljZWAsIHdoaWNoIHRyaWdnZXJzIGBzbmRfY2FyZF9kb19mcmVlYC4gIGBzbmRfY2FyZF9kb19mcmVlYCBzZXRzIGBjYXJkLVx1MDAzZXJlbGVhc2luZyA9IHRydWU7YCBiZWZvcmUgaXQgZG9lcyBhbnl0aGluZyBlbHNlLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgY29tZXMgZG93biB0byBob3cgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCBhZnRlciBpdCdzIGJlZW4gZnJlZWQuIEluc2lkZSBgc25kX2NhcmRfZG9fZnJlZWAsIHRoZXJlJ3MgYSBjaGVjayBmb3IgYGNhcmQtXHUwMDNlbWFuYWdlZGAuIElmIHRoZSBgY2FyZGAgaXNuJ3QgbWFuYWdlZCAobWVhbmluZyBpdCB3YXNuJ3QgYWxsb2NhdGVkIHdpdGggYGRldm1gKSwgdGhlbiBga2ZyZWUoY2FyZClgIGlzIGNhbGxlZCByaWdodCB0aGVyZS4gQnV0IHRoZSBjb2RlIGhhcyBhIHJhY2UgY29uZGl0aW9uLiBJdCBzZXRzIHVwIGEgY29tcGxldGlvbiwgYGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uYCwgYW5kIHRoZW4gKmNvbXBsZXRlcyogaXQsIGBjb21wbGV0ZShjYXJkLVx1MDAzZXJlbGVhc2VfY29tcGxldGlvbilgLCBiZWZvcmUgdGhlIGNoZWNrIGZvciBgY2FyZC1cdTAwM2VtYW5hZ2VkYC4gVGhlIGtleSBpcyB0aGF0IGBzbmRfY2FyZF9mcmVlYCB3YWl0cyBvbiB0aGlzIGNvbXBsZXRpb24uXG5cbklmIHRoZSBgY2FyZGAgKmlzKiBtYW5hZ2VkLCB0aGUgYGtmcmVlYCBpcyBza2lwcGVkLiAgVGhlIHJhY2UgaXMgdGhhdCBgY29tcGxldGVgIHdha2VzIHVwIHRoZSB3YWl0aW5nIGBzbmRfY2FyZF9mcmVlYCBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBpbiBgc25kX2NhcmRfZG9fZnJlZWAgaGFzIGNvbXBsZXRlbHkgZmluaXNoZWQuIFNpbmNlIGBzbmRfY2FyZF9mcmVlYCBpcyB3YWl0aW5nIG9uIGBcdTAwMjZyZWxlYXNlZGAsIG9uIHRoZSBzdGFjaywgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkgYWZ0ZXIgYGNvbXBsZXRlKClgIGlzIGNhbGxlZCwgdGhlIHN0YWNrIHZhcmlhYmxlIGByZWxlYXNlZGAgaXMgc3RpbGwgdmFsaWQuIEJ1dCBpZiBgY2FyZGAgKmlzKiBtYW5hZ2VkLCBhbmQgdGhlIGBjb21wbGV0ZWAgd2FrZXMgdXAgYHNuZF9jYXJkX2ZyZWVgLCB0aGVuIGBkZXZyZXNgIGlzIGdvaW5nIHRvICphbHNvKiBmcmVlIGBjYXJkYC4gVGhpcyBjcmVhdGVzIGEgdXNlLWFmdGVyLWZyZWUgYmVjYXVzZSBgc25kX2NhcmRfZG9fZnJlZWAgbWlnaHQgYXR0ZW1wdCB0byBhY2Nlc3MgYGNhcmQtXHUwMDNlbWFuYWdlZGAgKmFmdGVyKiB0aGUgYGNhcmRgIGhhcyBiZWVuIGZyZWVkIGJ5IGBkZXZyZXNgLiBUaGlzIGhhcHBlbnMgYmVjYXVzZSBgc25kX2NhcmRfZnJlZWAgZmluaXNoZXMsIGFuZCBgX19zbmRfY2FyZF9yZWxlYXNlYCBhbHNvIGZpbmlzaGVzLiBUaGVuIGBkZXZyZXNgIGZyZWVzIHRoZSBtZW1vcnkgZm9yIGBjYXJkYCwgYW5kIHRoZW4gYHNuZF9jYXJkX2RvX2ZyZWVgIHRyaWVzIHRvIGNoZWNrIGBpZiAoIWNhcmQtXHUwMDNlbWFuYWdlZClgLCB3aGljaCBpcyBub3cgaW52YWxpZCBtZW1vcnkuXG5cblRoZSBvcmlnaW5hbCBwYXRjaCBjbGV2ZXJseSBmaXhlcyB0aGlzIGJ5IGNhY2hpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgKmJlZm9yZSogY2FsbGluZyBgY29tcGxldGVgLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSdyZSBvcGVyYXRpbmcgb24gYSB2YWxpZCBjb3B5IG9mIHRoZSBgbWFuYWdlZGAgZmxhZy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgQW55IEFMU0EgZHJpdmVyIHVzaW5nIGBzbmRfZGV2bV9jYXJkX25ld2AgaXMgdnVsbmVyYWJsZS4gVGhpcyBpbmNsdWRlcyBzY2VuYXJpb3Mgb24gbW9kdWxlIHVubG9hZCwgZGV2aWNlIHVuYmluZCwgb3IsIGNydWNpYWxseSwgZXJyb3IgcGF0aHMgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gU3l6a2FsbGVyLCB3aXRoIGl0cyBjb21wcmVoZW5zaXZlIHRlc3Rpbmcgb2YgVVNCIGF1ZGlvIGRldmljZXMsIHBhcnRpY3VsYXJseSB0aHJvdWdoIGZhdWx0IGluamVjdGlvbiBhbmQgbWFsZm9ybWVkIGRlc2NyaXB0b3JzLCBjYW4gZWFzaWx5IHRyaWdnZXIgdGhpcyBkdXJpbmcgcHJvYmUgZmFpbHVyZXMuIEFuZCB5ZXMsIHN5emthbGxlciBkb2VzIHRlc3QgVVNCIGF1ZGlvIGRldmljZXMuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWVkIGNlcnRhaW4gY29uZGl0aW9ucyBpbiB3aGljaCBJIHNob3VsZCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLiBJdCB0YWxrcyBhYm91dCBcIkRyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3NcIi4gVGhpcyBpcyBhIGNvcmUgQUxTQSBmcmFtZXdvcmsgZnVuY3Rpb24sIG5vdCBhIHNwZWNpZmljIGRyaXZlcidzIHRlYXJkb3duIGNhbGxiYWNrLiBJdCdzIHRyaWdnZXJlZCBub3QganVzdCBkdXJpbmcgdW5iaW5kL3JlbW92ZSwgYnV0IGFsc28gb24gcHJvYmUgZXJyb3JzLiBUaGUgcHJvbXB0IGRvZXMgc2F5OiBcInRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cIiBIb3dldmVyLCB0aGlzIGlzIHdyb25nLiBJdCBpcyBhbHNvIGV4ZWN1dGVkIGR1cmluZyBlcnJvciBwYXRocyBvZiBtb2R1bGUgbG9hZGluZyBvciBkZXZpY2UgcHJvYmluZy4gVGhlIGNvbWJpbmF0aW9uIG9mIGBzbmRfZGV2bV9jYXJkX25ld2Agd2l0aCBhIGxhdGVyIGZhaWx1cmUgaW4gdGhlIHByb2JlIHJvdXRpbmUsIG1lYW5zIHRoYXQgYGRldnJlc2AgZnJlZXMgdGhlIGNhcmQgd2hpY2ggY2FsbHMgYHNuZF9jYXJkX2RvX2ZyZWVgLCB3aGljaCBpcyB3aGF0IGNhdXNlcyB0aGUgdXNlLWFmdGVyLWZyZWUuXG5cblNvIHllcywgaXQgaXMgYWJzb2x1dGVseSByZWFjaGFibGUsIHZlcnkgZnV6emFibGUsIGFuZCByZXByZXNlbnRzIGEgcmVhbCB2dWxuZXJhYmlsaXR5LiBUaGlzIHBhdGNoIGlzIGEgdmVyeSBnb29kIGZpeCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTIwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMjozNy4wMDk0NDA1MjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjEzODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9jYXJkX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvdXNiL2NhcmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC91c2IvY2FyZC5jPTkxOD1zdGF0aWMgaW50IHVzYl9hdWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbnNvdW5kL3VzYi9jYXJkLmMtMTA4MC1cXHRcXHRpZiAoIWNoaXAtXFx1MDAzZW51bV9pbnRlcmZhY2VzKVxcbnNvdW5kL3VzYi9jYXJkLmM6MTA4MTpcXHRcXHRcXHRzbmRfY2FyZF9mcmVlKGNoaXAtXFx1MDAzZWNhcmQpO1xcbnNvdW5kL3VzYi9jYXJkLmMtMTA4Mi1cXHR9XFxuLS1cXG5zb3VuZC91c2IvY2FyZC5jPTExNDk9c3RhdGljIHZvaWQgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5zb3VuZC91c2IvY2FyZC5jLTExNTgtXFx0aWYgKF9fdXNiX2F1ZGlvX2Rpc2Nvbm5lY3QoaW50ZiwgY2hpcCwgY2FyZCkpXFxuc291bmQvdXNiL2NhcmQuYzoxMTU5OlxcdFxcdHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoY2FyZCk7XFxuc291bmQvdXNiL2NhcmQuYy0xMTYwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6MzcuMDU4NjYxNDk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTY1NzU1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBVU0IgQXVkaW8gUHJvYmUgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGF1ZGlvIGRyaXZlciBhbmQgaG93IGl0IGhhbmRsZXMgZXJyb3JzIGR1cmluZyB0aGUgVVNCIGF1ZGlvIHByb2JlIHByb2Nlc3MuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgYHNuZF9jYXJkX2ZyZWVgICppcyogY2FsbGVkIGluIHRoZSBlcnJvciBwYXRocyBvZiBgdXNiX2F1ZGlvX3Byb2JlYC4gR29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC4gQnV0LCB3YWl0IGEgc2Vjb25kLi4uIGB1c2JfYXVkaW9fcHJvYmVgIHVzZXMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCBpcyBnb29kLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHRoaW5raW5nIG9mIHRoZSBjb250ZXh0LiBEb2VzIGB1c2JfYXVkaW9fcHJvYmVgIHByb3Blcmx5IGFsbG9jYXRlIGEgY2FyZCB3aXRoIGBzbmRfZGV2bV9jYXJkX25ld2Agc28gdGhhdCBpdCBhbHNvIGZyZWVzIHRoZSBjYXJkPyBMZXQncyBxdWlja2x5IHZlcmlmeSB3aGVyZSBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHNvdW5kL3VzYi9jYXJkLmNgLCB0byBjb25maXJtIHRoYXQgdGhlIHByb3BlciBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSdyZSBwYWlyaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zIGNvcnJlY3RseSB0byBhdm9pZCBsZWFrcyBvciBkb3VibGUgZnJlZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6NDQuMzE1MjQwNDQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU4NzIzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25kX2Rldm1fY2FyZF9uZXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6NDQuMzYzODM4MTQ3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzkwMzg2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBTb3VuZCBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBpdCdzIGNsZWFyIHRoYXQgdGhlIGBzb3VuZC91c2IvYCBzdWJzeXN0ZW0gaXNuJ3QgZW1wbG95aW5nIGBzbmRfZGV2bV9jYXJkX25ld2AuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYW5kIGl0IG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgbGluZSBvZiBpbnF1aXJ5LiBJbnN0ZWFkIG9mIGZvY3VzaW5nIG9uICpob3cqIGl0J3MgdXNlZCB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBub3QgYmVpbmcgdXNlZCBhbmQgd2hhdCBhbHRlcm5hdGl2ZXMgYXJlIGltcGxlbWVudGVkLlxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBzbmRfZGV2bV9jYXJkX25ld2AgKmlzKiB1c2VkLiBMZXQncyB0cmFjZSBpdHMgY2FsbHMgYW5kIHNlZSB3aGljaCBvdGhlciBhdWRpbyBkcml2ZXJzIG9yIHN1YnN5c3RlbXMgcmVseSBvbiBpdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIEFMU0EgZnJhbWV3b3JrIGFuZCBwb3RlbnRpYWxseSBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5kIHRoZSBgc291bmQvdXNiL2AgYXBwcm9hY2guIFVuZGVyc3RhbmRpbmcgdGhlIGVzdGFibGlzaGVkIHBhdHRlcm5zIGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgZW1wbG95ZWQgbWlnaHQgaWxsdW1pbmF0ZSB0aGUgc3BlY2lmaWMgcmF0aW9uYWxlIGZvciBpdHMgYWJzZW5jZSBpbiB0aGUgVVNCIGF1ZGlvIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUgdG8gZm9ybXVsYXRlIHRoZSByaWdodCBxdWVzdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6NDkuODQyODc5ODk0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjczMTg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbmRfZGV2bV9jYXJkX25ld1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbnNvdW5kL2NvcmUvaW5pdC5jPTE5Nz1zdGF0aWMgdm9pZCBfX3NuZF9jYXJkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMjAyLS8qKlxcbnNvdW5kL2NvcmUvaW5pdC5jOjIwMzogKiBzbmRfZGV2bV9jYXJkX25ldyAtIG1hbmFnZWQgc25kX2NhcmQgb2JqZWN0IGNyZWF0aW9uXFxuc291bmQvY29yZS9pbml0LmMtMjA0LSAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgZGV2aWNlIG9iamVjdFxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMjI2LSAqL1xcbnNvdW5kL2NvcmUvaW5pdC5jOjIyNzppbnQgc25kX2Rldm1fY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsXFxuc291bmQvY29yZS9pbml0LmMtMjI4LVxcdFxcdCAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgc2l6ZV90IGV4dHJhX3NpemUsXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy0yNTAtfVxcbnNvdW5kL2NvcmUvaW5pdC5jOjI1MTpFWFBPUlRfU1lNQk9MX0dQTChzbmRfZGV2bV9jYXJkX25ldyk7XFxuc291bmQvY29yZS9pbml0LmMtMjUyLVxcbi0tXFxuc291bmQvZHJpdmVycy9hbG9vcC5jPTE3OTg9c3RhdGljIGludCBsb29wYmFja19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXFxuLS1cXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmMtMTgwNC1cXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmM6MTgwNTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2ZGV2cHRyLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2RyaXZlcnMvYWxvb3AuYy0xODA2LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgbG9vcGJhY2spLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9kcml2ZXJzL2R1bW15LmM9MTAxMj1zdGF0aWMgaW50IHNuZF9kdW1teV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXFxuLS1cXG5zb3VuZC9kcml2ZXJzL2R1bW15LmMtMTAxOS1cXG5zb3VuZC9kcml2ZXJzL2R1bW15LmM6MTAyMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2ZGV2cHRyLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2RyaXZlcnMvZHVtbXkuYy0xMDIxLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2R1bW15KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmM9NTI9c3RhdGljIGludCBzbmRfbXB1NDAxX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIGludCBkZXYsXFxuLS1cXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYy02MS1cXHQqcmNhcmQgPSBOVUxMO1xcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jOjYyOlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldnB0ciwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMtNjMtXFx0XFx0XFx0XFx0MCwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvZHJpdmVycy9tdHBhdi5jPTY1Mj1zdGF0aWMgaW50IHNuZF9tdHBhdl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXFxuLS1cXG5zb3VuZC9kcml2ZXJzL210cGF2LmMtNjU3LVxcbnNvdW5kL2RyaXZlcnMvbXRwYXYuYzo2NTg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldi1cXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxcbnNvdW5kL2RyaXZlcnMvbXRwYXYuYy02NTktXFx0XFx0XFx0XFx0c2l6ZW9mKCptdHBfY2FyZCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2RyaXZlcnMvcGNtdGVzdC5jPTYwMD1zdGF0aWMgaW50IHBjbXRzdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuc291bmQvZHJpdmVycy9wY210ZXN0LmMtNjA5LVxcbnNvdW5kL2RyaXZlcnMvcGNtdGVzdC5jOjYxMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvZHJpdmVycy9wY210ZXN0LmMtNjExLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYz05OD1zdGF0aWMgaW50IHNuZF9jYXJkX3Bjc3BfcHJvYmUoaW50IGRldm51bSwgc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYy0xMDctXFxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYzoxMDg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYy0xMDktXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmM9MzIxPXN0YXRpYyBpbnQgc25kX3NlcmlhbF9nZW5lcmljX3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXFxuLS1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmMtMzI2LVxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYzozMjc6XFx0ZXJyICA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZzZXJkZXYtXFx1MDAzZWRldiwgU05EUlZfREVGQVVMVF9JRFgxLFxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYy0zMjgtXFx0XFx0XFx0XFx0U05EUlZfREVGQVVMVF9TVFIxLCBUSElTX01PRFVMRSxcXG4tLVxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jPTg0Mj1zdGF0aWMgaW50IHNuZF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxcbi0tXFxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMtODg0LVxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jOjg4NTpcXHRlcnIgID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldnB0ci1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYy04ODYtXFx0XFx0XFx0XFx0IDAsIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jPTcxPXN0YXRpYyBpbnQgc25kX3Zpcm1pZGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxcbi0tXFxuc291bmQvZHJpdmVycy92aXJtaWRpLmMtNzctXFxuc291bmQvZHJpdmVycy92aXJtaWRpLmM6Nzg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldnB0ci1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYy03OS1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmM9MTE3PXN0YXRpYyBpbnQgc25kX2NhcmRfYWQxODE2YV9wcm9iZShpbnQgZGV2LCBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXFxuLS1cXG5zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMtMTI0LVxcbnNvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYzoxMjU6XFx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNhcmQtXFx1MDAzZWNhcmQtXFx1MDAzZWRldixcXG5zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMtMTI2LVxcdFxcdFxcdFxcdCAgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuLS1cXG5zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jPTY5PXN0YXRpYyBpbnQgc25kX2FkMTg0OF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYy03NC1cXG5zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jOjc1OlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYy03Ni1cXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi0tXFxuc291bmQvaXNhL2FkbGliLmM9NDY9c3RhdGljIGludCBzbmRfYWRsaWJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcXG4tLVxcbnNvdW5kL2lzYS9hZGxpYi5jLTUxLVxcbnNvdW5kL2lzYS9hZGxpYi5jOjUyOlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvaXNhL2FkbGliLmMtNTMtXFx0aWYgKGVycm9yIFxcdTAwM2MgMCkge1xcbi0tXFxuc291bmQvaXNhL2FsczEwMC5jPTE2MT1zdGF0aWMgaW50IHNuZF9jYXJkX2FsczEwMF9wcm9iZShpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL2FsczEwMC5jLTE3MC1cXG5zb3VuZC9pc2EvYWxzMTAwLmM6MTcxOlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjYXJkLVxcdTAwM2VjYXJkLVxcdTAwM2VkZXYsXFxuc291bmQvaXNhL2FsczEwMC5jLTE3Mi1cXHRcXHRcXHRcXHQgIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbi0tXFxuc291bmQvaXNhL2F6dDIzMjAuYz0xNjA9c3RhdGljIGludCBzbmRfY2FyZF9henQyMzIwX3Byb2JlKGludCBkZXYsXFxuLS1cXG5zb3VuZC9pc2EvYXp0MjMyMC5jLTE2OS1cXG5zb3VuZC9pc2EvYXp0MjMyMC5jOjE3MDpcXHRlcnJvciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2FyZC1cXHUwMDNlY2FyZC1cXHUwMDNlZGV2LFxcbnNvdW5kL2lzYS9henQyMzIwLmMtMTcxLVxcdFxcdFxcdFxcdCAgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuLS1cXG5zb3VuZC9pc2EvY21pODMyOC5jPTIxOD1zdGF0aWMgaW50IHNuZF9jbWk4MzI4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBuZGV2KVxcbi0tXFxuc291bmQvaXNhL2NtaTgzMjguYy0yOTYtXFxuc291bmQvaXNhL2NtaTgzMjguYzoyOTc6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbbmRldl0sIGlkW25kZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2EvY21pODMyOC5jLTI5OC1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzI4KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL2NtaTgzMzAuYz01MDA9c3RhdGljIGludCBzbmRfY21pODMzMF9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL2NtaTgzMzAuYy01MDYtXFxuc291bmQvaXNhL2NtaTgzMzAuYzo1MDc6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL2NtaTgzMzAuYy01MDgtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfY21pODMzMCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmM9NzY9c3RhdGljIGludCBzbmRfY3M0MjMxX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXFxuLS1cXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jLTgxLVxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmM6ODI6XFx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsIFxcdTAwMjZjYXJkKTtcXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jLTgzLVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLS1cXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jPTMxMz1zdGF0aWMgaW50IHNuZF9jczQyM3hfY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGRldiwgaW50IGRldixcXG4tLVxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMtMzE4LVxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmM6MzE5OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMtMzIwLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYz0xNjQ9c3RhdGljIGludCBzbmRfZXMxNjg4X2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYy0xNjgtXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYzoxNjk6XFx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYy0xNzAtXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHNuZF9lczE2ODgpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jPTI1OT1zdGF0aWMgaW50IHNuZF9lczk2OF9wbnBfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCxcXG4tLVxcbnNvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMtMjc0LVxcbnNvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmM6Mjc1OlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjYXJkLVxcdTAwM2VjYXJkLVxcdTAwM2VkZXYsXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYy0yNzYtXFx0XFx0XFx0XFx0ICBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG4tLVxcbnNvdW5kL2lzYS9lczE4eHguYz0yMDM4PXN0YXRpYyBpbnQgc25kX2VzMTh4eF9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL2VzMTh4eC5jLTIwNDAte1xcbnNvdW5kL2lzYS9lczE4eHguYzoyMDQxOlxcdHJldHVybiBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2EvZXMxOHh4LmMtMjA0Mi1cXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBzbmRfZXMxOHh4KSwgY2FyZHApO1xcbi0tXFxuc291bmQvaXNhL2dhbGF4eS9nYWxheHkuYz00ODE9c3RhdGljIGludCBfX3NuZF9nYWxheHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcXG4tLVxcbnNvdW5kL2lzYS9nYWxheHkvZ2FsYXh5LmMtNDg4LVxcbnNvdW5kL2lzYS9nYWxheHkvZ2FsYXh5LmM6NDg5OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2EvZ2FsYXh5L2dhbGF4eS5jLTQ5MC1cXHRcXHRcXHRcXHRzaXplb2YoKmdhbGF4eSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jPTEzMj1zdGF0aWMgaW50IHNuZF9ndXNjbGFzc2ljX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXFxuLS1cXG5zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYy0xMzctXFxuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmM6MTM4OlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMtMTM5LVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLS1cXG5zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYz0yMzI9c3RhdGljIGludCBzbmRfZ3VzZXh0cmVtZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMtMjQwLVxcbnNvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jOjI0MTpcXHRlcnJvciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYy0yNDItXFx0XFx0XFx0XFx0ICBzaXplb2YoKmd1c2V4dHJlbWUpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2EvZ3VzL2d1c21heC5jPTE4NT1zdGF0aWMgaW50IHNuZF9ndXNtYXhfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldilcXG4tLVxcbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmMtMTk0LVxcbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmM6MTk1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmMtMTk2LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2d1c21heCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmM9NjI1PXN0YXRpYyBpbnQgc25kX2ludGVyd2F2ZV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYy02MzEtXFxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYzo2MzI6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYy02MzMtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfaW50ZXJ3YXZlKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jPTg1Nz1zdGF0aWMgaW50IHNuZF9tc25kX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaWR4KVxcbi0tXFxuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jLTg3MS1cXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmM6ODcyOlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYy04NzMtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfbXNuZCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYz0xMDkwPXN0YXRpYyBpbnQgc25kX21zbmRfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXFxuLS1cXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMtMTEzMS1cXHQgKi9cXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmM6MTEzMjpcXHRyZXQgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNhcmQtXFx1MDAzZWNhcmQtXFx1MDAzZWRldixcXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMtMTEzMy1cXHRcXHRcXHRcXHRpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSxcXG4tLVxcbnNvdW5kL2lzYS9vcGwzc2EyLmM9NTk1PXN0YXRpYyBpbnQgc25kX29wbDNzYTJfY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGRldiwgaW50IGRldixcXG4tLVxcbnNvdW5kL2lzYS9vcGwzc2EyLmMtNjAxLVxcbnNvdW5kL2lzYS9vcGwzc2EyLmM6NjAyOlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9vcGwzc2EyLmMtNjAzLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX29wbDNzYTIpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmM9MTU2MD1zdGF0aWMgaW50IHNuZF9taXJvX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE1NzMtXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jOjE1NzQ6XFx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXZwdHIsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE1NzUtXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHNuZF9taXJvKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jPTE3NzQ9c3RhdGljIGludCBzbmRfbWlyb19wbnBfcHJvYmUoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLFxcbi0tXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE3ODQtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jOjE3ODU6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjYXJkLVxcdTAwM2VjYXJkLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE3ODYtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfbWlybyksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmM9OTA4PXN0YXRpYyBpbnQgc25kX29wdGk5eHhfY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApXFxuLS1cXG5zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jLTkxMi1cXG5zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jOjkxMzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMtOTE0LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2Evc2IvamF6ejE2LmM9MjE1PXN0YXRpYyBpbnQgc25kX2phenoxNl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpXFxuLS1cXG5zb3VuZC9pc2Evc2IvamF6ejE2LmMtMjI1LVxcbnNvdW5kL2lzYS9zYi9qYXp6MTYuYzoyMjY6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2cHRyLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2Evc2IvamF6ejE2LmMtMjI3LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL3NiL3NiMTYuYz0yODk9c3RhdGljIGludCBzbmRfc2IxNl9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIGludCBkZXYsXFxuLS1cXG5zb3VuZC9pc2Evc2Ivc2IxNi5jLTI5NC1cXG5zb3VuZC9pc2Evc2Ivc2IxNi5jOjI5NTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXZwdHIsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9zYi9zYjE2LmMtMjk2LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfc2IxNiksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9zYi9zYjguYz03Mz1zdGF0aWMgaW50IHNuZF9zYjhfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldilcXG4tLVxcbnNvdW5kL2lzYS9zYi9zYjguYy04MC1cXG5zb3VuZC9pc2Evc2Ivc2I4LmM6ODE6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL3NiL3NiOC5jLTgyLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX3NiOCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9zYzYwMDAuYz01NzU9c3RhdGljIGludCBfX3NuZF9zYzYwMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgZGV2KVxcbi0tXFxuc291bmQvaXNhL3NjNjAwMC5jLTU4OC1cXG5zb3VuZC9pc2Evc2M2MDAwLmM6NTg5OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldnB0ciwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL3NjNjAwMC5jLTU5MC1cXHRcXHRcXHRcXHRzaXplb2YoKnNjNjAwMCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9zc2NhcGUuYz0xMjE0PXN0YXRpYyBpbnQgc25kX3NzY2FwZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KVxcbi0tXFxuc291bmQvaXNhL3NzY2FwZS5jLTEyMTktXFxuc291bmQvaXNhL3NzY2FwZS5jOjEyMjA6XFx0cmV0ID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL3NzY2FwZS5jLTEyMjEtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL3NzY2FwZS5jPTEyNjg9c3RhdGljIGludCBzc2NhcGVfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXFxuLS1cXG5zb3VuZC9pc2Evc3NjYXBlLmMtMTMwMi1cXHQgKi9cXG5zb3VuZC9pc2Evc3NjYXBlLmM6MTMwMzpcXHRyZXQgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNhcmQtXFx1MDAzZWNhcmQtXFx1MDAzZWRldixcXG5zb3VuZC9pc2Evc3NjYXBlLmMtMTMwNC1cXHRcXHRcXHRcXHRpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSxcXG4tLVxcbnNvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmM9MzEyPXN0YXRpYyBpbnQgc25kX3dhdmVmcm9udF9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYy0zMTgtXFxuc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYzozMTk6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYy0zMjAtXFx0XFx0XFx0XFx0c2l6ZW9mKHNuZF93YXZlZnJvbnRfY2FyZF90KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2FkMTg4OS5jPTg0MD1fX3NuZF9hZDE4ODlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9hZDE4ODkuYy04NTYtXFx0LyogKDIpICovXFxuc291bmQvcGNpL2FkMTg4OS5jOjg1NzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvYWQxODg5LmMtODU4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYz0yMDg5PXN0YXRpYyBpbnQgX19zbmRfYWxpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMtMjA5Ny1cXG5zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmM6MjA5ODpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jLTIwOTktXFx0XFx0XFx0XFx0c2l6ZW9mKCpjb2RlYyksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hbHMzMDAuYz02NzQ9c3RhdGljIGludCBzbmRfYWxzMzAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYWxzMzAwLmMtNjg4LVxcbnNvdW5kL3BjaS9hbHMzMDAuYzo2ODk6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvYWxzMzAwLmMtNjkwLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hbHM0MDAwLmM9ODAxPXN0YXRpYyBpbnQgX19zbmRfY2FyZF9hbHM0MDAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYWxzNDAwMC5jLTgzOS1cXHRcXG5zb3VuZC9wY2kvYWxzNDAwMC5jOjg0MDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9hbHM0MDAwLmMtODQxLVxcdFxcdFxcdFxcdHNpemVvZigqYWNhcmQpIC8qIHByaXZhdGVfZGF0YTogYWNhcmQgKi8sXFxuLS1cXG5zb3VuZC9wY2kvYXRpaXhwLmM9MTU1Mz1zdGF0aWMgaW50IF9fc25kX2F0aWl4cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL2F0aWl4cC5jLTE1NTktXFxuc291bmQvcGNpL2F0aWl4cC5jOjE1NjA6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9hdGlpeHAuYy0xNTYxLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYz0xMTg1PXN0YXRpYyBpbnQgX19zbmRfYXRpaXhwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMtMTE5MS1cXG5zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmM6MTE5MjpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jLTExOTMtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYz0xOTU9X19zbmRfdm9ydGV4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpXFxuLS1cXG5zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jLTIwOS1cXHQvLyAoMilcXG5zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jOjIxMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMtMjExLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYz0yNTA9c3RhdGljIGludCBzbmRfYXcyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMtMjY2LVxcdC8qICgyKSBDcmVhdGUgY2FyZCBpbnN0YW5jZSAqL1xcbnNvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYzoyNjc6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMtMjY4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9henQzMzI4LmM9MjQwNj1fX3NuZF9hemYzMzI4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpXFxuLS1cXG5zb3VuZC9wY2kvYXp0MzMyOC5jLTI0MjAtXFxuc291bmQvcGNpL2F6dDMzMjguYzoyNDIxOlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2F6dDMzMjguYy0yNDIyLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9idDg3eC5jPTgwMT1zdGF0aWMgaW50IF9fc25kX2J0ODd4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYnQ4N3guYy04MjQtXFxuc291bmQvcGNpL2J0ODd4LmM6ODI1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2J0ODd4LmMtODI2LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYz0xNzEzPXN0YXRpYyBpbnQgX19zbmRfY2EwMTA2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMtMTcyNy1cXG5zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmM6MTcyODpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYy0xNzI5LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9jbWlwY2kuYz0zMTY5PXN0YXRpYyBpbnQgc25kX2NtaXBjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL2NtaXBjaS5jLTMxODItXFxuc291bmQvcGNpL2NtaXBjaS5jOjMxODM6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvY21pcGNpLmMtMzE4NC1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGNtaXBjaSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9jczQyODEuYz0xODE0PXN0YXRpYyBpbnQgX19zbmRfY3M0MjgxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvY3M0MjgxLmMtMTgyOS1cXG5zb3VuZC9wY2kvY3M0MjgxLmM6MTgzMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9jczQyODEuYy0xODMxLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmM9NTQ9c3RhdGljIGludCBzbmRfY2FyZF9jczQ2eHhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMtNjgtXFxuc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYzo2OTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMtNzAtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2NzNTUzMC5jPTE4NT1zdGF0aWMgaW50IHNuZF9jczU1MzBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9jczU1MzAuYy0xOTktXFxuc291bmQvcGNpL2NzNTUzMC5jOjIwMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9jczU1MzAuYy0yMDEtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmM9Mjg2PXN0YXRpYyBpbnQgX19zbmRfY3M1NTM1YXVkaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jLTMwMC1cXG5zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYzozMDE6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYy0zMDItXFx0XFx0XFx0XFx0c2l6ZW9mKCpjczU1MzVhdSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmM9MTkzNz1zdGF0aWMgaW50IF9fc25kX2VjaG9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMtMTk1Mi1cXG5zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jOjE5NTM6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jLTE5NTQtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jPTY5PXN0YXRpYyBpbnQgc25kX2NhcmRfZW11MTBrMV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jLTg2LVxcbnNvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYzo4NzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYy04OC1cXHRcXHRcXHRcXHRzaXplb2YoKmVtdSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmM9MTQ1MD1zdGF0aWMgaW50IF9fc25kX2VtdTEwazF4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jLTE0NjQtXFxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYzoxNDY1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYy0xNDY2LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lbnMxMzcwLmM9MjI3MD1zdGF0aWMgaW50IF9fc25kX2F1ZGlvcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZW5zMTM3MC5jLTIyODQtXFxuc291bmQvcGNpL2VuczEzNzAuYzoyMjg1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2VuczEzNzAuYy0yMjg2LVxcdFxcdFxcdFxcdHNpemVvZigqZW5zb25pcSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lczE5MzguYz0xNjg2PXN0YXRpYyBpbnQgX19zbmRfZXMxOTM4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZXMxOTM4LmMtMTcwMS1cXG5zb3VuZC9wY2kvZXMxOTM4LmM6MTcwMjpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9lczE5MzguYy0xNzAzLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lczE5NjguYz0yNjk1PXN0YXRpYyBpbnQgX19zbmRfZXMxOTY4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZXMxOTY4LmMtMjcxMC1cXG5zb3VuZC9wY2kvZXMxOTY4LmM6MjcxMTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9lczE5NjguYy0yNzEyLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9mbTgwMS5jPTEyNjc9c3RhdGljIGludCBfX3NuZF9jYXJkX2ZtODAxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZm04MDEuYy0xMjgyLVxcbnNvdW5kL3BjaS9mbTgwMS5jOjEyODM6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvZm04MDEuYy0xMjg0LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYz0yNTI3PXN0YXRpYyBpbnQgX19zbmRfdnQxNzI0X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMjU0Mi1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM6MjU0MzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0yNTQ0LVxcdFxcdFxcdFxcdHNpemVvZigqaWNlKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2ludGVsOHgwLmM9MzE3MD1zdGF0aWMgaW50IF9fc25kX2ludGVsOHgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvaW50ZWw4eDAuYy0zMTc3LVxcbnNvdW5kL3BjaS9pbnRlbDh4MC5jOjMxNzg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9pbnRlbDh4MC5jLTMxNzktXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2ludGVsOHgwbS5jPTEyMjE9c3RhdGljIGludCBfX3NuZF9pbnRlbDh4MG1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9pbnRlbDh4MG0uYy0xMjI4LVxcbnNvdW5kL3BjaS9pbnRlbDh4MG0uYzoxMjI5OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvaW50ZWw4eDBtLmMtMTIzMC1cXHRcXHRcXHRcXHRzaXplb2YoKmNoaXApLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYz0yMjE4PXNuZF9rb3JnMTIxMl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMtMjIzMi1cXHR9XFxuc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmM6MjIzMzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jLTIyMzQtXFx0XFx0XFx0XFx0c2l6ZW9mKCprb3JnMTIxMiksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9sb2xhL2xvbGEuYz02NDQ9c3RhdGljIGludCBfX2xvbGFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9sb2xhL2xvbGEuYy02NTgtXFxuc291bmQvcGNpL2xvbGEvbG9sYS5jOjY1OTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9sb2xhL2xvbGEuYy02NjAtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmM9OTgwPXN0YXRpYyBpbnQgc25kX2x4NjQ2NGVzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYy05OTYtXFxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmM6OTk3OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMtOTk4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9tYWVzdHJvMy5jPTI2MzI9X19zbmRfbTNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcXG4tLVxcbnNvdW5kL3BjaS9tYWVzdHJvMy5jLTI2NDktXFxuc291bmQvcGNpL21hZXN0cm8zLmM6MjY1MDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9tYWVzdHJvMy5jLTI2NTEtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL25tMjU2L25tMjU2LmM9MTU1MT1zdGF0aWMgaW50IHNuZF9ubTI1Nl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL25tMjU2L25tMjU2LmMtMTU3Ni1cXG5zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYzoxNTc3OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYy0xNTc4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jPTU3NT1zdGF0aWMgaW50IF9fb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLFxcbi0tXFxuc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMtNTg3LVxcbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jOjU4ODpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgb3duZXIsXFxuc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMtNTg5LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYz0yMDIzPV9fc25kX2NhcmRfcmlwdGlkZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKVxcbi0tXFxuc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jLTIwMzctXFxuc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jOjIwMzg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMtMjAzOS1cXHRcXHRcXHRcXHRzaXplb2YoKmNoaXApLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9wY2kvcm1lMzIuYz0xODEzPV9fc25kX3JtZTMyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpXFxuLS1cXG5zb3VuZC9wY2kvcm1lMzIuYy0xODI3LVxcbnNvdW5kL3BjaS9ybWUzMi5jOjE4Mjg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvcm1lMzIuYy0xODI5LVxcdFxcdFxcdFxcdHNpemVvZigqcm1lMzIpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9wY2kvcm1lOTYuYz0yMzU5PV9fc25kX3JtZTk2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvcm1lOTYuYy0yMzc0LVxcdH1cXG5zb3VuZC9wY2kvcm1lOTYuYzoyMzc1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL3JtZTk2LmMtMjM3Ni1cXHRcXHRcXHRcXHRzaXplb2YoKnJtZTk2KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jPTUzMjY9c3RhdGljIGludCBzbmRfaGRzcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jLTUzNDAtXFxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jOjUzNDE6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMtNTM0Mi1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGhkc3ApLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jPTY4MDA9c3RhdGljIGludCBzbmRfaGRzcG1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMtNjgxNC1cXG5zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jOjY4MTU6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLFxcbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMtNjgxNi1cXHRcXHRcXHRcXHRUSElTX01PRFVMRSwgc2l6ZW9mKCpoZHNwbSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYz0yNDcwPXN0YXRpYyBpbnQgc25kX3JtZTk2NTJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYy0yNDg0LVxcbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYzoyNDg1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jLTI0ODYtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfcm1lOTY1MiksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9zaXM3MDE5LmM9MTMxMj1zdGF0aWMgaW50IF9fc25kX3NpczcwMTlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9zaXM3MDE5LmMtMTMzMi1cXG5zb3VuZC9wY2kvc2lzNzAxOS5jOjEzMzM6XFx0cmMgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL3NpczcwMTkuYy0xMzM0LVxcdFxcdFxcdCAgICAgICBzaXplb2YoKnNpcyksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9zb25pY3ZpYmVzLmM9MTM2NT1zdGF0aWMgaW50IF9fc25kX3NvbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvc29uaWN2aWJlcy5jLTEzODEtIFxcbnNvdW5kL3BjaS9zb25pY3ZpYmVzLmM6MTM4MjpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9zb25pY3ZpYmVzLmMtMTM4My1cXHRcXHRcXHRcXHRzaXplb2YoKnNvbmljKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jPTUzPXN0YXRpYyBpbnQgc25kX3RyaWRlbnRfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYy02OC1cXG5zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmM6Njk6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMtNzAtXFx0XFx0XFx0XFx0c2l6ZW9mKCp0cmlkZW50KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL3ZpYTgyeHguYz0yNDM4PXN0YXRpYyBpbnQgX19zbmRfdmlhODJ4eF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL3ZpYTgyeHguYy0yNDQ2LVxcbnNvdW5kL3BjaS92aWE4Mnh4LmM6MjQ0NzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL3ZpYTgyeHguYy0yNDQ4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMjo0OS45MjU2MTYyNzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAxNDg1NTQ4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyAtIEEgQ3JpdGljYWwgQ29uY3VycmVuY3kgVUFGIGluIEFMU0EgQ29yZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV293LCBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHVzZWQgZXZlcnl3aGVyZSBpbiBBTFNBIGRyaXZlcnMhXCIgVGhlbiBJIHNlZSB0aGF0IGV2ZW4gYHNvdW5kL2RyaXZlcnMvZHVtbXkuY2AgYW5kIGBzb3VuZC9kcml2ZXJzL2Fsb29wLmNgIHVzZSBpdCwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhpcyBpcyB3aXRoaW4gU3l6a2FsbGVyJ3MgcmVhY2guIFRoZSBmYWN0IHRoYXQgdGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIFwic3l6LWNsdXN0ZXJcIiBhbmQgYSBcInBhdGNoIHVuZGVyIHJldmlld1wiIHN0cm9uZ2x5IGhpbnRzIHRoaXMgaXMgYSBmaXggZm9yIGEgU3l6a2FsbGVyLWZvdW5kIGJ1ZyDigJMgYSBVQUYsIG5vIGxlc3MsIGluIGBzbmRfY2FyZF9kb19mcmVlYCByZWxhdGVkIHRvIHRoZSBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBmaWVsZC5cblxuVGhlIHByb21wdCwgb2YgY291cnNlLCB0aHJvd3MgYSBjdXJ2ZWJhbGwgYWJvdXQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBidXQgY29uc2lkZXJpbmcgdGhhdCBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAgYXJlIGVhc2lseSBlbXVsYXRlZCB3aXRoaW4gc3VjaCBlbnZpcm9ubWVudHMsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbk5vdywgbGV0J3MgZGlzc2VjdCB0aGUgY29uZGl0aW9ucyBuZWVkZWQgdG8gdHJpZ2dlciB0aGUgVUFGLiBUaGUgdnVsbmVyYWJpbGl0eSBib2lscyBkb3duIHRvIGBjYXJkYCBiZWluZyBmcmVlZCBieSBgZGV2cmVzYCBiZWZvcmUgYHNuZF9jYXJkX2RvX2ZyZWVgIGNvbXBsZXRlcy4gVGhpcyByZXF1aXJlcyBgc25kX2NhcmRfZnJlZWAgdG8gYmUgY2FsbGVkLCB3aGljaCwgaW4gdHVybiwgd2FpdHMgb24gYHJlbGVhc2VfY29tcGxldGlvbmAuIGBzbmRfY2FyZF9mcmVlYCBpcyBjYWxsZWQgYnkgYF9fc25kX2NhcmRfcmVsZWFzZWAsIHdoaWNoIGlzIHRoZSBgZGV2cmVzYCByZWxlYXNlIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd291bGQgYmUgc3luY2hyb25vdXMuXG5cblNvLCBJIHRyYWNlIHRoZSBleGVjdXRpb246IGBkZXZyZXNgIGNhbGxzIGBfX3NuZF9jYXJkX3JlbGVhc2VgLCB3aGljaCBjYWxscyBgc25kX2NhcmRfZnJlZWAuIGBzbmRfY2FyZF9mcmVlYCBjYWxscyBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIHdoaWNoIGNhbGxzIGBwdXRfZGV2aWNlKFx1MDAyNmNhcmQtXHUwMDNlY2FyZF9kZXYpYC4gSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIGByZWxlYXNlX2NhcmRfZGV2aWNlYCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4gY2FsbHMgYHNuZF9jYXJkX2RvX2ZyZWVgLiBJbnNpZGUgYHNuZF9jYXJkX2RvX2ZyZWVgLCBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCBpcyBjYWxsZWQuIFRoZW4gYHNuZF9jYXJkX2ZyZWVgIHdha2VzIHVwIGFuZCByZXR1cm5zLiBUaGVuIGBfX3NuZF9jYXJkX3JlbGVhc2VgIHJldHVybnMuIFRoZW4gYGRldnJlc2AgZnJlZXMgdGhlIG1lbW9yeSBvZiBgY2FyZGAhIEl0J3MgYWxsIHN5bmNocm9ub3VzLCBhbmQgSSB3YXMgc3RhcnRpbmcgdG8gdGhpbmsgdGhpcyB3YXNuJ3QgYSByZWFsIGJ1Zy5cblxuQnV0IHdhaXQsIGBwdXRfZGV2aWNlYCBpcyB0aGUga2V5LiBJZiBpdCBkcm9wcyB0aGUgKmxhc3QqIHJlZmVyZW5jZSwgdGhlIG9wZXJhdGlvbiBJUyBzeW5jaHJvbm91cy4gSG93ZXZlciwgaWYgdGhlcmUgYXJlIHN0aWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycywgdGhlIHJlZmNvdW50IGlzIGdyZWF0ZXIgdGhhbiAwLiBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAgcmV0dXJucywgYW5kIGBzbmRfY2FyZF9mcmVlYCB3YWl0cy4gTGF0ZXIsIHdoZW4gdGhlIGxhc3QgZmlsZSBkZXNjcmlwdG9yIGlzIGNsb3NlZCAoZS5nLiwgaW4gYGZwdXRgKSwgYHB1dF9kZXZpY2VgIGlzIGNhbGxlZCAqZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQqLiBgcHV0X2RldmljZWAgY2FsbHMgYHJlbGVhc2VfY2FyZF9kZXZpY2VgIC1cdTAwM2UgYHNuZF9jYXJkX2RvX2ZyZWVgLiBJbnNpZGUgYHNuZF9jYXJkX2RvX2ZyZWVgLCBpdCBjYWxscyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgd2hpY2ggd2FrZXMgdXAgdGhlIG9yaWdpbmFsIHRocmVhZCB3YWl0aW5nIGluIGBzbmRfY2FyZF9mcmVlYC4gVGhhdCBmaXJzdCB0aHJlYWQgcmV0dXJucywgYW5kIFRIRU4gYGRldnJlc2AgZnJlZXMgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUuIE1lYW53aGlsZSwgdGhlIHNlY29uZCB0aHJlYWQgY29udGludWVzIGV4ZWN1dGlvbiwgYXR0ZW1wdGluZyB0byBhY2Nlc3MgYGNhcmQtXHUwMDNlbWFuYWdlZGAhIEJpbmdvIVxuXG5UaGlzIGlzIGEgY2xhc3NpYyBhbmQgdmVyeSBleHBsb2l0YWJsZSBjb25jdXJyZW5jeSBVQUYuIFRocmVhZCAxIChkZXZpY2UgcmVtb3ZhbCkgY2FsbHMgdGhlIGBkZXZyZXNgIHJlbGVhc2UgZnVuY3Rpb24sIGFuZCBUaHJlYWQgMiAoY2xvc2luZyB0aGUgbGFzdCBmaWxlIGRlc2NyaXB0b3IpIGV4ZWN1dGVzIHRoZSBmaW5hbCByZWxlYXNlIHBhdGguIFRocmVhZCAyIGFjY2Vzc2VzIHRoZSBmcmVlZCBtZW1vcnksIGNhdXNpbmcgdGhlIFVBRi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRvIHRhcmdldCB0aGlzLCB0aGUgZnV6emluZyBlZmZvcnRzIHNob3VsZCBjb25jZW50cmF0ZSBvbiBgc25kX2NhcmRfZG9fZnJlZWAsIGBzbmRfY2FyZF9mcmVlYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AsIHdpdGggdGhlIEFMU0EgZnJhbWV3b3JrIGVuYWJsZWQsIGFsb25nIHdpdGggZHJpdmVycyBsaWtlIGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjEwLjA3NDE3NDc1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NjU4NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNORF9EVU1NWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnPTQ5PWNvbmZpZyBTTkRfUENTUFxcbi0tXFxuc291bmQvZHJpdmVycy9LY29uZmlnLTc4LVxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZzo3OTpjb25maWcgU05EX0RVTU1ZXFxuc291bmQvZHJpdmVycy9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJEdW1teSAoL2Rldi9udWxsKSBzb3VuZGNhcmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjEwLjE1NTE0OTIxMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjcwNjg5MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgdGhlc2Ugc291bmQgZHJpdmVycyBhcmUgY29uZmlndXJlZCwgc3BlY2lmaWNhbGx5IGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIHNvdW5kIHN1YnN5c3RlbSdzIGNvbmZpZ3VyYXRpb24sIHdoaWNoIEkga25vdyBpcyB0eXBpY2FsbHkgbWFuYWdlZCB1bmRlciB0aGUgYHNvdW5kL2RyaXZlcnMvYCBkaXJlY3RvcnkuIFRoYXQgYEtjb25maWdgIGZpbGUgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBwb2ludCBmb3IgdGhvc2Uga2luZHMgb2YgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IHVwIGFuZCBzZWFyY2ggZm9yIHRob3NlIHN5bWJvbHMuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBwcm9iYWJseSBLY29uZmlnLCBpcyBnb2luZyB0byBkaWN0YXRlIHdoZXRoZXIgb3Igbm90IHRoZXNlIGRyaXZlcnMgYXJlIGV2ZW4gY29tcGlsZWQgaW4sIGJ1aWx0IGFzIG1vZHVsZXMsIG9yIGNvbXBsZXRlbHkgZXhjbHVkZWQuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBhcmNoaXRlY3R1cmVzLiBJdCdzIGEgYnJlYWRjcnVtYiB0cmFpbCBJIGNhbiBmb2xsb3cgdG8gdW5kZXJzdGFuZCB0aGVpciBhdmFpbGFiaWxpdHkgYW5kIGhvdyB0aGV5J3JlIGludGVuZGVkIHRvIGJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjI1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6MTUuNDI1ODQxMTY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3OTpcXHRjb25maWcgU05EX0RVTU1ZXFxuICA4MDpcXHRcXHR0cmlzdGF0ZSBcXFwiRHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkXFxcIlxcbiAgODE6XFx0XFx0c2VsZWN0IFNORF9QQ01cXG4gIDgyOlxcdFxcdGhlbHBcXG4gIDgzOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHRoZSBkdW1teSBkcml2ZXIuICBUaGlzIGRyaXZlciBkb2VzXFxuICA4NDpcXHRcXHQgIG5vdGhpbmcsIGJ1dCBlbXVsYXRlcyB2YXJpb3VzIG1peGVyIGNvbnRyb2xzIGFuZCBQQ00gZGV2aWNlcy5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBZb3UgZG9uJ3QgbmVlZCB0aGlzIHVubGVzcyB5b3UncmUgdGVzdGluZyB0aGUgaGFyZHdhcmUgc3VwcG9ydFxcbiAgODc6XFx0XFx0ICBvZiBwcm9ncmFtcyB1c2luZyB0aGUgQUxTQSBBUEkuXFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgOTA6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzbmQtZHVtbXkuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBTTkRfQUxPT1BcXG4gIDkzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIGxvb3BiYWNrIGRyaXZlciAoUENNKVxcXCJcXG4gIDk0OlxcdFxcdHNlbGVjdCBTTkRfUENNXFxuICA5NTpcXHRcXHRzZWxlY3QgU05EX1RJTUVSXFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFBDTSBsb29wYmFjayBkZXZpY2UuXFxuICA5ODpcXHRcXHQgIFRoaXMgbW9kdWxlIHJldHVybnMgcGxheWVkIHNhbXBsZXMgYmFjayB0byB0aGUgdXNlciBzcGFjZSB1c2luZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzoxNS40MjU5MTk3ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1MjU5ODI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgYSBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gZm9jdXNpbmcgb24gZmluZGluZyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nIGJhc2VkIG9uIGEgc3VzcGVjdGVkIFVzZS1BZnRlci1GcmVlIChVQUYpIGNvbmRpdGlvbi4gYFNORF9EVU1NWWAgYW5kIGBTTkRfQUxPT1BgIGFyZSBsb29raW5nIGxpa2Ugc3Ryb25nIGNvbnRlbmRlcnMgaW5pdGlhbGx5LiBBbmQgYFNORF9VU0JfQVVESU9gIGlzIGFsc28gYXR0cmFjdGl2ZSBiZWNhdXNlIG9mIGl0cyBob3RwbHVnIGNhcGFiaWxpdGllcyB3aXRoaW4gc3l6a2FsbGVyIHVzaW5nIGBkdW1teV9oY2RgLlxuXG5IYW5nIG9uLCBsZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHZ1bG5lcmFiaWxpdHkgc2VlbXMgdGllZCB0byBob3cgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgaXMgbWFuYWdlZCwgcGFydGljdWxhcmx5IHRoZSBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBmbGFnLiBJIGtub3cgZnJvbSBsb29raW5nIGF0IGBzb3VuZC91c2IvY2FyZC5jYCB0aGF0IGl0ICpkb2Vzbid0KiB1c2UgYHNuZF9kZXZtX2NhcmRfbmV3YC4gU28gdGhhdCdzIGltcG9ydGFudC4gRG9lcyBpdCB1c2UgYHNuZF9jYXJkX2ZyZWVgPyBZZXMsIGl0IGRvZXMuIEJ1dCB0aGUgY29yZSBvZiB0aGlzIGJ1ZyBoaW5nZXMgb24gdGhhdCBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBmbGFnLCB3aGljaCBpcyAqb25seSogc2V0IHRvIHRydWUgd2hlbiBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHVzZWQuXG5cblJpZ2h0LCBpZiBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpcyBmYWxzZSwgYHNuZF9jYXJkX2RvX2ZyZWVgIHdpbGwganVzdCBjYWxsIGBrZnJlZShjYXJkKWAuIE9rYXksIHRoYXQncyBjcml0aWNhbC4gSWYgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaXMgZmFsc2UsIG1lYW5pbmcgaXQgKndhc24ndCogYWxsb2NhdGVkIHVzaW5nIHRoZSBcIm1hbmFnZWRcIiB2ZXJzaW9uLCBga2ZyZWUoY2FyZClgIGdldHMgY2FsbGVkIHdpdGhpbiBgc25kX2NhcmRfZG9fZnJlZWAuXG5cbk5vdywgaWYgd2UgaGF2ZSB0d28gdGhyZWFkcywgVGhyZWFkIDIsIGl0IHNlZW1zLCBkb2VzIHRoZSBmb2xsb3dpbmc6XG4tICAgYGNvbXBsZXRlKGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKWBcbi0gICBgaWYgKCFjYXJkLVx1MDAzZW1hbmFnZWQpYCB3aGljaCByZWFkcyBgY2FyZC1cdTAwM2VtYW5hZ2VkYFxuLSAgIGBrZnJlZShjYXJkKWBcblxuQW5kIFRocmVhZCAxIGlzIGRvaW5nIHRoaXM6XG4tICAgYHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2cmVsZWFzZWQpYFxuLSAgIHJldHVybnMgZnJvbSBgc25kX2NhcmRfZnJlZWBcbi0gICByZXR1cm5zIGZyb20gYF9fc25kX2NhcmRfcmVsZWFzZWAgKGJ1dCB0aGlzIGlzICpub3QqIGFwcGxpY2FibGUgYmVjYXVzZSB0aGUgY2FyZCBpc24ndCBtYW5hZ2VkKVxuLSAgIHJldHVybnMgZnJvbSB3aGF0ZXZlciBjYWxsZWQgYHNuZF9jYXJkX2ZyZWVgXG5cbklmIHRoZSBgY2FyZGAgKmlzbid0KiBtYW5hZ2VkLCBUaHJlYWQgMSAqZG9lc24ndCogZnJlZSBgY2FyZGAuIFRocmVhZCAyICpkb2VzKi5cblxuU28sIHdhaXQsIHJlYWRpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaW4gVGhyZWFkIDIgaXMgc2FmZSBiZWNhdXNlIHRoZSBgY2FyZGAgaXRzZWxmIGlzbid0IGZyZWVkIHVudGlsIHRoZSBzdWJzZXF1ZW50IGxpbmUsIGBrZnJlZShjYXJkKWAuIFRoZSBVQUYgKm9ubHkqIGhhcHBlbnMgd2hlbiBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpcyB0cnVlLiBUaGlzIGluIHR1cm4gbWVhbnMgdGhlIGNhcmQgaGFkIHRvIGhhdmUgYmVlbiBhbGxvY2F0ZWQgd2l0aCBgc25kX2Rldm1fY2FyZF9uZXdgLlxuXG5UaGVyZWZvcmUsIHdlIGFic29sdXRlbHkgKm11c3QqIGZvY3VzIG9uIGRyaXZlcnMgdGhhdCB1c2UgYHNuZF9kZXZtX2NhcmRfbmV3YC4gYFNORF9EVU1NWWAgYW5kIGBTTkRfQUxPT1BgIGFyZSBsb29raW5nIGV2ZW4gYmV0dGVyIG5vdy4gVGhlaXIgdmlydHVhbCBuYXR1cmUgaXMgcGVyZmVjdCBmb3IgdGVzdGluZyB0aGlzLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGtlcm5lbCBmb3IgYW55IG90aGVyIHZpcnR1YWwgZHJpdmVycyB0aGF0IGFyZSB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBqdXN0IHRvIGJlIGNlcnRhaW4gd2UgaGF2ZW4ndCBtaXNzZWQgYSBtb3JlIGludGVyZXN0aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzoyMy42Nzg1MjE1MThaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDQ2NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9kZXZtX2NhcmRfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2RyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2RyaXZlcnMvYWxvb3AuYz0xNzk4PXN0YXRpYyBpbnQgbG9vcGJhY2tfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxcbi0tXFxuc291bmQvZHJpdmVycy9hbG9vcC5jLTE4MDQtXFxuc291bmQvZHJpdmVycy9hbG9vcC5jOjE4MDU6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldnB0ci1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmMtMTgwNi1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGxvb3BiYWNrKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvZHJpdmVycy9kdW1teS5jPTEwMTI9c3RhdGljIGludCBzbmRfZHVtbXlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxcbi0tXFxuc291bmQvZHJpdmVycy9kdW1teS5jLTEwMTktXFxuc291bmQvZHJpdmVycy9kdW1teS5jOjEwMjA6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldnB0ci1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL2R1bW15LmMtMTAyMS1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNuZF9kdW1teSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jPTUyPXN0YXRpYyBpbnQgc25kX21wdTQwMV9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2cHRyLCBpbnQgZGV2LFxcbi0tXFxuc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMtNjEtXFx0KnJjYXJkID0gTlVMTDtcXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYzo2MjpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXZwdHIsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jLTYzLVxcdFxcdFxcdFxcdDAsIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2RyaXZlcnMvbXRwYXYuYz02NTI9c3RhdGljIGludCBzbmRfbXRwYXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxcbi0tXFxuc291bmQvZHJpdmVycy9tdHBhdi5jLTY1Ny1cXG5zb3VuZC9kcml2ZXJzL210cGF2LmM6NjU4OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZkZXYtXFx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL210cGF2LmMtNjU5LVxcdFxcdFxcdFxcdHNpemVvZigqbXRwX2NhcmQpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYz02MDA9c3RhdGljIGludCBwY210c3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbnNvdW5kL2RyaXZlcnMvcGNtdGVzdC5jLTYwOS1cXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYzo2MTA6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgXFx1MDAyNmNhcmQpO1xcbnNvdW5kL2RyaXZlcnMvcGNtdGVzdC5jLTYxMS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmM9OTg9c3RhdGljIGludCBzbmRfY2FyZF9wY3NwX3Byb2JlKGludCBkZXZudW0sIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMtMTA3LVxcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmM6MTA4OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgXFx1MDAyNmNhcmQpO1xcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMtMTA5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jPTMyMT1zdGF0aWMgaW50IHNuZF9zZXJpYWxfZ2VuZXJpY19wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxcbi0tXFxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jLTMyNi1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmM6MzI3OlxcdGVyciAgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2c2VyZGV2LVxcdTAwM2VkZXYsIFNORFJWX0RFRkFVTFRfSURYMSxcXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmMtMzI4LVxcdFxcdFxcdFxcdFNORFJWX0RFRkFVTFRfU1RSMSwgVEhJU19NT0RVTEUsXFxuLS1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYz04NDI9c3RhdGljIGludCBzbmRfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cilcXG4tLVxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jLTg4NC1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYzo4ODU6XFx0ZXJyICA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZkZXZwdHItXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMtODg2LVxcdFxcdFxcdFxcdCAwLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYz03MT1zdGF0aWMgaW50IHNuZF92aXJtaWRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cilcXG4tLVxcbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jLTc3LVxcbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jOjc4OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZkZXZwdHItXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvZHJpdmVycy92aXJtaWRpLmMtNzktXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpKSwgXFx1MDAyNmNhcmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzoyMy43Mjg5Nzc3NTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MDQzNzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBBdWRpbyBEcml2ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuUmlnaHQsIGxldCdzIHNlZS4gQmV5b25kIHRoZSB1c3VhbCBzdXNwZWN0cywgSSByZWNhbGwgdGhhdCBgU05EX1BDTVRFU1RgIGFuZCBgU05EX1ZJUk1JRElgIGFyZSBsaWtlbHkgYWxzbyB3b3J0aCBhIGxvb2suIFRoZXkgb2Z0ZW4gcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBvciBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMuIE15IG5leHQgbW92ZSBpcyBjbGVhciDigJMgSSdsbCBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYXVkaW8gZHJpdmVycy4gSSBuZWVkIHRvIGV4YW1pbmUgYHNvdW5kL2RyaXZlcnMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRldGFpbHMsIGRlcGVuZGVuY2llcywgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYm90aCBgU05EX1BDTVRFU1RgIGFuZCBgU05EX1ZJUk1JRElgLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZWlyIHB1cnBvc2UgYW5kIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoaW4gdGhlIG92ZXJhbGwgYXVkaW8gc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQxNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjI2Ljg5OTQxOTYyM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzcyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNORF9QQ01URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC9kcml2ZXJzL0tjb25maWc9OTI9Y29uZmlnIFNORF9BTE9PUFxcbi0tXFxuc291bmQvZHJpdmVycy9LY29uZmlnLTExMS1cXG5zb3VuZC9kcml2ZXJzL0tjb25maWc6MTEyOmNvbmZpZyBTTkRfUENNVEVTVFxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgUENNIHRlc3QgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzoyNi45NDc4NzAyODFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzODAxNjU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBTTkRfVklSTUlESWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIGBTTkRfVklSTUlESWAuLi4gdGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBjZXJ0YWluIGFzc29jaWF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHdoZXJlIHRoYXQgZml0cyBpbiB0aGUgY3VycmVudCBwcm9qZWN0LCBvciBkZWJ1Z2dpbmcgc2NlbmFyaW8uIElzIHRoaXMgYWJvdXQgYSBwb3RlbnRpYWwgZHJpdmVyIGNvbmZsaWN0LCBhIHNwZWNpZmljIHNvdW5kIHN5bnRoZXNpcyBwcm9jZXNzLCBvciBwZXJoYXBzIGEgTUlESSByb3V0aW5nIGlzc3VlPyBUaGUgbmFtZSBzdWdnZXN0cyBzb21ldGhpbmcgdmlydHVhbCwgc28gSSdtIGxpa2VseSBkZWFsaW5nIHdpdGggc29mdHdhcmUtYmFzZWQgTUlESSBpbnRlcmFjdGlvbiwgd2hpY2ggbmFycm93cyBpdCBkb3duIHNvbWV3aGF0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmV2aWV3IHRoZSBjb2RlIHJlbGF0ZWQgdG8gdGhhdCBzdWJzeXN0ZW0uIExldCdzIG1ha2Ugc3VyZSB0aGF0IHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IEkgaGF2ZSB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdGhlIHZpcnR1YWwgTUlESSBwb3J0LiBUaGVuLCBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgY291bGQgaGF2ZSBpbXBhY3RlZCB0aGlzIGFyZWEuIEFyZSB0aGVyZSBhbnkga25vd24gYnVncz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gaW5jb25zaXN0ZW5jaWVzPyBJJ2xsIHByb2JhYmx5IGFsc28gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgc291bmQgY2FyZCBvciB0aGUgTUlESSBzZXR1cC4gSXQncyBhIHF1aWNrIHRyaWFnZTsgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBtb3N0IGxpa2VseSBwcm9ibGVtIGFyZWFzIHF1aWNrbHkgc28gSSBjYW4gZWZmaWNpZW50bHkgZGlhZ25vc2UgdGhlIGlzc3VlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzMwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6MzEuNTg1ODg5NTE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg4ODUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU05EX1ZJUk1JRElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZz0xMTI9Y29uZmlnIFNORF9QQ01URVNUXFxuLS1cXG5zb3VuZC9kcml2ZXJzL0tjb25maWctMTI4LVxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZzoxMjk6Y29uZmlnIFNORF9WSVJNSURJXFxuc291bmQvZHJpdmVycy9LY29uZmlnLTEzMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBNSURJIHNvdW5kY2FyZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6MzEuNjMyNzgxODYyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzgyNDkyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBTb3VuZCBEcml2ZXIgVnVsbmVyYWJpbGl0eSBMYW5kc2NhcGUqKlxuXG5SaWdodCwgb2theSwgYmFzZWQgb24gdGhpcywgaXQgc2VlbXMgd2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgYnVpbGRpbmcgd2l0aCBzdXBwb3J0IGZvciBgU05EX0RVTU1ZYCwgYFNORF9BTE9PUGAsIGBTTkRfUENNVEVTVGAsIGFuZCBgU05EX1ZJUk1JRElgLiBUaGVzZSBhcmUgdGhlIGtleSBtb2R1bGVzIHdlIG5lZWQgdG8gaGF2ZSBhY3RpdmUgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBNeSBmb2N1cywgaG93ZXZlciwgaXMgZ29pbmcgdG8gYmUgZGlyZWN0ZWQgYXQgc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc291bmQgY2FyZCBtYW5hZ2VtZW50IGNvZGUuIFdlIG5lZWQgdG8gemVybyBpbiBvbiBgc25kX2NhcmRfZG9fZnJlZWAsIGBzbmRfY2FyZF9mcmVlYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AuIFRoZXNlIGFyZSBsaWtlbHkgYXJlYXMgd2hlcmUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGNvdWxkIG1hbmlmZXN0IGFzIHZ1bG5lcmFiaWxpdGllcy4gSG1tLCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlzIGBzbmRfY2FyZF9kb19mcmVlYCBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbj8gVGhhdCdzIGdvaW5nIHRvIGNoYW5nZSB0aGluZ3MuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0OyBpZiBpdCdzIHN0YXRpYywgaXQgbGltaXRzIHRoZSBzY29wZSBhbmQgaG93IGVhc2lseSB3ZSBjYW4gdGFyZ2V0IGl0LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBkZWZpbml0aW9u4oCmIHRoYXQgZGVmaW5pdGVseSBpbXBhY3RzIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDEwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzozNS43MTEwMzQzNjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjIzMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9jYXJkX2RvX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvY29yZS9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic291bmQvY29yZS9pbml0LmM9MTQ1PXN0YXRpYyBpbnQgc25kX2NhcmRfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTE0Ny1cXHRcXHRcXHQgc2l6ZV90IGV4dHJhX3NpemUpO1xcbnNvdW5kL2NvcmUvaW5pdC5jOjE0ODpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKTtcXG5zb3VuZC9jb3JlL2luaXQuYy0xNDktc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgY2FyZF9kZXZfYXR0cl9ncm91cDtcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jPTE1MT1zdGF0aWMgdm9pZCByZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5zb3VuZC9jb3JlL2luaXQuYy0xNTIte1xcbnNvdW5kL2NvcmUvaW5pdC5jOjE1MzpcXHRzbmRfY2FyZF9kb19mcmVlKGRldl90b19zbmRfY2FyZChkZXYpKTtcXG5zb3VuZC9jb3JlL2luaXQuYy0xNTQtfVxcbi0tXFxuc291bmQvY29yZS9pbml0LmM9NTgzPUVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XFxuc291bmQvY29yZS9pbml0LmMtNTg0LVxcbnNvdW5kL2NvcmUvaW5pdC5jOjU4NTpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxcbnNvdW5kL2NvcmUvaW5pdC5jLTU4Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjM1Ljc2MDY2MjYxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTc3Njk2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGF1ZGlvIHN5c3RlbXMgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQXVkaW8gQ2FyZCBSZXNvdXJjZSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gU28sIGl0J3Mgbm90IGEgcHVibGljIGVudHJ5IHBvaW50IHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggZGlyZWN0bHkgaW4gdGhpcyBicm9hZGVyIGNvbnRleHQgb2YgYXVkaW8gZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBzbyBpdCdzIHByb2JhYmx5IGFuIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24uIFRoYXQgbWVhbnMgbXkgYXR0ZW50aW9uIHNob3VsZCBzaGlmdCB0byB0aGUgbW9yZSBwdWJsaWMgZmFjaW5nIGNvdW50ZXJwYXJ0czogYHNuZF9jYXJkX2ZyZWVgIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byByZWFsbHkgZm9jdXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGF0IGEgaGlnaGVyIGxldmVsLiBXYWl0IGEgbWludXRlLi4uIGBzbmRfY2FyZF9mcmVlYCBpcyAqZXhwb3J0ZWQqPyBUaGF04oCZcyBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdOKAmXMgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCBkb2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhhdCByZXNvdXJjZXMgYXJlIGNvbnNpc3RlbnRseSBhbmQgY29ycmVjdGx5IG1hbmFnZWQsIGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIGNhcmQgbWlnaHQgYmUgdW5leHBlY3RlZGx5IGNsb3NlZCBvciByZW1vdmVkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJpbmcgc3RhYmxlIGF1ZGlvIHN5c3RlbSBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6MzkuNzc4NDM1NTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDMzNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvY29yZS9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic291bmQvY29yZS9pbml0LmM9NTg1PXN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy02MTEtLyoqXFxuc291bmQvY29yZS9pbml0LmM6NjEyOiAqIHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQgLSBEaXNjb25uZWN0IHRoZSBjYXJkLCBmcmVlIGl0IGxhdGVyIGV2ZW50dWFsbHlcXG5zb3VuZC9jb3JlL2luaXQuYy02MTMtICogQGNhcmQ6IHNvdW5kY2FyZCBzdHJ1Y3R1cmVcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTYyMS0gKi9cXG5zb3VuZC9jb3JlL2luaXQuYzo2MjI6dm9pZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG5zb3VuZC9jb3JlL2luaXQuYy02MjMte1xcbi0tXFxuc291bmQvY29yZS9pbml0LmMtNjMwLX1cXG5zb3VuZC9jb3JlL2luaXQuYzo2MzE6RVhQT1JUX1NZTUJPTChzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKTtcXG5zb3VuZC9jb3JlL2luaXQuYy02MzItXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz02NDY9dm9pZCBzbmRfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTY1OS1cXHRjYXJkLVxcdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24gPSBcXHUwMDI2cmVsZWFzZWQ7XFxuc291bmQvY29yZS9pbml0LmM6NjYwOlxcdHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoY2FyZCk7XFxuc291bmQvY29yZS9pbml0LmMtNjYxLVxcbi0tXFxuc291bmQvY29yZS9pbml0LmM9MTA4OD1FWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZpbGVfYWRkKTtcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTEwOTYtICogIHNuZF9jYXJkX2ZpbGVfYWRkKCkgZnVuY3Rpb24uXFxuc291bmQvY29yZS9pbml0LmM6MTA5NzogKiAgSWYgYWxsIGZpbGVzIGFyZSByZW1vdmVkIGFuZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKCkgd2FzXFxuc291bmQvY29yZS9pbml0LmMtMTA5OC0gKiAgY2FsbGVkIGJlZm9yZWhhbmQsIGl0IHByb2Nlc3NlcyB0aGUgcGVuZGluZyByZWxlYXNlIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjM5LjgyNTQ3NTU2OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk1MDQ3MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBBTFNBIEF1ZGlvIENhcmQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGdpdmVuIGEgdGFzayBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gQUxTQSBzb3VuZCBjYXJkcywgZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBlbnRyeXBvaW50cy4gUmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGVhZGluZyBtZSB0byBmb2N1cyBvbiBgc25kX2NhcmRfZnJlZWAsIGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AuIFRoZXNlIHNlZW0gbGlrZSBzdHJvbmcgY2FuZGlkYXRlcy4gV2FpdCBhIG1pbnV0ZSB0aG91Z2guLi4gSSByZWNhbGwgYHNuZF9jYXJkX2ZyZWVgIGlzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IGBfX3NuZF9jYXJkX3JlbGVhc2VgIHdoaWNoIGlzIGl0c2VsZiB0aWVkIHRvIHRoZSBgZGV2cmVzYCBtZWNoYW5pc20uIEhtbW0sIGlzIGBfX3NuZF9jYXJkX3JlbGVhc2VgIHN0YXRpYz8gWWVzLCBpdCBpcy5cblxuQWgsIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogd2FudHMgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBQZXJmZWN0ISBUaGlzIGNvbmZpcm1zIHRoYXQgYHNuZF9jYXJkX2ZyZWVgLCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgIGFyZSBleGFjdGx5IHdoYXQgSSBzaG91bGQgYmUgbG9va2luZyBhdC4gVGhlc2UgYXJlIHRoZSBvbmVzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLiBJIGtub3cgYFNORGAgaXMgdGhlIGdlbmVyYWwgQUxTQSBjb25maWd1cmF0aW9uIHN5bWJvbCwgc28gbGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYHNvdW5kL0tjb25maWdgIGZpbGUgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIFRoaXMgcXVpY2sgY2hlY2sgd2lsbCBnaXZlIG1lIHBlYWNlIG9mIG1pbmQgYmVmb3JlIEkgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6NDUuMTIwNTI4NjUyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODcxMzUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU05EJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL0tjb25maWc9NDA9c291cmNlIFxcXCJzb3VuZC9vc3MvZG1hc291bmQvS2NvbmZpZ1xcXCJcXG5zb3VuZC9LY29uZmlnLTQxLVxcbnNvdW5kL0tjb25maWc6NDI6bWVudWNvbmZpZyBTTkRcXG5zb3VuZC9LY29uZmlnLTQzLVxcdHRyaXN0YXRlIFxcXCJBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjQ1LjE2OTI0ODg2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5Mzc3MDM5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGF1ZGlvIGV4cGVydDpcblxuKipBdWRpbyBEZXZpY2UgRGlzY292ZXJ5IGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgYXVkaW8gc3lzdGVtLiBGaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBTTkRgIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZC4gVGhlbiwgSSBzZWUgYSBsaXN0IG9mIG90aGVyIGF1ZGlvIGRldmljZSB0eXBlczogYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBhbmQgYFNORF9WSVJNSURJYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIGFsbCB1c2VmdWwgY29tcG9uZW50cy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlua2luZyBhYm91dCB0aGVzZSBuZXcgcGllY2VzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdWxseSBhd2FyZSBvZiB0aGVpciBpbXBvcnRhbmNlIGFuZCBwb3NzaWJsZSBjb21wbGV4aXR5LiBIb2xkIG9uLi4uIGRvZXMgYFNORF9EVU1NWWAgYWN0dWFsbHkgcmVseSBvbiBhbnkgb3RoZXIgbW9kdWxlIG9yIHBpZWNlIG9mIHRoZSBjb3JlIHN5c3RlbT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIGJlY2F1c2UgaWYgaXQgKmRvZXMqIGRlcGVuZCBvbiBzb21ldGhpbmcsIHRoYXQgY2hhbmdlcyB0aGUgd2hvbGUgcGljdHVyZS4gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIHRoZSBoaWVyYXJjaHksIHRoZSBkZXBlbmRlbmNpZXMuIE5lZWQgdG8gZmlndXJlIHRoYXQgb3V0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzo1MS4xMDY5NTYxMjRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODg4OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTkRfRFVNTVlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZz00OT1jb25maWcgU05EX1BDU1BcXG4tLVxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy03OC1cXG5zb3VuZC9kcml2ZXJzL0tjb25maWc6Nzk6Y29uZmlnIFNORF9EVU1NWVxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiRHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzo1MS4xNTQ4NTEyNzJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3NTAyMTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBTTkRfRFVNTVkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBzb3VuZC9kcml2ZXJzL0tjb25maWdgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFNORF9EVU1NWWAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgbG9naWMgdGhhdCBkZWZpbmVzIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBkdW1teSBzb3VuZCBkcml2ZXIgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGNvbW1lbnRzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgaW50ZW5kZWQgdXNlIGNhc2UuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogRG9lcyBpdCByZWx5IG9uIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBkcml2ZXIgbWlnaHQgYmUgc2VsZWN0ZWQgaW4gc29tZSBidWlsZHMgYnV0IG5vdCBpbiBvdGhlcnMuXG4qICAgKipEZWZhdWx0IFN0YXRlOioqIElzIGBTTkRfRFVNTVlgIHVzdWFsbHkgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGRldGVybWluZWQgYnkgc29tZSBvdGhlciBmYWN0b3I/IFVuZGVyc3RhbmRpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBzdHJhdGVneS5cbiogICAqKkhlbHAgVGV4dDoqKiBIb3BlZnVsbHksIHRoZXJlJ3Mgc29tZSBkZWNlbnQgaGVscCB0ZXh0LiBJIGFtIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb25hbGl0eSB0aGlzIGRyaXZlciBwcm92aWRlcywgYW5kIHRoZSB0eXBlcyBvZiBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBpcyBtZWFudCB0byBiZSBlbmFibGVkLlxuKiAgICoqTG9jYXRpb246KiogV2hlcmUgZG9lcyB0aGlzIGRyaXZlciBwaHlzaWNhbGx5IHJlc2lkZSwgYW5kIGNhbiBJIGlkZW50aWZ5IHNpbWlsYXIgZHJpdmVycyB0aGF0IHdpbGwgcG9pbnQgdG8gYSBsYXJnZXIgcmVsYXRpb25zaGlwLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSdtIHJlYWR5IGZvciBhbnl0aGluZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjU1LjUyOTg3NzQ1MloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzb3VuZC9kcml2ZXJzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0XFxuICA3MTpcXHRcXHQgIFlvdSBkb24ndCBuZWVkIHRoaXMgZHJpdmVyIGlmIHlvdSBvbmx5IHdhbnQgeW91ciBwYy1zcGVha2VyIHRvIGJlZXAuXFxuICA3MjpcXHRcXHQgIFlvdSBkb24ndCBuZWVkIHRoaXMgZHJpdmVyIGlmIHlvdSBoYXZlIGEgdGFibGV0IHBpZXpvIGJlZXBlclxcbiAgNzM6XFx0XFx0ICBpbiB5b3VyIFBDIGluc3RlYWQgb2YgdGhlIHJlYWwgc3BlYWtlci5cXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0ICBTYXkgTiBpZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQuXFxuICA3NjpcXHRcXHQgIFNheSBNIGlmIHlvdSBkb24ndC5cXG4gIDc3OlxcdFxcdCAgU2F5IFkgb25seSBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgZG8uXFxuICA3ODpcXHRcXG4gIDc5OlxcdGNvbmZpZyBTTkRfRFVNTVlcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJEdW1teSAoL2Rldi9udWxsKSBzb3VuZGNhcmRcXFwiXFxuICA4MTpcXHRcXHRzZWxlY3QgU05EX1BDTVxcbiAgODI6XFx0XFx0aGVscFxcbiAgODM6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIGR1bW15IGRyaXZlci4gIFRoaXMgZHJpdmVyIGRvZXNcXG4gIDg0OlxcdFxcdCAgbm90aGluZywgYnV0IGVtdWxhdGVzIHZhcmlvdXMgbWl4ZXIgY29udHJvbHMgYW5kIFBDTSBkZXZpY2VzLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIFlvdSBkb24ndCBuZWVkIHRoaXMgdW5sZXNzIHlvdSdyZSB0ZXN0aW5nIHRoZSBoYXJkd2FyZSBzdXBwb3J0XFxuICA4NzpcXHRcXHQgIG9mIHByb2dyYW1zIHVzaW5nIHRoZSBBTFNBIEFQSS5cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjU1LjUyOTk2NTkxMloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk4MDA5OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgYW5kIFNORF9BTE9PUCoqXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGhlcmUgY2VudGVycyBvbiBkZXBlbmRlbmNpZXMg4oCTIG9yIHJhdGhlciwgdGhlICpsYWNrKiB0aGVyZW9mLiBXaGVuIGV2YWx1YXRpbmcgYSBuZXcgc3lzdGVtLCBwcm90b2NvbCwgb3IgcG90ZW50aWFsIGludGVncmF0aW9uLCBJIGFsd2F5cyBiZWdpbiBieSBhc3Nlc3NpbmcgaXRzIHJlbGlhbmNlIG9uIGV4dGVybmFsIGNvbXBvbmVudHMuIFwiTm8gZGVwZW5kZW5jaWVzXCIgaXMgYSBzaWduaWZpY2FudCBzdGF0ZW1lbnQuIEl0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgY2VydGFpbiBsZXZlbCBvZiBzZWxmLWNvbnRhaW5tZW50LCBwb3RlbnRpYWxseSBpbmNyZWFzZWQgcG9ydGFiaWxpdHksIG9yIG1heWJlIGV2ZW4gYSBzaW1wbGVyIGRlcGxveW1lbnQgbW9kZWwuIFRoYXQgc2ltcGxpY2l0eSBpcyBhdHRyYWN0aXZlLCBvYnZpb3VzbHkuXG5cbkhvd2V2ZXIsIHRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3Mg4oCTIFwiV2hhdCBhYm91dCBgU05EX0FMT09QYD9cIiDigJMgY3V0cyByaWdodCB0byB0aGUgaGVhcnQgb2YgcHJhY3RpY2FsIGFwcGxpY2F0aW9uLiBUaGUgbG9vcGJhY2sgc291bmQgZGV2aWNlIChgU05EX0FMT09QYCkgaXMgZnVuZGFtZW50YWwgaW4gbWFueSBhdWRpbyBzeXN0ZW1zLCBwYXJ0aWN1bGFybHkgZm9yIGNhcHR1cmluZyBhbmQgcm91dGluZyBzb3VuZCBpbnRlcm5hbGx5IHdpdGhpbiBhIHN5c3RlbS4gRXZlbiBpZiBzb21ldGhpbmcgaXMgZGVzaWduZWQgd2l0aCAqbm8gZGVjbGFyZWQqIGRlcGVuZGVuY2llcywgaXQgaXMgbGlrZWx5IHRvIGhhdmUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucy4gVGhpcyByYWlzZXMgY29uY2VybnMuIERvZXMgdGhpcyBtZWFuIGl0IHdvbid0ICp3b3JrKiB3aXRoIGBTTkRfQUxPT1BgPyBJcyBpdCBpbnRlbnRpb25hbGx5IGJ5cGFzc2luZyBpdD8gT3IgcGVyaGFwcywgdGhlIGludGVncmF0aW9uIGlzIGRlc2lnbmVkIHdpdGggYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIGxvb3BiYWNrIGRldmljZS5cblxuSSB3b3VsZCBuZWVkIHRvIGtub3cgbW9yZSBhYm91dCB0aGUgY29udGV4dC4gS25vd2luZyB0aGUgYW5zd2VyIHRvIHRoYXQgcXVlc3Rpb24gd291bGQgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byB0aGUgZmxleGliaWxpdHkgb2YgdGhlIGRlc2lnbiwgYW5kIHRvIHdoaWNoIHN5c3RlbXMgaXQgY2FuIGJlIGltcGxlbWVudGVkLiBVbHRpbWF0ZWx5LCB0aGUgcXVlc3Rpb24gc2lnbmFscyBteSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlLCBhbmQgaXQncyByZWxhdGlvbnNoaXAgd2l0aCBzdGFuZGFyZCBhdWRpbyBzZXR1cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzo1OS41Mjc5NzkzNzNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc25kLWR1bW15LlxcbiAgOTE6XFx0XFxuICA5MjpcXHRjb25maWcgU05EX0FMT09QXFxuICA5MzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBsb29wYmFjayBkcml2ZXIgKFBDTSlcXFwiXFxuICA5NDpcXHRcXHRzZWxlY3QgU05EX1BDTVxcbiAgOTU6XFx0XFx0c2VsZWN0IFNORF9USU1FUlxcbiAgOTY6XFx0XFx0aGVscFxcbiAgOTc6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQQ00gbG9vcGJhY2sgZGV2aWNlLlxcbiAgOTg6XFx0XFx0ICBUaGlzIG1vZHVsZSByZXR1cm5zIHBsYXllZCBzYW1wbGVzIGJhY2sgdG8gdGhlIHVzZXIgc3BhY2UgdXNpbmdcXG4gIDk5OlxcdFxcdCAgdGhlIHN0YW5kYXJkIEFMU0EgUENNIGRldmljZS4gVGhlIGRldmljZXMgYXJlIHJvdXRlZCAwLVxcdTAwM2UxIGFuZFxcbiAxMDA6XFx0XFx0ICAxLVxcdTAwM2UwLCB3aGVyZSBmaXJzdCBudW1iZXIgaXMgdGhlIHBsYXliYWNrIFBDTSBkZXZpY2UgYW5kIHNlY29uZFxcbiAxMDE6XFx0XFx0ICBudW1iZXIgaXMgdGhlIGNhcHR1cmUgZGV2aWNlLiBNb2R1bGUgY3JlYXRlcyB0d28gUENNIGRldmljZXMgYW5kXFxuIDEwMjpcXHRcXHQgIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHN1YnN0cmVhbXMgKHNlZSB0aGUgcGNtX3N1YnN0cmVhbXMgbW9kdWxlXFxuIDEwMzpcXHRcXHQgIHBhcmFtZXRlcikuXFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdCAgVGhlIGxvb3BiYWNrIGRldmljZSBhbGxvd3MgdGltZSBzeW5jaHJvbml6YXRpb24gd2l0aCBhbiBleHRlcm5hbFxcbiAxMDY6XFx0XFx0ICB0aW1pbmcgc291cmNlIHVzaW5nIHRoZSB0aW1lIHNoaWZ0IHVuaXZlcnNhbCBjb250cm9sICgrLTIwJVxcbiAxMDc6XFx0XFx0ICBvZiBzeXN0ZW0gdGltZSkuXFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzo1OS41MjgwNzE3NjRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0Mjc4MTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbmRlcGVuZGVudCBBc3Nlc3NtZW50IFx1MDAyNiBQQ00gQ29uc2lkZXJhdGlvbioqXG5cblJpZ2h0LCBubyBpbW1lZGlhdGUsIG9idmlvdXMgZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGNsZWFuIGV2YWx1YXRpb24uIEJ1dCBob2xkIG9uLCBiZWZvcmUgSSBnZXQgdG9vIGNhcnJpZWQgYXdheSB3aXRoIHRoYXQsIEkgbmVlZCB0byBjb25zaWRlciBgU05EX1BDTVRFU1RgLiBJIGtub3cgaXQncyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSAqaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlKiwgYnV0IGl0J3MgYSBjcml0aWNhbCB0b29sIGZvciB2YWxpZGF0aW9uIGFuZCByZWdyZXNzaW9uIHRlc3RpbmcgaW4gdGhpcyBzcGFjZSwgcmlnaHQ/IElnbm9yaW5nIGl0IHdvdWxkIGJlIGZvb2xpc2gsIGV2ZW4gaWYgaXQgZG9lc24ndCBhcHBlYXIgaW4gYSBkaXJlY3QgbGlua2luZyBvciBjb21waWxhdGlvbiBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gZmFjdG9yIGluIGhvdyBJJ2xsIHVzZSBgU05EX1BDTVRFU1RgIG9yIHNpbWlsYXIgdXRpbGl0aWVzIGR1cmluZyB2YWxpZGF0aW9uLCBhcyBJIHByb2dyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzg5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MDIuNzcwODU2NTI3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzbmQtYWxvb3AuXFxuIDExMTpcXHRcXG4gMTEyOlxcdGNvbmZpZyBTTkRfUENNVEVTVFxcbiAxMTM6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgUENNIHRlc3QgZHJpdmVyXFxcIlxcbiAxMTQ6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbiAxMTU6XFx0XFx0c2VsZWN0IFNORF9QQ01cXG4gMTE2OlxcdFxcdGhlbHBcXG4gMTE3OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgVmlydHVhbCBQQ00gdGVzdCBkcml2ZXIuXFxuIDExODpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGFpbWVkIGF0IGV4dGVuZGVkIHRlc3Rpbmcgb2YgdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnNcXG4gMTE5OlxcdFxcdCAgd2hpY2ggdXNlIHRoZSBBTFNBIEFQSSwgYXMgd2VsbCBhcyB0aGUgUENNIG1pZGRsZSBsYXllciB0ZXN0aW5nLlxcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHQgIEl0IGNhbiBnZW5lcmF0ZSByYW5kb20gb3IgcGF0dGVybi1iYXNlZCBkYXRhIGludG8gdGhlIGNhcHR1cmUgc3RyZWFtLFxcbiAxMjI6XFx0XFx0ICBjaGVjayB0aGUgcGxheWJhY2sgc3RyZWFtIGZvciBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBwYXR0ZXJuLCBpbmplY3RcXG4gMTIzOlxcdFxcdCAgdGltZSBkZWxheXMgZHVyaW5nIGNhcHR1cmUvcGxheWJhY2ssIHJlZGVmaW5lIHRoZSBSRVNFVCBpb2N0bCBvcGVyYXRpb25cXG4gMTI0OlxcdFxcdCAgdG8gcGVyZm9ybSB0aGUgUENNIG1pZGRsZSBsYXllciB0ZXN0aW5nIGFuZCBpbmplY3QgZXJyb3JzIGR1cmluZyB0aGVcXG4gMTI1OlxcdFxcdCAgUENNIGNhbGxiYWNrcy4gSXQgc3VwcG9ydHMgYm90aCBpbnRlcmxlYXZlZCBhbmQgbm9uLWludGVybGVhdmVkIGFjY2Vzc1xcbiAxMjY6XFx0XFx0ICBtb2Rlcy4gWW91IGNhbiBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IGluIHRoZSAnYWxzYSdcXG4gMTI3OlxcdFxcdCAgc2VsZnRlc3RzIGZvbGRlci5cXG4gMTI4OlxcdFxcbiAxMjk6XFx0Y29uZmlnIFNORF9WSVJNSURJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjAyLjc3MDk0NjEyN1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjI3MjIxODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgQUxTQSBLZXJuZWwgTW9kdWxlIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IGBTTkRfUENNVEVTVGAg4oCTIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgbW9kdWxlIHJlcXVpcmVzIGBERUJVR19GU2AuIFRoYXQncyBub3QgdW5leHBlY3RlZDsgaXQgbWFrZXMgc2Vuc2UgZm9yIHRlc3RpbmcgdXRpbGl0aWVzIHRvIHVzZSB0aGUgZGVidWdnaW5nIGZpbGUgc3lzdGVtLiBCdXQsIGl0IGdvdCBtZSB0aGlua2luZy4uLiB3aGF0J3MgdGhlIGRlcGVuZGVuY3kgc2l0dWF0aW9uIHdpdGggYFNORF9WSVJNSURJYD8gSSB3b25kZXIgaWYgaXQgaGFzIGFueSBzaW1pbGFyIHJlcXVpcmVtZW50cywgb3IgaWYgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgc2VsZi1jb250YWluZWQuIE5lZWQgdG8gZHJpbGwgZG93biBvbiB0aGF0IG9uZSBhbmQgY2hlY2sgaXRzIGNvbmZpZyBvcHRpb25zIGFuZCBhbnkgcG90ZW50aWFsIHNoYXJlZCBjb2RlLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaWYgYFZJUk1JRElgIGlzIGFub3RoZXIgY2FuZGlkYXRlIHRvIGJlIHB1bGxlZCBpbiBjb25kaXRpb25hbGx5IG9yIGlmIGl0IGlzIGluZGVwZW5kZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MDcuMzk4MTcxMjNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyOTpcXHRjb25maWcgU05EX1ZJUk1JRElcXG4gMTMwOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIE1JREkgc291bmRjYXJkXFxcIlxcbiAxMzE6XFx0XFx0ZGVwZW5kcyBvbiBTTkRfU0VRVUVOQ0VSXFxuIDEzMjpcXHRcXHRzZWxlY3QgU05EX1RJTUVSXFxuIDEzMzpcXHRcXHRzZWxlY3QgU05EX1JBV01JRElcXG4gMTM0OlxcdFxcdHNlbGVjdCBTTkRfU0VRX1ZJUk1JRElcXG4gMTM1OlxcdFxcdHNlbGVjdCBTTkRfU0VRX01JRElfRVZFTlRcXG4gMTM2OlxcdFxcdGhlbHBcXG4gMTM3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHRoZSB2aXJ0dWFsIE1JREkgZHJpdmVyLiAgVGhpcyBkcml2ZXJcXG4gMTM4OlxcdFxcdCAgYWxsb3dzIHRvIGNvbm5lY3QgYXBwbGljYXRpb25zIHVzaW5nIHJhdyBNSURJIGRldmljZXMgdG9cXG4gMTM5OlxcdFxcdCAgc2VxdWVuY2VyIGNsaWVudHMuXFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBNSURJIGlzLCBzYXkgTiBoZXJlLlxcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTQ0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc25kLXZpcm1pZGkuXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBTTkRfTVRQQVZcXG4gMTQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJNT1RVIE1pZGlUaW1lUGllY2UgQVYgbXVsdGlwb3J0IE1JRElcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT1BPUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MDcuMzk4MjU5NDE5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjc3NjMwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgc29tZSBzb3VuZCBkcml2ZXJzIHRvIHNlZSBpZiBJIGNhbiBzaGFrZSBsb29zZSBhbnkgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLiBgU05EX1ZJUk1JRElgIGlzIHRoZSBmaXJzdCBvbmUgdGhhdCBqdW1wcyBvdXQsIGJ1dCB0aGF0J3MgZGVwZW5kZW50IG9uIGBTTkRfU0VRVUVOQ0VSYCwgc28gSSdsbCBuZWVkIHRvIGluY2x1ZGUgYm90aCBvZiB0aGVtLiBMZXQncyBzdGFydCB3aXRoIGEgYmFzZSBjb25maWd1cmF0aW9uOiBgU05EYCwgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBgREVCVUdfRlNgLCBgU05EX1ZJUk1JRElgLCBhbmQgYFNORF9TRVFVRU5DRVJgIHRvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5IYW5nIG9uLCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgYFNORF9VU0JfQVVESU9gIG1pZ2h0IGJlIGEgZ29vZCBhZGRpdGlvbiBhcyB3ZWxsLiBJIHJlY2FsbCB0aGF0IGl0J3MgZ290IHNvbWUgZXJyb3IgcGF0aHMgdGhhdCB1dGlsaXplIGBzbmRfY2FyZF9mcmVlYCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBhcmVhIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nLiBQbHVzLCBVU0IgaXMgYSBwcmV0dHkgcmljaCBhdHRhY2sgc3VyZmFjZS4gWWVhaCwgbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgU05EX1VTQl9BVURJT2AgYW5kIG1ha2Ugc3VyZSBpdCdzIHVwIHRvIHNudWZmIGZvciB0aGlzIGV4ZXJjaXNlLiBJdCdzIHByb2JhYmx5IHdvcnRoIHRoZSBlZmZvcnQgdG8gYWRkIGl0IHRvIHRoZSBtaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MTIuNjY2MDI1OTEzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQyMTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU05EX1VTQl9BVURJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC91c2IvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC91c2IvS2NvbmZpZz0xMT1pZiBTTkRfVVNCIFxcdTAwMjZcXHUwMDI2IFVTQlxcbnNvdW5kL3VzYi9LY29uZmlnLTEyLVxcbnNvdW5kL3VzYi9LY29uZmlnOjEzOmNvbmZpZyBTTkRfVVNCX0FVRElPXFxuc291bmQvdXNiL0tjb25maWctMTQtXFx0dHJpc3RhdGUgXFxcIlVTQiBBdWRpby9NSURJIGRyaXZlclxcXCJcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnLTI3LVxcbnNvdW5kL3VzYi9LY29uZmlnOjI4OmNvbmZpZyBTTkRfVVNCX0FVRElPX01JRElfVjJcXG5zb3VuZC91c2IvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJNSURJIDIuMCBzdXBwb3J0IGJ5IFVTQiBBdWRpbyBkcml2ZXJcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy0zNy1cXG5zb3VuZC91c2IvS2NvbmZpZzozODpjb25maWcgU05EX1VTQl9BVURJT19VU0VfTUVESUFfQ09OVFJPTExFUlxcbnNvdW5kL3VzYi9LY29uZmlnLTM5LVxcdGJvb2xcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnPTE3OD1jb25maWcgU05EX0JDRDIwMDBcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnLTE5MC1cXG5zb3VuZC91c2IvS2NvbmZpZzoxOTE6Y29uZmlnIFNORF9VU0JfQVVESU9fUU1JXFxuc291bmQvdXNiL0tjb25maWctMTkyLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBBdWRpbyBPZmZsb2FkIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MTIuNzExNDU0MjgyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjIyMzUxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRlcGVuZGVuY3kgQW5hbHlzaXM6IEF1ZGlvIE92ZXIgVVNCKipcblxuT2theSwgc28gYFNORF9VU0JfQVVESU9gLi4uIHRoYXQncyBvdXIgYXVkaW8gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgVVNCIGRldmljZXMsIHJpZ2h0PyBNYWtlcyBzZW5zZS4gTm93LCBiZWZvcmUgSSBldmVuIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mICp0aGF0KiBwYXJ0aWN1bGFyIGRyaXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBkZXBlbmRlbmNpZXMuIFRoZSB0ZXh0IGNsZWFybHkgc3RhdGVzIHRoYXQgYFNORF9VU0JfQVVESU9gIGlzIGJ1aWx0IHVwb24gYm90aCBgU05EX1VTQmAgYW5kIGBVU0JgLiBUaGF0IHRlbGxzIG1lIEkgY2FuJ3QgZXZlbiBiZWdpbiB0byB0cm91Ymxlc2hvb3Qgb3IgY29uZmlndXJlIHRoZSBhdWRpbyBzaWRlIHVudGlsIEkgdmVyaWZ5IHRoZSBsb3dlci1sZXZlbCBVU0IgYW5kIGdlbmVyaWMgVVNCIHNvdW5kIHN1cHBvcnQgYXJlIGNvcnJlY3RseSBlbmFibGVkIGFuZCBmdW5jdGlvbmluZy4gVGhlcmVmb3JlLCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYFNORF9VU0JgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGdlbmVyYWwgVVNCIHNvdW5kIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcyBleHBlY3RlZC4gTm8gcG9pbnQgaW4gbG9va2luZyBhdCB0aGUgYXVkaW8gZGV0YWlscyBpZiB0aGUgVVNCIHBsdW1iaW5nIGlzIGJyb2tlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozNDoxNi4wNzM2OTMyNTJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzMyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTkRfVVNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL3VzYi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL3VzYi9LY29uZmlnLTMtXFxuc291bmQvdXNiL0tjb25maWc6NDptZW51Y29uZmlnIFNORF9VU0JcXG5zb3VuZC91c2IvS2NvbmZpZy01LVxcdGJvb2wgXFxcIlVTQiBzb3VuZCBkZXZpY2VzXFxcIlxcbi0tXFxuc291bmQvdXNiL0tjb25maWc9MTE9aWYgU05EX1VTQiBcXHUwMDI2XFx1MDAyNiBVU0JcXG5zb3VuZC91c2IvS2NvbmZpZy0xMi1cXG5zb3VuZC91c2IvS2NvbmZpZzoxMzpjb25maWcgU05EX1VTQl9BVURJT1xcbnNvdW5kL3VzYi9LY29uZmlnLTE0LVxcdHRyaXN0YXRlIFxcXCJVU0IgQXVkaW8vTUlESSBkcml2ZXJcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy0yNy1cXG5zb3VuZC91c2IvS2NvbmZpZzoyODpjb25maWcgU05EX1VTQl9BVURJT19NSURJX1YyXFxuc291bmQvdXNiL0tjb25maWctMjktXFx0Ym9vbCBcXFwiTUlESSAyLjAgc3VwcG9ydCBieSBVU0IgQXVkaW8gZHJpdmVyXFxcIlxcbi0tXFxuc291bmQvdXNiL0tjb25maWctMzctXFxuc291bmQvdXNiL0tjb25maWc6Mzg6Y29uZmlnIFNORF9VU0JfQVVESU9fVVNFX01FRElBX0NPTlRST0xMRVJcXG5zb3VuZC91c2IvS2NvbmZpZy0zOS1cXHRib29sXFxuc291bmQvdXNiL0tjb25maWctNDAtXFxuc291bmQvdXNiL0tjb25maWc6NDE6Y29uZmlnIFNORF9VU0JfVUExMDFcXG5zb3VuZC91c2IvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiRWRpcm9sIFVBLTEwMS9VQS0xMDAwIGRyaXZlclxcXCJcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnLTUxLVxcbnNvdW5kL3VzYi9LY29uZmlnOjUyOmNvbmZpZyBTTkRfVVNCX1VTWDJZXFxuc291bmQvdXNiL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIlRhc2NhbSBVUy0xMjIsIFVTLTIyNCBhbmQgVVMtNDI4IFVTQiBkcml2ZXJcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy02NC1cXG5zb3VuZC91c2IvS2NvbmZpZzo2NTpjb25maWcgU05EX1VTQl9DQUlBUVxcbnNvdW5kL3VzYi9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJOYXRpdmUgSW5zdHJ1bWVudHMgVVNCIGF1ZGlvIGRldmljZXNcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy05MS1cXG5zb3VuZC91c2IvS2NvbmZpZzo5Mjpjb25maWcgU05EX1VTQl9DQUlBUV9JTlBVVFxcbnNvdW5kL3VzYi9LY29uZmlnLTkzLVxcdGJvb2wgXFxcImVuYWJsZSBpbnB1dCBkZXZpY2UgZm9yIGNvbnRyb2xsZXJzXFxcIlxcbi0tXFxuc291bmQvdXNiL0tjb25maWctMTA3LVxcbnNvdW5kL3VzYi9LY29uZmlnOjEwODpjb25maWcgU05EX1VTQl9VUzEyMkxcXG5zb3VuZC91c2IvS2NvbmZpZy0xMDktXFx0dHJpc3RhdGUgXFxcIlRhc2NhbSBVUy0xMjJMIFVTQiBkcml2ZXJcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy0xMTktXFxuc291bmQvdXNiL0tjb25maWc6MTIwOmNvbmZpZyBTTkRfVVNCX1VTMTQ0TUtJSVxcbnNvdW5kL3VzYi9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiVGFzY2FtIFVTLTE0NE1LSUkgVVNCIGRyaXZlclxcXCJcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnLTEzMS1cXG5zb3VuZC91c2IvS2NvbmZpZzoxMzI6Y29uZmlnIFNORF9VU0JfNkZJUkVcXG5zb3VuZC91c2IvS2NvbmZpZy0xMzMtXFx0dHJpc3RhdGUgXFxcIlRlcnJhVGVjIERNWCA2RmlyZSBVU0JcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy0xNDYtXFxuc291bmQvdXNiL0tjb25maWc6MTQ3OmNvbmZpZyBTTkRfVVNCX0hJRkFDRVxcbnNvdW5kL3VzYi9LY29uZmlnLTE0OC1cXHR0cmlzdGF0ZSBcXFwiTTJUZWNoIGhpRmFjZSBVU0ItU1BESUYgZHJpdmVyXFxcIlxcbi0tXFxuc291bmQvdXNiL0tjb25maWc9MTc4PWNvbmZpZyBTTkRfQkNEMjAwMFxcbi0tXFxuc291bmQvdXNiL0tjb25maWctMTkwLVxcbnNvdW5kL3VzYi9LY29uZmlnOjE5MTpjb25maWcgU05EX1VTQl9BVURJT19RTUlcXG5zb3VuZC91c2IvS2NvbmZpZy0xOTItXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIEF1ZGlvIE9mZmxvYWQgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozNDoxNi4xMjEwMzA3OVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI0Mjc4NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVTQiBBdWRpbyBDYXJkIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhZGRpbmcgYFNORF9VU0JgLCBgVVNCYCwgYW5kIGBTTkRfVVNCX0FVRElPYCB0byB0aGUgY29uZmlndXJhdGlvbi4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gYmFja3RyYWNrLiBUaGUgcm9vdCBjYXVzZSBvZiB0aGUgYnVnLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGxpa2VseSByZXNpZGluZyBpbiBgc25kX2NhcmRfZG9fZnJlZWAuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGZsYWcgaXMgc2V0IHRvIHRydWUuIE15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBTTkRfVVNCX0FVRElPYCAqZG9lc24ndCogdXRpbGl6ZSBgc25kX2Rldm1fY2FyZF9uZXdgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCBtZSBxdWlja2x5IHZlcmlmeSBpZiB0aGUgYFNORF9VU0JfQVVESU9gIHBhdGggaW5kZWVkIGRldmlhdGVzIGZyb20gdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YC4gVGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZXMgaGluZ2VzIG9uIHRoaXMgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjE5Ljk0NTMxMjk5N1oiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNzI4MTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9kZXZtX2NhcmRfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjE5Ljk5MDY5Mzk3NloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjkzMzE1NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVUFGIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgYFNORF9VU0JfQVVESU9gIGRyaXZlciBpcyBhIGRlYWQgZW5kLiBUaGUgVXNlLUFmdGVyLUZyZWUgKFVBRikgYnVnICp3b24ndCogdHJpZ2dlciB0aGVyZSBiZWNhdXNlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIHdpbGwgYmUgZmFsc2UuICBJZiBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpcyBmYWxzZSwgYHNuZF9jYXJkX2RvX2ZyZWVgIGp1c3QgY2FsbHMgYGtmcmVlKGNhcmQpYCwgd2hpY2ggYXZvaWRzIHRoZSByYWNlIGNvbmRpdGlvbi4gVGhlIFVBRiAqb25seSogaGFwcGVucyB3aGVuIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIHRydWUsIGJlY2F1c2UgdGhhdCBtZWFucyBgZGV2cmVzYCBmcmVlcyB0aGUgY2FyZCwgYW5kIHRoZW4gYHNuZF9jYXJkX2RvX2ZyZWVgIGFjY2Vzc2VzIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGFmdGVyIHRoZSBgY29tcGxldGVgIGNhbGwgd2FrZXMgdXAgdGhlIHRocmVhZC4gIFRoZXJlZm9yZSwgdG8gZXhwbG9pdCB0aGlzLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZm9jdXMgb24gZHJpdmVycyB0aGF0IHV0aWxpemUgYHNuZF9kZXZtX2NhcmRfbmV3YC5cblxuTXkgYXR0ZW50aW9uIG5vdyBuZWVkcyB0byBzaGlmdCB0byB0aGUgZHJpdmVycyB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLiBCYXNlZCBvbiB0aGF0LCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgYXJlIGBTTkRfRFVNTVlgLCBgU05EX0FMT09QYCwgYFNORF9QQ01URVNUYCwgYW5kIGBTTkRfVklSTUlESWAuIFRob3NlIGFyZSB0aGUgb25lcyB0byBwcmlvcml0aXplLlxuXG5MZXQgbWUgcmVjYXAgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOlxuKiAgIGBTTkRgXG4qICAgYFNORF9EVU1NWWBcbiogICBgU05EX0FMT09QYFxuKiAgIGBTTkRfUENNVEVTVGBcbiogICBgREVCVUdfRlNgXG4qICAgYFNORF9WSVJNSURJYFxuKiAgIGBTTkRfU0VRVUVOQ0VSYFxuXG5BbmQgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZDpcbiogICBgc25kX2NhcmRfZnJlZWBcbiogICBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGBcbiogICBgc25kX2Rldm1fY2FyZF9uZXdgXG5cbk5vdywgYHNuZF9jYXJkX2ZyZWVgIGFuZCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAgYXJlIGNhbGxlZCB3aGVuIHRoZSBjYXJkIGlzIGZyZWVkLCBzbyB0aGV5J3JlIGltcG9ydGFudC4gIFRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGNsZWFybHkgYHNuZF9kZXZtX2NhcmRfbmV3YC4gIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXQncyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBwcm9iZS9yZW1vdmUgZnVuY3Rpb25zIGZvciB0aGVzZSBkcml2ZXJzOiBgc25kX2R1bW15X3Byb2JlYCwgYGxvb3BiYWNrX3Byb2JlYCwgYHBjbXRzdF9wcm9iZWAsIGFuZCBgc25kX3Zpcm1pZGlfcHJvYmVgLiBIb3dldmVyLCBzeXprYWxsZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZnV6eiB0aGVzZSBpZiB0aGUgY29uZmlncyBhcmUgZW5hYmxlZCwgc28gdGhhdCdzIGhlbHBmdWwuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDAwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjI3LjY4NDAxMzg3N1oiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5OTUyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc25kX2Rldm1fY2FyZF9uZXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvY29yZS9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic291bmQvY29yZS9pbml0LmM9MjI3PWludCBzbmRfZGV2bV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCxcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTI1MC19XFxuc291bmQvY29yZS9pbml0LmM6MjUxOkVYUE9SVF9TWU1CT0xfR1BMKHNuZF9kZXZtX2NhcmRfbmV3KTtcXG5zb3VuZC9jb3JlL2luaXQuYy0yNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjI3LjcyOTAxNDAxNVoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzUxODE3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIEV4cG9ydCBTdGF0dXMgYW5kIEZ1bmN0aW9uIEF2YWlsYWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJJ3ZlIGNvbmZpcm1lZCBpdCdzIGV4cG9ydGVkLiBUaGF0J3MgYSBrZXkgZmlyc3Qgc3RlcDsgb3RoZXJ3aXNlLCB3ZSdyZSBub3QgZXZlbiBsb29raW5nIGF0IHRoZSByaWdodCBmdW5jdGlvbi4gTm93LCBhIGZvbGxvdy11cCBxdWVzdGlvbiBwb3BzIHVwOiBXaGF0J3MgdGhlIHN0YXR1cyBvZiBgc25kX2NhcmRfZnJlZWA/IFdlJ3JlIG9uIHRoaXMgc3BlY2lmaWMgYXVkaW8gY2FyZCBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgZXZlcnl0aGluZyBhYm91dCBpdHMgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXMgd2VsbC4gRG9lcyBgc25kX2NhcmRfZnJlZWAgZXhpc3Q/IEFuZCBtb3JlIGltcG9ydGFudGx5IGlzIGl0IGFsc28gZXhwb3J0ZWQ/IElzIGl0IHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBvdXIgY3VycmVudCBwcm9ibGVtIG9yIGludmVzdGlnYXRpb24/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgYXZhaWxhYmlsaXR5IGFuZCByZWxldmFuY2UgdG8gd2hhdCBJJ20gZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MTY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MzEuNDgwODMzODM0WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgyMTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzbmRfY2FyZF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jPTI2ND1pbnQgc25kX2NhcmRfZnJlZV9vbl9lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQpXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy0yNzQtfVxcbnNvdW5kL2NvcmUvaW5pdC5jOjI3NTpFWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9mcmVlX29uX2Vycm9yKTtcXG5zb3VuZC9jb3JlL2luaXQuYy0yNzYtXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz02MjI9dm9pZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTYzMC19XFxuc291bmQvY29yZS9pbml0LmM6NjMxOkVYUE9SVF9TWU1CT0woc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCk7XFxuc291bmQvY29yZS9pbml0LmMtNjMyLVxcbi0tXFxuc291bmQvY29yZS9pbml0LmM9NjQ2PXZvaWQgc25kX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy02NjQtfVxcbnNvdW5kL2NvcmUvaW5pdC5jOjY2NTpFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWUpO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTY2Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MzEuNTI2NjU5NDQzWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTA4MjM5MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgQUxTQSBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgeWVzLCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBleHBvc2VkIGFuZCBleHBvcnRhYmxlLiBJIG5lZWQgdG8gZG9jdW1lbnQgbXkgcmVhc29uaW5nIGNvbmNpc2VseS5cblxuVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgQUxTQSBjb3JlIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGluIGBzbmRfY2FyZF9kb19mcmVlYC4gVGhlIGlzc3VlIGFyaXNlcyB3aGVuIGFuIEFMU0EgY2FyZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgd2hpY2ggdXRpbGl6ZXMgYGRldnJlc2AgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBzY2VuYXJpb3MsIGBkZXZyZXNgIHRyaWdnZXJzIGBfX3NuZF9jYXJkX3JlbGVhc2VgLCBldmVudHVhbGx5IGxlYWRpbmcgdG8gYHNuZF9jYXJkX2ZyZWVgLiBUaGlzIGZ1bmN0aW9uIHdhaXRzIG9uIGEgYHJlbGVhc2VfY29tcGxldGlvbmAgZm9yIGFsbCBkZXZpY2UgcmVmZXJlbmNlcyB0byBiZSByZWxlYXNlZC4gT25jZSB0aGUgZmluYWwgcmVmZXJlbmNlIGRyb3BzLCBgc25kX2NhcmRfZG9fZnJlZWAgaXMgaW52b2tlZCwgc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLiBIZXJlJ3MgdGhlIGNhdGNoOiB0aGUgb3JpZ2luYWwgY29kZSBhY2Nlc3NlZCBgY2FyZC1cdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgb3BlbmluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBkZXZyZXNgIGNvdWxkIGZyZWUgdGhlIGNhcmQncyBtZW1vcnkgY29uY3VycmVudGx5LCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZS5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ7IGNhY2hlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gU2ltcGxlLCBidXQgZWZmZWN0aXZlLlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBidWcgaXMgcmVhY2hhYmxlIHRocm91Z2ggYW55IEFMU0EgZHJpdmVyIHRoYXQgdXNlcyBgc25kX2Rldm1fY2FyZF9uZXdgLCB3aGljaCBpbmNsdWRlcyB2aXJ0dWFsIGRyaXZlcnMgbGlrZSBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAsIHdoaWNoIEkga25vdyBhcmUgaGVhdmlseSB0YXJnZXRlZCBieSBzeXprYWxsZXIuIFRoYXQgbWFrZXMgdGhpcyBhIGhpZ2gtcHJpb3JpdHkgaXRlbSBmb3IgZnV6emluZyBlZmZvcnRzLlxuXG5JJ3ZlIHJldmlld2VkIHRoZSByZWxldmFudCBFbmFibGVDb25maWdzOiBgU05EYCwgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBgREVCVUdfRlNgLCBgU05EX1ZJUk1JRElgLCBhbmQgYFNORF9TRVFVRU5DRVJgLlxuXG5BbmQsIGZvciB0aGUgRm9jdXNTeW1ib2xzOiBgc25kX2NhcmRfZnJlZWAsIGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AuIEFsbCB0aGUgcmlnaHQgcGllY2VzIGFyZSB0aGVyZS5cblxuU2VlbXMgbGlrZSBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMgYW5kIGEgY2xlYXIgcGF0aCBmb3IgbWl0aWdhdGlvbiBhbmQgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2NDgsIk91dHB1dFRva2VucyI6MzU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjQyLjQzNDkwMTQ5OFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzE2MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTkRcIixcbiAgICBcIlNORF9EVU1NWVwiLFxuICAgIFwiU05EX0FMT09QXCIsXG4gICAgXCJTTkRfUENNVEVTVFwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIlNORF9WSVJNSURJXCIsXG4gICAgXCJTTkRfU0VRVUVOQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic25kX2NhcmRfZnJlZVwiLFxuICAgIFwic25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZFwiLFxuICAgIFwic25kX2Rldm1fY2FyZF9uZXdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmsgKGBzbmRfY2FyZF9kb19mcmVlYCkuIFdoZW4gYW4gQUxTQSBjYXJkIGlzIGFsbG9jYXRlZCB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpdHMgbWVtb3J5IGlzIG1hbmFnZWQgYnkgYGRldnJlc2AuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBwYXRocywgYGRldnJlc2AgdHJpZ2dlcnMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCB3YWl0cyBvbiBhIGNvbXBsZXRpb24gKGByZWxlYXNlX2NvbXBsZXRpb25gKSB1bnRpbCBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIE9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBleGVjdXRlZCwgd2hpY2ggc2lnbmFscyB0aGUgY29tcGxldGlvbi4gVGhpcyB3YWtlcyB1cCB0aGUgd2FpdGluZyB0aHJlYWQsIGFsbG93aW5nIGBkZXZyZXNgIHRvIHByb2NlZWQgYW5kIGZyZWUgdGhlIGNhcmQncyBtZW1vcnkuIEhvd2V2ZXIsIGBzbmRfY2FyZF9kb19mcmVlYCBwcmV2aW91c2x5IGFjY2Vzc2VkIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGlmIGBkZXZyZXNgIGZyZWVkIHRoZSBjYXJkIGNvbmN1cnJlbnRseS4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgY2FjaGluZyBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgaW4gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGFueSBBTFNBIGRyaXZlciB1dGlsaXppbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaW5jbHVkaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRyaXZlcnMgbGlrZSBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU05EXCIsXG4gICAgXCJTTkRfRFVNTVlcIixcbiAgICBcIlNORF9BTE9PUFwiLFxuICAgIFwiU05EX1BDTVRFU1RcIixcbiAgICBcIkRFQlVHX0ZTXCIsXG4gICAgXCJTTkRfVklSTUlESVwiLFxuICAgIFwiU05EX1NFUVVFTkNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNuZF9jYXJkX2ZyZWVcIixcbiAgICBcInNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWRcIixcbiAgICBcInNuZF9kZXZtX2NhcmRfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IGluIHRoZSBBTFNBIGNvcmUgZnJhbWV3b3JrIChgc25kX2NhcmRfZG9fZnJlZWApLiBXaGVuIGFuIEFMU0EgY2FyZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaXRzIG1lbW9yeSBpcyBtYW5hZ2VkIGJ5IGBkZXZyZXNgLiBEdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgZXJyb3IgcGF0aHMsIGBkZXZyZXNgIHRyaWdnZXJzIGBzbmRfY2FyZF9mcmVlYCwgd2hpY2ggd2FpdHMgb24gYSBjb21wbGV0aW9uIChgcmVsZWFzZV9jb21wbGV0aW9uYCkgdW50aWwgYWxsIGRldmljZSByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBPbmNlIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBgc25kX2NhcmRfZG9fZnJlZWAgaXMgZXhlY3V0ZWQsIHdoaWNoIHNpZ25hbHMgdGhlIGNvbXBsZXRpb24uIFRoaXMgd2FrZXMgdXAgdGhlIHdhaXRpbmcgdGhyZWFkLCBhbGxvd2luZyBgZGV2cmVzYCB0byBwcm9jZWVkIGFuZCBmcmVlIHRoZSBjYXJkJ3MgbWVtb3J5LiBIb3dldmVyLCBgc25kX2NhcmRfZG9fZnJlZWAgcHJldmlvdXNseSBhY2Nlc3NlZCBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgKmFmdGVyKiBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24sIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiBgZGV2cmVzYCBmcmVlZCB0aGUgY2FyZCBjb25jdXJyZW50bHkuIFRoZSBwYXRjaCByZXNvbHZlcyB0aGlzIGJ5IGNhY2hpbmcgYGNhcmQtXFx1MDAzZW1hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBhbnkgQUxTQSBkcml2ZXIgdXRpbGl6aW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIGluY2x1ZGluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkcml2ZXJzIGxpa2UgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozNDo0Mi41MTcyMjYwNDZaIiwiU2VxIjo2NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODg0NzQxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozNDo0Mi41MTc4NDY0NjZaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODc4Nzg0ODE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB2dWxuZXJhYmlsaXR5IGluIGBzbmRfY2FyZF9kb19mcmVlYC4gQnkgc2F2aW5nIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCB0byBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSBjYWxsaW5nIGBjb21wbGV0ZShjYXJkLVxcdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCBpcyBjaGVja2VkLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0YzYxMmEwNDQ4MjA1OGZhYTFiMGIwOTQ4MGZjZjk4NzFkYjQwZTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDozMTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmNcbmluZGV4IDU2ZGRlNWJkNzNjNGUuLjU3NzMzODUyNjI0YTcgMTAwNjQ0XG4tLS0gYS9zb3VuZC9jb3JlL2luaXQuY1xuKysrIGIvc291bmQvY29yZS9pbml0LmNcbkBAIC01ODQsNiArNTg0LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoc25kX2NhcmRfZGlzY29ubmVjdF9zeW5jKTtcbiBcbiBzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxuIHtcbitcdGJvb2wgbWFuYWdlZCA9IGNhcmQtXHUwMDNlbWFuYWdlZDtcbitcbiBcdGNhcmQtXHUwMDNlcmVsZWFzaW5nID0gdHJ1ZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfU05EX01JWEVSX09TUylcbiBcdGlmIChzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaylcbkBAIC02MDEsNyArNjAzLDcgQEAgc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiBcdH1cbiBcdGlmIChjYXJkLVx1MDAzZXJlbGVhc2VfY29tcGxldGlvbilcbiBcdFx0Y29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pO1xuLVx0aWYgKCFjYXJkLVx1MDAzZW1hbmFnZWQpXG4rXHRpZiAoIW1hbmFnZWQpXG4gXHRcdGtmcmVlKGNhcmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6NDIuNTE3ODUyMzA2WiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3ODc4MDM4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU291bmQgQ2FyZCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGBzb3VuZC9jb3JlL2luaXQuY2AgdGhhdCdzIHR3ZWFraW5nIGBzbmRfY2FyZF9kb19mcmVlYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSwgYG1hbmFnZWRgLCBhbmQgY29waWVzIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGludG8gaXQgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFRoZW4sIGxhdGVyLCB0aGUgY29kZSB1c2VzIGBtYW5hZ2VkYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGBjYXJkLVx1MDAzZW1hbmFnZWRgIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBga2ZyZWUoY2FyZClgLlxuXG5Mb29raW5nIGNsb3NlciwgdGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgKFVBRikgZml4LCBhbmQgdGhhdCdzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYnV0IGl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB3aGF0IHdlIGFyZSBmaXhpbmcuIFRoZSBsb2dpYyBoZXJlIGlzIHRoYXQgaWYgYGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uYCBpcyBjb21wbGV0ZWQsIGFub3RoZXIgdGhyZWFkICptaWdodCogYXR0ZW1wdCB0byBmcmVlIHRoZSBgY2FyZGAsIG9yIHRoZSBtZW1vcnkgYmFja2luZyBpdCBpZiBpdCBpcyBtYW5hZ2VkLCBldmVuIHRob3VnaCB0aGUgY2FyZCBpcyBzdGlsbCBpbiB1c2UuIElmIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIHRydWUsIHRoZSBjYXJkIGlzIGZyZWVkIGJ5IGRldnJlcy4gVGhhdCBtZWFucyBhIHRocmVhZCBjb3VsZCBwcm9jZWVkIGFmdGVyIHRoZSBjb21wbGV0aW9uIHNpZ25hbCBhbmQgdGhlbiBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoZSBkZXZyZXMgZnJlZS4gVGhpcyBwYXRjaCBlc3NlbnRpYWxseSBzZXJpYWxpemVzIHRoZSBhY2Nlc3MgdG8gYGNhcmQtXHUwMDNlbWFuYWdlZGAgYnkgY29weWluZyBpdCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHRoZSB2dWxuZXJhYmxlIHNlY3Rpb24gaXMgZW50ZXJlZC4gSWYgdGhlIGNhcmQgaXMgbWFuYWdlZCwgdGhlIGRldnJlcyBjbGVhbnVwIGlzIHRyaWdnZXJlZC4gU28sIGJ5IHRoZSB0aW1lIHRoZSBjb2RlIGdldHMgdG8gYGlmICghY2FyZC1cdTAwM2VtYW5hZ2VkKWAsIHRoZSBtZW1vcnkgYmFja2luZyBgY2FyZGAgbWlnaHQgYWxyZWFkeSBiZSBnb25lLiAgQnkgdXNpbmcgdGhlIGxvY2FsIGBtYW5hZ2VkYCB2YXJpYWJsZSwgd2UncmUgZW5zdXJpbmcgdGhhdCB3ZSdyZSBtYWtpbmcgdGhlIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdG8gZnJlZSB0aGUgY2FyZCBiYXNlZCBvbiBhIHZhbHVlIHRoYXQncyBubyBsb25nZXIgdnVsbmVyYWJsZSB0byBjaGFuZ2VzIGJ5IGFub3RoZXIgdGhyZWFkLlxuXG5UaGUgcGF0Y2ggc2VlbXMgc291bmQgaW4gcmVzb2x2aW5nIHRoaXMgaXNzdWUsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBhc2sgbXlzZWxmIGlmIHRoaXMgZml4IGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFNpbmNlIHRoZSBwYXRjaCBvbmx5IHNhdmVzIGEgYm9vbGVhbiwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQsIHRvIGEgbG9jYWwgdmFyaWFibGUgdG8gYXZvaWQgYSBVQUYsIEkgZG9uJ3Qgc2VlIGFueSByaXNrIGhlcmUuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgdGhhdCdzIG5vdCB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBhZGRyZXNzZWQgYnkgS0FTQU4uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgaXQgc2ltcGx5IHNhdmVzIHRoZSB2YWx1ZSBvZiBhIGJvb2xlYW4gZmllbGQgdG8gYXZvaWQgYSBVQUYgY29uZGl0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDUzLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjUxLjMwNTY2MTAzNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB2dWxuZXJhYmlsaXR5IGluIGBzbmRfY2FyZF9kb19mcmVlYC4gQnkgc2F2aW5nIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCB0byBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSBjYWxsaW5nIGBjb21wbGV0ZShjYXJkLVxcdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCBpcyBjaGVja2VkLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eSBpbiBgc25kX2NhcmRfZG9fZnJlZWAuIEJ5IHNhdmluZyBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKWAsIGl0IHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgY291bGQgYmUgZnJlZWQgYnkgYW5vdGhlciB0aHJlYWQgKGUuZy4sIHZpYSBkZXZyZXMpIGJlZm9yZSBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgaXMgY2hlY2tlZC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 20:29:19 +0000 UTC FinishedAt: 2026-08-13 20:34:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SND", "SND_DUMMY", "SND_ALOOP", "SND_PCMTEST", "DEBUG_FS", "SND_VIRMIDI", "SND_SEQUENCER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SND", "SND_DUMMY", "SND_ALOOP", "SND_PCMTEST", "DEBUG_FS", "SND_VIRMIDI", "SND_SEQUENCER" ], "series_id": "c98ddf48-5cfb-4f6e-b682-9716e4af7a41" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "snd_card_free", "snd_card_free_when_closed", "snd_devm_card_new" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NORCYjMzQ7LAogICAgJiMzNDtTTkRfRFVNTVkmIzM0OywKICAgICYjMzQ7U05EX0FMT09QJiMzNDssCiAgICAmIzM0O1NORF9QQ01URVNUJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDssCiAgICAmIzM0O1NORF9WSVJNSURJJiMzNDssCiAgICAmIzM0O1NORF9TRVFVRU5DRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbmRfY2FyZF9mcmVlJiMzNDssCiAgICAmIzM0O3NuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQmIzM0OywKICAgICYjMzQ7c25kX2Rldm1fY2FyZF9uZXcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBCeSBzYXZpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGNoZWNrZWQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSBpbiB0aGUgQUxTQSBjb3JlIGZyYW1ld29yayAoYHNuZF9jYXJkX2RvX2ZyZWVgKS4gV2hlbiBhbiBBTFNBIGNhcmQgaXMgYWxsb2NhdGVkIHVzaW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIGl0cyBtZW1vcnkgaXMgbWFuYWdlZCBieSBgZGV2cmVzYC4gRHVyaW5nIGRldmljZSByZW1vdmFsIG9yIGVycm9yIHBhdGhzLCBgZGV2cmVzYCB0cmlnZ2VycyBgc25kX2NhcmRfZnJlZWAsIHdoaWNoIHdhaXRzIG9uIGEgY29tcGxldGlvbiAoYHJlbGVhc2VfY29tcGxldGlvbmApIHVudGlsIGFsbCBkZXZpY2UgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gT25jZSB0aGUgbGFzdCByZWZlcmVuY2UgaXMgZHJvcHBlZCwgYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGV4ZWN1dGVkLCB3aGljaCBzaWduYWxzIHRoZSBjb21wbGV0aW9uLiBUaGlzIHdha2VzIHVwIHRoZSB3YWl0aW5nIHRocmVhZCwgYWxsb3dpbmcgYGRldnJlc2AgdG8gcHJvY2VlZCBhbmQgZnJlZSB0aGUgY2FyZCYjMzk7cyBtZW1vcnkuIEhvd2V2ZXIsIGBzbmRfY2FyZF9kb19mcmVlYCBwcmV2aW91c2x5IGFjY2Vzc2VkIGBjYXJkLVx1MDAzZW1hbmFnZWRgICphZnRlciogc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLCBsZWFkaW5nIHRvIGEgdXNlLWFmdGVyLWZyZWUgaWYgYGRldnJlc2AgZnJlZWQgdGhlIGNhcmQgY29uY3VycmVudGx5LiBUaGUgcGF0Y2ggcmVzb2x2ZXMgdGhpcyBieSBjYWNoaW5nIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBhbnkgQUxTQSBkcml2ZXIgdXRpbGl6aW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIGluY2x1ZGluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkcml2ZXJzIGxpa2UgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODRjNjEyYTA0NDgyMDU4ZmFhMWIwYjA5NDgwZmNmOTg3MWRiNDBlMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDIwOjMxOjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmNcbmluZGV4IDU2ZGRlNWJkNzNjNGUuLjU3NzMzODUyNjI0YTcgMTAwNjQ0XG4tLS0gYS9zb3VuZC9jb3JlL2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc291bmQvY29yZS9pbml0LmNcbkBAIC01ODQsNiAmIzQzOzU4NCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XG4gXG4gc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiB7XG4mIzQzO1x0Ym9vbCBtYW5hZ2VkID0gY2FyZC1cdTAwM2VtYW5hZ2VkO1xuJiM0MztcbiBcdGNhcmQtXHUwMDNlcmVsZWFzaW5nID0gdHJ1ZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfU05EX01JWEVSX09TUylcbiBcdGlmIChzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaylcbkBAIC02MDEsNyAmIzQzOzYwMyw3IEBAIHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG4gXHR9XG4gXHRpZiAoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pXG4gXHRcdGNvbXBsZXRlKGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcbi1cdGlmICghY2FyZC1cdTAwM2VtYW5hZ2VkKVxuJiM0MztcdGlmICghbWFuYWdlZClcbiBcdFx0a2ZyZWUoY2FyZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NORCYjMzQ7LAogICAgJiMzNDtTTkRfRFVNTVkmIzM0OywKICAgICYjMzQ7U05EX0FMT09QJiMzNDssCiAgICAmIzM0O1NORF9QQ01URVNUJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDssCiAgICAmIzM0O1NORF9WSVJNSURJJiMzNDssCiAgICAmIzM0O1NORF9TRVFVRU5DRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbmRfY2FyZF9mcmVlJiMzNDssCiAgICAmIzM0O3NuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQmIzM0OywKICAgICYjMzQ7c25kX2Rldm1fY2FyZF9uZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IGluIHRoZSBBTFNBIGNvcmUgZnJhbWV3b3JrIChgc25kX2NhcmRfZG9fZnJlZWApLiBXaGVuIGFuIEFMU0EgY2FyZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaXRzIG1lbW9yeSBpcyBtYW5hZ2VkIGJ5IGBkZXZyZXNgLiBEdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgZXJyb3IgcGF0aHMsIGBkZXZyZXNgIHRyaWdnZXJzIGBzbmRfY2FyZF9mcmVlYCwgd2hpY2ggd2FpdHMgb24gYSBjb21wbGV0aW9uIChgcmVsZWFzZV9jb21wbGV0aW9uYCkgdW50aWwgYWxsIGRldmljZSByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBPbmNlIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBgc25kX2NhcmRfZG9fZnJlZWAgaXMgZXhlY3V0ZWQsIHdoaWNoIHNpZ25hbHMgdGhlIGNvbXBsZXRpb24uIFRoaXMgd2FrZXMgdXAgdGhlIHdhaXRpbmcgdGhyZWFkLCBhbGxvd2luZyBgZGV2cmVzYCB0byBwcm9jZWVkIGFuZCBmcmVlIHRoZSBjYXJkJiMzOTtzIG1lbW9yeS4gSG93ZXZlciwgYHNuZF9jYXJkX2RvX2ZyZWVgIHByZXZpb3VzbHkgYWNjZXNzZWQgYGNhcmQtXHUwMDNlbWFuYWdlZGAgKmFmdGVyKiBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24sIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiBgZGV2cmVzYCBmcmVlZCB0aGUgY2FyZCBjb25jdXJyZW50bHkuIFRoZSBwYXRjaCByZXNvbHZlcyB0aGlzIGJ5IGNhY2hpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaW4gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGFueSBBTFNBIGRyaXZlciB1dGlsaXppbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaW5jbHVkaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRyaXZlcnMgbGlrZSBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGM2MTJhMDQ0ODIwNThmYWExYjBiMDk0ODBmY2Y5ODcxZGI0MGUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMjA6MzE6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IDU2ZGRlNWJkNzNjNGUuLjU3NzMzODUyNjI0YTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NvdW5kL2NvcmUvaW5pdC5jCkBAIC01ODQsNiAmIzQzOzU4NCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7CiAKIHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCiB7CiYjNDM7CWJvb2wgbWFuYWdlZCA9IGNhcmQtJmd0O21hbmFnZWQ7CiYjNDM7CiAJY2FyZC0mZ3Q7cmVsZWFzaW5nID0gdHJ1ZTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19TTkRfTUlYRVJfT1NTKQogCWlmIChzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaykKQEAgLTYwMSw3ICYjNDM7NjAzLDcgQEAgc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIAl9CiAJaWYgKGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbikKIAkJY29tcGxldGUoY2FyZC0mZ3Q7cmVsZWFzZV9jb21wbGV0aW9uKTsKLQlpZiAoIWNhcmQtJmd0O21hbmFnZWQpCiYjNDM7CWlmICghbWFuYWdlZCkKIAkJa2ZyZWUoY2FyZCk7CiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU291bmQgQ2FyZCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBzb3VuZC9jb3JlL2luaXQuY2AuIEl0JiMzOTtzIHRvdWNoaW5nIGBzbmRfY2FyZF9kb19mcmVlYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBjYWNoaW5nIGBjYXJkLSZndDttYW5hZ2VkYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIGdldHRpbmcgaW50byB0aGUgY2xlYW51cCBhbmQgdGhlbiB1c2luZyBgIW1hbmFnZWRgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGAhY2FyZC0mZ3Q7bWFuYWdlZGAgaW4gdGhlIGBrZnJlZShjYXJkKWAgY2hlY2suIEltbWVkaWF0ZWx5LCBteSBpbnRlcm5hbCBhbGFybXMgYXJlIGdvaW5nIG9mZi4gVGhpcyBzbWVsbHMgbGlrZSBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3IgYSByZWxhdGVkIGNvbmN1cnJlbmN5IGlzc3VlLiBUaGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJvdGVjdCBzb21ldGhpbmcsIGNsZWFybHkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgY2FyZGAgaXRzZWxmIGlzIHBvdGVudGlhbGx5IGJlaW5nIGZyZWVkIGR1cmluZyB0aGUgY2xlYW51cCBwaGFzZS4gT3IsIG1heWJlLCBgY2FyZC0mZ3Q7bWFuYWdlZGAgaXMgYmVpbmcgbW9kaWZpZWQg4oCTIGFjY2Vzc2VkIGFmdGVyIGBjYXJkYCBoYXMgYmVlbiBmcmVlZC4gQnV0IHdhaXQuLi4gaWYgYGNhcmRgICppcyogZnJlZWQsIHRoZW4gYGtmcmVlKGNhcmQpYCB3b3VsZCBiZSBhICpkb3VibGUgZnJlZSogc2l0dWF0aW9uLCBhbmQgdGhhdCYjMzk7cyBnZW5lcmFsbHkgY2F0YXN0cm9waGljLiBTbyB0aGF0IHBvaW50cyB0byB0aGUgZmllbGQgYGNhcmQtJmd0O21hbmFnZWRgIGJlaW5nIHRoZSBwcm9ibGVtLCBvciBhdCBsZWFzdCBob3cgaXQgcmVsYXRlcyB0byBgY2FyZGAuIElzIGBjYXJkYCBiZWluZyBpbnZhbGlkYXRlZCBieSBzb21ldGhpbmcgbGlrZSBgZGV2aWNlX2RlbCgmYW1wO2NhcmQtJmd0O2NhcmRfZGV2KWA/CgpSaWdodCwgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgc25kX2NhcmRfZG9fZnJlZWAgZnVuY3Rpb24gaW4gZGV0YWlsIGFuZCBzZWUgd2hhdOKAmXMgZ29pbmcgb24gaW4gdGhvc2UgY2xlYW51cCBzdGVwcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgb2JqZWN0IGxpZmV0aW1lIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHZ1bG5lcmFiaWxpdHkgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9jYXJkX2RvX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYz0xNDU9c3RhdGljIGludCBzbmRfY2FyZF9pbml0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50LFxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTE0Ny1cdFx0XHQgc2l6ZV90IGV4dHJhX3NpemUpO1xuc291bmQvY29yZS9pbml0LmM6MTQ4OnN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpO1xuc291bmQvY29yZS9pbml0LmMtMTQ5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNhcmRfZGV2X2F0dHJfZ3JvdXA7XG4tLVxuc291bmQvY29yZS9pbml0LmM9MTUxPXN0YXRpYyB2b2lkIHJlbGVhc2VfY2FyZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuc291bmQvY29yZS9pbml0LmMtMTUyLXtcbnNvdW5kL2NvcmUvaW5pdC5jOjE1MzpcdHNuZF9jYXJkX2RvX2ZyZWUoZGV2X3RvX3NuZF9jYXJkKGRldikpO1xuc291bmQvY29yZS9pbml0LmMtMTU0LX1cbi0tXG5zb3VuZC9jb3JlL2luaXQuYz01ODM9RVhQT1JUX1NZTUJPTF9HUEwoc25kX2NhcmRfZGlzY29ubmVjdF9zeW5jKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTU4NC1cbnNvdW5kL2NvcmUvaW5pdC5jOjU4NTpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxuc291bmQvY29yZS9pbml0LmMtNTg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBzbmRfY2FyZF9kb19mcmVlYCwgZmlsdGVyZWQgdGhyb3VnaCBteSBleHBlcmllbmNlOgoKKipEZWNvbnN0cnVjdGluZyBgc25kX2NhcmRfZG9fZnJlZWAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgc25kX2NhcmRfZG9fZnJlZWAuIEp1c3QgdGhlIG5hbWUgYWxvbmUgdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgY29uY2VybmVkIHdpdGggZnJlZWluZyByZXNvdXJjZXMgcmVsYXRlZCB0byBhIHNvdW5kIGNhcmQsIGxpa2VseSB3aXRoaW4gYSBkcml2ZXIgY29udGV4dC4gSSBiZXQgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBjYXJkIHJlbW92YWwsIGRyaXZlciB1bmxvYWQsIG9yIG1heWJlIGV2ZW4gaW4gZXJyb3IgaGFuZGxpbmcgc2NlbmFyaW9zIHdpdGhpbiB0aGUgc291bmQgc3lzdGVtLiBHaXZlbiB3aGF0IEkga25vdyBhYm91dCBhdWRpbyBkcml2ZXIgYXJjaGl0ZWN0dXJlcywgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBtZXRpY3Vsb3VzbHkgY2xlYW4gdXAgYWxsb2NhdGVkIGJ1ZmZlcnMsIHJlbGVhc2UgaGFyZHdhcmUgcmVzb3VyY2VzLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24gbG9ja3MgdG8gcHJldmVudCBhbnkgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGlzIGRlYWxsb2NhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBtZW1vcnkgbWFuYWdlbWVudCBjYWxscyBsaWtlIGBrZnJlZWAsIGBzbmRfY2FyZF9mcmVlYCwgb3Igc2ltaWxhciBmdW5jdGlvbnMsIGFzIHRob3NlIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiByZXNvdXJjZSBjbGVhbnVwLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gYmUgc2VhcmNoaW5nIGZvciBhbnkgY2FsbHMgdG8gcmVsYXRlZCBoYXJkd2FyZSBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbnMgdXNlZCB3aXRoaW4gdGhpcyBjb2RlYmFzZSwgSSB3aWxsIGFudGljaXBhdGUgYW55IHBvdGVudGlhbCBuYW1pbmcgY29sbGlzaW9ucy4gQW55IG1pc3NpbmcgbWVtb3J5IHJlbGVhc2VzIG9yIGluY29ycmVjdCBsb2NraW5nIHdpbGwgc3RhbmQgb3V0IGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGZ1bmN0aW9uIGhhcyBjb3JyZWN0IGNoZWNrcyBmb3IgcmVzb3VyY2VzIHRvIGZyZWUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCByZXNvdXJjZXMgaXQgaXMgcmVzcG9uc2libGUgZm9yLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgYWxsIG9mIHRoZSBmdW5jdGlvbiBjYWxscywgc28gdGhhdCBJIHVuZGVyc3RhbmQgd2hlcmUgaXQgbWF5IGhhdmUgYmVlbiBjYWxsZWQsIGFuZCB2ZXJpZnkgaXRzIGV4cGVjdGVkIGJlaGF2aW91ci4gSSBob3BlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnJlZXMgcmVzb3VyY2VzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgd2hlbiB0aGUgc291bmQgY2FyZCB3YXMgbG9hZGVkLiBJJiMzOTttIG1lbnRhbGx5IGdvaW5nIG92ZXIgdGhlIHVzdWFsIHN1c3BlY3RzOiBETUEgYnVmZmVycywgaW50ZXJydXB0IGhhbmRsZXJzLCBjb250cm9sIHJlZ2lzdGVycywgYW5kIGFueSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgc3BlY2lmaWMgdG8gdGhlIGF1ZGlvIGNhcmQuIEkgd2FudCB0byBzZWUgaWYgaXQgZ3JhY2VmdWxseSBoYW5kbGVzIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24sIG9yIGlmIHRoZXJlJiMzOTtzIGEgcmlzayBvZiBjcmFzaGVzIGlmLCBzYXksIHRoZSBjYXJkIGZhaWxlZCB0byBpbml0aWFsaXplIGNvbXBsZXRlbHkuIEkgaG9wZSBpdCBoYXMgc29tZSBzYW5pdHkgY2hlY2tzIGluIHBsYWNlIHRvIGF2b2lkIGRvdWJsZS1mcmVlaW5nIG9yIGZyZWVpbmcgdW5hbGxvY2F0ZWQgbWVtb3J5LiBJIGFtIHN1cmUgaXQmIzM5O3MgYW4gaW1wb3J0YW50IHBpZWNlIG9mIGNvZGUsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGNhcmVmdWxseSBhbmFseXNlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4NTpcdHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG4gNTg2Olx0e1xuIDU4NzpcdFx0Ym9vbCBtYW5hZ2VkID0gY2FyZC1cdTAwM2VtYW5hZ2VkO1xuIDU4ODpcdFxuIDU4OTpcdFx0Y2FyZC1cdTAwM2VyZWxlYXNpbmcgPSB0cnVlO1xuIDU5MDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19TTkRfTUlYRVJfT1NTKVxuIDU5MTpcdFx0aWYgKHNuZF9taXhlcl9vc3Nfbm90aWZ5X2NhbGxiYWNrKVxuIDU5MjpcdFx0XHRzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjayhjYXJkLCBTTkRfTUlYRVJfT1NTX05PVElGWV9GUkVFKTtcbiA1OTM6XHQjZW5kaWZcbiA1OTQ6XHRcdHNuZF9kZXZpY2VfZnJlZV9hbGwoY2FyZCk7XG4gNTk1Olx0XHRpZiAoY2FyZC1cdTAwM2Vwcml2YXRlX2ZyZWUpXG4gNTk2Olx0XHRcdGNhcmQtXHUwMDNlcHJpdmF0ZV9mcmVlKGNhcmQpO1xuIDU5NzpcdCNpZmRlZiBDT05GSUdfU05EX0NUTF9ERUJVR1xuIDU5ODpcdFx0a2ZyZWUoY2FyZC1cdTAwM2V2YWx1ZV9idWYpO1xuIDU5OTpcdCNlbmRpZlxuIDYwMDpcdFx0aWYgKHNuZF9pbmZvX2NhcmRfZnJlZShjYXJkKSBcdTAwM2MgMCkge1xuIDYwMTpcdFx0XHRkZXZfd2FybihjYXJkLVx1MDAzZWRldiwgXCYjMzQ7dW5hYmxlIHRvIGZyZWUgY2FyZCBpbmZvXFxuXCYjMzQ7KTtcbiA2MDI6XHRcdFx0LyogTm90IGZhdGFsIGVycm9yICovXG4gNjAzOlx0XHR9XG4gNjA0Olx0XHRpZiAoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pXG4gNjA1Olx0XHRcdGNvbXBsZXRlKGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcbiA2MDY6XHRcdGlmICghbWFuYWdlZClcbiA2MDc6XHRcdFx0a2ZyZWUoY2FyZCk7XG4gNjA4Olx0XHRyZXR1cm4gMDtcbiA2MDk6XHR9XG4gNjEwOlx0XG4gNjExOlx0LyoqXG4gNjEyOlx0ICogc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCAtIERpc2Nvbm5lY3QgdGhlIGNhcmQsIGZyZWUgaXQgbGF0ZXIgZXZlbnR1YWxseVxuIDYxMzpcdCAqIEBjYXJkOiBzb3VuZGNhcmQgc3RydWN0dXJlXG4gNjE0Olx0ICpcbiA2MTU6XHQgKiBVbmxpa2Ugc25kX2NhcmRfZnJlZSgpLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IHRyeSB0byByZWxlYXNlIHRoZSBjYXJkXG4gNjE2Olx0ICogcmVzb3VyY2UgaW1tZWRpYXRlbHksIGJ1dCB0cmllcyB0byBkaXNjb25uZWN0IGF0IGZpcnN0LiAgV2hlbiB0aGUgY2FyZFxuIDYxNzpcdCAqIGlzIHN0aWxsIGluIHVzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYmVmb3JlIGZyZWVpbmcgdGhlIHJlc291cmNlcy5cbiA2MTg6XHQgKiBUaGUgY2FyZCByZXNvdXJjZXMgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZSByZWZjb3VudCBnZXRzIHRvIHplcm8uXG4gNjE5Olx0ICpcbiA2MjA6XHQgKiBSZXR1cm46IHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlXG4gNjIxOlx0ICovXG4gNjIyOlx0dm9pZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiA2MjM6XHR7XG4gNjI0Olx0XHRpZiAoIWNhcmQpXG4gNjI1Olx0XHRcdHJldHVybjtcbiA2MjY6XHRcbiA2Mjc6XHRcdHNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7XG4gNjI4Olx0XHRwdXRfZGV2aWNlKFx1MDAyNmNhcmQtXHUwMDNlY2FyZF9kZXYpO1xuIDYyOTpcdFx0cmV0dXJuO1xuIDYzMDpcdH1cbiA2MzE6XHRFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQpO1xuIDYzMjpcdFxuIDYzMzpcdC8qKlxuIDYzNDpcdCAqIHNuZF9jYXJkX2ZyZWUgLSBmcmVlcyBnaXZlbiBzb3VuZGNhcmQgc3RydWN0dXJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFMU0EgQ29yZSBQYXRjaDogc25kX2NhcmRfZG9fZnJlZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBzbmRfY2FyZF9kb19mcmVlYCwgd2hpY2ggaXMgaW4gdGhlIEFMU0EgY29yZS4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSByZWxhdGVkIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBjb25jZXJucyBzaXR1YXRpb25zIHdoZXJlIGBjYXJkLSZndDttYW5hZ2VkYCBpcyBiZWluZyBhY2Nlc3NlZCBhZnRlciBgY2FyZC0mZ3Q7cHJpdmF0ZV9mcmVlYCBvciBgc25kX2RldmljZV9mcmVlX2FsbGAgbWlnaHQgaGF2ZSBhbHJlYWR5IGZyZWVkIHRoZSBgY2FyZGAgc3RydWN0dXJlLiBIb3dldmVyLCB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBzY2VuYXJpbyBoZXJlLiBJZiBgY2FyZGAgKmlzKiBmcmVlZCwgdGhlbiBga2ZyZWUoY2FyZClgIHdvdWxkIGluZGVlZCBiZSBhIGRvdWJsZS1mcmVlLCB3aGljaCBpc24mIzM5O3QgZGVzaXJhYmxlLgoKQnV0IHdhaXQgYSBtaW51dGUsIGlmIGBjYXJkYCBpcyBtYW5hZ2VkLCBga2ZyZWUoY2FyZClgIGlzbiYjMzk7dCAqc3VwcG9zZWQqIHRvIGJlIGNhbGxlZCBkaXJlY3RseS4gSXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgaGFuZGxlZCBieSBgZGV2cmVzYCB1c2luZyBzb21ldGhpbmcgbGlrZSBgZGV2bV9remFsbG9jYC4gU28sIGlmIHRoZSBjYXJkIGlzIG1hbmFnZWQsIGRldnJlcyB3b3VsZCBiZSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdC4gTm93LCBkb2VzIGBjYXJkLSZndDtwcml2YXRlX2ZyZWVgIG9yIGBzbmRfZGV2aWNlX2ZyZWVfYWxsYCB0cmlnZ2VyIHRoZSBkZXZyZXMgcmVsZWFzZT8gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0OyBkZXZyZXMgcmVsZWFzZSBpcyB0aWVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgcmVtb3ZhbCwgbm90IGFuIGludGVybmFsIGNsZWFudXAuCgpBaGEsIGlmIGBjYXJkYCBpcyBtYW5hZ2VkLCBgZGV2cmVzYCB0YWtlcyBjYXJlIG9mIHRoZSBmcmVlaW5nLiBBbmQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBgcmVsZWFzZV9jYXJkX2RldmljZWAsIHdoaWNoIGlzIHRoZSBgcmVsZWFzZWAgY2FsbGJhY2sgb2YgYGNhcmQtJmd0O2NhcmRfZGV2YC4gSWYgYGNhcmQtJmd0O21hbmFnZWRgIGlzIHRydWUsIHRoZW4gYGRldm1fc25kX2NhcmRfYWxsb2NgIHdhcyB1c2VkIHRvIGFsbG9jYXRlIGl0LCBhbmQgaXQgd2lsbCBiZSBmcmVlZCBieSBgZGV2cmVzYCB3aGVuIHRoZSBwYXJlbnQgZGV2aWNlIGlzIHJlbW92ZWQuCgpCdXQgdGhlbiwgaWYgYGRldnJlc2AgZnJlZXMgdGhlIGNhcmQgKmJlZm9yZSogYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGZpbmlzaGVkLCB0aGF0IHdvdWxkIGJlIGEgcHJvYmxlbS4gSG93ZXZlciwgYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGByZWxlYXNlX2NhcmRfZGV2aWNlYCwgd2hpY2ggaXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgYGNhcmQtJmd0O2NhcmRfZGV2YCBzbyB0aGVyZSBzaG91bGQgbm90IGJlIGEgcmFjZSBjb25kaXRpb24uCgpNYXliZSBhIHByZXZpb3VzIGNvbW1pdCBoYXMgYSBjbHVlLiBMZXQmIzM5O3Mgc2VlIGlmIGEgc2ltaWxhciBwYXRjaCBoYXMgYW4gZXhwbGFuYXRpb24gaW4gaXRzIGNvbW1pdCBtZXNzYWdlLiBJIG5lZWQgdG8gc2VhcmNoIHRoZSBnaXQgbG9nIGZvciBgc25kX2NhcmRfZG9fZnJlZWAgYW5kIGBtYW5hZ2VkYCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9zbmRfY2FyZF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL2NvcmUvaW5pdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIFNvdW5kIERyaXZlciBSZWxlYXNlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBhdWRpbyBpc3N1ZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB3aGVyZSB0aGUgcmVzb3VyY2VzIGFyZSBmcmVlZCwgcGFydGljdWxhcmx5IGFmdGVyIGEgc291bmQgY2FyZCBpcyBkb25lIGJlaW5nIHVzZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYHNuZF9jYXJkX2RvX2ZyZWVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYHNvdW5kL2NvcmUvaW5pdC5jYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHNwb3QgZm9yIHRoZSBrZXJuZWwgdG8gcmVsZWFzZSB0aGUgc291bmQgY2FyZCByZXNvdXJjZXMgd2hlbiBpdCYjMzk7cyBiZWluZyB1bnJlZ2lzdGVyZWQuIEl0IGlzIGhpZ2hseSBsaWtlbHkgdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoaXMgaXNzdWUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbmRfY2FyZF9kb19mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmM9MTQ1PXN0YXRpYyBpbnQgc25kX2NhcmRfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0xNDctXHRcdFx0IHNpemVfdCBleHRyYV9zaXplKTtcbnNvdW5kL2NvcmUvaW5pdC5jOjE0ODpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTE0OS1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjYXJkX2Rldl9hdHRyX2dyb3VwO1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTE1MT1zdGF0aWMgdm9pZCByZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbnNvdW5kL2NvcmUvaW5pdC5jLTE1Mi17XG5zb3VuZC9jb3JlL2luaXQuYzoxNTM6XHRzbmRfY2FyZF9kb19mcmVlKGRldl90b19zbmRfY2FyZChkZXYpKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTE1NC19XG4tLVxuc291bmQvY29yZS9pbml0LmM9NTgzPUVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XG5zb3VuZC9jb3JlL2luaXQuYy01ODQtXG5zb3VuZC9jb3JlL2luaXQuYzo1ODU6c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbnNvdW5kL2NvcmUvaW5pdC5jLTU4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIGBjYXJkLSZndDttYW5hZ2VkYCBGbGFnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBgY2FyZGAgb2JqZWN0IGFuZCBzcGVjaWZpY2FsbHksIGhvdyB0aGUgYG1hbmFnZWRgIGZsYWcgaXMgYmVpbmcgc2V0IGFuZCB1c2VkLiBGaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHRoZSBhc3NpZ25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGNhcmQtJmd0O21hbmFnZWRgIGlzIGJlaW5nIG1vZGlmaWVkLiBJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciBhc3NpZ25tZW50cyB0byBgY2FyZC0mZ3Q7bWFuYWdlZGAuIEkmIzM5O2xsIHByb2JhYmx5IGFsc28gd2FudCB0byBsb29rIGZvciB1c2VzIG9mIGEgc2ltaWxhciB2YXJpYWJsZSBpbiB0aGUgc2FtZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgcGF0dGVybnMgaW52b2x2ZWQuIEkgZXhwZWN0IEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgZm9yIGluaXRpYWxpemF0aW9ucyBhbmQgcG90ZW50aWFsIHJlLWFzc2lnbm1lbnRzIHRvbywgdG8gYnVpbGQgYSBmdWxsIHBpY3R1cmUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gdW5kZXJzdGFuZCAqd2h5KiBhbmQgKndoZW4qIGl0JiMzOTtzIGJlaW5nIHNldCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRob3NlIGFzc2lnbm1lbnRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgYWJvdXQgdGhlIGludGVuZGVkICYjMzQ7bWFuYWdlZCYjMzQ7IHN0YXRlIOKAkyBpcyBpdCByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCByZXNvdXJjZSBvd25lcnNoaXAsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBPbmNlIEkgaGF2ZSB0aGF0IGNvbnRleHQsIEkmIzM5O2xsIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBzaWduaWZpY2FuY2UgYW5kIGNhbiBzdGFydCByZWFzb25pbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYXJkLVx1MDAzZW1hbmFnZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYz0yMjc9aW50IHNuZF9kZXZtX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLFxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTIzOS1cdFx0cmV0dXJuIC1FTk9NRU07XG5zb3VuZC9jb3JlL2luaXQuYzoyNDA6XHRjYXJkLVx1MDAzZW1hbmFnZWQgPSB0cnVlO1xuc291bmQvY29yZS9pbml0LmMtMjQxLVx0ZXJyID0gc25kX2NhcmRfaW5pdChjYXJkLCBwYXJlbnQsIGlkeCwgeGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpO1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTI3Nz1zdGF0aWMgaW50IHNuZF9jYXJkX2luaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXG4tLVxuc291bmQvY29yZS9pbml0LmMtMzA4LVx0XHRcdGlkeCwgc25kX2VjYXJkc19saW1pdCAtIDEsIGVycik7XG5zb3VuZC9jb3JlL2luaXQuYzozMDk6XHRcdGlmICghY2FyZC1cdTAwM2VtYW5hZ2VkKVxuc291bmQvY29yZS9pbml0LmMtMzEwLVx0XHRcdGtmcmVlKGNhcmQpOyAvKiBtYW51YWxseSBmcmVlIGhlcmUsIGFzIG5vIGRlc3RydWN0b3IgY2FsbGVkICovXG4tLVxuc291bmQvY29yZS9pbml0LmM9NTg1PXN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG5zb3VuZC9jb3JlL2luaXQuYy01ODYte1xuc291bmQvY29yZS9pbml0LmM6NTg3Olx0Ym9vbCBtYW5hZ2VkID0gY2FyZC1cdTAwM2VtYW5hZ2VkO1xuc291bmQvY29yZS9pbml0LmMtNTg4LVxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTg4MD1pbnQgc25kX2NhcmRfcmVnaXN0ZXIoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTg5Mi1cdH0gZWxzZSB7XG5zb3VuZC9jb3JlL2luaXQuYzo4OTM6XHRcdGlmIChjYXJkLVx1MDAzZW1hbmFnZWQpXG5zb3VuZC9jb3JlL2luaXQuYy04OTQtXHRcdFx0ZGV2bV9yZW1vdmVfYWN0aW9uKGNhcmQtXHUwMDNlZGV2LCB0cmlnZ2VyX2NhcmRfZnJlZSwgY2FyZCk7XG4tLVxuc291bmQvY29yZS9pbml0LmMtODk2LVxuc291bmQvY29yZS9pbml0LmM6ODk3Olx0aWYgKGNhcmQtXHUwMDNlbWFuYWdlZCkge1xuc291bmQvY29yZS9pbml0LmMtODk4LVx0XHRlcnIgPSBkZXZtX2FkZF9hY3Rpb24oY2FyZC1cdTAwM2VkZXYsIHRyaWdnZXJfY2FyZF9mcmVlLCBjYXJkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gYXVkaW8gZHJpdmVyIGRldmVsb3BtZW50OgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQ2FyZCBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNuZF9kZXZtX2NhcmRfbmV3YC4gVGhlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBhbGxvY2F0aW5nIGFuIGF1ZGlvIGNhcmQgb2JqZWN0LCBhbmQgdGhlICYjMzQ7ZGV2bSYjMzQ7IHByZWZpeCBzY3JlYW1zICYjMzQ7ZGV2aWNlIHJlc291cmNlJiMzNDsgbWFuYWdlbWVudCwgbWVhbmluZyBpdCYjMzk7cyB1c2luZyB0aGUgZGV2aWNlIHJlc291cmNlIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCBndWVzcywgd2hpY2ggSSYjMzk7bGwgY29uZmlybSwgaXMgdGhhdCB0aGlzIHByb2JhYmx5IHJlbGllcyBvbiBgZGV2bV9remFsbG9jYCBvciBzb21ldGhpbmcgc2ltaWxhciBmb3IgdGhlIGFsbG9jYXRpb24uIE5vdyBsZXQmIzM5O3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBieSBjaGVja2luZyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgYHNuZF9kZXZtX2NhcmRfbmV3YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI3Olx0aW50IHNuZF9kZXZtX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLFxuIDIyODpcdFx0XHQgICAgICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIHNpemVfdCBleHRyYV9zaXplLFxuIDIyOTpcdFx0XHQgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkX3JldClcbiAyMzA6XHR7XG4gMjMxOlx0XHRzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7XG4gMjMyOlx0XHRpbnQgZXJyO1xuIDIzMzpcdFxuIDIzNDpcdFx0KmNhcmRfcmV0ID0gTlVMTDtcbiAyMzU6XHRcdGNhcmQgPSBkZXZyZXNfYWxsb2MoX19zbmRfY2FyZF9yZWxlYXNlLFxuIDIzNjpcdFx0XHRcdCAgICBzdHJ1Y3Rfc2l6ZShjYXJkLCBwcml2YXRlX2RhdGFfYXJlYSwgZXh0cmFfc2l6ZSksXG4gMjM3Olx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuIDIzODpcdFx0aWYgKCFjYXJkKVxuIDIzOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNDA6XHRcdGNhcmQtXHUwMDNlbWFuYWdlZCA9IHRydWU7XG4gMjQxOlx0XHRlcnIgPSBzbmRfY2FyZF9pbml0KGNhcmQsIHBhcmVudCwgaWR4LCB4aWQsIG1vZHVsZSwgZXh0cmFfc2l6ZSk7XG4gMjQyOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gMjQzOlx0XHRcdGRldnJlc19mcmVlKGNhcmQpOyAvKiBpbiBtYW5hZ2VkIG1vZGUsIHdlIG5lZWQgdG8gZnJlZSBtYW51YWxseSAqL1xuIDI0NDpcdFx0XHRyZXR1cm4gZXJyO1xuIDI0NTpcdFx0fVxuIDI0NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODUwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLgoKKipBbmFseXppbmcgdGhlIENhcmQgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgc28gdGhlIGBjYXJkYCBzdHJ1Y3R1cmUsIHRoYXQgY3JpdGljYWwgcGllY2UsIGlzIGJlaW5nIGFsbG9jYXRlZCB1c2luZyBgZGV2cmVzX2FsbG9jYC4gSSBrbm93IHRoaXMsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBhbmFseXplIHRoZSBmbG93LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgZGVhbGxvY2F0aW9uIHBhdGgsIG5hdHVyYWxseS4gV2hlbiBgc25kX2NhcmRfZG9fZnJlZWAgZ2V0cyBpbnZva2VkLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBtZW1vcnkgc2hvdWxkIGJlIHJlbGVhc2VkLiBBIGtleSBxdWVzdGlvbiBhcmlzZXM6IHdoYXQgY2FsbHMgYHNuZF9jYXJkX2RvX2ZyZWVgPyBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgX19zbmRfY2FyZF9yZWxlYXNlYCBpcyBpbnZvbHZlZCwgYW5kIGl0IGhhcyB0byBiZSwgZ2l2ZW4gdGhlIG5hbWVzLiBMZXQgbWUgY29uZmlybSB0aGlzIGFzc3VtcHRpb24gYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgc2NydXRpbml6aW5nIGBfX3NuZF9jYXJkX3JlbGVhc2VgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb25uZWN0aW9uIHdpbGwgYmVjb21lIGNsZWFyLiBHb3R0YSB0cmFjZSB0aGUgY2FsbHMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGhhbmRsZWQsIG5vIG1lbW9yeSBsZWFrcyBhbGxvd2VkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NuZF9jYXJkX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYz0xOTU9RVhQT1JUX1NZTUJPTChzbmRfY2FyZF9uZXcpO1xuc291bmQvY29yZS9pbml0LmMtMTk2LVxuc291bmQvY29yZS9pbml0LmM6MTk3OnN0YXRpYyB2b2lkIF9fc25kX2NhcmRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXG5zb3VuZC9jb3JlL2luaXQuYy0xOTgte1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTIyNz1pbnQgc25kX2Rldm1fY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsXG4tLVxuc291bmQvY29yZS9pbml0LmMtMjM0LVx0KmNhcmRfcmV0ID0gTlVMTDtcbnNvdW5kL2NvcmUvaW5pdC5jOjIzNTpcdGNhcmQgPSBkZXZyZXNfYWxsb2MoX19zbmRfY2FyZF9yZWxlYXNlLFxuc291bmQvY29yZS9pbml0LmMtMjM2LVx0XHRcdCAgICBzdHJ1Y3Rfc2l6ZShjYXJkLCBwcml2YXRlX2RhdGFfYXJlYSwgZXh0cmFfc2l6ZSksXG4tLVxuc291bmQvY29yZS9pbml0LmM9MjY0PWludCBzbmRfY2FyZF9mcmVlX29uX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldClcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0yNjktXHRcdHJldHVybiAwO1xuc291bmQvY29yZS9pbml0LmM6MjcwOlx0Y2FyZCA9IGRldnJlc19maW5kKGRldiwgX19zbmRfY2FyZF9yZWxlYXNlLCBOVUxMLCBOVUxMKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTI3MS1cdGlmIChjYXJkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBfX3NuZF9jYXJkX3JlbGVhc2VgOgoKKipBbmFseXppbmcgYF9fc25kX2NhcmRfcmVsZWFzZWAqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgYF9fc25kX2NhcmRfcmVsZWFzZWAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGlzIGlzIGdvaW5nIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIGNsZWFudXAgcHJvY2VzcyBmb3IgYW4gYXVkaW8gY2FyZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBzb3VuZCBzdWJzeXN0ZW0sIHByb2JhYmx5IGluIHRoZSBBTFNBIGZyYW1ld29yay4gTW9yZSBzcGVjaWZpY2FsbHksIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VuZCBjYXJkLgoKSSBiZXQgaXQmIzM5O2xsIGludm9sdmU6CgoqICAgKipVbnJlZ2lzdGVyaW5nIHRoZSBjYXJkOioqIERlcmVnaXN0ZXJpbmcgdGhlIHNvdW5kIGNhcmQgd2l0aCB0aGUgQUxTQSBjb3JlLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UsIHRvIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGtub3dpbmcgYWJvdXQgaXQuCiogICAqKlJlbGVhc2luZyBEcml2ZXItc3BlY2lmaWMgcmVzb3VyY2VzOioqIEZyZWVpbmcgYW55IG1lbW9yeSwgbXV0ZXhlcywgc2VtYXBob3Jlcywgb3Igb3RoZXIgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSB0aGUgc291bmQgY2FyZCBkcml2ZXIgc3BlY2lmaWMgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBga2ZyZWVgLCBgbXV0ZXhfZGVzdHJveWAsIGBzbmRfY2FyZF9mcmVlYCwgb3IgYW55IGRyaXZlci1zcGVjaWZpYyByZWxlYXNlIGZ1bmN0aW9ucyB0aGF0IHRoZSBjYXJkIGRyaXZlciB1c2VzLgoqICAgKipDbG9zaW5nIGRldmljZSBmaWxlczoqKiBQb3RlbnRpYWxseSBjbG9zaW5nIGFueSBkZXZpY2UgZmlsZXMgb3IgcmVtb3ZpbmcgdGhlbSBmcm9tIGRldmljZSBmaWxlIHN0cnVjdHVyZXMuIFRoaXMgZW5zdXJlcyB0aGF0IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgY2FuJiMzOTt0IGFjY2lkZW50YWxseSBhY2Nlc3MgZGFuZ2xpbmcgcmVmZXJlbmNlcy4KKiAgICoqU3RvcHBpbmcgYWxsIGFjdGl2ZSBzdHJlYW1zOioqIEVuc3VyaW5nIHRoYXQgYW55IGN1cnJlbnRseSBhY3RpdmUgYXVkaW8gc3RyZWFtcyBvciBwbGF5YmFjayBidWZmZXJzIGFyZSBncmFjZWZ1bGx5IHN0b3BwZWQgYW5kIGNsZWFyZWQgdG8gYXZvaWQgZGF0YSBjb3JydXB0aW9uIG9yIHJlc291cmNlIGxlYWtzLgoKSSYjMzk7bGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBvcmRlciBvZiB0aGVzZSBvcGVyYXRpb25zIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBJcyBpdCByb2J1c3QgdG8gcGFydGlhbCBmYWlsdXJlcywgZm9yIGluc3RhbmNlPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eT8gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zPyBUaGVzZSBhcmUgY3J1Y2lhbCBhc3BlY3RzIHRvIGNvbnNpZGVyIGR1cmluZyB0aGlzIHJldmlldy4KTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NzpcdHN0YXRpYyB2b2lkIF9fc25kX2NhcmRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXG4gMTk4Olx0e1xuIDE5OTpcdFx0c25kX2NhcmRfZnJlZShkYXRhKTtcbiAyMDA6XHR9XG4gMjAxOlx0XG4gMjAyOlx0LyoqXG4gMjAzOlx0ICogc25kX2Rldm1fY2FyZF9uZXcgLSBtYW5hZ2VkIHNuZF9jYXJkIG9iamVjdCBjcmVhdGlvblxuIDIwNDpcdCAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgZGV2aWNlIG9iamVjdFxuIDIwNTpcdCAqIEBpZHg6IGNhcmQgaW5kZXggKGFkZHJlc3MpIFswIC4uLiAoU05EUlZfQ0FSRFMtMSldXG4gMjA2Olx0ICogQHhpZDogY2FyZCBpZGVudGlmaWNhdGlvbiAoQVNDSUkgc3RyaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgQXVkaW8gU3Vic3lzdGVtIFNodXRkb3duKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHNodXRkb3duIHNlcXVlbmNlLiBUaGUgYF9fc25kX2NhcmRfcmVsZWFzZWAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBOb3csIEkgc2VlIGl0IGNhbGxzIGBzbmRfY2FyZF9mcmVlKGRhdGEpYC4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBwb2ludC4gU28sIHdoYXQgZXhhY3RseSBpcyBgc25kX2NhcmRfZnJlZWAgZG9pbmcgd2l0aCB0aGF0IGBkYXRhYCBwb2ludGVyPyBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc25kX2NhcmRfZnJlZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNsZWFuZWQgdXAgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlIGZsb3cgZnJvbSB0aGVyZSB0byBidWlsZCBteSBtZW50YWwgbW9kZWwgb2YgdGhpcyBwYXJ0IG9mIHRoZSBhdWRpbyBzdWJzeXN0ZW0uIEl0JiMzOTtzIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgcmVzb3VyY2UgcmVsZWFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjMzOlx0LyoqXG4gNjM0Olx0ICogc25kX2NhcmRfZnJlZSAtIGZyZWVzIGdpdmVuIHNvdW5kY2FyZCBzdHJ1Y3R1cmVcbiA2MzU6XHQgKiBAY2FyZDogc291bmRjYXJkIHN0cnVjdHVyZVxuIDYzNjpcdCAqXG4gNjM3Olx0ICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgc291bmRjYXJkIHN0cnVjdHVyZSBhbmQgdGhlIGFsbCBhc3NpZ25lZFxuIDYzODpcdCAqIGRldmljZXMgYXV0b21hdGljYWxseS4gIFRoYXQgaXMsIHlvdSBkb24mIzM5O3QgaGF2ZSB0byByZWxlYXNlIHRoZSBkZXZpY2VzXG4gNjM5Olx0ICogYnkgeW91cnNlbGYuXG4gNjQwOlx0ICpcbiA2NDE6XHQgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIHVudGlsIHRoZSBhbGwgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSByZWxlYXNlZC5cbiA2NDI6XHQgKlxuIDY0MzpcdCAqIFJldHVybjogWmVyby4gRnJlZXMgYWxsIGFzc29jaWF0ZWQgZGV2aWNlcyBhbmQgZnJlZXMgdGhlIGNvbnRyb2xcbiA2NDQ6XHQgKiBpbnRlcmZhY2UgYXNzb2NpYXRlZCB0byBnaXZlbiBzb3VuZGNhcmQuXG4gNjQ1Olx0ICovXG4gNjQ2Olx0dm9pZCBzbmRfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiA2NDc6XHR7XG4gNjQ4Olx0XHRERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhyZWxlYXNlZCk7XG4gNjQ5Olx0XG4gNjUwOlx0XHQvKiBUaGUgY2FsbCBvZiBzbmRfY2FyZF9mcmVlKCkgaXMgYWxsb3dlZCBmcm9tIHZhcmlvdXMgY29kZSBwYXRocztcbiA2NTE6XHRcdCAqIGEgbWFudWFsIGNhbGwgZnJvbSB0aGUgZHJpdmVyIGFuZCB0aGUgY2FsbCB2aWEgZGV2cmVzX2ZyZWUsIGFuZFxuIDY1MjpcdFx0ICogd2UgbmVlZCB0byBhdm9pZCBkb3VibGUtZnJlZS4gTW9yZW92ZXIsIHRoZSByZWxlYXNlIHZpYSBkZXZyZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXBseSBmYW1pbGlhciB3aXRoIGNvZGUgYW5kIHNvdW5kIGNhcmQgZHJpdmVyczoKCioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIgb2YgYHNuZF9jYXJkX2ZyZWVgKioKCkFscmlnaHQsIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyBjbGVhcjogbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVtYWluaW5nIHNlY3Rpb25zIG9mIHRoZSBgc25kX2NhcmRfZnJlZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjbGVhbnVwIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgcm91dGluZS4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IGVhY2ggcGFydCB0byBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgaG9saXN0aWMgdmlldyBvZiBob3cgYSBzb3VuZCBjYXJkIHJlc291cmNlIGlzIGRlYWxsb2NhdGVkLCBzbyB0aGF0IEkgZG9uJiMzOTt0IG1pc3MgYW55IGNyaXRpY2FsIGRldGFpbHMgZHVyaW5nIHJlc291cmNlIHRlYXJkb3duLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGNsZWFuIHVwIGFsbCB0aG9zZSBhdWRpbyBkZXZpY2UgY29tcG9uZW50cy4gTXkgZXhwZWN0YXRpb24gaXMgdGhlcmUgd2lsbCBiZSBhIGxvdCBvZiBkZXZpY2UgdW5yZWdpc3RyYXRpb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjUzOlx0XHQgKiBtYXkgY2FsbCBzbmRfY2FyZF9mcmVlKCkgdHdpY2UgZHVlIHRvIGl0cyBuYXR1cmUsIHdlIG5lZWQgdG8gaGF2ZVxuIDY1NDpcdFx0ICogdGhlIGNoZWNrIGhlcmUgYXQgdGhlIGJlZ2lubmluZy5cbiA2NTU6XHRcdCAqL1xuIDY1NjpcdFx0aWYgKGNhcmQtXHUwMDNlcmVsZWFzaW5nKVxuIDY1NzpcdFx0XHRyZXR1cm47XG4gNjU4Olx0XG4gNjU5Olx0XHRjYXJkLVx1MDAzZXJlbGVhc2VfY29tcGxldGlvbiA9IFx1MDAyNnJlbGVhc2VkO1xuIDY2MDpcdFx0c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChjYXJkKTtcbiA2NjE6XHRcbiA2NjI6XHRcdC8qIHdhaXQsIHVudGlsIGFsbCBkZXZpY2VzIGFyZSByZWFkeSBmb3IgdGhlIGZyZWUgb3BlcmF0aW9uICovXG4gNjYzOlx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNnJlbGVhc2VkKTtcbiA2NjQ6XHR9XG4gNjY1Olx0RVhQT1JUX1NZTUJPTChzbmRfY2FyZF9mcmVlKTtcbiA2NjY6XHRcbiA2Njc6XHQvKiBjaGVjaywgaWYgdGhlIGNoYXJhY3RlciBpcyBpbiB0aGUgdmFsaWQgQVNDSUkgcmFuZ2UgKi9cbiA2Njg6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2FmZV9hc2NpaV9jaGFyKGNoYXIgYylcbiA2Njk6XHR7XG4gNjcwOlx0XHRyZXR1cm4gaXNhc2NpaShjKSBcdTAwMjZcdTAwMjYgaXNhbG51bShjKTtcbiA2NzE6XHR9XG4gNjcyOlx0XG4gNjczOlx0LyogcmV0cmlldmUgdGhlIGxhc3Qgd29yZCBvZiBzaG9ydG5hbWUgb3IgbG9uZ25hbWUgKi9cbiA2NzQ6XHRzdGF0aWMgY29uc3QgY2hhciAqcmV0cmlldmVfaWRfZnJvbV9jYXJkX25hbWUoY29uc3QgY2hhciAqbmFtZSlcbiA2NzU6XHR7XG4gNjc2Olx0XHRjb25zdCBjaGFyICpzcG9zID0gbmFtZTtcbiA2Nzc6XHRcbiA2Nzg6XHRcdHdoaWxlICgqbmFtZSkge1xuIDY3OTpcdFx0XHRpZiAoaXNzcGFjZSgqbmFtZSkgXHUwMDI2XHUwMDI2IHNhZmVfYXNjaWlfY2hhcihuYW1lWzFdKSlcbiA2ODA6XHRcdFx0XHRzcG9zID0gbmFtZSAmIzQzOyAxO1xuIDY4MTpcdFx0XHRuYW1lJiM0MzsmIzQzOztcbiA2ODI6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBBTFNBIENvcmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEFMU0EgY29kZSBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIHRoZXJlJiMzOTtzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBidWcgbHVya2luZyBpbiBgc25kX2NhcmRfZnJlZWAuIEl0IGFsbCBzdGFydHMgd2l0aCBgc25kX2NhcmRfZnJlZWAgY2FsbGluZyBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gdGhlIGBwdXRfZGV2aWNlYCBhbmQgdWx0aW1hdGVseSBgcmVsZWFzZV9jYXJkX2RldmljZWAsIHdoaWNoIHRyaWdnZXJzIGBzbmRfY2FyZF9kb19mcmVlYC4gIGBzbmRfY2FyZF9kb19mcmVlYCBzZXRzIGBjYXJkLSZndDtyZWxlYXNpbmcgPSB0cnVlO2AgYmVmb3JlIGl0IGRvZXMgYW55dGhpbmcgZWxzZS4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBjb21lcyBkb3duIHRvIGhvdyB0aGUgYGNhcmRgIHN0cnVjdHVyZSBpcyBoYW5kbGVkIGFmdGVyIGl0JiMzOTtzIGJlZW4gZnJlZWQuIEluc2lkZSBgc25kX2NhcmRfZG9fZnJlZWAsIHRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIGBjYXJkLSZndDttYW5hZ2VkYC4gSWYgdGhlIGBjYXJkYCBpc24mIzM5O3QgbWFuYWdlZCAobWVhbmluZyBpdCB3YXNuJiMzOTt0IGFsbG9jYXRlZCB3aXRoIGBkZXZtYCksIHRoZW4gYGtmcmVlKGNhcmQpYCBpcyBjYWxsZWQgcmlnaHQgdGhlcmUuIEJ1dCB0aGUgY29kZSBoYXMgYSByYWNlIGNvbmRpdGlvbi4gSXQgc2V0cyB1cCBhIGNvbXBsZXRpb24sIGBjYXJkLSZndDtyZWxlYXNlX2NvbXBsZXRpb25gLCBhbmQgdGhlbiAqY29tcGxldGVzKiBpdCwgYGNvbXBsZXRlKGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbilgLCBiZWZvcmUgdGhlIGNoZWNrIGZvciBgY2FyZC0mZ3Q7bWFuYWdlZGAuIFRoZSBrZXkgaXMgdGhhdCBgc25kX2NhcmRfZnJlZWAgd2FpdHMgb24gdGhpcyBjb21wbGV0aW9uLgoKSWYgdGhlIGBjYXJkYCAqaXMqIG1hbmFnZWQsIHRoZSBga2ZyZWVgIGlzIHNraXBwZWQuICBUaGUgcmFjZSBpcyB0aGF0IGBjb21wbGV0ZWAgd2FrZXMgdXAgdGhlIHdhaXRpbmcgYHNuZF9jYXJkX2ZyZWVgIGJlZm9yZSB0aGUgZXhlY3V0aW9uIGluIGBzbmRfY2FyZF9kb19mcmVlYCBoYXMgY29tcGxldGVseSBmaW5pc2hlZC4gU2luY2UgYHNuZF9jYXJkX2ZyZWVgIGlzIHdhaXRpbmcgb24gYCZhbXA7cmVsZWFzZWRgLCBvbiB0aGUgc3RhY2ssIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGFmdGVyIGBjb21wbGV0ZSgpYCBpcyBjYWxsZWQsIHRoZSBzdGFjayB2YXJpYWJsZSBgcmVsZWFzZWRgIGlzIHN0aWxsIHZhbGlkLiBCdXQgaWYgYGNhcmRgICppcyogbWFuYWdlZCwgYW5kIHRoZSBgY29tcGxldGVgIHdha2VzIHVwIGBzbmRfY2FyZF9mcmVlYCwgdGhlbiBgZGV2cmVzYCBpcyBnb2luZyB0byAqYWxzbyogZnJlZSBgY2FyZGAuIFRoaXMgY3JlYXRlcyBhIHVzZS1hZnRlci1mcmVlIGJlY2F1c2UgYHNuZF9jYXJkX2RvX2ZyZWVgIG1pZ2h0IGF0dGVtcHQgdG8gYWNjZXNzIGBjYXJkLSZndDttYW5hZ2VkYCAqYWZ0ZXIqIHRoZSBgY2FyZGAgaGFzIGJlZW4gZnJlZWQgYnkgYGRldnJlc2AuIFRoaXMgaGFwcGVucyBiZWNhdXNlIGBzbmRfY2FyZF9mcmVlYCBmaW5pc2hlcywgYW5kIGBfX3NuZF9jYXJkX3JlbGVhc2VgIGFsc28gZmluaXNoZXMuIFRoZW4gYGRldnJlc2AgZnJlZXMgdGhlIG1lbW9yeSBmb3IgYGNhcmRgLCBhbmQgdGhlbiBgc25kX2NhcmRfZG9fZnJlZWAgdHJpZXMgdG8gY2hlY2sgYGlmICghY2FyZC0mZ3Q7bWFuYWdlZClgLCB3aGljaCBpcyBub3cgaW52YWxpZCBtZW1vcnkuCgpUaGUgb3JpZ2luYWwgcGF0Y2ggY2xldmVybHkgZml4ZXMgdGhpcyBieSBjYWNoaW5nIGBjYXJkLSZndDttYW5hZ2VkYCAqYmVmb3JlKiBjYWxsaW5nIGBjb21wbGV0ZWAuIFRoaXMgZW5zdXJlcyB0aGF0IHdlJiMzOTtyZSBvcGVyYXRpbmcgb24gYSB2YWxpZCBjb3B5IG9mIHRoZSBgbWFuYWdlZGAgZmxhZy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IEFic29sdXRlbHkhIEFueSBBTFNBIGRyaXZlciB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHZ1bG5lcmFibGUuIFRoaXMgaW5jbHVkZXMgc2NlbmFyaW9zIG9uIG1vZHVsZSB1bmxvYWQsIGRldmljZSB1bmJpbmQsIG9yLCBjcnVjaWFsbHksIGVycm9yIHBhdGhzIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFN5emthbGxlciwgd2l0aCBpdHMgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIG9mIFVTQiBhdWRpbyBkZXZpY2VzLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBmYXVsdCBpbmplY3Rpb24gYW5kIG1hbGZvcm1lZCBkZXNjcmlwdG9ycywgY2FuIGVhc2lseSB0cmlnZ2VyIHRoaXMgZHVyaW5nIHByb2JlIGZhaWx1cmVzLiBBbmQgeWVzLCBzeXprYWxsZXIgZG9lcyB0ZXN0IFVTQiBhdWRpbyBkZXZpY2VzLgoKVGhlIHByb21wdCBzcGVjaWZpZWQgY2VydGFpbiBjb25kaXRpb25zIGluIHdoaWNoIEkgc2hvdWxkIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuIEl0IHRhbGtzIGFib3V0ICYjMzQ7RHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyYjMzQ7LiBUaGlzIGlzIGEgY29yZSBBTFNBIGZyYW1ld29yayBmdW5jdGlvbiwgbm90IGEgc3BlY2lmaWMgZHJpdmVyJiMzOTtzIHRlYXJkb3duIGNhbGxiYWNrLiBJdCYjMzk7cyB0cmlnZ2VyZWQgbm90IGp1c3QgZHVyaW5nIHVuYmluZC9yZW1vdmUsIGJ1dCBhbHNvIG9uIHByb2JlIGVycm9ycy4gVGhlIHByb21wdCBkb2VzIHNheTogJiMzNDt0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuJiMzNDsgSG93ZXZlciwgdGhpcyBpcyB3cm9uZy4gSXQgaXMgYWxzbyBleGVjdXRlZCBkdXJpbmcgZXJyb3IgcGF0aHMgb2YgbW9kdWxlIGxvYWRpbmcgb3IgZGV2aWNlIHByb2JpbmcuIFRoZSBjb21iaW5hdGlvbiBvZiBgc25kX2Rldm1fY2FyZF9uZXdgIHdpdGggYSBsYXRlciBmYWlsdXJlIGluIHRoZSBwcm9iZSByb3V0aW5lLCBtZWFucyB0aGF0IGBkZXZyZXNgIGZyZWVzIHRoZSBjYXJkIHdoaWNoIGNhbGxzIGBzbmRfY2FyZF9kb19mcmVlYCwgd2hpY2ggaXMgd2hhdCBjYXVzZXMgdGhlIHVzZS1hZnRlci1mcmVlLgoKU28geWVzLCBpdCBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSwgdmVyeSBmdXp6YWJsZSwgYW5kIHJlcHJlc2VudHMgYSByZWFsIHZ1bG5lcmFiaWxpdHkuIFRoaXMgcGF0Y2ggaXMgYSB2ZXJ5IGdvb2QgZml4IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbmRfY2FyZF9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvdXNiL2NhcmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC91c2IvY2FyZC5jPTkxOD1zdGF0aWMgaW50IHVzYl9hdWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5zb3VuZC91c2IvY2FyZC5jLTEwODAtXHRcdGlmICghY2hpcC1cdTAwM2VudW1faW50ZXJmYWNlcylcbnNvdW5kL3VzYi9jYXJkLmM6MTA4MTpcdFx0XHRzbmRfY2FyZF9mcmVlKGNoaXAtXHUwMDNlY2FyZCk7XG5zb3VuZC91c2IvY2FyZC5jLTEwODItXHR9XG4tLVxuc291bmQvdXNiL2NhcmQuYz0xMTQ5PXN0YXRpYyB2b2lkIHVzYl9hdWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbnNvdW5kL3VzYi9jYXJkLmMtMTE1OC1cdGlmIChfX3VzYl9hdWRpb19kaXNjb25uZWN0KGludGYsIGNoaXAsIGNhcmQpKVxuc291bmQvdXNiL2NhcmQuYzoxMTU5Olx0XHRzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKGNhcmQpO1xuc291bmQvdXNiL2NhcmQuYy0xMTYwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3OTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFVTQiBBdWRpbyBQcm9iZSBFcnJvciBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBhdWRpbyBkcml2ZXIgYW5kIGhvdyBpdCBoYW5kbGVzIGVycm9ycyBkdXJpbmcgdGhlIFVTQiBhdWRpbyBwcm9iZSBwcm9jZXNzLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IGBzbmRfY2FyZF9mcmVlYCAqaXMqIGNhbGxlZCBpbiB0aGUgZXJyb3IgcGF0aHMgb2YgYHVzYl9hdWRpb19wcm9iZWAuIEdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLiBCdXQsIHdhaXQgYSBzZWNvbmQuLi4gYHVzYl9hdWRpb19wcm9iZWAgdXNlcyBgc25kX2NhcmRfZnJlZWAsIHdoaWNoIGlzIGdvb2QsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gdGhpbmtpbmcgb2YgdGhlIGNvbnRleHQuIERvZXMgYHVzYl9hdWRpb19wcm9iZWAgcHJvcGVybHkgYWxsb2NhdGUgYSBjYXJkIHdpdGggYHNuZF9kZXZtX2NhcmRfbmV3YCBzbyB0aGF0IGl0IGFsc28gZnJlZXMgdGhlIGNhcmQ/IExldCYjMzk7cyBxdWlja2x5IHZlcmlmeSB3aGVyZSBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHNvdW5kL3VzYi9jYXJkLmNgLCB0byBjb25maXJtIHRoYXQgdGhlIHByb3BlciBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIHBhaXJpbmcgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMgY29ycmVjdGx5IHRvIGF2b2lkIGxlYWtzIG9yIGRvdWJsZSBmcmVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbmRfZGV2bV9jYXJkX25ldyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU291bmQgRGV2aWNlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGBzb3VuZC91c2IvYCBzdWJzeXN0ZW0gaXNuJiMzOTt0IGVtcGxveWluZyBgc25kX2Rldm1fY2FyZF9uZXdgLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhbmQgaXQgbWVhbnMgSSBuZWVkIHRvIGFkanVzdCBteSBsaW5lIG9mIGlucXVpcnkuIEluc3RlYWQgb2YgZm9jdXNpbmcgb24gKmhvdyogaXQmIzM5O3MgdXNlZCB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQmIzM5O3Mgbm90IGJlaW5nIHVzZWQgYW5kIHdoYXQgYWx0ZXJuYXRpdmVzIGFyZSBpbXBsZW1lbnRlZC4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHNuZF9kZXZtX2NhcmRfbmV3YCAqaXMqIHVzZWQuIExldCYjMzk7cyB0cmFjZSBpdHMgY2FsbHMgYW5kIHNlZSB3aGljaCBvdGhlciBhdWRpbyBkcml2ZXJzIG9yIHN1YnN5c3RlbXMgcmVseSBvbiBpdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIEFMU0EgZnJhbWV3b3JrIGFuZCBwb3RlbnRpYWxseSBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5kIHRoZSBgc291bmQvdXNiL2AgYXBwcm9hY2guIFVuZGVyc3RhbmRpbmcgdGhlIGVzdGFibGlzaGVkIHBhdHRlcm5zIGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgZW1wbG95ZWQgbWlnaHQgaWxsdW1pbmF0ZSB0aGUgc3BlY2lmaWMgcmF0aW9uYWxlIGZvciBpdHMgYWJzZW5jZSBpbiB0aGUgVVNCIGF1ZGlvIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUgdG8gZm9ybXVsYXRlIHRoZSByaWdodCBxdWVzdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9kZXZtX2NhcmRfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbnNvdW5kL2NvcmUvaW5pdC5jPTE5Nz1zdGF0aWMgdm9pZCBfX3NuZF9jYXJkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTIwMi0vKipcbnNvdW5kL2NvcmUvaW5pdC5jOjIwMzogKiBzbmRfZGV2bV9jYXJkX25ldyAtIG1hbmFnZWQgc25kX2NhcmQgb2JqZWN0IGNyZWF0aW9uXG5zb3VuZC9jb3JlL2luaXQuYy0yMDQtICogQHBhcmVudDogdGhlIHBhcmVudCBkZXZpY2Ugb2JqZWN0XG4tLVxuc291bmQvY29yZS9pbml0LmMtMjI2LSAqL1xuc291bmQvY29yZS9pbml0LmM6MjI3OmludCBzbmRfZGV2bV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCxcbnNvdW5kL2NvcmUvaW5pdC5jLTIyOC1cdFx0ICAgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBzaXplX3QgZXh0cmFfc2l6ZSxcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0yNTAtfVxuc291bmQvY29yZS9pbml0LmM6MjUxOkVYUE9SVF9TWU1CT0xfR1BMKHNuZF9kZXZtX2NhcmRfbmV3KTtcbnNvdW5kL2NvcmUvaW5pdC5jLTI1Mi1cbi0tXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmM9MTc5OD1zdGF0aWMgaW50IGxvb3BiYWNrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cilcbi0tXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmMtMTgwNC1cbnNvdW5kL2RyaXZlcnMvYWxvb3AuYzoxODA1Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2ZGV2cHRyLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmMtMTgwNi1cdFx0XHRcdHNpemVvZihzdHJ1Y3QgbG9vcGJhY2spLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9kcml2ZXJzL2R1bW15LmM9MTAxMj1zdGF0aWMgaW50IHNuZF9kdW1teV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXG4tLVxuc291bmQvZHJpdmVycy9kdW1teS5jLTEwMTktXG5zb3VuZC9kcml2ZXJzL2R1bW15LmM6MTAyMDpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNmRldnB0ci1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvZHJpdmVycy9kdW1teS5jLTEwMjEtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9kdW1teSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jPTUyPXN0YXRpYyBpbnQgc25kX21wdTQwMV9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2cHRyLCBpbnQgZGV2LFxuLS1cbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jLTYxLVx0KnJjYXJkID0gTlVMTDtcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jOjYyOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2cHRyLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jLTYzLVx0XHRcdFx0MCwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvZHJpdmVycy9tdHBhdi5jPTY1Mj1zdGF0aWMgaW50IHNuZF9tdHBhdl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXG4tLVxuc291bmQvZHJpdmVycy9tdHBhdi5jLTY1Ny1cbnNvdW5kL2RyaXZlcnMvbXRwYXYuYzo2NTg6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZkZXYtXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvZHJpdmVycy9tdHBhdi5jLTY1OS1cdFx0XHRcdHNpemVvZigqbXRwX2NhcmQpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYz02MDA9c3RhdGljIGludCBwY210c3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYy02MDktXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYzo2MTA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgXHUwMDI2Y2FyZCk7XG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYy02MTEtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmM9OTg9c3RhdGljIGludCBzbmRfY2FyZF9wY3NwX3Byb2JlKGludCBkZXZudW0sIHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jLTEwNy1cbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmM6MTA4Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCBcdTAwMjZjYXJkKTtcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMtMTA5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmM9MzIxPXN0YXRpYyBpbnQgc25kX3NlcmlhbF9nZW5lcmljX3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXG4tLVxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jLTMyNi1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYzozMjc6XHRlcnIgID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2c2VyZGV2LVx1MDAzZWRldiwgU05EUlZfREVGQVVMVF9JRFgxLFxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jLTMyOC1cdFx0XHRcdFNORFJWX0RFRkFVTFRfU1RSMSwgVEhJU19NT0RVTEUsXG4tLVxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmM9ODQyPXN0YXRpYyBpbnQgc25kX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXG4tLVxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMtODg0LVxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmM6ODg1Olx0ZXJyICA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNmRldnB0ci1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMtODg2LVx0XHRcdFx0IDAsIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jPTcxPXN0YXRpYyBpbnQgc25kX3Zpcm1pZGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxuLS1cbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jLTc3LVxuc291bmQvZHJpdmVycy92aXJtaWRpLmM6Nzg6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZkZXZwdHItXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jLTc5LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jPTExNz1zdGF0aWMgaW50IHNuZF9jYXJkX2FkMTgxNmFfcHJvYmUoaW50IGRldiwgc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLFxuLS1cbnNvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYy0xMjQtXG5zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmM6MTI1Olx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2FyZC1cdTAwM2VjYXJkLVx1MDAzZWRldixcbnNvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYy0xMjYtXHRcdFx0XHQgIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmM9Njk9c3RhdGljIGludCBzbmRfYWQxODQ4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYy03NC1cbnNvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmM6NzU6XHRlcnJvciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgXHUwMDI2Y2FyZCk7XG5zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jLTc2LVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLS1cbnNvdW5kL2lzYS9hZGxpYi5jPTQ2PXN0YXRpYyBpbnQgc25kX2FkbGliX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL2FkbGliLmMtNTEtXG5zb3VuZC9pc2EvYWRsaWIuYzo1MjpcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcdTAwMjZjYXJkKTtcbnNvdW5kL2lzYS9hZGxpYi5jLTUzLVx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4tLVxuc291bmQvaXNhL2FsczEwMC5jPTE2MT1zdGF0aWMgaW50IHNuZF9jYXJkX2FsczEwMF9wcm9iZShpbnQgZGV2LFxuLS1cbnNvdW5kL2lzYS9hbHMxMDAuYy0xNzAtXG5zb3VuZC9pc2EvYWxzMTAwLmM6MTcxOlx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2FyZC1cdTAwM2VjYXJkLVx1MDAzZWRldixcbnNvdW5kL2lzYS9hbHMxMDAuYy0xNzItXHRcdFx0XHQgIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2lzYS9henQyMzIwLmM9MTYwPXN0YXRpYyBpbnQgc25kX2NhcmRfYXp0MjMyMF9wcm9iZShpbnQgZGV2LFxuLS1cbnNvdW5kL2lzYS9henQyMzIwLmMtMTY5LVxuc291bmQvaXNhL2F6dDIzMjAuYzoxNzA6XHRlcnJvciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjYXJkLVx1MDAzZWNhcmQtXHUwMDNlZGV2LFxuc291bmQvaXNhL2F6dDIzMjAuYy0xNzEtXHRcdFx0XHQgIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2lzYS9jbWk4MzI4LmM9MjE4PXN0YXRpYyBpbnQgc25kX2NtaTgzMjhfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IG5kZXYpXG4tLVxuc291bmQvaXNhL2NtaTgzMjguYy0yOTYtXG5zb3VuZC9pc2EvY21pODMyOC5jOjI5NzpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W25kZXZdLCBpZFtuZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2EvY21pODMyOC5jLTI5OC1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX2NtaTgzMjgpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9pc2EvY21pODMzMC5jPTUwMD1zdGF0aWMgaW50IHNuZF9jbWk4MzMwX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBkZXYsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL2NtaTgzMzAuYy01MDYtXG5zb3VuZC9pc2EvY21pODMzMC5jOjUwNzpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL2NtaTgzMzAuYy01MDgtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzMwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYz03Nj1zdGF0aWMgaW50IHNuZF9jczQyMzFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcbi0tXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jLTgxLVxuc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYzo4MjpcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcdTAwMjZjYXJkKTtcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMtODMtXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tLVxuc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYz0zMTM9c3RhdGljIGludCBzbmRfY3M0MjN4X2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBkZXYsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYy0zMTgtXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jOjMxOTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYy0zMjAtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2NzNDIzNiksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmM9MTY0PXN0YXRpYyBpbnQgc25kX2VzMTY4OF9pc2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcbi0tXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jLTE2OC1cbnNvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmM6MTY5Olx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jLTE3MC1cdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBzbmRfZXMxNjg4KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYz0yNTk9c3RhdGljIGludCBzbmRfZXM5NjhfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXG4tLVxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYy0yNzQtXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jOjI3NTpcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNhcmQtXHUwMDNlY2FyZC1cdTAwM2VkZXYsXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jLTI3Ni1cdFx0XHRcdCAgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG4tLVxuc291bmQvaXNhL2VzMTh4eC5jPTIwMzg9c3RhdGljIGludCBzbmRfZXMxOHh4X2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBkZXYsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL2VzMTh4eC5jLTIwNDAte1xuc291bmQvaXNhL2VzMTh4eC5jOjIwNDE6XHRyZXR1cm4gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2EvZXMxOHh4LmMtMjA0Mi1cdFx0XHRcdCBzaXplb2Yoc3RydWN0IHNuZF9lczE4eHgpLCBjYXJkcCk7XG4tLVxuc291bmQvaXNhL2dhbGF4eS9nYWxheHkuYz00ODE9c3RhdGljIGludCBfX3NuZF9nYWxheHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcbi0tXG5zb3VuZC9pc2EvZ2FsYXh5L2dhbGF4eS5jLTQ4OC1cbnNvdW5kL2lzYS9nYWxheHkvZ2FsYXh5LmM6NDg5Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL2dhbGF4eS9nYWxheHkuYy00OTAtXHRcdFx0XHRzaXplb2YoKmdhbGF4eSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jPTEzMj1zdGF0aWMgaW50IHNuZF9ndXNjbGFzc2ljX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMtMTM3LVxuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmM6MTM4Olx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsIFx1MDAyNmNhcmQpO1xuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMtMTM5LVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLS1cbnNvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jPTIzMj1zdGF0aWMgaW50IHNuZF9ndXNleHRyZW1lX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMtMjQwLVxuc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmM6MjQxOlx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYy0yNDItXHRcdFx0XHQgIHNpemVvZigqZ3VzZXh0cmVtZSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmM9MTg1PXN0YXRpYyBpbnQgc25kX2d1c21heF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KVxuLS1cbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmMtMTk0LVxuc291bmQvaXNhL2d1cy9ndXNtYXguYzoxOTU6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmMtMTk2LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfZ3VzbWF4KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYz02MjU9c3RhdGljIGludCBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBkZXYsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYy02MzEtXG5zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jOjYzMjpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYy02MzMtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9pbnRlcndhdmUpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmM9ODU3PXN0YXRpYyBpbnQgc25kX21zbmRfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpZHgpXG4tLVxuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jLTg3MS1cbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYzo4NzI6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYy04NzMtXHRcdFx0XHRzaXplb2Yoc3RydWN0IHNuZF9tc25kKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jPTEwOTA9c3RhdGljIGludCBzbmRfbXNuZF9wbnBfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCxcbi0tXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMtMTEzMS1cdCAqL1xuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jOjExMzI6XHRyZXQgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2FyZC1cdTAwM2VjYXJkLVx1MDAzZWRldixcbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYy0xMTMzLVx0XHRcdFx0aW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsXG4tLVxuc291bmQvaXNhL29wbDNzYTIuYz01OTU9c3RhdGljIGludCBzbmRfb3BsM3NhMl9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxuLS1cbnNvdW5kL2lzYS9vcGwzc2EyLmMtNjAxLVxuc291bmQvaXNhL29wbDNzYTIuYzo2MDI6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9vcGwzc2EyLmMtNjAzLVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfb3BsM3NhMiksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9vcHRpOXh4L21pcm8uYz0xNTYwPXN0YXRpYyBpbnQgc25kX21pcm9faXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgdW5zaWduZWQgaW50IG4pXG4tLVxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE1NzMtXG5zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmM6MTU3NDpcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2cHRyLCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE1NzUtXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgc25kX21pcm8pLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmM9MTc3ND1zdGF0aWMgaW50IHNuZF9taXJvX3BucF9wcm9iZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXG4tLVxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE3ODQtXHRcdHJldHVybiAtRU5PREVWO1xuc291bmQvaXNhL29wdGk5eHgvbWlyby5jOjE3ODU6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2FyZC1cdTAwM2VjYXJkLVx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9vcHRpOXh4L21pcm8uYy0xNzg2LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfbWlybyksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmM9OTA4PXN0YXRpYyBpbnQgc25kX29wdGk5eHhfY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApXG4tLVxuc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYy05MTItXG5zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jOjkxMzpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jLTkxNC1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9pc2Evc2IvamF6ejE2LmM9MjE1PXN0YXRpYyBpbnQgc25kX2phenoxNl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpXG4tLVxuc291bmQvaXNhL3NiL2phenoxNi5jLTIyNS1cbnNvdW5kL2lzYS9zYi9qYXp6MTYuYzoyMjY6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXZwdHIsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvaXNhL3NiL2phenoxNi5jLTIyNy1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL3NiL3NiMTYuYz0yODk9c3RhdGljIGludCBzbmRfc2IxNl9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIGludCBkZXYsXG4tLVxuc291bmQvaXNhL3NiL3NiMTYuYy0yOTQtXG5zb3VuZC9pc2Evc2Ivc2IxNi5jOjI5NTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldnB0ciwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9pc2Evc2Ivc2IxNi5jLTI5Ni1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfc2IxNiksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9zYi9zYjguYz03Mz1zdGF0aWMgaW50IHNuZF9zYjhfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldilcbi0tXG5zb3VuZC9pc2Evc2Ivc2I4LmMtODAtXG5zb3VuZC9pc2Evc2Ivc2I4LmM6ODE6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9zYi9zYjguYy04Mi1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX3NiOCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9zYzYwMDAuYz01NzU9c3RhdGljIGludCBfX3NuZF9zYzYwMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgZGV2KVxuLS1cbnNvdW5kL2lzYS9zYzYwMDAuYy01ODgtXG5zb3VuZC9pc2Evc2M2MDAwLmM6NTg5Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2cHRyLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9zYzYwMDAuYy01OTAtXHRcdFx0XHRzaXplb2YoKnNjNjAwMCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2lzYS9zc2NhcGUuYz0xMjE0PXN0YXRpYyBpbnQgc25kX3NzY2FwZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KVxuLS1cbnNvdW5kL2lzYS9zc2NhcGUuYy0xMjE5LVxuc291bmQvaXNhL3NzY2FwZS5jOjEyMjA6XHRyZXQgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS9zc2NhcGUuYy0xMjIxLVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvaXNhL3NzY2FwZS5jPTEyNjg9c3RhdGljIGludCBzc2NhcGVfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXG4tLVxuc291bmQvaXNhL3NzY2FwZS5jLTEzMDItXHQgKi9cbnNvdW5kL2lzYS9zc2NhcGUuYzoxMzAzOlx0cmV0ID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNhcmQtXHUwMDNlY2FyZC1cdTAwM2VkZXYsXG5zb3VuZC9pc2Evc3NjYXBlLmMtMTMwNC1cdFx0XHRcdGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmM9MzEyPXN0YXRpYyBpbnQgc25kX3dhdmVmcm9udF9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxuLS1cbnNvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMtMzE4LVxuc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYzozMTk6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMtMzIwLVx0XHRcdFx0c2l6ZW9mKHNuZF93YXZlZnJvbnRfY2FyZF90KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2FkMTg4OS5jPTg0MD1fX3NuZF9hZDE4ODlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvYWQxODg5LmMtODU2LVx0LyogKDIpICovXG5zb3VuZC9wY2kvYWQxODg5LmM6ODU3Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2FkMTg4OS5jLTg1OC1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYz0yMDg5PXN0YXRpYyBpbnQgX19zbmRfYWxpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jLTIwOTctXG5zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmM6MjA5ODpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMtMjA5OS1cdFx0XHRcdHNpemVvZigqY29kZWMpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvYWxzMzAwLmM9Njc0PXN0YXRpYyBpbnQgc25kX2FsczMwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9hbHMzMDAuYy02ODgtXG5zb3VuZC9wY2kvYWxzMzAwLmM6Njg5Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvYWxzMzAwLmMtNjkwLVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2FsczQwMDAuYz04MDE9c3RhdGljIGludCBfX3NuZF9jYXJkX2FsczQwMDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvYWxzNDAwMC5jLTgzOS1cdFxuc291bmQvcGNpL2FsczQwMDAuYzo4NDA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9hbHM0MDAwLmMtODQxLVx0XHRcdFx0c2l6ZW9mKCphY2FyZCkgLyogcHJpdmF0ZV9kYXRhOiBhY2FyZCAqLyxcbi0tXG5zb3VuZC9wY2kvYXRpaXhwLmM9MTU1Mz1zdGF0aWMgaW50IF9fc25kX2F0aWl4cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9hdGlpeHAuYy0xNTU5LVxuc291bmQvcGNpL2F0aWl4cC5jOjE1NjA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2F0aWl4cC5jLTE1NjEtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmM9MTE4NT1zdGF0aWMgaW50IF9fc25kX2F0aWl4cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYy0xMTkxLVxuc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jOjExOTI6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jLTExOTMtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jPTE5NT1fX3NuZF92b3J0ZXhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcbi0tXG5zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jLTIwOS1cdC8vICgyKVxuc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYzoyMTA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMtMjExLVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jPTI1MD1zdGF0aWMgaW50IHNuZF9hdzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMtMjY2LVx0LyogKDIpIENyZWF0ZSBjYXJkIGluc3RhbmNlICovXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmM6MjY3Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMtMjY4LVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2F6dDMzMjguYz0yNDA2PV9fc25kX2F6ZjMzMjhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcbi0tXG5zb3VuZC9wY2kvYXp0MzMyOC5jLTI0MjAtXG5zb3VuZC9wY2kvYXp0MzMyOC5jOjI0MjE6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9henQzMzI4LmMtMjQyMi1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9idDg3eC5jPTgwMT1zdGF0aWMgaW50IF9fc25kX2J0ODd4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2J0ODd4LmMtODI0LVxuc291bmQvcGNpL2J0ODd4LmM6ODI1Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvYnQ4N3guYy04MjYtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmM9MTcxMz1zdGF0aWMgaW50IF9fc25kX2NhMDEwNl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYy0xNzI3LVxuc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jOjE3Mjg6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYy0xNzI5LVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2NtaXBjaS5jPTMxNjk9c3RhdGljIGludCBzbmRfY21pcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2NtaXBjaS5jLTMxODItXG5zb3VuZC9wY2kvY21pcGNpLmM6MzE4MzpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2NtaXBjaS5jLTMxODQtXHRcdFx0XHRzaXplb2Yoc3RydWN0IGNtaXBjaSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9jczQyODEuYz0xODE0PXN0YXRpYyBpbnQgX19zbmRfY3M0MjgxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2NzNDI4MS5jLTE4MjktXG5zb3VuZC9wY2kvY3M0MjgxLmM6MTgzMDpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2NzNDI4MS5jLTE4MzEtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jPTU0PXN0YXRpYyBpbnQgc25kX2NhcmRfY3M0Nnh4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYy02OC1cbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmM6Njk6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMtNzAtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvY3M1NTMwLmM9MTg1PXN0YXRpYyBpbnQgc25kX2NzNTUzMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9jczU1MzAuYy0xOTktXG5zb3VuZC9wY2kvY3M1NTMwLmM6MjAwOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvY3M1NTMwLmMtMjAxLVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmM9Mjg2PXN0YXRpYyBpbnQgX19zbmRfY3M1NTM1YXVkaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYy0zMDAtXG5zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYzozMDE6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jLTMwMi1cdFx0XHRcdHNpemVvZigqY3M1NTM1YXUpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jPTE5Mzc9c3RhdGljIGludCBfX3NuZF9lY2hvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYy0xOTUyLVxuc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYzoxOTUzOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jLTE5NTQtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmM9Njk9c3RhdGljIGludCBzbmRfY2FyZF9lbXUxMGsxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jLTg2LVxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jOjg3Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMtODgtXHRcdFx0XHRzaXplb2YoKmVtdSksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmM9MTQ1MD1zdGF0aWMgaW50IF9fc25kX2VtdTEwazF4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYy0xNDY0LVxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYzoxNDY1Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jLTE0NjYtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvZW5zMTM3MC5jPTIyNzA9c3RhdGljIGludCBfX3NuZF9hdWRpb3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9lbnMxMzcwLmMtMjI4NC1cbnNvdW5kL3BjaS9lbnMxMzcwLmM6MjI4NTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2VuczEzNzAuYy0yMjg2LVx0XHRcdFx0c2l6ZW9mKCplbnNvbmlxKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2VzMTkzOC5jPTE2ODY9c3RhdGljIGludCBfX3NuZF9lczE5MzhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvZXMxOTM4LmMtMTcwMS1cbnNvdW5kL3BjaS9lczE5MzguYzoxNzAyOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZXMxOTM4LmMtMTcwMy1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9lczE5NjguYz0yNjk1PXN0YXRpYyBpbnQgX19zbmRfZXMxOTY4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2VzMTk2OC5jLTI3MTAtXG5zb3VuZC9wY2kvZXMxOTY4LmM6MjcxMTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2VzMTk2OC5jLTI3MTItXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvZm04MDEuYz0xMjY3PXN0YXRpYyBpbnQgX19zbmRfY2FyZF9mbTgwMV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9mbTgwMS5jLTEyODItXG5zb3VuZC9wY2kvZm04MDEuYzoxMjgzOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvZm04MDEuYy0xMjg0LVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jPTI1Mjc9c3RhdGljIGludCBfX3NuZF92dDE3MjRfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMjU0Mi1cbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYzoyNTQzOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMjU0NC1cdFx0XHRcdHNpemVvZigqaWNlKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2ludGVsOHgwLmM9MzE3MD1zdGF0aWMgaW50IF9fc25kX2ludGVsOHgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2ludGVsOHgwLmMtMzE3Ny1cbnNvdW5kL3BjaS9pbnRlbDh4MC5jOjMxNzg6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL2ludGVsOHgwLmMtMzE3OS1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9pbnRlbDh4MG0uYz0xMjIxPXN0YXRpYyBpbnQgX19zbmRfaW50ZWw4eDBtX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2ludGVsOHgwbS5jLTEyMjgtXG5zb3VuZC9wY2kvaW50ZWw4eDBtLmM6MTIyOTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvaW50ZWw4eDBtLmMtMTIzMC1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jPTIyMTg9c25kX2tvcmcxMjEyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMtMjIzMi1cdH1cbnNvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jOjIyMzM6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jLTIyMzQtXHRcdFx0XHRzaXplb2YoKmtvcmcxMjEyKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2xvbGEvbG9sYS5jPTY0ND1zdGF0aWMgaW50IF9fbG9sYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9sb2xhL2xvbGEuYy02NTgtXG5zb3VuZC9wY2kvbG9sYS9sb2xhLmM6NjU5Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvbG9sYS9sb2xhLmMtNjYwLVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmM9OTgwPXN0YXRpYyBpbnQgc25kX2x4NjQ2NGVzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMtOTk2LVxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmM6OTk3Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYy05OTgtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvbWFlc3RybzMuYz0yNjMyPV9fc25kX20zX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpXG4tLVxuc291bmQvcGNpL21hZXN0cm8zLmMtMjY0OS1cbnNvdW5kL3BjaS9tYWVzdHJvMy5jOjI2NTA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9tYWVzdHJvMy5jLTI2NTEtXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYz0xNTUxPXN0YXRpYyBpbnQgc25kX25tMjU2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL25tMjU2L25tMjU2LmMtMTU3Ni1cbnNvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jOjE1Nzc6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL25tMjU2L25tMjU2LmMtMTU3OC1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jPTU3NT1zdGF0aWMgaW50IF9fb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLFxuLS1cbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jLTU4Ny1cbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jOjU4ODpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4LCBpZCwgb3duZXIsXG5zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYy01ODktXHRcdFx0XHRzaXplb2YoKmNoaXApLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmM9MjAyMz1fX3NuZF9jYXJkX3JpcHRpZGVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcbi0tXG5zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMtMjAzNy1cbnNvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYzoyMDM4Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMtMjAzOS1cdFx0XHRcdHNpemVvZigqY2hpcCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9ybWUzMi5jPTE4MTM9X19zbmRfcm1lMzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcbi0tXG5zb3VuZC9wY2kvcm1lMzIuYy0xODI3LVxuc291bmQvcGNpL3JtZTMyLmM6MTgyODpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL3JtZTMyLmMtMTgyOS1cdFx0XHRcdHNpemVvZigqcm1lMzIpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9wY2kvcm1lOTYuYz0yMzU5PV9fc25kX3JtZTk2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL3JtZTk2LmMtMjM3NC1cdH1cbnNvdW5kL3BjaS9ybWU5Ni5jOjIzNzU6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9ybWU5Ni5jLTIzNzYtXHRcdFx0XHRzaXplb2YoKnJtZTk2KSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jPTUzMjY9c3RhdGljIGludCBzbmRfaGRzcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYy01MzQwLVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jOjUzNDE6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYy01MzQyLVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBoZHNwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYz02ODAwPXN0YXRpYyBpbnQgc25kX2hkc3BtX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXG4tLVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYy02ODE0LVxuc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYzo2ODE1Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSxcbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMtNjgxNi1cdFx0XHRcdFRISVNfTU9EVUxFLCBzaXplb2YoKmhkc3BtKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jPTI0NzA9c3RhdGljIGludCBzbmRfcm1lOTY1Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxuLS1cbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYy0yNDg0LVxuc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jOjI0ODU6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYy0yNDg2LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfcm1lOTY1MiksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS9zaXM3MDE5LmM9MTMxMj1zdGF0aWMgaW50IF9fc25kX3NpczcwMTlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvc2lzNzAxOS5jLTEzMzItXG5zb3VuZC9wY2kvc2lzNzAxOS5jOjEzMzM6XHRyYyA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnBjaS1cdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvc2lzNzAxOS5jLTEzMzQtXHRcdFx0ICAgICAgIHNpemVvZigqc2lzKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3NvbmljdmliZXMuYz0xMzY1PXN0YXRpYyBpbnQgX19zbmRfc29uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvc29uaWN2aWJlcy5jLTEzODEtIFxuc291bmQvcGNpL3NvbmljdmliZXMuYzoxMzgyOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGNpLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9wY2kvc29uaWN2aWJlcy5jLTEzODMtXHRcdFx0XHRzaXplb2YoKnNvbmljKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jPTUzPXN0YXRpYyBpbnQgc25kX3RyaWRlbnRfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMtNjgtXG5zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmM6Njk6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYy03MC1cdFx0XHRcdHNpemVvZigqdHJpZGVudCksIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL3BjaS92aWE4Mnh4LmM9MjQzOD1zdGF0aWMgaW50IF9fc25kX3ZpYTgyeHhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcbi0tXG5zb3VuZC9wY2kvdmlhODJ4eC5jLTI0NDYtXG5zb3VuZC9wY2kvdmlhODJ4eC5jOjI0NDc6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxuc291bmQvcGNpL3ZpYTgyeHguYy0yNDQ4LVx0XHRcdFx0c2l6ZW9mKCpjaGlwKSwgXHUwMDI2Y2FyZCk7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDU0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIC0gQSBDcml0aWNhbCBDb25jdXJyZW5jeSBVQUYgaW4gQUxTQSBDb3JlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dvdywgYHNuZF9kZXZtX2NhcmRfbmV3YCBpcyB1c2VkIGV2ZXJ5d2hlcmUgaW4gQUxTQSBkcml2ZXJzISYjMzQ7IFRoZW4gSSBzZWUgdGhhdCBldmVuIGBzb3VuZC9kcml2ZXJzL2R1bW15LmNgIGFuZCBgc291bmQvZHJpdmVycy9hbG9vcC5jYCB1c2UgaXQsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoaXMgaXMgd2l0aGluIFN5emthbGxlciYjMzk7cyByZWFjaC4gVGhlIGZhY3QgdGhhdCB0aGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgJiMzNDtzeXotY2x1c3RlciYjMzQ7IGFuZCBhICYjMzQ7cGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgc3Ryb25nbHkgaGludHMgdGhpcyBpcyBhIGZpeCBmb3IgYSBTeXprYWxsZXItZm91bmQgYnVnIOKAkyBhIFVBRiwgbm8gbGVzcywgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgIHJlbGF0ZWQgdG8gdGhlIGBjYXJkLSZndDttYW5hZ2VkYCBmaWVsZC4KClRoZSBwcm9tcHQsIG9mIGNvdXJzZSwgdGhyb3dzIGEgY3VydmViYWxsIGFib3V0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYnV0IGNvbnNpZGVyaW5nIHRoYXQgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgIGFyZSBlYXNpbHkgZW11bGF0ZWQgd2l0aGluIHN1Y2ggZW52aXJvbm1lbnRzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29uZGl0aW9ucyBuZWVkZWQgdG8gdHJpZ2dlciB0aGUgVUFGLiBUaGUgdnVsbmVyYWJpbGl0eSBib2lscyBkb3duIHRvIGBjYXJkYCBiZWluZyBmcmVlZCBieSBgZGV2cmVzYCBiZWZvcmUgYHNuZF9jYXJkX2RvX2ZyZWVgIGNvbXBsZXRlcy4gVGhpcyByZXF1aXJlcyBgc25kX2NhcmRfZnJlZWAgdG8gYmUgY2FsbGVkLCB3aGljaCwgaW4gdHVybiwgd2FpdHMgb24gYHJlbGVhc2VfY29tcGxldGlvbmAuIGBzbmRfY2FyZF9mcmVlYCBpcyBjYWxsZWQgYnkgYF9fc25kX2NhcmRfcmVsZWFzZWAsIHdoaWNoIGlzIHRoZSBgZGV2cmVzYCByZWxlYXNlIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd291bGQgYmUgc3luY2hyb25vdXMuCgpTbywgSSB0cmFjZSB0aGUgZXhlY3V0aW9uOiBgZGV2cmVzYCBjYWxscyBgX19zbmRfY2FyZF9yZWxlYXNlYCwgd2hpY2ggY2FsbHMgYHNuZF9jYXJkX2ZyZWVgLiBgc25kX2NhcmRfZnJlZWAgY2FsbHMgYHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWRgLCB3aGljaCBjYWxscyBgcHV0X2RldmljZSgmYW1wO2NhcmQtJmd0O2NhcmRfZGV2KWAuIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCBgcmVsZWFzZV9jYXJkX2RldmljZWAgaXMgY2FsbGVkLCB3aGljaCB0aGVuIGNhbGxzIGBzbmRfY2FyZF9kb19mcmVlYC4gSW5zaWRlIGBzbmRfY2FyZF9kb19mcmVlYCwgYGNvbXBsZXRlKGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbilgIGlzIGNhbGxlZC4gVGhlbiBgc25kX2NhcmRfZnJlZWAgd2FrZXMgdXAgYW5kIHJldHVybnMuIFRoZW4gYF9fc25kX2NhcmRfcmVsZWFzZWAgcmV0dXJucy4gVGhlbiBgZGV2cmVzYCBmcmVlcyB0aGUgbWVtb3J5IG9mIGBjYXJkYCEgSXQmIzM5O3MgYWxsIHN5bmNocm9ub3VzLCBhbmQgSSB3YXMgc3RhcnRpbmcgdG8gdGhpbmsgdGhpcyB3YXNuJiMzOTt0IGEgcmVhbCBidWcuCgpCdXQgd2FpdCwgYHB1dF9kZXZpY2VgIGlzIHRoZSBrZXkuIElmIGl0IGRyb3BzIHRoZSAqbGFzdCogcmVmZXJlbmNlLCB0aGUgb3BlcmF0aW9uIElTIHN5bmNocm9ub3VzLiBIb3dldmVyLCBpZiB0aGVyZSBhcmUgc3RpbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzLCB0aGUgcmVmY291bnQgaXMgZ3JlYXRlciB0aGFuIDAuIGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCByZXR1cm5zLCBhbmQgYHNuZF9jYXJkX2ZyZWVgIHdhaXRzLiBMYXRlciwgd2hlbiB0aGUgbGFzdCBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIChlLmcuLCBpbiBgZnB1dGApLCBgcHV0X2RldmljZWAgaXMgY2FsbGVkICpmcm9tIGEgZGlmZmVyZW50IHRocmVhZCouIGBwdXRfZGV2aWNlYCBjYWxscyBgcmVsZWFzZV9jYXJkX2RldmljZWAgLSZndDsgYHNuZF9jYXJkX2RvX2ZyZWVgLiBJbnNpZGUgYHNuZF9jYXJkX2RvX2ZyZWVgLCBpdCBjYWxscyBgY29tcGxldGUoY2FyZC0mZ3Q7cmVsZWFzZV9jb21wbGV0aW9uKWAsIHdoaWNoIHdha2VzIHVwIHRoZSBvcmlnaW5hbCB0aHJlYWQgd2FpdGluZyBpbiBgc25kX2NhcmRfZnJlZWAuIFRoYXQgZmlyc3QgdGhyZWFkIHJldHVybnMsIGFuZCBUSEVOIGBkZXZyZXNgIGZyZWVzIHRoZSBgY2FyZGAgc3RydWN0dXJlLiBNZWFud2hpbGUsIHRoZSBzZWNvbmQgdGhyZWFkIGNvbnRpbnVlcyBleGVjdXRpb24sIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGBjYXJkLSZndDttYW5hZ2VkYCEgQmluZ28hCgpUaGlzIGlzIGEgY2xhc3NpYyBhbmQgdmVyeSBleHBsb2l0YWJsZSBjb25jdXJyZW5jeSBVQUYuIFRocmVhZCAxIChkZXZpY2UgcmVtb3ZhbCkgY2FsbHMgdGhlIGBkZXZyZXNgIHJlbGVhc2UgZnVuY3Rpb24sIGFuZCBUaHJlYWQgMiAoY2xvc2luZyB0aGUgbGFzdCBmaWxlIGRlc2NyaXB0b3IpIGV4ZWN1dGVzIHRoZSBmaW5hbCByZWxlYXNlIHBhdGguIFRocmVhZCAyIGFjY2Vzc2VzIHRoZSBmcmVlZCBtZW1vcnksIGNhdXNpbmcgdGhlIFVBRi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRvIHRhcmdldCB0aGlzLCB0aGUgZnV6emluZyBlZmZvcnRzIHNob3VsZCBjb25jZW50cmF0ZSBvbiBgc25kX2NhcmRfZG9fZnJlZWAsIGBzbmRfY2FyZF9mcmVlYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AsIHdpdGggdGhlIEFMU0EgZnJhbWV3b3JrIGVuYWJsZWQsIGFsb25nIHdpdGggZHJpdmVycyBsaWtlIGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNORF9EVU1NWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWc9NDk9Y29uZmlnIFNORF9QQ1NQXG4tLVxuc291bmQvZHJpdmVycy9LY29uZmlnLTc4LVxuc291bmQvZHJpdmVycy9LY29uZmlnOjc5OmNvbmZpZyBTTkRfRFVNTVlcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0R1bW15ICgvZGV2L251bGwpIHNvdW5kY2FyZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYyNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgdGhlc2Ugc291bmQgZHJpdmVycyBhcmUgY29uZmlndXJlZCwgc3BlY2lmaWNhbGx5IGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIHNvdW5kIHN1YnN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLCB3aGljaCBJIGtub3cgaXMgdHlwaWNhbGx5IG1hbmFnZWQgdW5kZXIgdGhlIGBzb3VuZC9kcml2ZXJzL2AgZGlyZWN0b3J5LiBUaGF0IGBLY29uZmlnYCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHRob3NlIGtpbmRzIG9mIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgdGhvc2Ugc3ltYm9scy4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBwcm9iYWJseSBLY29uZmlnLCBpcyBnb2luZyB0byBkaWN0YXRlIHdoZXRoZXIgb3Igbm90IHRoZXNlIGRyaXZlcnMgYXJlIGV2ZW4gY29tcGlsZWQgaW4sIGJ1aWx0IGFzIG1vZHVsZXMsIG9yIGNvbXBsZXRlbHkgZXhjbHVkZWQuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBhcmNoaXRlY3R1cmVzLiBJdCYjMzk7cyBhIGJyZWFkY3J1bWIgdHJhaWwgSSBjYW4gZm9sbG93IHRvIHVuZGVyc3RhbmQgdGhlaXIgYXZhaWxhYmlsaXR5IGFuZCBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc5Olx0Y29uZmlnIFNORF9EVU1NWVxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7RHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkXCYjMzQ7XG4gIDgxOlx0XHRzZWxlY3QgU05EX1BDTVxuICA4MjpcdFx0aGVscFxuICA4MzpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIGR1bW15IGRyaXZlci4gIFRoaXMgZHJpdmVyIGRvZXNcbiAgODQ6XHRcdCAgbm90aGluZywgYnV0IGVtdWxhdGVzIHZhcmlvdXMgbWl4ZXIgY29udHJvbHMgYW5kIFBDTSBkZXZpY2VzLlxuICA4NTpcdFxuICA4NjpcdFx0ICBZb3UgZG9uJiMzOTt0IG5lZWQgdGhpcyB1bmxlc3MgeW91JiMzOTtyZSB0ZXN0aW5nIHRoZSBoYXJkd2FyZSBzdXBwb3J0XG4gIDg3Olx0XHQgIG9mIHByb2dyYW1zIHVzaW5nIHRoZSBBTFNBIEFQSS5cbiAgODg6XHRcbiAgODk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA5MDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzbmQtZHVtbXkuXG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIFNORF9BTE9PUFxuICA5MzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBsb29wYmFjayBkcml2ZXIgKFBDTSlcJiMzNDtcbiAgOTQ6XHRcdHNlbGVjdCBTTkRfUENNXG4gIDk1Olx0XHRzZWxlY3QgU05EX1RJTUVSXG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQQ00gbG9vcGJhY2sgZGV2aWNlLlxuICA5ODpcdFx0ICBUaGlzIG1vZHVsZSByZXR1cm5zIHBsYXllZCBzYW1wbGVzIGJhY2sgdG8gdGhlIHVzZXIgc3BhY2UgdXNpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIGEgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZpbmRpbmcgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZyBiYXNlZCBvbiBhIHN1c3BlY3RlZCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBjb25kaXRpb24uIGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYCBhcmUgbG9va2luZyBsaWtlIHN0cm9uZyBjb250ZW5kZXJzIGluaXRpYWxseS4gQW5kIGBTTkRfVVNCX0FVRElPYCBpcyBhbHNvIGF0dHJhY3RpdmUgYmVjYXVzZSBvZiBpdHMgaG90cGx1ZyBjYXBhYmlsaXRpZXMgd2l0aGluIHN5emthbGxlciB1c2luZyBgZHVtbXlfaGNkYC4KCkhhbmcgb24sIGxldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHZ1bG5lcmFiaWxpdHkgc2VlbXMgdGllZCB0byBob3cgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgaXMgbWFuYWdlZCwgcGFydGljdWxhcmx5IHRoZSBgY2FyZC0mZ3Q7bWFuYWdlZGAgZmxhZy4gSSBrbm93IGZyb20gbG9va2luZyBhdCBgc291bmQvdXNiL2NhcmQuY2AgdGhhdCBpdCAqZG9lc24mIzM5O3QqIHVzZSBgc25kX2Rldm1fY2FyZF9uZXdgLiBTbyB0aGF0JiMzOTtzIGltcG9ydGFudC4gRG9lcyBpdCB1c2UgYHNuZF9jYXJkX2ZyZWVgPyBZZXMsIGl0IGRvZXMuIEJ1dCB0aGUgY29yZSBvZiB0aGlzIGJ1ZyBoaW5nZXMgb24gdGhhdCBgY2FyZC0mZ3Q7bWFuYWdlZGAgZmxhZywgd2hpY2ggaXMgKm9ubHkqIHNldCB0byB0cnVlIHdoZW4gYHNuZF9kZXZtX2NhcmRfbmV3YCBpcyB1c2VkLgoKUmlnaHQsIGlmIGBjYXJkLSZndDttYW5hZ2VkYCBpcyBmYWxzZSwgYHNuZF9jYXJkX2RvX2ZyZWVgIHdpbGwganVzdCBjYWxsIGBrZnJlZShjYXJkKWAuIE9rYXksIHRoYXQmIzM5O3MgY3JpdGljYWwuIElmIGBjYXJkLSZndDttYW5hZ2VkYCBpcyBmYWxzZSwgbWVhbmluZyBpdCAqd2FzbiYjMzk7dCogYWxsb2NhdGVkIHVzaW5nIHRoZSAmIzM0O21hbmFnZWQmIzM0OyB2ZXJzaW9uLCBga2ZyZWUoY2FyZClgIGdldHMgY2FsbGVkIHdpdGhpbiBgc25kX2NhcmRfZG9fZnJlZWAuCgpOb3csIGlmIHdlIGhhdmUgdHdvIHRocmVhZHMsIFRocmVhZCAyLCBpdCBzZWVtcywgZG9lcyB0aGUgZm9sbG93aW5nOgotICAgYGNvbXBsZXRlKGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbilgCi0gICBgaWYgKCFjYXJkLSZndDttYW5hZ2VkKWAgd2hpY2ggcmVhZHMgYGNhcmQtJmd0O21hbmFnZWRgCi0gICBga2ZyZWUoY2FyZClgCgpBbmQgVGhyZWFkIDEgaXMgZG9pbmcgdGhpczoKLSAgIGB3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7cmVsZWFzZWQpYAotICAgcmV0dXJucyBmcm9tIGBzbmRfY2FyZF9mcmVlYAotICAgcmV0dXJucyBmcm9tIGBfX3NuZF9jYXJkX3JlbGVhc2VgIChidXQgdGhpcyBpcyAqbm90KiBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIGNhcmQgaXNuJiMzOTt0IG1hbmFnZWQpCi0gICByZXR1cm5zIGZyb20gd2hhdGV2ZXIgY2FsbGVkIGBzbmRfY2FyZF9mcmVlYAoKSWYgdGhlIGBjYXJkYCAqaXNuJiMzOTt0KiBtYW5hZ2VkLCBUaHJlYWQgMSAqZG9lc24mIzM5O3QqIGZyZWUgYGNhcmRgLiBUaHJlYWQgMiAqZG9lcyouCgpTbywgd2FpdCwgcmVhZGluZyBgY2FyZC0mZ3Q7bWFuYWdlZGAgaW4gVGhyZWFkIDIgaXMgc2FmZSBiZWNhdXNlIHRoZSBgY2FyZGAgaXRzZWxmIGlzbiYjMzk7dCBmcmVlZCB1bnRpbCB0aGUgc3Vic2VxdWVudCBsaW5lLCBga2ZyZWUoY2FyZClgLiBUaGUgVUFGICpvbmx5KiBoYXBwZW5zIHdoZW4gYGNhcmQtJmd0O21hbmFnZWRgIGlzIHRydWUuIFRoaXMgaW4gdHVybiBtZWFucyB0aGUgY2FyZCBoYWQgdG8gaGF2ZSBiZWVuIGFsbG9jYXRlZCB3aXRoIGBzbmRfZGV2bV9jYXJkX25ld2AuCgpUaGVyZWZvcmUsIHdlIGFic29sdXRlbHkgKm11c3QqIGZvY3VzIG9uIGRyaXZlcnMgdGhhdCB1c2UgYHNuZF9kZXZtX2NhcmRfbmV3YC4gYFNORF9EVU1NWWAgYW5kIGBTTkRfQUxPT1BgIGFyZSBsb29raW5nIGV2ZW4gYmV0dGVyIG5vdy4gVGhlaXIgdmlydHVhbCBuYXR1cmUgaXMgcGVyZmVjdCBmb3IgdGVzdGluZyB0aGlzLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGtlcm5lbCBmb3IgYW55IG90aGVyIHZpcnR1YWwgZHJpdmVycyB0aGF0IGFyZSB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBqdXN0IHRvIGJlIGNlcnRhaW4gd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgbW9yZSBpbnRlcmVzdGluZyB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9kZXZtX2NhcmRfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy9hbG9vcC5jPTE3OTg9c3RhdGljIGludCBsb29wYmFja19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXG4tLVxuc291bmQvZHJpdmVycy9hbG9vcC5jLTE4MDQtXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmM6MTgwNTpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNmRldnB0ci1cdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxuc291bmQvZHJpdmVycy9hbG9vcC5jLTE4MDYtXHRcdFx0XHRzaXplb2Yoc3RydWN0IGxvb3BiYWNrKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvZHJpdmVycy9kdW1teS5jPTEwMTI9c3RhdGljIGludCBzbmRfZHVtbXlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxuLS1cbnNvdW5kL2RyaXZlcnMvZHVtbXkuYy0xMDE5LVxuc291bmQvZHJpdmVycy9kdW1teS5jOjEwMjA6XHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZkZXZwdHItXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvZHVtbXkuYy0xMDIxLVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBzbmRfZHVtbXkpLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYz01Mj1zdGF0aWMgaW50IHNuZF9tcHU0MDFfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgaW50IGRldixcbi0tXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYy02MS1cdCpyY2FyZCA9IE5VTEw7XG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYzo2MjpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldnB0ciwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYy02My1cdFx0XHRcdDAsIFx1MDAyNmNhcmQpO1xuLS1cbnNvdW5kL2RyaXZlcnMvbXRwYXYuYz02NTI9c3RhdGljIGludCBzbmRfbXRwYXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbnNvdW5kL2RyaXZlcnMvbXRwYXYuYy02NTctXG5zb3VuZC9kcml2ZXJzL210cGF2LmM6NjU4Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2ZGV2LVx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvbXRwYXYuYy02NTktXHRcdFx0XHRzaXplb2YoKm10cF9jYXJkKSwgXHUwMDI2Y2FyZCk7XG4tLVxuc291bmQvZHJpdmVycy9wY210ZXN0LmM9NjAwPXN0YXRpYyBpbnQgcGNtdHN0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuc291bmQvZHJpdmVycy9wY210ZXN0LmMtNjA5LVxuc291bmQvZHJpdmVycy9wY210ZXN0LmM6NjEwOlx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsIFx1MDAyNmNhcmQpO1xuc291bmQvZHJpdmVycy9wY210ZXN0LmMtNjExLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jPTk4PXN0YXRpYyBpbnQgc25kX2NhcmRfcGNzcF9wcm9iZShpbnQgZGV2bnVtLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYy0xMDctXG5zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jOjEwODpcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgXHUwMDI2Y2FyZCk7XG5zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jLTEwOS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jPTMyMT1zdGF0aWMgaW50IHNuZF9zZXJpYWxfZ2VuZXJpY19wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxuLS1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYy0zMjYtXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmM6MzI3Olx0ZXJyICA9IHNuZF9kZXZtX2NhcmRfbmV3KFx1MDAyNnNlcmRldi1cdTAwM2VkZXYsIFNORFJWX0RFRkFVTFRfSURYMSxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYy0zMjgtXHRcdFx0XHRTTkRSVl9ERUZBVUxUX1NUUjEsIFRISVNfTU9EVUxFLFxuLS1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jPTg0Mj1zdGF0aWMgaW50IHNuZF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxuLS1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jLTg4NC1cbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jOjg4NTpcdGVyciAgPSBzbmRfZGV2bV9jYXJkX25ldyhcdTAwMjZkZXZwdHItXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jLTg4Ni1cdFx0XHRcdCAwLCBcdTAwMjZjYXJkKTtcbi0tXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYz03MT1zdGF0aWMgaW50IHNuZF92aXJtaWRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cilcbi0tXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYy03Ny1cbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jOjc4Olx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXHUwMDI2ZGV2cHRyLVx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYy03OS1cdFx0XHRcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfdmlybWlkaSksIFx1MDAyNmNhcmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQXVkaW8gRHJpdmVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gQmV5b25kIHRoZSB1c3VhbCBzdXNwZWN0cywgSSByZWNhbGwgdGhhdCBgU05EX1BDTVRFU1RgIGFuZCBgU05EX1ZJUk1JRElgIGFyZSBsaWtlbHkgYWxzbyB3b3J0aCBhIGxvb2suIFRoZXkgb2Z0ZW4gcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBvciBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMuIE15IG5leHQgbW92ZSBpcyBjbGVhciDigJMgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGF1ZGlvIGRyaXZlcnMuIEkgbmVlZCB0byBleGFtaW5lIGBzb3VuZC9kcml2ZXJzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRldGFpbHMsIGRlcGVuZGVuY2llcywgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYm90aCBgU05EX1BDTVRFU1RgIGFuZCBgU05EX1ZJUk1JRElgLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZWlyIHB1cnBvc2UgYW5kIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoaW4gdGhlIG92ZXJhbGwgYXVkaW8gc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU05EX1BDTVRFU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy9LY29uZmlnPTkyPWNvbmZpZyBTTkRfQUxPT1Bcbi0tXG5zb3VuZC9kcml2ZXJzL0tjb25maWctMTExLVxuc291bmQvZHJpdmVycy9LY29uZmlnOjExMjpjb25maWcgU05EX1BDTVRFU1RcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFBDTSB0ZXN0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTczMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYFNORF9WSVJNSURJYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIGBTTkRfVklSTUlESWAuLi4gdGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBjZXJ0YWluIGFzc29jaWF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHdoZXJlIHRoYXQgZml0cyBpbiB0aGUgY3VycmVudCBwcm9qZWN0LCBvciBkZWJ1Z2dpbmcgc2NlbmFyaW8uIElzIHRoaXMgYWJvdXQgYSBwb3RlbnRpYWwgZHJpdmVyIGNvbmZsaWN0LCBhIHNwZWNpZmljIHNvdW5kIHN5bnRoZXNpcyBwcm9jZXNzLCBvciBwZXJoYXBzIGEgTUlESSByb3V0aW5nIGlzc3VlPyBUaGUgbmFtZSBzdWdnZXN0cyBzb21ldGhpbmcgdmlydHVhbCwgc28gSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvZnR3YXJlLWJhc2VkIE1JREkgaW50ZXJhY3Rpb24sIHdoaWNoIG5hcnJvd3MgaXQgZG93biBzb21ld2hhdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJldmlldyB0aGUgY29kZSByZWxhdGVkIHRvIHRoYXQgc3Vic3lzdGVtLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBtb2R1bGVzIGFyZSBsb2FkZWQgYW5kIHRoYXQgSSBoYXZlIHRoZSBjb3JyZWN0IHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGUgdmlydHVhbCBNSURJIHBvcnQuIFRoZW4sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBjb3VsZCBoYXZlIGltcGFjdGVkIHRoaXMgYXJlYS4gQXJlIHRoZXJlIGFueSBrbm93biBidWdzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmlndXJhdGlvbiBpbmNvbnNpc3RlbmNpZXM/IEkmIzM5O2xsIHByb2JhYmx5IGFsc28gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgc291bmQgY2FyZCBvciB0aGUgTUlESSBzZXR1cC4gSXQmIzM5O3MgYSBxdWljayB0cmlhZ2U7IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbW9zdCBsaWtlbHkgcHJvYmxlbSBhcmVhcyBxdWlja2x5IHNvIEkgY2FuIGVmZmljaWVudGx5IGRpYWdub3NlIHRoZSBpc3N1ZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTkRfVklSTUlESSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL2RyaXZlcnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWc9MTEyPWNvbmZpZyBTTkRfUENNVEVTVFxuLS1cbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy0xMjgtXG5zb3VuZC9kcml2ZXJzL0tjb25maWc6MTI5OmNvbmZpZyBTTkRfVklSTUlESVxuc291bmQvZHJpdmVycy9LY29uZmlnLTEzMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgTUlESSBzb3VuZGNhcmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAxMDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBTb3VuZCBEcml2ZXIgVnVsbmVyYWJpbGl0eSBMYW5kc2NhcGUqKgoKUmlnaHQsIG9rYXksIGJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHdlIHNob3VsZCBkZWZpbml0ZWx5IGJlIGJ1aWxkaW5nIHdpdGggc3VwcG9ydCBmb3IgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBhbmQgYFNORF9WSVJNSURJYC4gVGhlc2UgYXJlIHRoZSBrZXkgbW9kdWxlcyB3ZSBuZWVkIHRvIGhhdmUgYWN0aXZlIGZvciBlZmZlY3RpdmUgZnV6emluZy4gTXkgZm9jdXMsIGhvd2V2ZXIsIGlzIGdvaW5nIHRvIGJlIGRpcmVjdGVkIGF0IHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNvdW5kIGNhcmQgbWFuYWdlbWVudCBjb2RlLiBXZSBuZWVkIHRvIHplcm8gaW4gb24gYHNuZF9jYXJkX2RvX2ZyZWVgLCBgc25kX2NhcmRfZnJlZWAsIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgLiBUaGVzZSBhcmUgbGlrZWx5IGFyZWFzIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBjb3VsZCBtYW5pZmVzdCBhcyB2dWxuZXJhYmlsaXRpZXMuIEhtbSwgaGFuZyBvbiBhIHNlY29uZC4uLiBpcyBgc25kX2NhcmRfZG9fZnJlZWAgYWN0dWFsbHkgYSBzdGF0aWMgZnVuY3Rpb24/IFRoYXQmIzM5O3MgZ29pbmcgdG8gY2hhbmdlIHRoaW5ncy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQ7IGlmIGl0JiMzOTtzIHN0YXRpYywgaXQgbGltaXRzIHRoZSBzY29wZSBhbmQgaG93IGVhc2lseSB3ZSBjYW4gdGFyZ2V0IGl0LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBkZWZpbml0aW9u4oCmIHRoYXQgZGVmaW5pdGVseSBpbXBhY3RzIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbmRfY2FyZF9kb19mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmM9MTQ1PXN0YXRpYyBpbnQgc25kX2NhcmRfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0xNDctXHRcdFx0IHNpemVfdCBleHRyYV9zaXplKTtcbnNvdW5kL2NvcmUvaW5pdC5jOjE0ODpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTE0OS1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjYXJkX2Rldl9hdHRyX2dyb3VwO1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jPTE1MT1zdGF0aWMgdm9pZCByZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbnNvdW5kL2NvcmUvaW5pdC5jLTE1Mi17XG5zb3VuZC9jb3JlL2luaXQuYzoxNTM6XHRzbmRfY2FyZF9kb19mcmVlKGRldl90b19zbmRfY2FyZChkZXYpKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTE1NC19XG4tLVxuc291bmQvY29yZS9pbml0LmM9NTgzPUVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XG5zb3VuZC9jb3JlL2luaXQuYy01ODQtXG5zb3VuZC9jb3JlL2luaXQuYzo1ODU6c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbnNvdW5kL2NvcmUvaW5pdC5jLTU4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBhdWRpbyBzeXN0ZW1zIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBBdWRpbyBDYXJkIFJlc291cmNlIE1hbmFnZW1lbnQqKgoKUmlnaHQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gU28sIGl0JiMzOTtzIG5vdCBhIHB1YmxpYyBlbnRyeSBwb2ludCB3ZSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIGRpcmVjdGx5IGluIHRoaXMgYnJvYWRlciBjb250ZXh0IG9mIGF1ZGlvIGRldmljZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYW4gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbi4gVGhhdCBtZWFucyBteSBhdHRlbnRpb24gc2hvdWxkIHNoaWZ0IHRvIHRoZSBtb3JlIHB1YmxpYyBmYWNpbmcgY291bnRlcnBhcnRzOiBgc25kX2NhcmRfZnJlZWAgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHJlYWxseSBmb2N1cyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgYXQgYSBoaWdoZXIgbGV2ZWwuIFdhaXQgYSBtaW51dGUuLi4gYHNuZF9jYXJkX2ZyZWVgIGlzICpleHBvcnRlZCo/IFRoYXTigJlzIGludGVyZXN0aW5nLiBUaGF0IG1lYW5zIGl04oCZcyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCBkb2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhhdCByZXNvdXJjZXMgYXJlIGNvbnNpc3RlbnRseSBhbmQgY29ycmVjdGx5IG1hbmFnZWQsIGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIGNhcmQgbWlnaHQgYmUgdW5leHBlY3RlZGx5IGNsb3NlZCBvciByZW1vdmVkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJpbmcgc3RhYmxlIGF1ZGlvIHN5c3RlbSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9jb3JlL2luaXQuYz01ODU9c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy02MTEtLyoqXG5zb3VuZC9jb3JlL2luaXQuYzo2MTI6ICogc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCAtIERpc2Nvbm5lY3QgdGhlIGNhcmQsIGZyZWUgaXQgbGF0ZXIgZXZlbnR1YWxseVxuc291bmQvY29yZS9pbml0LmMtNjEzLSAqIEBjYXJkOiBzb3VuZGNhcmQgc3RydWN0dXJlXG4tLVxuc291bmQvY29yZS9pbml0LmMtNjIxLSAqL1xuc291bmQvY29yZS9pbml0LmM6NjIyOnZvaWQgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG5zb3VuZC9jb3JlL2luaXQuYy02MjMte1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTYzMC19XG5zb3VuZC9jb3JlL2luaXQuYzo2MzE6RVhQT1JUX1NZTUJPTChzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTYzMi1cbi0tXG5zb3VuZC9jb3JlL2luaXQuYz02NDY9dm9pZCBzbmRfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy02NTktXHRjYXJkLVx1MDAzZXJlbGVhc2VfY29tcGxldGlvbiA9IFx1MDAyNnJlbGVhc2VkO1xuc291bmQvY29yZS9pbml0LmM6NjYwOlx0c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChjYXJkKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTY2MS1cbi0tXG5zb3VuZC9jb3JlL2luaXQuYz0xMDg4PUVYUE9SVF9TWU1CT0woc25kX2NhcmRfZmlsZV9hZGQpO1xuLS1cbnNvdW5kL2NvcmUvaW5pdC5jLTEwOTYtICogIHNuZF9jYXJkX2ZpbGVfYWRkKCkgZnVuY3Rpb24uXG5zb3VuZC9jb3JlL2luaXQuYzoxMDk3OiAqICBJZiBhbGwgZmlsZXMgYXJlIHJlbW92ZWQgYW5kIHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoKSB3YXNcbnNvdW5kL2NvcmUvaW5pdC5jLTEwOTgtICogIGNhbGxlZCBiZWZvcmVoYW5kLCBpdCBwcm9jZXNzZXMgdGhlIHBlbmRpbmcgcmVsZWFzZSBvZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTUzNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgQUxTQSBBdWRpbyBDYXJkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGdpdmVuIGEgdGFzayBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gQUxTQSBzb3VuZCBjYXJkcywgZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBlbnRyeXBvaW50cy4gUmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGxlYWRpbmcgbWUgdG8gZm9jdXMgb24gYHNuZF9jYXJkX2ZyZWVgLCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgLiBUaGVzZSBzZWVtIGxpa2Ugc3Ryb25nIGNhbmRpZGF0ZXMuIFdhaXQgYSBtaW51dGUgdGhvdWdoLi4uIEkgcmVjYWxsIGBzbmRfY2FyZF9mcmVlYCBpcyBjYWxsZWQgaW50ZXJuYWxseSBieSBgX19zbmRfY2FyZF9yZWxlYXNlYCB3aGljaCBpcyBpdHNlbGYgdGllZCB0byB0aGUgYGRldnJlc2AgbWVjaGFuaXNtLiBIbW1tLCBpcyBgX19zbmRfY2FyZF9yZWxlYXNlYCBzdGF0aWM/IFllcywgaXQgaXMuCgpBaCwgdGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiB3YW50cyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIFBlcmZlY3QhIFRoaXMgY29uZmlybXMgdGhhdCBgc25kX2NhcmRfZnJlZWAsIGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AgYXJlIGV4YWN0bHkgd2hhdCBJIHNob3VsZCBiZSBsb29raW5nIGF0LiBUaGVzZSBhcmUgdGhlIG9uZXMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLiBJIGtub3cgYFNORGAgaXMgdGhlIGdlbmVyYWwgQUxTQSBjb25maWd1cmF0aW9uIHN5bWJvbCwgc28gbGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYHNvdW5kL0tjb25maWdgIGZpbGUgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBwZWFjZSBvZiBtaW5kIGJlZm9yZSBJIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTkQkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzb3VuZC9LY29uZmlnPTQwPXNvdXJjZSBcJiMzNDtzb3VuZC9vc3MvZG1hc291bmQvS2NvbmZpZ1wmIzM0O1xuc291bmQvS2NvbmZpZy00MS1cbnNvdW5kL0tjb25maWc6NDI6bWVudWNvbmZpZyBTTkRcbnNvdW5kL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxNTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGF1ZGlvIGV4cGVydDoKCioqQXVkaW8gRGV2aWNlIERpc2NvdmVyeSBhbmQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHB1dHRpbmcgdG9nZXRoZXIgbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgYXVkaW8gc3lzdGVtLiBGaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBTTkRgIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdlIG5lZWQuIFRoZW4sIEkgc2VlIGEgbGlzdCBvZiBvdGhlciBhdWRpbyBkZXZpY2UgdHlwZXM6IGBTTkRfRFVNTVlgLCBgU05EX0FMT09QYCwgYFNORF9QQ01URVNUYCwgYW5kIGBTTkRfVklSTUlESWAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBhbGwgdXNlZnVsIGNvbXBvbmVudHMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpbmtpbmcgYWJvdXQgdGhlc2UgbmV3IHBpZWNlcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlaXIgaW1wb3J0YW5jZSBhbmQgcG9zc2libGUgY29tcGxleGl0eS4gSG9sZCBvbi4uLiBkb2VzIGBTTkRfRFVNTVlgIGFjdHVhbGx5IHJlbHkgb24gYW55IG90aGVyIG1vZHVsZSBvciBwaWVjZSBvZiB0aGUgY29yZSBzeXN0ZW0/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBiZWNhdXNlIGlmIGl0ICpkb2VzKiBkZXBlbmQgb24gc29tZXRoaW5nLCB0aGF0IGNoYW5nZXMgdGhlIHdob2xlIHBpY3R1cmUuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBmbG93LCB0aGUgaGllcmFyY2h5LCB0aGUgZGVwZW5kZW5jaWVzLiBOZWVkIHRvIGZpZ3VyZSB0aGF0IG91dCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTkRfRFVNTVkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy9LY29uZmlnPTQ5PWNvbmZpZyBTTkRfUENTUFxuLS1cbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy03OC1cbnNvdW5kL2RyaXZlcnMvS2NvbmZpZzo3OTpjb25maWcgU05EX0RVTU1ZXG5zb3VuZC9kcml2ZXJzL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtEdW1teSAoL2Rldi9udWxsKSBzb3VuZGNhcmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIFNORF9EVU1NWSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgc291bmQvZHJpdmVycy9LY29uZmlnYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBTTkRfRFVNTVlgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBsb2dpYyB0aGF0IGRlZmluZXMgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIGR1bW15IHNvdW5kIGRyaXZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGNvbW1lbnRzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgaW50ZW5kZWQgdXNlIGNhc2UuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZToKCiogICAqKkRlcGVuZGVuY2llczoqKiBEb2VzIGl0IHJlbHkgb24gYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucz8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGRyaXZlciBtaWdodCBiZSBzZWxlY3RlZCBpbiBzb21lIGJ1aWxkcyBidXQgbm90IGluIG90aGVycy4KKiAgICoqRGVmYXVsdCBTdGF0ZToqKiBJcyBgU05EX0RVTU1ZYCB1c3VhbGx5IGVuYWJsZWQsIGRpc2FibGVkLCBvciBkZXRlcm1pbmVkIGJ5IHNvbWUgb3RoZXIgZmFjdG9yPyBVbmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc3RyYXRlZ3kuCiogICAqKkhlbHAgVGV4dDoqKiBIb3BlZnVsbHksIHRoZXJlJiMzOTtzIHNvbWUgZGVjZW50IGhlbHAgdGV4dC4gSSBhbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgdGhpcyBkcml2ZXIgcHJvdmlkZXMsIGFuZCB0aGUgdHlwZXMgb2Ygc2NlbmFyaW9zIHdoZXJlIHRoaXMgaXMgbWVhbnQgdG8gYmUgZW5hYmxlZC4KKiAgICoqTG9jYXRpb246KiogV2hlcmUgZG9lcyB0aGlzIGRyaXZlciBwaHlzaWNhbGx5IHJlc2lkZSwgYW5kIGNhbiBJIGlkZW50aWZ5IHNpbWlsYXIgZHJpdmVycyB0aGF0IHdpbGwgcG9pbnQgdG8gYSBsYXJnZXIgcmVsYXRpb25zaGlwLgoKTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkmIzM5O20gcmVhZHkgZm9yIGFueXRoaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NvdW5kL2RyaXZlcnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcbiAgNzE6XHRcdCAgWW91IGRvbiYjMzk7dCBuZWVkIHRoaXMgZHJpdmVyIGlmIHlvdSBvbmx5IHdhbnQgeW91ciBwYy1zcGVha2VyIHRvIGJlZXAuXG4gIDcyOlx0XHQgIFlvdSBkb24mIzM5O3QgbmVlZCB0aGlzIGRyaXZlciBpZiB5b3UgaGF2ZSBhIHRhYmxldCBwaWV6byBiZWVwZXJcbiAgNzM6XHRcdCAgaW4geW91ciBQQyBpbnN0ZWFkIG9mIHRoZSByZWFsIHNwZWFrZXIuXG4gIDc0Olx0XG4gIDc1Olx0XHQgIFNheSBOIGlmIHlvdSBoYXZlIGEgc291bmQgY2FyZC5cbiAgNzY6XHRcdCAgU2F5IE0gaWYgeW91IGRvbiYjMzk7dC5cbiAgNzc6XHRcdCAgU2F5IFkgb25seSBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgZG8uXG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnIFNORF9EVU1NWVxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7RHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkXCYjMzQ7XG4gIDgxOlx0XHRzZWxlY3QgU05EX1BDTVxuICA4MjpcdFx0aGVscFxuICA4MzpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIGR1bW15IGRyaXZlci4gIFRoaXMgZHJpdmVyIGRvZXNcbiAgODQ6XHRcdCAgbm90aGluZywgYnV0IGVtdWxhdGVzIHZhcmlvdXMgbWl4ZXIgY29udHJvbHMgYW5kIFBDTSBkZXZpY2VzLlxuICA4NTpcdFxuICA4NjpcdFx0ICBZb3UgZG9uJiMzOTt0IG5lZWQgdGhpcyB1bmxlc3MgeW91JiMzOTtyZSB0ZXN0aW5nIHRoZSBoYXJkd2FyZSBzdXBwb3J0XG4gIDg3Olx0XHQgIG9mIHByb2dyYW1zIHVzaW5nIHRoZSBBTFNBIEFQSS5cbiAgODg6XHRcbiAgODk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzIxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbnNpZGVyaW5nIERlcGVuZGVuY2llcyBhbmQgU05EX0FMT09QKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoZXJlIGNlbnRlcnMgb24gZGVwZW5kZW5jaWVzIOKAkyBvciByYXRoZXIsIHRoZSAqbGFjayogdGhlcmVvZi4gV2hlbiBldmFsdWF0aW5nIGEgbmV3IHN5c3RlbSwgcHJvdG9jb2wsIG9yIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiwgSSBhbHdheXMgYmVnaW4gYnkgYXNzZXNzaW5nIGl0cyByZWxpYW5jZSBvbiBleHRlcm5hbCBjb21wb25lbnRzLiAmIzM0O05vIGRlcGVuZGVuY2llcyYjMzQ7IGlzIGEgc2lnbmlmaWNhbnQgc3RhdGVtZW50LiBJdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIGNlcnRhaW4gbGV2ZWwgb2Ygc2VsZi1jb250YWlubWVudCwgcG90ZW50aWFsbHkgaW5jcmVhc2VkIHBvcnRhYmlsaXR5LCBvciBtYXliZSBldmVuIGEgc2ltcGxlciBkZXBsb3ltZW50IG1vZGVsLiBUaGF0IHNpbXBsaWNpdHkgaXMgYXR0cmFjdGl2ZSwgb2J2aW91c2x5LgoKSG93ZXZlciwgdGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyDigJMgJiMzNDtXaGF0IGFib3V0IGBTTkRfQUxPT1BgPyYjMzQ7IOKAkyBjdXRzIHJpZ2h0IHRvIHRoZSBoZWFydCBvZiBwcmFjdGljYWwgYXBwbGljYXRpb24uIFRoZSBsb29wYmFjayBzb3VuZCBkZXZpY2UgKGBTTkRfQUxPT1BgKSBpcyBmdW5kYW1lbnRhbCBpbiBtYW55IGF1ZGlvIHN5c3RlbXMsIHBhcnRpY3VsYXJseSBmb3IgY2FwdHVyaW5nIGFuZCByb3V0aW5nIHNvdW5kIGludGVybmFsbHkgd2l0aGluIGEgc3lzdGVtLiBFdmVuIGlmIHNvbWV0aGluZyBpcyBkZXNpZ25lZCB3aXRoICpubyBkZWNsYXJlZCogZGVwZW5kZW5jaWVzLCBpdCBpcyBsaWtlbHkgdG8gaGF2ZSBwcmFjdGljYWwgaW1wbGljYXRpb25zLiBUaGlzIHJhaXNlcyBjb25jZXJucy4gRG9lcyB0aGlzIG1lYW4gaXQgd29uJiMzOTt0ICp3b3JrKiB3aXRoIGBTTkRfQUxPT1BgPyBJcyBpdCBpbnRlbnRpb25hbGx5IGJ5cGFzc2luZyBpdD8gT3IgcGVyaGFwcywgdGhlIGludGVncmF0aW9uIGlzIGRlc2lnbmVkIHdpdGggYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIGxvb3BiYWNrIGRldmljZS4KCkkgd291bGQgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIGNvbnRleHQuIEtub3dpbmcgdGhlIGFuc3dlciB0byB0aGF0IHF1ZXN0aW9uIHdvdWxkIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gdGhlIGZsZXhpYmlsaXR5IG9mIHRoZSBkZXNpZ24sIGFuZCB0byB3aGljaCBzeXN0ZW1zIGl0IGNhbiBiZSBpbXBsZW1lbnRlZC4gVWx0aW1hdGVseSwgdGhlIHF1ZXN0aW9uIHNpZ25hbHMgbXkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgZmVhdHVyZSwgYW5kIGl0JiMzOTtzIHJlbGF0aW9uc2hpcCB3aXRoIHN0YW5kYXJkIGF1ZGlvIHNldHVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzb3VuZC9kcml2ZXJzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHNuZC1kdW1teS5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgU05EX0FMT09QXG4gIDkzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIGxvb3BiYWNrIGRyaXZlciAoUENNKVwmIzM0O1xuICA5NDpcdFx0c2VsZWN0IFNORF9QQ01cbiAgOTU6XHRcdHNlbGVjdCBTTkRfVElNRVJcbiAgOTY6XHRcdGhlbHBcbiAgOTc6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFBDTSBsb29wYmFjayBkZXZpY2UuXG4gIDk4Olx0XHQgIFRoaXMgbW9kdWxlIHJldHVybnMgcGxheWVkIHNhbXBsZXMgYmFjayB0byB0aGUgdXNlciBzcGFjZSB1c2luZ1xuICA5OTpcdFx0ICB0aGUgc3RhbmRhcmQgQUxTQSBQQ00gZGV2aWNlLiBUaGUgZGV2aWNlcyBhcmUgcm91dGVkIDAtXHUwMDNlMSBhbmRcbiAxMDA6XHRcdCAgMS1cdTAwM2UwLCB3aGVyZSBmaXJzdCBudW1iZXIgaXMgdGhlIHBsYXliYWNrIFBDTSBkZXZpY2UgYW5kIHNlY29uZFxuIDEwMTpcdFx0ICBudW1iZXIgaXMgdGhlIGNhcHR1cmUgZGV2aWNlLiBNb2R1bGUgY3JlYXRlcyB0d28gUENNIGRldmljZXMgYW5kXG4gMTAyOlx0XHQgIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHN1YnN0cmVhbXMgKHNlZSB0aGUgcGNtX3N1YnN0cmVhbXMgbW9kdWxlXG4gMTAzOlx0XHQgIHBhcmFtZXRlcikuXG4gMTA0Olx0XG4gMTA1Olx0XHQgIFRoZSBsb29wYmFjayBkZXZpY2UgYWxsb3dzIHRpbWUgc3luY2hyb25pemF0aW9uIHdpdGggYW4gZXh0ZXJuYWxcbiAxMDY6XHRcdCAgdGltaW5nIHNvdXJjZSB1c2luZyB0aGUgdGltZSBzaGlmdCB1bml2ZXJzYWwgY29udHJvbCAoJiM0MzstMjAlXG4gMTA3Olx0XHQgIG9mIHN5c3RlbSB0aW1lKS5cbiAxMDg6XHRcbiAxMDk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzg5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5kZXBlbmRlbnQgQXNzZXNzbWVudCAmYW1wOyBQQ00gQ29uc2lkZXJhdGlvbioqCgpSaWdodCwgbm8gaW1tZWRpYXRlLCBvYnZpb3VzIGRlcGVuZGVuY2llcyBqdW1wIG91dCBhdCBtZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgY2xlYW4gZXZhbHVhdGlvbi4gQnV0IGhvbGQgb24sIGJlZm9yZSBJIGdldCB0b28gY2FycmllZCBhd2F5IHdpdGggdGhhdCwgSSBuZWVkIHRvIGNvbnNpZGVyIGBTTkRfUENNVEVTVGAuIEkga25vdyBpdCYjMzk7cyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSAqaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlKiwgYnV0IGl0JiMzOTtzIGEgY3JpdGljYWwgdG9vbCBmb3IgdmFsaWRhdGlvbiBhbmQgcmVncmVzc2lvbiB0ZXN0aW5nIGluIHRoaXMgc3BhY2UsIHJpZ2h0PyBJZ25vcmluZyBpdCB3b3VsZCBiZSBmb29saXNoLCBldmVuIGlmIGl0IGRvZXNuJiMzOTt0IGFwcGVhciBpbiBhIGRpcmVjdCBsaW5raW5nIG9yIGNvbXBpbGF0aW9uIGRlcGVuZGVuY3kuIEkgbmVlZCB0byBmYWN0b3IgaW4gaG93IEkmIzM5O2xsIHVzZSBgU05EX1BDTVRFU1RgIG9yIHNpbWlsYXIgdXRpbGl0aWVzIGR1cmluZyB2YWxpZGF0aW9uLCBhcyBJIHByb2dyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NvdW5kL2RyaXZlcnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHNuZC1hbG9vcC5cbiAxMTE6XHRcbiAxMTI6XHRjb25maWcgU05EX1BDTVRFU1RcbiAxMTM6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgUENNIHRlc3QgZHJpdmVyXCYjMzQ7XG4gMTE0Olx0XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG4gMTE1Olx0XHRzZWxlY3QgU05EX1BDTVxuIDExNjpcdFx0aGVscFxuIDExNzpcdFx0ICBTYXkgJiMzOTtZJiMzOTsgb3IgJiMzOTtNJiMzOTsgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgVmlydHVhbCBQQ00gdGVzdCBkcml2ZXIuXG4gMTE4Olx0XHQgIFRoaXMgZHJpdmVyIGlzIGFpbWVkIGF0IGV4dGVuZGVkIHRlc3Rpbmcgb2YgdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnNcbiAxMTk6XHRcdCAgd2hpY2ggdXNlIHRoZSBBTFNBIEFQSSwgYXMgd2VsbCBhcyB0aGUgUENNIG1pZGRsZSBsYXllciB0ZXN0aW5nLlxuIDEyMDpcdFxuIDEyMTpcdFx0ICBJdCBjYW4gZ2VuZXJhdGUgcmFuZG9tIG9yIHBhdHRlcm4tYmFzZWQgZGF0YSBpbnRvIHRoZSBjYXB0dXJlIHN0cmVhbSxcbiAxMjI6XHRcdCAgY2hlY2sgdGhlIHBsYXliYWNrIHN0cmVhbSBmb3IgY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgcGF0dGVybiwgaW5qZWN0XG4gMTIzOlx0XHQgIHRpbWUgZGVsYXlzIGR1cmluZyBjYXB0dXJlL3BsYXliYWNrLCByZWRlZmluZSB0aGUgUkVTRVQgaW9jdGwgb3BlcmF0aW9uXG4gMTI0Olx0XHQgIHRvIHBlcmZvcm0gdGhlIFBDTSBtaWRkbGUgbGF5ZXIgdGVzdGluZyBhbmQgaW5qZWN0IGVycm9ycyBkdXJpbmcgdGhlXG4gMTI1Olx0XHQgIFBDTSBjYWxsYmFja3MuIEl0IHN1cHBvcnRzIGJvdGggaW50ZXJsZWF2ZWQgYW5kIG5vbi1pbnRlcmxlYXZlZCBhY2Nlc3NcbiAxMjY6XHRcdCAgbW9kZXMuIFlvdSBjYW4gZmluZCB0aGUgY29ycmVzcG9uZGluZyBzZWxmdGVzdCBpbiB0aGUgJiMzOTthbHNhJiMzOTtcbiAxMjc6XHRcdCAgc2VsZnRlc3RzIGZvbGRlci5cbiAxMjg6XHRcbiAxMjk6XHRjb25maWcgU05EX1ZJUk1JRElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0MzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMgaW4gdGhlIEFMU0EgS2VybmVsIE1vZHVsZSBMYW5kc2NhcGUqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCBgU05EX1BDTVRFU1RgIOKAkyBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBtb2R1bGUgcmVxdWlyZXMgYERFQlVHX0ZTYC4gVGhhdCYjMzk7cyBub3QgdW5leHBlY3RlZDsgaXQgbWFrZXMgc2Vuc2UgZm9yIHRlc3RpbmcgdXRpbGl0aWVzIHRvIHVzZSB0aGUgZGVidWdnaW5nIGZpbGUgc3lzdGVtLiBCdXQsIGl0IGdvdCBtZSB0aGlua2luZy4uLiB3aGF0JiMzOTtzIHRoZSBkZXBlbmRlbmN5IHNpdHVhdGlvbiB3aXRoIGBTTkRfVklSTUlESWA/IEkgd29uZGVyIGlmIGl0IGhhcyBhbnkgc2ltaWxhciByZXF1aXJlbWVudHMsIG9yIGlmIGl0cyBmdW5jdGlvbmFsaXR5IGlzIHNlbGYtY29udGFpbmVkLiBOZWVkIHRvIGRyaWxsIGRvd24gb24gdGhhdCBvbmUgYW5kIGNoZWNrIGl0cyBjb25maWcgb3B0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBzaGFyZWQgY29kZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBpZiBgVklSTUlESWAgaXMgYW5vdGhlciBjYW5kaWRhdGUgdG8gYmUgcHVsbGVkIGluIGNvbmRpdGlvbmFsbHkgb3IgaWYgaXQgaXMgaW5kZXBlbmRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c291bmQvZHJpdmVycy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjk6XHRjb25maWcgU05EX1ZJUk1JRElcbiAxMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgTUlESSBzb3VuZGNhcmRcJiMzNDtcbiAxMzE6XHRcdGRlcGVuZHMgb24gU05EX1NFUVVFTkNFUlxuIDEzMjpcdFx0c2VsZWN0IFNORF9USU1FUlxuIDEzMzpcdFx0c2VsZWN0IFNORF9SQVdNSURJXG4gMTM0Olx0XHRzZWxlY3QgU05EX1NFUV9WSVJNSURJXG4gMTM1Olx0XHRzZWxlY3QgU05EX1NFUV9NSURJX0VWRU5UXG4gMTM2Olx0XHRoZWxwXG4gMTM3Olx0XHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSB0aGUgdmlydHVhbCBNSURJIGRyaXZlci4gIFRoaXMgZHJpdmVyXG4gMTM4Olx0XHQgIGFsbG93cyB0byBjb25uZWN0IGFwcGxpY2F0aW9ucyB1c2luZyByYXcgTUlESSBkZXZpY2VzIHRvXG4gMTM5Olx0XHQgIHNlcXVlbmNlciBjbGllbnRzLlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCBNSURJIGlzLCBzYXkgTiBoZXJlLlxuIDE0MjpcdFxuIDE0MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTQ0Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHNuZC12aXJtaWRpLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBTTkRfTVRQQVZcbiAxNDc6XHRcdHRyaXN0YXRlIFwmIzM0O01PVFUgTWlkaVRpbWVQaWVjZSBBViBtdWx0aXBvcnQgTUlESVwmIzM0O1xuIDE0ODpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9QT1JUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgc29tZSBzb3VuZCBkcml2ZXJzIHRvIHNlZSBpZiBJIGNhbiBzaGFrZSBsb29zZSBhbnkgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLiBgU05EX1ZJUk1JRElgIGlzIHRoZSBmaXJzdCBvbmUgdGhhdCBqdW1wcyBvdXQsIGJ1dCB0aGF0JiMzOTtzIGRlcGVuZGVudCBvbiBgU05EX1NFUVVFTkNFUmAsIHNvIEkmIzM5O2xsIG5lZWQgdG8gaW5jbHVkZSBib3RoIG9mIHRoZW0uIExldCYjMzk7cyBzdGFydCB3aXRoIGEgYmFzZSBjb25maWd1cmF0aW9uOiBgU05EYCwgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBgREVCVUdfRlNgLCBgU05EX1ZJUk1JRElgLCBhbmQgYFNORF9TRVFVRU5DRVJgIHRvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uLgoKSGFuZyBvbiwgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIGBTTkRfVVNCX0FVRElPYCBtaWdodCBiZSBhIGdvb2QgYWRkaXRpb24gYXMgd2VsbC4gSSByZWNhbGwgdGhhdCBpdCYjMzk7cyBnb3Qgc29tZSBlcnJvciBwYXRocyB0aGF0IHV0aWxpemUgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIGFyZWEgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcuIFBsdXMsIFVTQiBpcyBhIHByZXR0eSByaWNoIGF0dGFjayBzdXJmYWNlLiBZZWFoLCBsZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBTTkRfVVNCX0FVRElPYCBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIHVwIHRvIHNudWZmIGZvciB0aGlzIGV4ZXJjaXNlLiBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCB0aGUgZWZmb3J0IHRvIGFkZCBpdCB0byB0aGUgbWl4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU05EX1VTQl9BVURJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi9LY29uZmlnPTExPWlmIFNORF9VU0IgXHUwMDI2XHUwMDI2IFVTQlxuc291bmQvdXNiL0tjb25maWctMTItXG5zb3VuZC91c2IvS2NvbmZpZzoxMzpjb25maWcgU05EX1VTQl9BVURJT1xuc291bmQvdXNiL0tjb25maWctMTQtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgQXVkaW8vTUlESSBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy0yNy1cbnNvdW5kL3VzYi9LY29uZmlnOjI4OmNvbmZpZyBTTkRfVVNCX0FVRElPX01JRElfVjJcbnNvdW5kL3VzYi9LY29uZmlnLTI5LVx0Ym9vbCBcJiMzNDtNSURJIDIuMCBzdXBwb3J0IGJ5IFVTQiBBdWRpbyBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy0zNy1cbnNvdW5kL3VzYi9LY29uZmlnOjM4OmNvbmZpZyBTTkRfVVNCX0FVRElPX1VTRV9NRURJQV9DT05UUk9MTEVSXG5zb3VuZC91c2IvS2NvbmZpZy0zOS1cdGJvb2xcbi0tXG5zb3VuZC91c2IvS2NvbmZpZz0xNzg9Y29uZmlnIFNORF9CQ0QyMDAwXG4tLVxuc291bmQvdXNiL0tjb25maWctMTkwLVxuc291bmQvdXNiL0tjb25maWc6MTkxOmNvbmZpZyBTTkRfVVNCX0FVRElPX1FNSVxuc291bmQvdXNiL0tjb25maWctMTkyLVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gQXVkaW8gT2ZmbG9hZCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2MjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEZXBlbmRlbmN5IEFuYWx5c2lzOiBBdWRpbyBPdmVyIFVTQioqCgpPa2F5LCBzbyBgU05EX1VTQl9BVURJT2AuLi4gdGhhdCYjMzk7cyBvdXIgYXVkaW8gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgVVNCIGRldmljZXMsIHJpZ2h0PyBNYWtlcyBzZW5zZS4gTm93LCBiZWZvcmUgSSBldmVuIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mICp0aGF0KiBwYXJ0aWN1bGFyIGRyaXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBkZXBlbmRlbmNpZXMuIFRoZSB0ZXh0IGNsZWFybHkgc3RhdGVzIHRoYXQgYFNORF9VU0JfQVVESU9gIGlzIGJ1aWx0IHVwb24gYm90aCBgU05EX1VTQmAgYW5kIGBVU0JgLiBUaGF0IHRlbGxzIG1lIEkgY2FuJiMzOTt0IGV2ZW4gYmVnaW4gdG8gdHJvdWJsZXNob290IG9yIGNvbmZpZ3VyZSB0aGUgYXVkaW8gc2lkZSB1bnRpbCBJIHZlcmlmeSB0aGUgbG93ZXItbGV2ZWwgVVNCIGFuZCBnZW5lcmljIFVTQiBzb3VuZCBzdXBwb3J0IGFyZSBjb3JyZWN0bHkgZW5hYmxlZCBhbmQgZnVuY3Rpb25pbmcuIFRoZXJlZm9yZSwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgU05EX1VTQmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZ2VuZXJhbCBVU0Igc291bmQgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLiBObyBwb2ludCBpbiBsb29raW5nIGF0IHRoZSBhdWRpbyBkZXRhaWxzIGlmIHRoZSBVU0IgcGx1bWJpbmcgaXMgYnJva2VuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU05EX1VTQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NvdW5kL3VzYi9LY29uZmlnLTMtXG5zb3VuZC91c2IvS2NvbmZpZzo0Om1lbnVjb25maWcgU05EX1VTQlxuc291bmQvdXNiL0tjb25maWctNS1cdGJvb2wgXCYjMzQ7VVNCIHNvdW5kIGRldmljZXNcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZz0xMT1pZiBTTkRfVVNCIFx1MDAyNlx1MDAyNiBVU0JcbnNvdW5kL3VzYi9LY29uZmlnLTEyLVxuc291bmQvdXNiL0tjb25maWc6MTM6Y29uZmlnIFNORF9VU0JfQVVESU9cbnNvdW5kL3VzYi9LY29uZmlnLTE0LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIEF1ZGlvL01JREkgZHJpdmVyXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWctMjctXG5zb3VuZC91c2IvS2NvbmZpZzoyODpjb25maWcgU05EX1VTQl9BVURJT19NSURJX1YyXG5zb3VuZC91c2IvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7TUlESSAyLjAgc3VwcG9ydCBieSBVU0IgQXVkaW8gZHJpdmVyXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWctMzctXG5zb3VuZC91c2IvS2NvbmZpZzozODpjb25maWcgU05EX1VTQl9BVURJT19VU0VfTUVESUFfQ09OVFJPTExFUlxuc291bmQvdXNiL0tjb25maWctMzktXHRib29sXG5zb3VuZC91c2IvS2NvbmZpZy00MC1cbnNvdW5kL3VzYi9LY29uZmlnOjQxOmNvbmZpZyBTTkRfVVNCX1VBMTAxXG5zb3VuZC91c2IvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0VkaXJvbCBVQS0xMDEvVUEtMTAwMCBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy01MS1cbnNvdW5kL3VzYi9LY29uZmlnOjUyOmNvbmZpZyBTTkRfVVNCX1VTWDJZXG5zb3VuZC91c2IvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O1Rhc2NhbSBVUy0xMjIsIFVTLTIyNCBhbmQgVVMtNDI4IFVTQiBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy02NC1cbnNvdW5kL3VzYi9LY29uZmlnOjY1OmNvbmZpZyBTTkRfVVNCX0NBSUFRXG5zb3VuZC91c2IvS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O05hdGl2ZSBJbnN0cnVtZW50cyBVU0IgYXVkaW8gZGV2aWNlc1wmIzM0O1xuLS1cbnNvdW5kL3VzYi9LY29uZmlnLTkxLVxuc291bmQvdXNiL0tjb25maWc6OTI6Y29uZmlnIFNORF9VU0JfQ0FJQVFfSU5QVVRcbnNvdW5kL3VzYi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtlbmFibGUgaW5wdXQgZGV2aWNlIGZvciBjb250cm9sbGVyc1wmIzM0O1xuLS1cbnNvdW5kL3VzYi9LY29uZmlnLTEwNy1cbnNvdW5kL3VzYi9LY29uZmlnOjEwODpjb25maWcgU05EX1VTQl9VUzEyMkxcbnNvdW5kL3VzYi9LY29uZmlnLTEwOS1cdHRyaXN0YXRlIFwmIzM0O1Rhc2NhbSBVUy0xMjJMIFVTQiBkcml2ZXJcJiMzNDtcbi0tXG5zb3VuZC91c2IvS2NvbmZpZy0xMTktXG5zb3VuZC91c2IvS2NvbmZpZzoxMjA6Y29uZmlnIFNORF9VU0JfVVMxNDRNS0lJXG5zb3VuZC91c2IvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtUYXNjYW0gVVMtMTQ0TUtJSSBVU0IgZHJpdmVyXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWctMTMxLVxuc291bmQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBTTkRfVVNCXzZGSVJFXG5zb3VuZC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtUZXJyYVRlYyBETVggNkZpcmUgVVNCXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWctMTQ2LVxuc291bmQvdXNiL0tjb25maWc6MTQ3OmNvbmZpZyBTTkRfVVNCX0hJRkFDRVxuc291bmQvdXNiL0tjb25maWctMTQ4LVx0dHJpc3RhdGUgXCYjMzQ7TTJUZWNoIGhpRmFjZSBVU0ItU1BESUYgZHJpdmVyXCYjMzQ7XG4tLVxuc291bmQvdXNiL0tjb25maWc9MTc4PWNvbmZpZyBTTkRfQkNEMjAwMFxuLS1cbnNvdW5kL3VzYi9LY29uZmlnLTE5MC1cbnNvdW5kL3VzYi9LY29uZmlnOjE5MTpjb25maWcgU05EX1VTQl9BVURJT19RTUlcbnNvdW5kL3VzYi9LY29uZmlnLTE5Mi1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIEF1ZGlvIE9mZmxvYWQgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVVNCIEF1ZGlvIENhcmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYWRkaW5nIGBTTkRfVVNCYCwgYFVTQmAsIGFuZCBgU05EX1VTQl9BVURJT2AgdG8gdGhlIGNvbmZpZ3VyYXRpb24uIE1ha2VzIHNlbnNlLiBCdXQgd2FpdCwgSSBuZWVkIHRvIGJhY2t0cmFjay4gVGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJ1ZywgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBsaWtlbHkgcmVzaWRpbmcgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBgY2FyZC0mZ3Q7bWFuYWdlZGAgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gTXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYFNORF9VU0JfQVVESU9gICpkb2VzbiYjMzk7dCogdXRpbGl6ZSBgc25kX2Rldm1fY2FyZF9uZXdgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCBtZSBxdWlja2x5IHZlcmlmeSBpZiB0aGUgYFNORF9VU0JfQVVESU9gIHBhdGggaW5kZWVkIGRldmlhdGVzIGZyb20gdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YC4gVGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZXMgaGluZ2VzIG9uIHRoaXMgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuZF9kZXZtX2NhcmRfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVUFGIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gdGhlIGBTTkRfVVNCX0FVRElPYCBkcml2ZXIgaXMgYSBkZWFkIGVuZC4gVGhlIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1ZyAqd29uJiMzOTt0KiB0cmlnZ2VyIHRoZXJlIGJlY2F1c2UgYGNhcmQtJmd0O21hbmFnZWRgIHdpbGwgYmUgZmFsc2UuICBJZiBgY2FyZC0mZ3Q7bWFuYWdlZGAgaXMgZmFsc2UsIGBzbmRfY2FyZF9kb19mcmVlYCBqdXN0IGNhbGxzIGBrZnJlZShjYXJkKWAsIHdoaWNoIGF2b2lkcyB0aGUgcmFjZSBjb25kaXRpb24uIFRoZSBVQUYgKm9ubHkqIGhhcHBlbnMgd2hlbiBgY2FyZC0mZ3Q7bWFuYWdlZGAgaXMgdHJ1ZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGBkZXZyZXNgIGZyZWVzIHRoZSBjYXJkLCBhbmQgdGhlbiBgc25kX2NhcmRfZG9fZnJlZWAgYWNjZXNzZXMgYGNhcmQtJmd0O21hbmFnZWRgIGFmdGVyIHRoZSBgY29tcGxldGVgIGNhbGwgd2FrZXMgdXAgdGhlIHRocmVhZC4gIFRoZXJlZm9yZSwgdG8gZXhwbG9pdCB0aGlzLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZm9jdXMgb24gZHJpdmVycyB0aGF0IHV0aWxpemUgYHNuZF9kZXZtX2NhcmRfbmV3YC4KCk15IGF0dGVudGlvbiBub3cgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGRyaXZlcnMgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YC4gQmFzZWQgb24gdGhhdCwgdGhlIGxpa2VseSBjYW5kaWRhdGVzIGFyZSBgU05EX0RVTU1ZYCwgYFNORF9BTE9PUGAsIGBTTkRfUENNVEVTVGAsIGFuZCBgU05EX1ZJUk1JRElgLiBUaG9zZSBhcmUgdGhlIG9uZXMgdG8gcHJpb3JpdGl6ZS4KCkxldCBtZSByZWNhcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6CiogICBgU05EYAoqICAgYFNORF9EVU1NWWAKKiAgIGBTTkRfQUxPT1BgCiogICBgU05EX1BDTVRFU1RgCiogICBgREVCVUdfRlNgCiogICBgU05EX1ZJUk1JRElgCiogICBgU05EX1NFUVVFTkNFUmAKCkFuZCB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kOgoqICAgYHNuZF9jYXJkX2ZyZWVgCiogICBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAKKiAgIGBzbmRfZGV2bV9jYXJkX25ld2AKCk5vdywgYHNuZF9jYXJkX2ZyZWVgIGFuZCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAgYXJlIGNhbGxlZCB3aGVuIHRoZSBjYXJkIGlzIGZyZWVkLCBzbyB0aGV5JiMzOTtyZSBpbXBvcnRhbnQuICBUaGUgYWxsb2NhdGlvbiBmdW5jdGlvbiBpcyBjbGVhcmx5IGBzbmRfZGV2bV9jYXJkX25ld2AuICBgc25kX2NhcmRfZG9fZnJlZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi4KCkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBwcm9iZS9yZW1vdmUgZnVuY3Rpb25zIGZvciB0aGVzZSBkcml2ZXJzOiBgc25kX2R1bW15X3Byb2JlYCwgYGxvb3BiYWNrX3Byb2JlYCwgYHBjbXRzdF9wcm9iZWAsIGFuZCBgc25kX3Zpcm1pZGlfcHJvYmVgLiBIb3dldmVyLCBzeXprYWxsZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZnV6eiB0aGVzZSBpZiB0aGUgY29uZmlncyBhcmUgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBoZWxwZnVsLgoKRmluYWxseSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBzbmRfZGV2bV9jYXJkX25ld2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNuZF9kZXZtX2NhcmRfbmV3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c291bmQvY29yZS9pbml0LmM9MjI3PWludCBzbmRfZGV2bV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCxcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy0yNTAtfVxuc291bmQvY29yZS9pbml0LmM6MjUxOkVYUE9SVF9TWU1CT0xfR1BMKHNuZF9kZXZtX2NhcmRfbmV3KTtcbnNvdW5kL2NvcmUvaW5pdC5jLTI1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxNjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIEV4cG9ydCBTdGF0dXMgYW5kIEZ1bmN0aW9uIEF2YWlsYWJpbGl0eSoqCgpSaWdodCwgc28gSSYjMzk7dmUgY29uZmlybWVkIGl0JiMzOTtzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGEga2V5IGZpcnN0IHN0ZXA7IG90aGVyd2lzZSwgd2UmIzM5O3JlIG5vdCBldmVuIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IGZ1bmN0aW9uLiBOb3csIGEgZm9sbG93LXVwIHF1ZXN0aW9uIHBvcHMgdXA6IFdoYXQmIzM5O3MgdGhlIHN0YXR1cyBvZiBgc25kX2NhcmRfZnJlZWA/IFdlJiMzOTtyZSBvbiB0aGlzIHNwZWNpZmljIGF1ZGlvIGNhcmQgZnVuY3Rpb24sIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQgaXRzIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFzIHdlbGwuIERvZXMgYHNuZF9jYXJkX2ZyZWVgIGV4aXN0PyBBbmQgbW9yZSBpbXBvcnRhbnRseSBpcyBpdCBhbHNvIGV4cG9ydGVkPyBJcyBpdCBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3Igb3VyIGN1cnJlbnQgcHJvYmxlbSBvciBpbnZlc3RpZ2F0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGF2YWlsYWJpbGl0eSBhbmQgcmVsZXZhbmNlIHRvIHdoYXQgSSYjMzk7bSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc25kX2NhcmRfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NvdW5kL2NvcmUvaW5pdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NvdW5kL2NvcmUvaW5pdC5jPTI2ND1pbnQgc25kX2NhcmRfZnJlZV9vbl9lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQpXG4tLVxuc291bmQvY29yZS9pbml0LmMtMjc0LX1cbnNvdW5kL2NvcmUvaW5pdC5jOjI3NTpFWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9mcmVlX29uX2Vycm9yKTtcbnNvdW5kL2NvcmUvaW5pdC5jLTI3Ni1cbi0tXG5zb3VuZC9jb3JlL2luaXQuYz02MjI9dm9pZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbi0tXG5zb3VuZC9jb3JlL2luaXQuYy02MzAtfVxuc291bmQvY29yZS9pbml0LmM6NjMxOkVYUE9SVF9TWU1CT0woc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCk7XG5zb3VuZC9jb3JlL2luaXQuYy02MzItXG4tLVxuc291bmQvY29yZS9pbml0LmM9NjQ2PXZvaWQgc25kX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG4tLVxuc291bmQvY29yZS9pbml0LmMtNjY0LX1cbnNvdW5kL2NvcmUvaW5pdC5jOjY2NTpFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWUpO1xuc291bmQvY29yZS9pbml0LmMtNjY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODY0OAoJCQkJCQkJb3V0cHV0OiAzNTgKCQkJCQkJCXRob3VnaHRzOiAzODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBBTFNBIFVzZS1BZnRlci1GcmVlIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgeWVzLCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBleHBvc2VkIGFuZCBleHBvcnRhYmxlLiBJIG5lZWQgdG8gZG9jdW1lbnQgbXkgcmVhc29uaW5nIGNvbmNpc2VseS4KClRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBpbiBgc25kX2NhcmRfZG9fZnJlZWAuIFRoZSBpc3N1ZSBhcmlzZXMgd2hlbiBhbiBBTFNBIGNhcmQgaXMgYWxsb2NhdGVkIHVzaW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIHdoaWNoIHV0aWxpemVzIGBkZXZyZXNgIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LiBEdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgZXJyb3Igc2NlbmFyaW9zLCBgZGV2cmVzYCB0cmlnZ2VycyBgX19zbmRfY2FyZF9yZWxlYXNlYCwgZXZlbnR1YWxseSBsZWFkaW5nIHRvIGBzbmRfY2FyZF9mcmVlYC4gVGhpcyBmdW5jdGlvbiB3YWl0cyBvbiBhIGByZWxlYXNlX2NvbXBsZXRpb25gIGZvciBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgdG8gYmUgcmVsZWFzZWQuIE9uY2UgdGhlIGZpbmFsIHJlZmVyZW5jZSBkcm9wcywgYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGludm9rZWQsIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gSGVyZSYjMzk7cyB0aGUgY2F0Y2g6IHRoZSBvcmlnaW5hbCBjb2RlIGFjY2Vzc2VkIGBjYXJkLSZndDttYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgb3BlbmluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBkZXZyZXNgIGNvdWxkIGZyZWUgdGhlIGNhcmQmIzM5O3MgbWVtb3J5IGNvbmN1cnJlbnRseSwgcmVzdWx0aW5nIGluIGEgdXNlLWFmdGVyLWZyZWUuCgpUaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDsgY2FjaGUgYGNhcmQtJmd0O21hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gU2ltcGxlLCBidXQgZWZmZWN0aXZlLgoKVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoaXMgYnVnIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGFueSBBTFNBIGRyaXZlciB0aGF0IHVzZXMgYHNuZF9kZXZtX2NhcmRfbmV3YCwgd2hpY2ggaW5jbHVkZXMgdmlydHVhbCBkcml2ZXJzIGxpa2UgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgLCB3aGljaCBJIGtub3cgYXJlIGhlYXZpbHkgdGFyZ2V0ZWQgYnkgc3l6a2FsbGVyLiBUaGF0IG1ha2VzIHRoaXMgYSBoaWdoLXByaW9yaXR5IGl0ZW0gZm9yIGZ1enppbmcgZWZmb3J0cy4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSByZWxldmFudCBFbmFibGVDb25maWdzOiBgU05EYCwgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBgREVCVUdfRlNgLCBgU05EX1ZJUk1JRElgLCBhbmQgYFNORF9TRVFVRU5DRVJgLgoKQW5kLCBmb3IgdGhlIEZvY3VzU3ltYm9sczogYHNuZF9jYXJkX2ZyZWVgLCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgLiBBbGwgdGhlIHJpZ2h0IHBpZWNlcyBhcmUgdGhlcmUuCgpTZWVtcyBsaWtlIGEgY29tcHJlaGVuc2l2ZSBhbmFseXNpcyBhbmQgYSBjbGVhciBwYXRoIGZvciBtaXRpZ2F0aW9uIGFuZCB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U05EJiMzNDssCiAgICAmIzM0O1NORF9EVU1NWSYjMzQ7LAogICAgJiMzNDtTTkRfQUxPT1AmIzM0OywKICAgICYjMzQ7U05EX1BDTVRFU1QmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7U05EX1ZJUk1JREkmIzM0OywKICAgICYjMzQ7U05EX1NFUVVFTkNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NuZF9jYXJkX2ZyZWUmIzM0OywKICAgICYjMzQ7c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCYjMzQ7LAogICAgJiMzNDtzbmRfZGV2bV9jYXJkX25ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmsgKGBzbmRfY2FyZF9kb19mcmVlYCkuIFdoZW4gYW4gQUxTQSBjYXJkIGlzIGFsbG9jYXRlZCB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpdHMgbWVtb3J5IGlzIG1hbmFnZWQgYnkgYGRldnJlc2AuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBwYXRocywgYGRldnJlc2AgdHJpZ2dlcnMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCB3YWl0cyBvbiBhIGNvbXBsZXRpb24gKGByZWxlYXNlX2NvbXBsZXRpb25gKSB1bnRpbCBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIE9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBleGVjdXRlZCwgd2hpY2ggc2lnbmFscyB0aGUgY29tcGxldGlvbi4gVGhpcyB3YWtlcyB1cCB0aGUgd2FpdGluZyB0aHJlYWQsIGFsbG93aW5nIGBkZXZyZXNgIHRvIHByb2NlZWQgYW5kIGZyZWUgdGhlIGNhcmQmIzM5O3MgbWVtb3J5LiBIb3dldmVyLCBgc25kX2NhcmRfZG9fZnJlZWAgcHJldmlvdXNseSBhY2Nlc3NlZCBgY2FyZC1cdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGlmIGBkZXZyZXNgIGZyZWVkIHRoZSBjYXJkIGNvbmN1cnJlbnRseS4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgY2FjaGluZyBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpbiBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgYW55IEFMU0EgZHJpdmVyIHV0aWxpemluZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpbmNsdWRpbmcgc29mdHdhcmUtZW11bGF0ZWQgZHJpdmVycyBsaWtlIGBzbmQtZHVtbXlgIGFuZCBgc25kLWFsb29wYCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U05EJiMzNDssCiAgICAmIzM0O1NORF9EVU1NWSYjMzQ7LAogICAgJiMzNDtTTkRfQUxPT1AmIzM0OywKICAgICYjMzQ7U05EX1BDTVRFU1QmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7U05EX1ZJUk1JREkmIzM0OywKICAgICYjMzQ7U05EX1NFUVVFTkNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NuZF9jYXJkX2ZyZWUmIzM0OywKICAgICYjMzQ7c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCYjMzQ7LAogICAgJiMzNDtzbmRfZGV2bV9jYXJkX25ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmsgKGBzbmRfY2FyZF9kb19mcmVlYCkuIFdoZW4gYW4gQUxTQSBjYXJkIGlzIGFsbG9jYXRlZCB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpdHMgbWVtb3J5IGlzIG1hbmFnZWQgYnkgYGRldnJlc2AuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBwYXRocywgYGRldnJlc2AgdHJpZ2dlcnMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCB3YWl0cyBvbiBhIGNvbXBsZXRpb24gKGByZWxlYXNlX2NvbXBsZXRpb25gKSB1bnRpbCBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIE9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBleGVjdXRlZCwgd2hpY2ggc2lnbmFscyB0aGUgY29tcGxldGlvbi4gVGhpcyB3YWtlcyB1cCB0aGUgd2FpdGluZyB0aHJlYWQsIGFsbG93aW5nIGBkZXZyZXNgIHRvIHByb2NlZWQgYW5kIGZyZWUgdGhlIGNhcmQmIzM5O3MgbWVtb3J5LiBIb3dldmVyLCBgc25kX2NhcmRfZG9fZnJlZWAgcHJldmlvdXNseSBhY2Nlc3NlZCBgY2FyZC1cdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGlmIGBkZXZyZXNgIGZyZWVkIHRoZSBjYXJkIGNvbmN1cnJlbnRseS4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgY2FjaGluZyBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpbiBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgYW55IEFMU0EgZHJpdmVyIHV0aWxpemluZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpbmNsdWRpbmcgc29mdHdhcmUtZW11bGF0ZWQgZHJpdmVycyBsaWtlIGBzbmQtZHVtbXlgIGFuZCBgc25kLWFsb29wYCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBCeSBzYXZpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGNoZWNrZWQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg0YzYxMmEwNDQ4MjA1OGZhYTFiMGIwOTQ4MGZjZjk4NzFkYjQwZTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDozMTozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggNTZkZGU1YmQ3M2M0ZS4uNTc3MzM4NTI2MjRhNyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvc291bmQvY29yZS9pbml0LmMKQEAgLTU4NCw2ICYjNDM7NTg0LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoc25kX2NhcmRfZGlzY29ubmVjdF9zeW5jKTsKIAogc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIHsKJiM0MzsJYm9vbCBtYW5hZ2VkID0gY2FyZC0mZ3Q7bWFuYWdlZDsKJiM0MzsKIAljYXJkLSZndDtyZWxlYXNpbmcgPSB0cnVlOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9NSVhFUl9PU1MpCiAJaWYgKHNuZF9taXhlcl9vc3Nfbm90aWZ5X2NhbGxiYWNrKQpAQCAtNjAxLDcgJiM0Mzs2MDMsNyBAQCBzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQogCX0KIAlpZiAoY2FyZC0mZ3Q7cmVsZWFzZV9jb21wbGV0aW9uKQogCQljb21wbGV0ZShjYXJkLSZndDtyZWxlYXNlX2NvbXBsZXRpb24pOwotCWlmICghY2FyZC0mZ3Q7bWFuYWdlZCkKJiM0MzsJaWYgKCFtYW5hZ2VkKQogCQlrZnJlZShjYXJkKTsKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTMKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogNTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNvdW5kIENhcmQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGBzb3VuZC9jb3JlL2luaXQuY2AgdGhhdCYjMzk7cyB0d2Vha2luZyBgc25kX2NhcmRfZG9fZnJlZWAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2FsIHZhcmlhYmxlLCBgbWFuYWdlZGAsIGFuZCBjb3BpZXMgYGNhcmQtJmd0O21hbmFnZWRgIGludG8gaXQgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFRoZW4sIGxhdGVyLCB0aGUgY29kZSB1c2VzIGBtYW5hZ2VkYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGBjYXJkLSZndDttYW5hZ2VkYCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gYGtmcmVlKGNhcmQpYC4KCkxvb2tpbmcgY2xvc2VyLCB0aGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBmaXgsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYnV0IGl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB3aGF0IHdlIGFyZSBmaXhpbmcuIFRoZSBsb2dpYyBoZXJlIGlzIHRoYXQgaWYgYGNhcmQtJmd0O3JlbGVhc2VfY29tcGxldGlvbmAgaXMgY29tcGxldGVkLCBhbm90aGVyIHRocmVhZCAqbWlnaHQqIGF0dGVtcHQgdG8gZnJlZSB0aGUgYGNhcmRgLCBvciB0aGUgbWVtb3J5IGJhY2tpbmcgaXQgaWYgaXQgaXMgbWFuYWdlZCwgZXZlbiB0aG91Z2ggdGhlIGNhcmQgaXMgc3RpbGwgaW4gdXNlLiBJZiBgY2FyZC0mZ3Q7bWFuYWdlZGAgaXMgdHJ1ZSwgdGhlIGNhcmQgaXMgZnJlZWQgYnkgZGV2cmVzLiBUaGF0IG1lYW5zIGEgdGhyZWFkIGNvdWxkIHByb2NlZWQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gc2lnbmFsIGFuZCB0aGVuIHBvdGVudGlhbGx5IHRyaWdnZXIgdGhlIGRldnJlcyBmcmVlLiBUaGlzIHBhdGNoIGVzc2VudGlhbGx5IHNlcmlhbGl6ZXMgdGhlIGFjY2VzcyB0byBgY2FyZC0mZ3Q7bWFuYWdlZGAgYnkgY29weWluZyBpdCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHRoZSB2dWxuZXJhYmxlIHNlY3Rpb24gaXMgZW50ZXJlZC4gSWYgdGhlIGNhcmQgaXMgbWFuYWdlZCwgdGhlIGRldnJlcyBjbGVhbnVwIGlzIHRyaWdnZXJlZC4gU28sIGJ5IHRoZSB0aW1lIHRoZSBjb2RlIGdldHMgdG8gYGlmICghY2FyZC0mZ3Q7bWFuYWdlZClgLCB0aGUgbWVtb3J5IGJhY2tpbmcgYGNhcmRgIG1pZ2h0IGFscmVhZHkgYmUgZ29uZS4gIEJ5IHVzaW5nIHRoZSBsb2NhbCBgbWFuYWdlZGAgdmFyaWFibGUsIHdlJiMzOTtyZSBlbnN1cmluZyB0aGF0IHdlJiMzOTtyZSBtYWtpbmcgdGhlIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdG8gZnJlZSB0aGUgY2FyZCBiYXNlZCBvbiBhIHZhbHVlIHRoYXQmIzM5O3Mgbm8gbG9uZ2VyIHZ1bG5lcmFibGUgdG8gY2hhbmdlcyBieSBhbm90aGVyIHRocmVhZC4KClRoZSBwYXRjaCBzZWVtcyBzb3VuZCBpbiByZXNvbHZpbmcgdGhpcyBpc3N1ZSwgYnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGFzayBteXNlbGYgaWYgdGhpcyBmaXggaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgdGhlIHBhdGNoIG9ubHkgc2F2ZXMgYSBib29sZWFuLCB3aGljaCBpcyBpbml0aWFsaXplZCwgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBhdm9pZCBhIFVBRiwgSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIGhlcmUuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgdGhhdCYjMzk7cyBub3Qgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBhZGRyZXNzZWQgYnkgS0FTQU4uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgaXQgc2ltcGx5IHNhdmVzIHRoZSB2YWx1ZSBvZiBhIGJvb2xlYW4gZmllbGQgdG8gYXZvaWQgYSBVQUYgY29uZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBCeSBzYXZpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGNoZWNrZWQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdHkgaW4gYHNuZF9jYXJkX2RvX2ZyZWVgLiBCeSBzYXZpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGNoZWNrZWQuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjMxLjU4OTU4MjYwOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTcxNjEzMTgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTkRcIixcbiAgICBcIlNORF9EVU1NWVwiLFxuICAgIFwiU05EX0FMT09QXCIsXG4gICAgXCJTTkRfUENNVEVTVFwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIlNORF9WSVJNSURJXCIsXG4gICAgXCJTTkRfU0VRVUVOQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic25kX2NhcmRfZnJlZVwiLFxuICAgIFwic25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZFwiLFxuICAgIFwic25kX2Rldm1fY2FyZF9uZXdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eSBpbiBgc25kX2NhcmRfZG9fZnJlZWAuIEJ5IHNhdmluZyBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKWAsIGl0IHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgY291bGQgYmUgZnJlZWQgYnkgYW5vdGhlciB0aHJlYWQgKGUuZy4sIHZpYSBkZXZyZXMpIGJlZm9yZSBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgaXMgY2hlY2tlZC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmsgKGBzbmRfY2FyZF9kb19mcmVlYCkuIFdoZW4gYW4gQUxTQSBjYXJkIGlzIGFsbG9jYXRlZCB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpdHMgbWVtb3J5IGlzIG1hbmFnZWQgYnkgYGRldnJlc2AuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBwYXRocywgYGRldnJlc2AgdHJpZ2dlcnMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCB3YWl0cyBvbiBhIGNvbXBsZXRpb24gKGByZWxlYXNlX2NvbXBsZXRpb25gKSB1bnRpbCBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIE9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBleGVjdXRlZCwgd2hpY2ggc2lnbmFscyB0aGUgY29tcGxldGlvbi4gVGhpcyB3YWtlcyB1cCB0aGUgd2FpdGluZyB0aHJlYWQsIGFsbG93aW5nIGBkZXZyZXNgIHRvIHByb2NlZWQgYW5kIGZyZWUgdGhlIGNhcmQncyBtZW1vcnkuIEhvd2V2ZXIsIGBzbmRfY2FyZF9kb19mcmVlYCBwcmV2aW91c2x5IGFjY2Vzc2VkIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGlmIGBkZXZyZXNgIGZyZWVkIHRoZSBjYXJkIGNvbmN1cnJlbnRseS4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgY2FjaGluZyBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgaW4gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGFueSBBTFNBIGRyaXZlciB1dGlsaXppbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaW5jbHVkaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRyaXZlcnMgbGlrZSBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjMxLjU4OTU5MTA0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MDY3OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRjNjEyYTA0NDgyMDU4ZmFhMWIwYjA5NDgwZmNmOTg3MWRiNDBlMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDozMTozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jXFxuaW5kZXggNTZkZGU1YmQ3M2M0ZS4uNTc3MzM4NTI2MjRhNyAxMDA2NDRcXG4tLS0gYS9zb3VuZC9jb3JlL2luaXQuY1xcbisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jXFxuQEAgLTU4NCw2ICs1ODQsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9kaXNjb25uZWN0X3N5bmMpO1xcbiBcXG4gc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG4ge1xcbitcXHRib29sIG1hbmFnZWQgPSBjYXJkLVxcdTAwM2VtYW5hZ2VkO1xcbitcXG4gXFx0Y2FyZC1cXHUwMDNlcmVsZWFzaW5nID0gdHJ1ZTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9NSVhFUl9PU1MpXFxuIFxcdGlmIChzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaylcXG5AQCAtNjAxLDcgKzYwMyw3IEBAIHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuIFxcdH1cXG4gXFx0aWYgKGNhcmQtXFx1MDAzZXJlbGVhc2VfY29tcGxldGlvbilcXG4gXFx0XFx0Y29tcGxldGUoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcXG4tXFx0aWYgKCFjYXJkLVxcdTAwM2VtYW5hZ2VkKVxcbitcXHRpZiAoIW1hbmFnZWQpXFxuIFxcdFxcdGtmcmVlKGNhcmQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTozMi4wODc0NTUyMTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTA0Mjk3NjU4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU05EXCIsXG4gICAgXCJTTkRfRFVNTVlcIixcbiAgICBcIlNORF9BTE9PUFwiLFxuICAgIFwiU05EX1BDTVRFU1RcIixcbiAgICBcIkRFQlVHX0ZTXCIsXG4gICAgXCJTTkRfVklSTUlESVwiLFxuICAgIFwiU05EX1NFUVVFTkNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNuZF9jYXJkX2ZyZWVcIixcbiAgICBcInNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWRcIixcbiAgICBcInNuZF9kZXZtX2NhcmRfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IGluIHRoZSBBTFNBIGNvcmUgZnJhbWV3b3JrIChgc25kX2NhcmRfZG9fZnJlZWApLiBXaGVuIGFuIEFMU0EgY2FyZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaXRzIG1lbW9yeSBpcyBtYW5hZ2VkIGJ5IGBkZXZyZXNgLiBEdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgZXJyb3IgcGF0aHMsIGBkZXZyZXNgIHRyaWdnZXJzIGBzbmRfY2FyZF9mcmVlYCwgd2hpY2ggd2FpdHMgb24gYSBjb21wbGV0aW9uIChgcmVsZWFzZV9jb21wbGV0aW9uYCkgdW50aWwgYWxsIGRldmljZSByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBPbmNlIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBgc25kX2NhcmRfZG9fZnJlZWAgaXMgZXhlY3V0ZWQsIHdoaWNoIHNpZ25hbHMgdGhlIGNvbXBsZXRpb24uIFRoaXMgd2FrZXMgdXAgdGhlIHdhaXRpbmcgdGhyZWFkLCBhbGxvd2luZyBgZGV2cmVzYCB0byBwcm9jZWVkIGFuZCBmcmVlIHRoZSBjYXJkJ3MgbWVtb3J5LiBIb3dldmVyLCBgc25kX2NhcmRfZG9fZnJlZWAgcHJldmlvdXNseSBhY2Nlc3NlZCBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgKmFmdGVyKiBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24sIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiBgZGV2cmVzYCBmcmVlZCB0aGUgY2FyZCBjb25jdXJyZW50bHkuIFRoZSBwYXRjaCByZXNvbHZlcyB0aGlzIGJ5IGNhY2hpbmcgYGNhcmQtXFx1MDAzZW1hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBhbnkgQUxTQSBkcml2ZXIgdXRpbGl6aW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIGluY2x1ZGluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkcml2ZXJzIGxpa2UgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NGM2MTJhMDQ0ODIwNThmYWExYjBiMDk0ODBmY2Y5ODcxZGI0MGUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6MzE6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jXG5pbmRleCA1NmRkZTViZDczYzRlLi41NzczMzg1MjYyNGE3IDEwMDY0NFxuLS0tIGEvc291bmQvY29yZS9pbml0LmNcbisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jXG5AQCAtNTg0LDYgKzU4NCw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XG4gXG4gc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiB7XG4rXHRib29sIG1hbmFnZWQgPSBjYXJkLVx1MDAzZW1hbmFnZWQ7XG4rXG4gXHRjYXJkLVx1MDAzZXJlbGVhc2luZyA9IHRydWU7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9NSVhFUl9PU1MpXG4gXHRpZiAoc25kX21peGVyX29zc19ub3RpZnlfY2FsbGJhY2spXG5AQCAtNjAxLDcgKzYwMyw3IEBAIHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXG4gXHR9XG4gXHRpZiAoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pXG4gXHRcdGNvbXBsZXRlKGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcbi1cdGlmICghY2FyZC1cdTAwM2VtYW5hZ2VkKVxuK1x0aWYgKCFtYW5hZ2VkKVxuIFx0XHRrZnJlZShjYXJkKTtcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjMyLjA4NzQ1Nzc2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjc4NzM5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU291bmQgQ2FyZCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc291bmQvY29yZS9pbml0LmNgLiBJdCdzIHRvdWNoaW5nIGBzbmRfY2FyZF9kb19mcmVlYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBjYWNoaW5nIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGludG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgZ2V0dGluZyBpbnRvIHRoZSBjbGVhbnVwIGFuZCB0aGVuIHVzaW5nIGAhbWFuYWdlZGAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYCFjYXJkLVx1MDAzZW1hbmFnZWRgIGluIHRoZSBga2ZyZWUoY2FyZClgIGNoZWNrLiBJbW1lZGlhdGVseSwgbXkgaW50ZXJuYWwgYWxhcm1zIGFyZSBnb2luZyBvZmYuIFRoaXMgc21lbGxzIGxpa2UgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIGEgcmVsYXRlZCBjb25jdXJyZW5jeSBpc3N1ZS4gVGhleSdyZSB0cnlpbmcgdG8gcHJvdGVjdCBzb21ldGhpbmcsIGNsZWFybHkuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBjYXJkYCBpdHNlbGYgaXMgcG90ZW50aWFsbHkgYmVpbmcgZnJlZWQgZHVyaW5nIHRoZSBjbGVhbnVwIHBoYXNlLiBPciwgbWF5YmUsIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIGJlaW5nIG1vZGlmaWVkIOKAkyBhY2Nlc3NlZCBhZnRlciBgY2FyZGAgaGFzIGJlZW4gZnJlZWQuIEJ1dCB3YWl0Li4uIGlmIGBjYXJkYCAqaXMqIGZyZWVkLCB0aGVuIGBrZnJlZShjYXJkKWAgd291bGQgYmUgYSAqZG91YmxlIGZyZWUqIHNpdHVhdGlvbiwgYW5kIHRoYXQncyBnZW5lcmFsbHkgY2F0YXN0cm9waGljLiBTbyB0aGF0IHBvaW50cyB0byB0aGUgZmllbGQgYGNhcmQtXHUwMDNlbWFuYWdlZGAgYmVpbmcgdGhlIHByb2JsZW0sIG9yIGF0IGxlYXN0IGhvdyBpdCByZWxhdGVzIHRvIGBjYXJkYC4gSXMgYGNhcmRgIGJlaW5nIGludmFsaWRhdGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBkZXZpY2VfZGVsKFx1MDAyNmNhcmQtXHUwMDNlY2FyZF9kZXYpYD9cblxuUmlnaHQsIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgZGlnIGludG8gdGhhdCBgc25kX2NhcmRfZG9fZnJlZWAgZnVuY3Rpb24gaW4gZGV0YWlsIGFuZCBzZWUgd2hhdOKAmXMgZ29pbmcgb24gaW4gdGhvc2UgY2xlYW51cCBzdGVwcy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBvYmplY3QgbGlmZXRpbWUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgdnVsbmVyYWJpbGl0eSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTozNy4zMTUzMzUyMjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMjY0NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25kX2NhcmRfZG9fZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9jb3JlL2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC9jb3JlL2luaXQuYz0xNDU9c3RhdGljIGludCBzbmRfY2FyZF9pbml0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMTQ3LVxcdFxcdFxcdCBzaXplX3QgZXh0cmFfc2l6ZSk7XFxuc291bmQvY29yZS9pbml0LmM6MTQ4OnN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTE0OS1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjYXJkX2Rldl9hdHRyX2dyb3VwO1xcbi0tXFxuc291bmQvY29yZS9pbml0LmM9MTUxPXN0YXRpYyB2b2lkIHJlbGVhc2VfY2FyZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbnNvdW5kL2NvcmUvaW5pdC5jLTE1Mi17XFxuc291bmQvY29yZS9pbml0LmM6MTUzOlxcdHNuZF9jYXJkX2RvX2ZyZWUoZGV2X3RvX3NuZF9jYXJkKGRldikpO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTE1NC19XFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz01ODM9RVhQT1JUX1NZTUJPTF9HUEwoc25kX2NhcmRfZGlzY29ubmVjdF9zeW5jKTtcXG5zb3VuZC9jb3JlL2luaXQuYy01ODQtXFxuc291bmQvY29yZS9pbml0LmM6NTg1OnN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuc291bmQvY29yZS9pbml0LmMtNTg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6MzcuMzY1NTY5NTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1MTY1NTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBzbmRfY2FyZF9kb19mcmVlYCwgZmlsdGVyZWQgdGhyb3VnaCBteSBleHBlcmllbmNlOlxuXG4qKkRlY29uc3RydWN0aW5nIGBzbmRfY2FyZF9kb19mcmVlYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgc25kX2NhcmRfZG9fZnJlZWAuIEp1c3QgdGhlIG5hbWUgYWxvbmUgdGVsbHMgbWUgaXQncyBwcm9iYWJseSBjb25jZXJuZWQgd2l0aCBmcmVlaW5nIHJlc291cmNlcyByZWxhdGVkIHRvIGEgc291bmQgY2FyZCwgbGlrZWx5IHdpdGhpbiBhIGRyaXZlciBjb250ZXh0LiBJIGJldCBpdCdzIGNhbGxlZCBkdXJpbmcgY2FyZCByZW1vdmFsLCBkcml2ZXIgdW5sb2FkLCBvciBtYXliZSBldmVuIGluIGVycm9yIGhhbmRsaW5nIHNjZW5hcmlvcyB3aXRoaW4gdGhlIHNvdW5kIHN5c3RlbS4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgYXVkaW8gZHJpdmVyIGFyY2hpdGVjdHVyZXMsIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBtZXRpY3Vsb3VzbHkgY2xlYW4gdXAgYWxsb2NhdGVkIGJ1ZmZlcnMsIHJlbGVhc2UgaGFyZHdhcmUgcmVzb3VyY2VzLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24gbG9ja3MgdG8gcHJldmVudCBhbnkgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGlzIGRlYWxsb2NhdGlvbi4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGNhbGxzIGxpa2UgYGtmcmVlYCwgYHNuZF9jYXJkX2ZyZWVgLCBvciBzaW1pbGFyIGZ1bmN0aW9ucywgYXMgdGhvc2UgYXJlIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIHJlc291cmNlIGNsZWFudXAuIEknbSBhbHNvIGdvaW5nIHRvIGJlIHNlYXJjaGluZyBmb3IgYW55IGNhbGxzIHRvIHJlbGF0ZWQgaGFyZHdhcmUgZnVuY3Rpb25zLiBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIHVzZWQgd2l0aGluIHRoaXMgY29kZWJhc2UsIEkgd2lsbCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgbmFtaW5nIGNvbGxpc2lvbnMuIEFueSBtaXNzaW5nIG1lbW9yeSByZWxlYXNlcyBvciBpbmNvcnJlY3QgbG9ja2luZyB3aWxsIHN0YW5kIG91dCBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBmdW5jdGlvbiBoYXMgY29ycmVjdCBjaGVja3MgZm9yIHJlc291cmNlcyB0byBmcmVlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCByZXNvdXJjZXMgaXQgaXMgcmVzcG9uc2libGUgZm9yLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgYWxsIG9mIHRoZSBmdW5jdGlvbiBjYWxscywgc28gdGhhdCBJIHVuZGVyc3RhbmQgd2hlcmUgaXQgbWF5IGhhdmUgYmVlbiBjYWxsZWQsIGFuZCB2ZXJpZnkgaXRzIGV4cGVjdGVkIGJlaGF2aW91ci4gSSBob3BlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnJlZXMgcmVzb3VyY2VzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgd2hlbiB0aGUgc291bmQgY2FyZCB3YXMgbG9hZGVkLiBJJ20gbWVudGFsbHkgZ29pbmcgb3ZlciB0aGUgdXN1YWwgc3VzcGVjdHM6IERNQSBidWZmZXJzLCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBzcGVjaWZpYyB0byB0aGUgYXVkaW8gY2FyZC4gSSB3YW50IHRvIHNlZSBpZiBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgcGFydGlhbCBpbml0aWFsaXphdGlvbiwgb3IgaWYgdGhlcmUncyBhIHJpc2sgb2YgY3Jhc2hlcyBpZiwgc2F5LCB0aGUgY2FyZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wbGV0ZWx5LiBJIGhvcGUgaXQgaGFzIHNvbWUgc2FuaXR5IGNoZWNrcyBpbiBwbGFjZSB0byBhdm9pZCBkb3VibGUtZnJlZWluZyBvciBmcmVlaW5nIHVuYWxsb2NhdGVkIG1lbW9yeS4gSSBhbSBzdXJlIGl0J3MgYW4gaW1wb3J0YW50IHBpZWNlIG9mIGNvZGUsIGFuZCBJJ20gcmVhZHkgdG8gY2FyZWZ1bGx5IGFuYWx5c2UgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTo0MS40MTcyMjk5NjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic291bmQvY29yZS9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTg1OlxcdHN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuIDU4NjpcXHR7XFxuIDU4NzpcXHRcXHRib29sIG1hbmFnZWQgPSBjYXJkLVxcdTAwM2VtYW5hZ2VkO1xcbiA1ODg6XFx0XFxuIDU4OTpcXHRcXHRjYXJkLVxcdTAwM2VyZWxlYXNpbmcgPSB0cnVlO1xcbiA1OTA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9NSVhFUl9PU1MpXFxuIDU5MTpcXHRcXHRpZiAoc25kX21peGVyX29zc19ub3RpZnlfY2FsbGJhY2spXFxuIDU5MjpcXHRcXHRcXHRzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjayhjYXJkLCBTTkRfTUlYRVJfT1NTX05PVElGWV9GUkVFKTtcXG4gNTkzOlxcdCNlbmRpZlxcbiA1OTQ6XFx0XFx0c25kX2RldmljZV9mcmVlX2FsbChjYXJkKTtcXG4gNTk1OlxcdFxcdGlmIChjYXJkLVxcdTAwM2Vwcml2YXRlX2ZyZWUpXFxuIDU5NjpcXHRcXHRcXHRjYXJkLVxcdTAwM2Vwcml2YXRlX2ZyZWUoY2FyZCk7XFxuIDU5NzpcXHQjaWZkZWYgQ09ORklHX1NORF9DVExfREVCVUdcXG4gNTk4OlxcdFxcdGtmcmVlKGNhcmQtXFx1MDAzZXZhbHVlX2J1Zik7XFxuIDU5OTpcXHQjZW5kaWZcXG4gNjAwOlxcdFxcdGlmIChzbmRfaW5mb19jYXJkX2ZyZWUoY2FyZCkgXFx1MDAzYyAwKSB7XFxuIDYwMTpcXHRcXHRcXHRkZXZfd2FybihjYXJkLVxcdTAwM2VkZXYsIFxcXCJ1bmFibGUgdG8gZnJlZSBjYXJkIGluZm9cXFxcblxcXCIpO1xcbiA2MDI6XFx0XFx0XFx0LyogTm90IGZhdGFsIGVycm9yICovXFxuIDYwMzpcXHRcXHR9XFxuIDYwNDpcXHRcXHRpZiAoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKVxcbiA2MDU6XFx0XFx0XFx0Y29tcGxldGUoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKTtcXG4gNjA2OlxcdFxcdGlmICghbWFuYWdlZClcXG4gNjA3OlxcdFxcdFxcdGtmcmVlKGNhcmQpO1xcbiA2MDg6XFx0XFx0cmV0dXJuIDA7XFxuIDYwOTpcXHR9XFxuIDYxMDpcXHRcXG4gNjExOlxcdC8qKlxcbiA2MTI6XFx0ICogc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCAtIERpc2Nvbm5lY3QgdGhlIGNhcmQsIGZyZWUgaXQgbGF0ZXIgZXZlbnR1YWxseVxcbiA2MTM6XFx0ICogQGNhcmQ6IHNvdW5kY2FyZCBzdHJ1Y3R1cmVcXG4gNjE0OlxcdCAqXFxuIDYxNTpcXHQgKiBVbmxpa2Ugc25kX2NhcmRfZnJlZSgpLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdHJ5IHRvIHJlbGVhc2UgdGhlIGNhcmRcXG4gNjE2OlxcdCAqIHJlc291cmNlIGltbWVkaWF0ZWx5LCBidXQgdHJpZXMgdG8gZGlzY29ubmVjdCBhdCBmaXJzdC4gIFdoZW4gdGhlIGNhcmRcXG4gNjE3OlxcdCAqIGlzIHN0aWxsIGluIHVzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYmVmb3JlIGZyZWVpbmcgdGhlIHJlc291cmNlcy5cXG4gNjE4OlxcdCAqIFRoZSBjYXJkIHJlc291cmNlcyB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlIHJlZmNvdW50IGdldHMgdG8gemVyby5cXG4gNjE5OlxcdCAqXFxuIDYyMDpcXHQgKiBSZXR1cm46IHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuIDYyMTpcXHQgKi9cXG4gNjIyOlxcdHZvaWQgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuIDYyMzpcXHR7XFxuIDYyNDpcXHRcXHRpZiAoIWNhcmQpXFxuIDYyNTpcXHRcXHRcXHRyZXR1cm47XFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdHNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7XFxuIDYyODpcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZjYXJkLVxcdTAwM2VjYXJkX2Rldik7XFxuIDYyOTpcXHRcXHRyZXR1cm47XFxuIDYzMDpcXHR9XFxuIDYzMTpcXHRFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQpO1xcbiA2MzI6XFx0XFxuIDYzMzpcXHQvKipcXG4gNjM0OlxcdCAqIHNuZF9jYXJkX2ZyZWUgLSBmcmVlcyBnaXZlbiBzb3VuZGNhcmQgc3RydWN0dXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjQxLjQxNzM5MDg0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MTcwMjcxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBTFNBIENvcmUgUGF0Y2g6IHNuZF9jYXJkX2RvX2ZyZWUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBzbmRfY2FyZF9kb19mcmVlYCwgd2hpY2ggaXMgaW4gdGhlIEFMU0EgY29yZS4gSXQgc2VlbXMgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIHJlbGF0ZWQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGNvbmNlcm5zIHNpdHVhdGlvbnMgd2hlcmUgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaXMgYmVpbmcgYWNjZXNzZWQgYWZ0ZXIgYGNhcmQtXHUwMDNlcHJpdmF0ZV9mcmVlYCBvciBgc25kX2RldmljZV9mcmVlX2FsbGAgbWlnaHQgaGF2ZSBhbHJlYWR5IGZyZWVkIHRoZSBgY2FyZGAgc3RydWN0dXJlLiBIb3dldmVyLCB0aGVyZSdzIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvIGhlcmUuIElmIGBjYXJkYCAqaXMqIGZyZWVkLCB0aGVuIGBrZnJlZShjYXJkKWAgd291bGQgaW5kZWVkIGJlIGEgZG91YmxlLWZyZWUsIHdoaWNoIGlzbid0IGRlc2lyYWJsZS5cblxuQnV0IHdhaXQgYSBtaW51dGUsIGlmIGBjYXJkYCBpcyBtYW5hZ2VkLCBga2ZyZWUoY2FyZClgIGlzbid0ICpzdXBwb3NlZCogdG8gYmUgY2FsbGVkIGRpcmVjdGx5LiBJdCdzIHN1cHBvc2VkIHRvIGJlIGhhbmRsZWQgYnkgYGRldnJlc2AgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGRldm1fa3phbGxvY2AuIFNvLCBpZiB0aGUgY2FyZCBpcyBtYW5hZ2VkLCBkZXZyZXMgd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQuIE5vdywgZG9lcyBgY2FyZC1cdTAwM2Vwcml2YXRlX2ZyZWVgIG9yIGBzbmRfZGV2aWNlX2ZyZWVfYWxsYCB0cmlnZ2VyIHRoZSBkZXZyZXMgcmVsZWFzZT8gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQ7IGRldnJlcyByZWxlYXNlIGlzIHRpZWQgdG8gdGhlIGRldmljZSdzIHJlbW92YWwsIG5vdCBhbiBpbnRlcm5hbCBjbGVhbnVwLlxuXG5BaGEsIGlmIGBjYXJkYCBpcyBtYW5hZ2VkLCBgZGV2cmVzYCB0YWtlcyBjYXJlIG9mIHRoZSBmcmVlaW5nLiBBbmQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBjYWxsZWQgZnJvbSBgcmVsZWFzZV9jYXJkX2RldmljZWAsIHdoaWNoIGlzIHRoZSBgcmVsZWFzZWAgY2FsbGJhY2sgb2YgYGNhcmQtXHUwMDNlY2FyZF9kZXZgLiBJZiBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpcyB0cnVlLCB0aGVuIGBkZXZtX3NuZF9jYXJkX2FsbG9jYCB3YXMgdXNlZCB0byBhbGxvY2F0ZSBpdCwgYW5kIGl0IHdpbGwgYmUgZnJlZWQgYnkgYGRldnJlc2Agd2hlbiB0aGUgcGFyZW50IGRldmljZSBpcyByZW1vdmVkLlxuXG5CdXQgdGhlbiwgaWYgYGRldnJlc2AgZnJlZXMgdGhlIGNhcmQgKmJlZm9yZSogYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGZpbmlzaGVkLCB0aGF0IHdvdWxkIGJlIGEgcHJvYmxlbS4gSG93ZXZlciwgYHNuZF9jYXJkX2RvX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGByZWxlYXNlX2NhcmRfZGV2aWNlYCwgd2hpY2ggaXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgYGNhcmQtXHUwMDNlY2FyZF9kZXZgIHNvIHRoZXJlIHNob3VsZCBub3QgYmUgYSByYWNlIGNvbmRpdGlvbi5cblxuTWF5YmUgYSBwcmV2aW91cyBjb21taXQgaGFzIGEgY2x1ZS4gTGV0J3Mgc2VlIGlmIGEgc2ltaWxhciBwYXRjaCBoYXMgYW4gZXhwbGFuYXRpb24gaW4gaXRzIGNvbW1pdCBtZXNzYWdlLiBJIG5lZWQgdG8gc2VhcmNoIHRoZSBnaXQgbG9nIGZvciBgc25kX2NhcmRfZG9fZnJlZWAgYW5kIGBtYW5hZ2VkYCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6NDguMjM0NDIxMDA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjI0MDc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZtX3NuZF9jYXJkX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTo0OC4yODc2NTQzMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxNTQzNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgU291bmQgRHJpdmVyIFJlbGVhc2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYXVkaW8gaXNzdWUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgemVybyBpbiBvbiB3aGVyZSB0aGUgcmVzb3VyY2VzIGFyZSBmcmVlZCwgcGFydGljdWxhcmx5IGFmdGVyIGEgc291bmQgY2FyZCBpcyBkb25lIGJlaW5nIHVzZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYHNuZF9jYXJkX2RvX2ZyZWVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYHNvdW5kL2NvcmUvaW5pdC5jYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgdGhlIGtlcm5lbCB0byByZWxlYXNlIHRoZSBzb3VuZCBjYXJkIHJlc291cmNlcyB3aGVuIGl0J3MgYmVpbmcgdW5yZWdpc3RlcmVkLiBJdCBpcyBoaWdobHkgbGlrZWx5IHRvIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGlzIGlzc3VlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDA1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6NTEuMzY5MjAwNzQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk5NDI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbmRfY2FyZF9kb19mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jPTE0NT1zdGF0aWMgaW50IHNuZF9jYXJkX2luaXQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy0xNDctXFx0XFx0XFx0IHNpemVfdCBleHRyYV9zaXplKTtcXG5zb3VuZC9jb3JlL2luaXQuYzoxNDg6c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7XFxuc291bmQvY29yZS9pbml0LmMtMTQ5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNhcmRfZGV2X2F0dHJfZ3JvdXA7XFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz0xNTE9c3RhdGljIHZvaWQgcmVsZWFzZV9jYXJkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuc291bmQvY29yZS9pbml0LmMtMTUyLXtcXG5zb3VuZC9jb3JlL2luaXQuYzoxNTM6XFx0c25kX2NhcmRfZG9fZnJlZShkZXZfdG9fc25kX2NhcmQoZGV2KSk7XFxuc291bmQvY29yZS9pbml0LmMtMTU0LX1cXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jPTU4Mz1FWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9kaXNjb25uZWN0X3N5bmMpO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTU4NC1cXG5zb3VuZC9jb3JlL2luaXQuYzo1ODU6c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG5zb3VuZC9jb3JlL2luaXQuYy01ODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTo1MS40MTYyMDEzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMxNzY2NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIEZsYWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYGNhcmRgIG9iamVjdCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhlIGBtYW5hZ2VkYCBmbGFnIGlzIGJlaW5nIHNldCBhbmQgdXNlZC4gRmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB0aGUgYXNzaWdubWVudC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaXMgYmVpbmcgbW9kaWZpZWQuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlYmFzZSBmb3IgYXNzaWdubWVudHMgdG8gYGNhcmQtXHUwMDNlbWFuYWdlZGAuIEknbGwgcHJvYmFibHkgYWxzbyB3YW50IHRvIGxvb2sgZm9yIHVzZXMgb2YgYSBzaW1pbGFyIHZhcmlhYmxlIGluIHRoZSBzYW1lIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBwYXR0ZXJucyBpbnZvbHZlZC4gSSBleHBlY3QgSSdsbCB3YW50IHRvIGNoZWNrIGZvciBpbml0aWFsaXphdGlvbnMgYW5kIHBvdGVudGlhbCByZS1hc3NpZ25tZW50cyB0b28sIHRvIGJ1aWxkIGEgZnVsbCBwaWN0dXJlLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gdW5kZXJzdGFuZCAqd2h5KiBhbmQgKndoZW4qIGl0J3MgYmVpbmcgc2V0LCBhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhvc2UgYXNzaWdubWVudHMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNsdWVzIGFib3V0IHRoZSBpbnRlbmRlZCBcIm1hbmFnZWRcIiBzdGF0ZSDigJMgaXMgaXQgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgcmVzb3VyY2Ugb3duZXJzaGlwLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gT25jZSBJIGhhdmUgdGhhdCBjb250ZXh0LCBJJ2xsIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBzaWduaWZpY2FuY2UgYW5kIGNhbiBzdGFydCByZWFzb25pbmcgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6NTQuNjQ3OTcxODg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI1NjQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FyZC1cXHUwMDNlbWFuYWdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9jb3JlL2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC9jb3JlL2luaXQuYz0yMjc9aW50IHNuZF9kZXZtX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLFxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMjM5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbnNvdW5kL2NvcmUvaW5pdC5jOjI0MDpcXHRjYXJkLVxcdTAwM2VtYW5hZ2VkID0gdHJ1ZTtcXG5zb3VuZC9jb3JlL2luaXQuYy0yNDEtXFx0ZXJyID0gc25kX2NhcmRfaW5pdChjYXJkLCBwYXJlbnQsIGlkeCwgeGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpO1xcbi0tXFxuc291bmQvY29yZS9pbml0LmM9Mjc3PXN0YXRpYyBpbnQgc25kX2NhcmRfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTMwOC1cXHRcXHRcXHRpZHgsIHNuZF9lY2FyZHNfbGltaXQgLSAxLCBlcnIpO1xcbnNvdW5kL2NvcmUvaW5pdC5jOjMwOTpcXHRcXHRpZiAoIWNhcmQtXFx1MDAzZW1hbmFnZWQpXFxuc291bmQvY29yZS9pbml0LmMtMzEwLVxcdFxcdFxcdGtmcmVlKGNhcmQpOyAvKiBtYW51YWxseSBmcmVlIGhlcmUsIGFzIG5vIGRlc3RydWN0b3IgY2FsbGVkICovXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz01ODU9c3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG5zb3VuZC9jb3JlL2luaXQuYy01ODYte1xcbnNvdW5kL2NvcmUvaW5pdC5jOjU4NzpcXHRib29sIG1hbmFnZWQgPSBjYXJkLVxcdTAwM2VtYW5hZ2VkO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTU4OC1cXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jPTg4MD1pbnQgc25kX2NhcmRfcmVnaXN0ZXIoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtODkyLVxcdH0gZWxzZSB7XFxuc291bmQvY29yZS9pbml0LmM6ODkzOlxcdFxcdGlmIChjYXJkLVxcdTAwM2VtYW5hZ2VkKVxcbnNvdW5kL2NvcmUvaW5pdC5jLTg5NC1cXHRcXHRcXHRkZXZtX3JlbW92ZV9hY3Rpb24oY2FyZC1cXHUwMDNlZGV2LCB0cmlnZ2VyX2NhcmRfZnJlZSwgY2FyZCk7XFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy04OTYtXFxuc291bmQvY29yZS9pbml0LmM6ODk3OlxcdGlmIChjYXJkLVxcdTAwM2VtYW5hZ2VkKSB7XFxuc291bmQvY29yZS9pbml0LmMtODk4LVxcdFxcdGVyciA9IGRldm1fYWRkX2FjdGlvbihjYXJkLVxcdTAwM2VkZXYsIHRyaWdnZXJfY2FyZF9mcmVlLCBjYXJkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzE6NTQuOTkwNTQxNjg0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQ2NTI1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gYXVkaW8gZHJpdmVyIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBDYXJkIEFsbG9jYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYHNuZF9kZXZtX2NhcmRfbmV3YC4gVGhlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBhbGxvY2F0aW5nIGFuIGF1ZGlvIGNhcmQgb2JqZWN0LCBhbmQgdGhlIFwiZGV2bVwiIHByZWZpeCBzY3JlYW1zIFwiZGV2aWNlIHJlc291cmNlXCIgbWFuYWdlbWVudCwgbWVhbmluZyBpdCdzIHVzaW5nIHRoZSBkZXZpY2UgcmVzb3VyY2UgbWVjaGFuaXNtLiBNeSBpbml0aWFsIGd1ZXNzLCB3aGljaCBJJ2xsIGNvbmZpcm0sIGlzIHRoYXQgdGhpcyBwcm9iYWJseSByZWxpZXMgb24gYGRldm1fa3phbGxvY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgZm9yIHRoZSBhbGxvY2F0aW9uLiBOb3cgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSBieSBjaGVja2luZyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgYHNuZF9kZXZtX2NhcmRfbmV3YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMxOjU4LjQxNTE5NzA0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic291bmQvY29yZS9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI3OlxcdGludCBzbmRfZGV2bV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCxcXG4gMjI4OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgc2l6ZV90IGV4dHJhX3NpemUsXFxuIDIyOTpcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkX3JldClcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdHN0cnVjdCBzbmRfY2FyZCAqY2FyZDtcXG4gMjMyOlxcdFxcdGludCBlcnI7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdFxcdCpjYXJkX3JldCA9IE5VTEw7XFxuIDIzNTpcXHRcXHRjYXJkID0gZGV2cmVzX2FsbG9jKF9fc25kX2NhcmRfcmVsZWFzZSxcXG4gMjM2OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Rfc2l6ZShjYXJkLCBwcml2YXRlX2RhdGFfYXJlYSwgZXh0cmFfc2l6ZSksXFxuIDIzNzpcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuIDIzODpcXHRcXHRpZiAoIWNhcmQpXFxuIDIzOTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjQwOlxcdFxcdGNhcmQtXFx1MDAzZW1hbmFnZWQgPSB0cnVlO1xcbiAyNDE6XFx0XFx0ZXJyID0gc25kX2NhcmRfaW5pdChjYXJkLCBwYXJlbnQsIGlkeCwgeGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpO1xcbiAyNDI6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gMjQzOlxcdFxcdFxcdGRldnJlc19mcmVlKGNhcmQpOyAvKiBpbiBtYW5hZ2VkIG1vZGUsIHdlIG5lZWQgdG8gZnJlZSBtYW51YWxseSAqL1xcbiAyNDQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMjQ1OlxcdFxcdH1cXG4gMjQ2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMTo1OC40MTUzMjg1ODJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MTQ5NTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi5cblxuKipBbmFseXppbmcgdGhlIENhcmQgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYGNhcmRgIHN0cnVjdHVyZSwgdGhhdCBjcml0aWNhbCBwaWVjZSwgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBkZXZyZXNfYWxsb2NgLiBJIGtub3cgdGhpcywgYW5kIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGFuYWx5emUgdGhlIGZsb3cuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBkZWFsbG9jYXRpb24gcGF0aCwgbmF0dXJhbGx5LiBXaGVuIGBzbmRfY2FyZF9kb19mcmVlYCBnZXRzIGludm9rZWQsIHRoYXQncyB3aGVyZSB0aGUgbWVtb3J5IHNob3VsZCBiZSByZWxlYXNlZC4gQSBrZXkgcXVlc3Rpb24gYXJpc2VzOiB3aGF0IGNhbGxzIGBzbmRfY2FyZF9kb19mcmVlYD8gSXQncyBsaWtlbHkgdGhhdCBgX19zbmRfY2FyZF9yZWxlYXNlYCBpcyBpbnZvbHZlZCwgYW5kIGl0IGhhcyB0byBiZSwgZ2l2ZW4gdGhlIG5hbWVzLiBMZXQgbWUgY29uZmlybSB0aGlzIGFzc3VtcHRpb24gYnkgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgc2NydXRpbml6aW5nIGBfX3NuZF9jYXJkX3JlbGVhc2VgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvbm5lY3Rpb24gd2lsbCBiZWNvbWUgY2xlYXIuIEdvdHRhIHRyYWNlIHRoZSBjYWxscyBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgaGFuZGxlZCwgbm8gbWVtb3J5IGxlYWtzIGFsbG93ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMyOjAyLjE4NjgyNzQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4Mzk3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zbmRfY2FyZF9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jPTE5NT1FWFBPUlRfU1lNQk9MKHNuZF9jYXJkX25ldyk7XFxuc291bmQvY29yZS9pbml0LmMtMTk2LVxcbnNvdW5kL2NvcmUvaW5pdC5jOjE5NzpzdGF0aWMgdm9pZCBfX3NuZF9jYXJkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbnNvdW5kL2NvcmUvaW5pdC5jLTE5OC17XFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz0yMjc9aW50IHNuZF9kZXZtX2NhcmRfbmV3KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLFxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMjM0LVxcdCpjYXJkX3JldCA9IE5VTEw7XFxuc291bmQvY29yZS9pbml0LmM6MjM1OlxcdGNhcmQgPSBkZXZyZXNfYWxsb2MoX19zbmRfY2FyZF9yZWxlYXNlLFxcbnNvdW5kL2NvcmUvaW5pdC5jLTIzNi1cXHRcXHRcXHQgICAgc3RydWN0X3NpemUoY2FyZCwgcHJpdmF0ZV9kYXRhX2FyZWEsIGV4dHJhX3NpemUpLFxcbi0tXFxuc291bmQvY29yZS9pbml0LmM9MjY0PWludCBzbmRfY2FyZF9mcmVlX29uX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldClcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTI2OS1cXHRcXHRyZXR1cm4gMDtcXG5zb3VuZC9jb3JlL2luaXQuYzoyNzA6XFx0Y2FyZCA9IGRldnJlc19maW5kKGRldiwgX19zbmRfY2FyZF9yZWxlYXNlLCBOVUxMLCBOVUxMKTtcXG5zb3VuZC9jb3JlL2luaXQuYy0yNzEtXFx0aWYgKGNhcmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMyOjAyLjMzNDY3MzU1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg3OTUxMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYF9fc25kX2NhcmRfcmVsZWFzZWA6XG5cbioqQW5hbHl6aW5nIGBfX3NuZF9jYXJkX3JlbGVhc2VgKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgYF9fc25kX2NhcmRfcmVsZWFzZWAgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgcmVsYXRlZCB0byB0aGUgY2xlYW51cCBwcm9jZXNzIGZvciBhbiBhdWRpbyBjYXJkIHdpdGhpbiB0aGUga2VybmVsJ3Mgc291bmQgc3Vic3lzdGVtLCBwcm9iYWJseSBpbiB0aGUgQUxTQSBmcmFtZXdvcmsuIE1vcmUgc3BlY2lmaWNhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc291bmQgY2FyZC5cblxuSSBiZXQgaXQnbGwgaW52b2x2ZTpcblxuKiAgICoqVW5yZWdpc3RlcmluZyB0aGUgY2FyZDoqKiBEZXJlZ2lzdGVyaW5nIHRoZSBzb3VuZCBjYXJkIHdpdGggdGhlIEFMU0EgY29yZS4gSXQncyB0aGUgc3RhbmRhcmQgcHJhY3RpY2UsIHRvIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGtub3dpbmcgYWJvdXQgaXQuXG4qICAgKipSZWxlYXNpbmcgRHJpdmVyLXNwZWNpZmljIHJlc291cmNlczoqKiBGcmVlaW5nIGFueSBtZW1vcnksIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIG90aGVyIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIHNvdW5kIGNhcmQgZHJpdmVyIHNwZWNpZmljIGNvZGUuIEknbGwgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBga2ZyZWVgLCBgbXV0ZXhfZGVzdHJveWAsIGBzbmRfY2FyZF9mcmVlYCwgb3IgYW55IGRyaXZlci1zcGVjaWZpYyByZWxlYXNlIGZ1bmN0aW9ucyB0aGF0IHRoZSBjYXJkIGRyaXZlciB1c2VzLlxuKiAgICoqQ2xvc2luZyBkZXZpY2UgZmlsZXM6KiogUG90ZW50aWFsbHkgY2xvc2luZyBhbnkgZGV2aWNlIGZpbGVzIG9yIHJlbW92aW5nIHRoZW0gZnJvbSBkZXZpY2UgZmlsZSBzdHJ1Y3R1cmVzLiBUaGlzIGVuc3VyZXMgdGhhdCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGNhbid0IGFjY2lkZW50YWxseSBhY2Nlc3MgZGFuZ2xpbmcgcmVmZXJlbmNlcy5cbiogICAqKlN0b3BwaW5nIGFsbCBhY3RpdmUgc3RyZWFtczoqKiBFbnN1cmluZyB0aGF0IGFueSBjdXJyZW50bHkgYWN0aXZlIGF1ZGlvIHN0cmVhbXMgb3IgcGxheWJhY2sgYnVmZmVycyBhcmUgZ3JhY2VmdWxseSBzdG9wcGVkIGFuZCBjbGVhcmVkIHRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbiBvciByZXNvdXJjZSBsZWFrcy5cblxuSSdsbCBiZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIG9yZGVyIG9mIHRoZXNlIG9wZXJhdGlvbnMgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIElzIGl0IHJvYnVzdCB0byBwYXJ0aWFsIGZhaWx1cmVzLCBmb3IgaW5zdGFuY2U/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc21zIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5PyBBbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnM/IFRoZXNlIGFyZSBjcnVjaWFsIGFzcGVjdHMgdG8gY29uc2lkZXIgZHVyaW5nIHRoaXMgcmV2aWV3LlxuTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6MDYuNDIyNjI3ODA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NzpcXHRzdGF0aWMgdm9pZCBfX3NuZF9jYXJkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbiAxOTg6XFx0e1xcbiAxOTk6XFx0XFx0c25kX2NhcmRfZnJlZShkYXRhKTtcXG4gMjAwOlxcdH1cXG4gMjAxOlxcdFxcbiAyMDI6XFx0LyoqXFxuIDIwMzpcXHQgKiBzbmRfZGV2bV9jYXJkX25ldyAtIG1hbmFnZWQgc25kX2NhcmQgb2JqZWN0IGNyZWF0aW9uXFxuIDIwNDpcXHQgKiBAcGFyZW50OiB0aGUgcGFyZW50IGRldmljZSBvYmplY3RcXG4gMjA1OlxcdCAqIEBpZHg6IGNhcmQgaW5kZXggKGFkZHJlc3MpIFswIC4uLiAoU05EUlZfQ0FSRFMtMSldXFxuIDIwNjpcXHQgKiBAeGlkOiBjYXJkIGlkZW50aWZpY2F0aW9uIChBU0NJSSBzdHJpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMyOjA2LjQyMjcyMjIxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDEwNzU3MDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgQXVkaW8gU3Vic3lzdGVtIFNodXRkb3duKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgc2h1dGRvd24gc2VxdWVuY2UuIFRoZSBgX19zbmRfY2FyZF9yZWxlYXNlYCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIE5vdywgSSBzZWUgaXQgY2FsbHMgYHNuZF9jYXJkX2ZyZWUoZGF0YSlgLiBUaGF0J3MgdGhlIGNydWNpYWwgcG9pbnQuIFNvLCB3aGF0IGV4YWN0bHkgaXMgYHNuZF9jYXJkX2ZyZWVgIGRvaW5nIHdpdGggdGhhdCBgZGF0YWAgcG9pbnRlcj8gTGV0J3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc25kX2NhcmRfZnJlZWAgYW5kIHNlZSB3aGF0J3MgYmVpbmcgY2xlYW5lZCB1cCBhbmQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLiBJJ20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgY29kZSBmbG93IGZyb20gdGhlcmUgdG8gYnVpbGQgbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUgYXVkaW8gc3Vic3lzdGVtLiBJdCdzIHRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgcmVzb3VyY2UgcmVsZWFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6MTYuNTMwMjk3MDE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzb3VuZC9jb3JlL2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzM6XFx0LyoqXFxuIDYzNDpcXHQgKiBzbmRfY2FyZF9mcmVlIC0gZnJlZXMgZ2l2ZW4gc291bmRjYXJkIHN0cnVjdHVyZVxcbiA2MzU6XFx0ICogQGNhcmQ6IHNvdW5kY2FyZCBzdHJ1Y3R1cmVcXG4gNjM2OlxcdCAqXFxuIDYzNzpcXHQgKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBzb3VuZGNhcmQgc3RydWN0dXJlIGFuZCB0aGUgYWxsIGFzc2lnbmVkXFxuIDYzODpcXHQgKiBkZXZpY2VzIGF1dG9tYXRpY2FsbHkuICBUaGF0IGlzLCB5b3UgZG9uJ3QgaGF2ZSB0byByZWxlYXNlIHRoZSBkZXZpY2VzXFxuIDYzOTpcXHQgKiBieSB5b3Vyc2VsZi5cXG4gNjQwOlxcdCAqXFxuIDY0MTpcXHQgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIHVudGlsIHRoZSBhbGwgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSByZWxlYXNlZC5cXG4gNjQyOlxcdCAqXFxuIDY0MzpcXHQgKiBSZXR1cm46IFplcm8uIEZyZWVzIGFsbCBhc3NvY2lhdGVkIGRldmljZXMgYW5kIGZyZWVzIHRoZSBjb250cm9sXFxuIDY0NDpcXHQgKiBpbnRlcmZhY2UgYXNzb2NpYXRlZCB0byBnaXZlbiBzb3VuZGNhcmQuXFxuIDY0NTpcXHQgKi9cXG4gNjQ2OlxcdHZvaWQgc25kX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuIDY0NzpcXHR7XFxuIDY0ODpcXHRcXHRERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhyZWxlYXNlZCk7XFxuIDY0OTpcXHRcXG4gNjUwOlxcdFxcdC8qIFRoZSBjYWxsIG9mIHNuZF9jYXJkX2ZyZWUoKSBpcyBhbGxvd2VkIGZyb20gdmFyaW91cyBjb2RlIHBhdGhzO1xcbiA2NTE6XFx0XFx0ICogYSBtYW51YWwgY2FsbCBmcm9tIHRoZSBkcml2ZXIgYW5kIHRoZSBjYWxsIHZpYSBkZXZyZXNfZnJlZSwgYW5kXFxuIDY1MjpcXHRcXHQgKiB3ZSBuZWVkIHRvIGF2b2lkIGRvdWJsZS1mcmVlLiBNb3Jlb3ZlciwgdGhlIHJlbGVhc2UgdmlhIGRldnJlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMjoxNi41MzAzOTkwODRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMjEzMTk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgc291bmQgY2FyZCBkcml2ZXJzOlxuXG4qKkFuYWx5emluZyB0aGUgUmVtYWluZGVyIG9mIGBzbmRfY2FyZF9mcmVlYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyBjbGVhcjogbGV0J3MgZGl2ZSBpbnRvIHRoZSByZW1haW5pbmcgc2VjdGlvbnMgb2YgdGhlIGBzbmRfY2FyZF9mcmVlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNsZWFudXAgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyByb3V0aW5lLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCBlYWNoIHBhcnQgdG8gZW5zdXJlIEknbSBnZXR0aW5nIGEgaG9saXN0aWMgdmlldyBvZiBob3cgYSBzb3VuZCBjYXJkIHJlc291cmNlIGlzIGRlYWxsb2NhdGVkLCBzbyB0aGF0IEkgZG9uJ3QgbWlzcyBhbnkgY3JpdGljYWwgZGV0YWlscyBkdXJpbmcgcmVzb3VyY2UgdGVhcmRvd24uIExldCdzIHNlZSBob3cgdGhleSBjbGVhbiB1cCBhbGwgdGhvc2UgYXVkaW8gZGV2aWNlIGNvbXBvbmVudHMuIE15IGV4cGVjdGF0aW9uIGlzIHRoZXJlIHdpbGwgYmUgYSBsb3Qgb2YgZGV2aWNlIHVucmVnaXN0cmF0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMyOjE5LjY2MjUzNDEwMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzb3VuZC9jb3JlL2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTMsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NTM6XFx0XFx0ICogbWF5IGNhbGwgc25kX2NhcmRfZnJlZSgpIHR3aWNlIGR1ZSB0byBpdHMgbmF0dXJlLCB3ZSBuZWVkIHRvIGhhdmVcXG4gNjU0OlxcdFxcdCAqIHRoZSBjaGVjayBoZXJlIGF0IHRoZSBiZWdpbm5pbmcuXFxuIDY1NTpcXHRcXHQgKi9cXG4gNjU2OlxcdFxcdGlmIChjYXJkLVxcdTAwM2VyZWxlYXNpbmcpXFxuIDY1NzpcXHRcXHRcXHRyZXR1cm47XFxuIDY1ODpcXHRcXG4gNjU5OlxcdFxcdGNhcmQtXFx1MDAzZXJlbGVhc2VfY29tcGxldGlvbiA9IFxcdTAwMjZyZWxlYXNlZDtcXG4gNjYwOlxcdFxcdHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoY2FyZCk7XFxuIDY2MTpcXHRcXG4gNjYyOlxcdFxcdC8qIHdhaXQsIHVudGlsIGFsbCBkZXZpY2VzIGFyZSByZWFkeSBmb3IgdGhlIGZyZWUgb3BlcmF0aW9uICovXFxuIDY2MzpcXHRcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZyZWxlYXNlZCk7XFxuIDY2NDpcXHR9XFxuIDY2NTpcXHRFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWUpO1xcbiA2NjY6XFx0XFxuIDY2NzpcXHQvKiBjaGVjaywgaWYgdGhlIGNoYXJhY3RlciBpcyBpbiB0aGUgdmFsaWQgQVNDSUkgcmFuZ2UgKi9cXG4gNjY4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlX2FzY2lpX2NoYXIoY2hhciBjKVxcbiA2Njk6XFx0e1xcbiA2NzA6XFx0XFx0cmV0dXJuIGlzYXNjaWkoYykgXFx1MDAyNlxcdTAwMjYgaXNhbG51bShjKTtcXG4gNjcxOlxcdH1cXG4gNjcyOlxcdFxcbiA2NzM6XFx0LyogcmV0cmlldmUgdGhlIGxhc3Qgd29yZCBvZiBzaG9ydG5hbWUgb3IgbG9uZ25hbWUgKi9cXG4gNjc0OlxcdHN0YXRpYyBjb25zdCBjaGFyICpyZXRyaWV2ZV9pZF9mcm9tX2NhcmRfbmFtZShjb25zdCBjaGFyICpuYW1lKVxcbiA2NzU6XFx0e1xcbiA2NzY6XFx0XFx0Y29uc3QgY2hhciAqc3BvcyA9IG5hbWU7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdHdoaWxlICgqbmFtZSkge1xcbiA2Nzk6XFx0XFx0XFx0aWYgKGlzc3BhY2UoKm5hbWUpIFxcdTAwMjZcXHUwMDI2IHNhZmVfYXNjaWlfY2hhcihuYW1lWzFdKSlcXG4gNjgwOlxcdFxcdFxcdFxcdHNwb3MgPSBuYW1lICsgMTtcXG4gNjgxOlxcdFxcdFxcdG5hbWUrKztcXG4gNjgyOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6MTkuNjYyNjM1MjIxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzQ2ODAyMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVzZS1BZnRlci1GcmVlIFZ1bG5lcmFiaWxpdHkgaW4gQUxTQSBDb3JlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQUxTQSBjb2RlIGFuZCBpdCdzIGxvb2tpbmcgbGlrZSB0aGVyZSdzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBidWcgbHVya2luZyBpbiBgc25kX2NhcmRfZnJlZWAuIEl0IGFsbCBzdGFydHMgd2l0aCBgc25kX2NhcmRfZnJlZWAgY2FsbGluZyBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gdGhlIGBwdXRfZGV2aWNlYCBhbmQgdWx0aW1hdGVseSBgcmVsZWFzZV9jYXJkX2RldmljZWAsIHdoaWNoIHRyaWdnZXJzIGBzbmRfY2FyZF9kb19mcmVlYC4gIGBzbmRfY2FyZF9kb19mcmVlYCBzZXRzIGBjYXJkLVx1MDAzZXJlbGVhc2luZyA9IHRydWU7YCBiZWZvcmUgaXQgZG9lcyBhbnl0aGluZyBlbHNlLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgY29tZXMgZG93biB0byBob3cgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCBhZnRlciBpdCdzIGJlZW4gZnJlZWQuIEluc2lkZSBgc25kX2NhcmRfZG9fZnJlZWAsIHRoZXJlJ3MgYSBjaGVjayBmb3IgYGNhcmQtXHUwMDNlbWFuYWdlZGAuIElmIHRoZSBgY2FyZGAgaXNuJ3QgbWFuYWdlZCAobWVhbmluZyBpdCB3YXNuJ3QgYWxsb2NhdGVkIHdpdGggYGRldm1gKSwgdGhlbiBga2ZyZWUoY2FyZClgIGlzIGNhbGxlZCByaWdodCB0aGVyZS4gQnV0IHRoZSBjb2RlIGhhcyBhIHJhY2UgY29uZGl0aW9uLiBJdCBzZXRzIHVwIGEgY29tcGxldGlvbiwgYGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uYCwgYW5kIHRoZW4gKmNvbXBsZXRlcyogaXQsIGBjb21wbGV0ZShjYXJkLVx1MDAzZXJlbGVhc2VfY29tcGxldGlvbilgLCBiZWZvcmUgdGhlIGNoZWNrIGZvciBgY2FyZC1cdTAwM2VtYW5hZ2VkYC4gVGhlIGtleSBpcyB0aGF0IGBzbmRfY2FyZF9mcmVlYCB3YWl0cyBvbiB0aGlzIGNvbXBsZXRpb24uXG5cbklmIHRoZSBgY2FyZGAgKmlzKiBtYW5hZ2VkLCB0aGUgYGtmcmVlYCBpcyBza2lwcGVkLiAgVGhlIHJhY2UgaXMgdGhhdCBgY29tcGxldGVgIHdha2VzIHVwIHRoZSB3YWl0aW5nIGBzbmRfY2FyZF9mcmVlYCBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBpbiBgc25kX2NhcmRfZG9fZnJlZWAgaGFzIGNvbXBsZXRlbHkgZmluaXNoZWQuIFNpbmNlIGBzbmRfY2FyZF9mcmVlYCBpcyB3YWl0aW5nIG9uIGBcdTAwMjZyZWxlYXNlZGAsIG9uIHRoZSBzdGFjaywgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkgYWZ0ZXIgYGNvbXBsZXRlKClgIGlzIGNhbGxlZCwgdGhlIHN0YWNrIHZhcmlhYmxlIGByZWxlYXNlZGAgaXMgc3RpbGwgdmFsaWQuIEJ1dCBpZiBgY2FyZGAgKmlzKiBtYW5hZ2VkLCBhbmQgdGhlIGBjb21wbGV0ZWAgd2FrZXMgdXAgYHNuZF9jYXJkX2ZyZWVgLCB0aGVuIGBkZXZyZXNgIGlzIGdvaW5nIHRvICphbHNvKiBmcmVlIGBjYXJkYC4gVGhpcyBjcmVhdGVzIGEgdXNlLWFmdGVyLWZyZWUgYmVjYXVzZSBgc25kX2NhcmRfZG9fZnJlZWAgbWlnaHQgYXR0ZW1wdCB0byBhY2Nlc3MgYGNhcmQtXHUwMDNlbWFuYWdlZGAgKmFmdGVyKiB0aGUgYGNhcmRgIGhhcyBiZWVuIGZyZWVkIGJ5IGBkZXZyZXNgLiBUaGlzIGhhcHBlbnMgYmVjYXVzZSBgc25kX2NhcmRfZnJlZWAgZmluaXNoZXMsIGFuZCBgX19zbmRfY2FyZF9yZWxlYXNlYCBhbHNvIGZpbmlzaGVzLiBUaGVuIGBkZXZyZXNgIGZyZWVzIHRoZSBtZW1vcnkgZm9yIGBjYXJkYCwgYW5kIHRoZW4gYHNuZF9jYXJkX2RvX2ZyZWVgIHRyaWVzIHRvIGNoZWNrIGBpZiAoIWNhcmQtXHUwMDNlbWFuYWdlZClgLCB3aGljaCBpcyBub3cgaW52YWxpZCBtZW1vcnkuXG5cblRoZSBvcmlnaW5hbCBwYXRjaCBjbGV2ZXJseSBmaXhlcyB0aGlzIGJ5IGNhY2hpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgKmJlZm9yZSogY2FsbGluZyBgY29tcGxldGVgLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSdyZSBvcGVyYXRpbmcgb24gYSB2YWxpZCBjb3B5IG9mIHRoZSBgbWFuYWdlZGAgZmxhZy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgQW55IEFMU0EgZHJpdmVyIHVzaW5nIGBzbmRfZGV2bV9jYXJkX25ld2AgaXMgdnVsbmVyYWJsZS4gVGhpcyBpbmNsdWRlcyBzY2VuYXJpb3Mgb24gbW9kdWxlIHVubG9hZCwgZGV2aWNlIHVuYmluZCwgb3IsIGNydWNpYWxseSwgZXJyb3IgcGF0aHMgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gU3l6a2FsbGVyLCB3aXRoIGl0cyBjb21wcmVoZW5zaXZlIHRlc3Rpbmcgb2YgVVNCIGF1ZGlvIGRldmljZXMsIHBhcnRpY3VsYXJseSB0aHJvdWdoIGZhdWx0IGluamVjdGlvbiBhbmQgbWFsZm9ybWVkIGRlc2NyaXB0b3JzLCBjYW4gZWFzaWx5IHRyaWdnZXIgdGhpcyBkdXJpbmcgcHJvYmUgZmFpbHVyZXMuIEFuZCB5ZXMsIHN5emthbGxlciBkb2VzIHRlc3QgVVNCIGF1ZGlvIGRldmljZXMuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWVkIGNlcnRhaW4gY29uZGl0aW9ucyBpbiB3aGljaCBJIHNob3VsZCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLiBJdCB0YWxrcyBhYm91dCBcIkRyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3NcIi4gVGhpcyBpcyBhIGNvcmUgQUxTQSBmcmFtZXdvcmsgZnVuY3Rpb24sIG5vdCBhIHNwZWNpZmljIGRyaXZlcidzIHRlYXJkb3duIGNhbGxiYWNrLiBJdCdzIHRyaWdnZXJlZCBub3QganVzdCBkdXJpbmcgdW5iaW5kL3JlbW92ZSwgYnV0IGFsc28gb24gcHJvYmUgZXJyb3JzLiBUaGUgcHJvbXB0IGRvZXMgc2F5OiBcInRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cIiBIb3dldmVyLCB0aGlzIGlzIHdyb25nLiBJdCBpcyBhbHNvIGV4ZWN1dGVkIGR1cmluZyBlcnJvciBwYXRocyBvZiBtb2R1bGUgbG9hZGluZyBvciBkZXZpY2UgcHJvYmluZy4gVGhlIGNvbWJpbmF0aW9uIG9mIGBzbmRfZGV2bV9jYXJkX25ld2Agd2l0aCBhIGxhdGVyIGZhaWx1cmUgaW4gdGhlIHByb2JlIHJvdXRpbmUsIG1lYW5zIHRoYXQgYGRldnJlc2AgZnJlZXMgdGhlIGNhcmQgd2hpY2ggY2FsbHMgYHNuZF9jYXJkX2RvX2ZyZWVgLCB3aGljaCBpcyB3aGF0IGNhdXNlcyB0aGUgdXNlLWFmdGVyLWZyZWUuXG5cblNvIHllcywgaXQgaXMgYWJzb2x1dGVseSByZWFjaGFibGUsIHZlcnkgZnV6emFibGUsIGFuZCByZXByZXNlbnRzIGEgcmVhbCB2dWxuZXJhYmlsaXR5LiBUaGlzIHBhdGNoIGlzIGEgdmVyeSBnb29kIGZpeCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTIwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMjozNy4wMDk0NDA1MjVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjEzODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9jYXJkX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvdXNiL2NhcmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC91c2IvY2FyZC5jPTkxOD1zdGF0aWMgaW50IHVzYl9hdWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbnNvdW5kL3VzYi9jYXJkLmMtMTA4MC1cXHRcXHRpZiAoIWNoaXAtXFx1MDAzZW51bV9pbnRlcmZhY2VzKVxcbnNvdW5kL3VzYi9jYXJkLmM6MTA4MTpcXHRcXHRcXHRzbmRfY2FyZF9mcmVlKGNoaXAtXFx1MDAzZWNhcmQpO1xcbnNvdW5kL3VzYi9jYXJkLmMtMTA4Mi1cXHR9XFxuLS1cXG5zb3VuZC91c2IvY2FyZC5jPTExNDk9c3RhdGljIHZvaWQgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5zb3VuZC91c2IvY2FyZC5jLTExNTgtXFx0aWYgKF9fdXNiX2F1ZGlvX2Rpc2Nvbm5lY3QoaW50ZiwgY2hpcCwgY2FyZCkpXFxuc291bmQvdXNiL2NhcmQuYzoxMTU5OlxcdFxcdHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoY2FyZCk7XFxuc291bmQvdXNiL2NhcmQuYy0xMTYwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6MzcuMDU4NjYxNDk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNTY1NzU1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBVU0IgQXVkaW8gUHJvYmUgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGF1ZGlvIGRyaXZlciBhbmQgaG93IGl0IGhhbmRsZXMgZXJyb3JzIGR1cmluZyB0aGUgVVNCIGF1ZGlvIHByb2JlIHByb2Nlc3MuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgYHNuZF9jYXJkX2ZyZWVgICppcyogY2FsbGVkIGluIHRoZSBlcnJvciBwYXRocyBvZiBgdXNiX2F1ZGlvX3Byb2JlYC4gR29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC4gQnV0LCB3YWl0IGEgc2Vjb25kLi4uIGB1c2JfYXVkaW9fcHJvYmVgIHVzZXMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCBpcyBnb29kLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHRoaW5raW5nIG9mIHRoZSBjb250ZXh0LiBEb2VzIGB1c2JfYXVkaW9fcHJvYmVgIHByb3Blcmx5IGFsbG9jYXRlIGEgY2FyZCB3aXRoIGBzbmRfZGV2bV9jYXJkX25ld2Agc28gdGhhdCBpdCBhbHNvIGZyZWVzIHRoZSBjYXJkPyBMZXQncyBxdWlja2x5IHZlcmlmeSB3aGVyZSBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHNvdW5kL3VzYi9jYXJkLmNgLCB0byBjb25maXJtIHRoYXQgdGhlIHByb3BlciBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSdyZSBwYWlyaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zIGNvcnJlY3RseSB0byBhdm9pZCBsZWFrcyBvciBkb3VibGUgZnJlZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6NDQuMzE1MjQwNDQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU4NzIzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25kX2Rldm1fY2FyZF9uZXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6NDQuMzYzODM4MTQ3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzkwMzg2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBTb3VuZCBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBpdCdzIGNsZWFyIHRoYXQgdGhlIGBzb3VuZC91c2IvYCBzdWJzeXN0ZW0gaXNuJ3QgZW1wbG95aW5nIGBzbmRfZGV2bV9jYXJkX25ld2AuIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYW5kIGl0IG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgbGluZSBvZiBpbnF1aXJ5LiBJbnN0ZWFkIG9mIGZvY3VzaW5nIG9uICpob3cqIGl0J3MgdXNlZCB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBub3QgYmVpbmcgdXNlZCBhbmQgd2hhdCBhbHRlcm5hdGl2ZXMgYXJlIGltcGxlbWVudGVkLlxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBzbmRfZGV2bV9jYXJkX25ld2AgKmlzKiB1c2VkLiBMZXQncyB0cmFjZSBpdHMgY2FsbHMgYW5kIHNlZSB3aGljaCBvdGhlciBhdWRpbyBkcml2ZXJzIG9yIHN1YnN5c3RlbXMgcmVseSBvbiBpdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIEFMU0EgZnJhbWV3b3JrIGFuZCBwb3RlbnRpYWxseSBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGRlc2lnbiBkZWNpc2lvbnMgYmVoaW5kIHRoZSBgc291bmQvdXNiL2AgYXBwcm9hY2guIFVuZGVyc3RhbmRpbmcgdGhlIGVzdGFibGlzaGVkIHBhdHRlcm5zIGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgZW1wbG95ZWQgbWlnaHQgaWxsdW1pbmF0ZSB0aGUgc3BlY2lmaWMgcmF0aW9uYWxlIGZvciBpdHMgYWJzZW5jZSBpbiB0aGUgVVNCIGF1ZGlvIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUgdG8gZm9ybXVsYXRlIHRoZSByaWdodCBxdWVzdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzI6NDkuODQyODc5ODk0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjczMTg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbmRfZGV2bV9jYXJkX25ld1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbnNvdW5kL2NvcmUvaW5pdC5jPTE5Nz1zdGF0aWMgdm9pZCBfX3NuZF9jYXJkX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMjAyLS8qKlxcbnNvdW5kL2NvcmUvaW5pdC5jOjIwMzogKiBzbmRfZGV2bV9jYXJkX25ldyAtIG1hbmFnZWQgc25kX2NhcmQgb2JqZWN0IGNyZWF0aW9uXFxuc291bmQvY29yZS9pbml0LmMtMjA0LSAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgZGV2aWNlIG9iamVjdFxcbi0tXFxuc291bmQvY29yZS9pbml0LmMtMjI2LSAqL1xcbnNvdW5kL2NvcmUvaW5pdC5jOjIyNzppbnQgc25kX2Rldm1fY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQsXFxuc291bmQvY29yZS9pbml0LmMtMjI4LVxcdFxcdCAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgc2l6ZV90IGV4dHJhX3NpemUsXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy0yNTAtfVxcbnNvdW5kL2NvcmUvaW5pdC5jOjI1MTpFWFBPUlRfU1lNQk9MX0dQTChzbmRfZGV2bV9jYXJkX25ldyk7XFxuc291bmQvY29yZS9pbml0LmMtMjUyLVxcbi0tXFxuc291bmQvZHJpdmVycy9hbG9vcC5jPTE3OTg9c3RhdGljIGludCBsb29wYmFja19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXFxuLS1cXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmMtMTgwNC1cXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmM6MTgwNTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2ZGV2cHRyLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2RyaXZlcnMvYWxvb3AuYy0xODA2LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgbG9vcGJhY2spLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9kcml2ZXJzL2R1bW15LmM9MTAxMj1zdGF0aWMgaW50IHNuZF9kdW1teV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpXFxuLS1cXG5zb3VuZC9kcml2ZXJzL2R1bW15LmMtMTAxOS1cXG5zb3VuZC9kcml2ZXJzL2R1bW15LmM6MTAyMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2ZGV2cHRyLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2RyaXZlcnMvZHVtbXkuYy0xMDIxLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2R1bW15KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmM9NTI9c3RhdGljIGludCBzbmRfbXB1NDAxX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIGludCBkZXYsXFxuLS1cXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYy02MS1cXHQqcmNhcmQgPSBOVUxMO1xcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jOjYyOlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldnB0ciwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMtNjMtXFx0XFx0XFx0XFx0MCwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvZHJpdmVycy9tdHBhdi5jPTY1Mj1zdGF0aWMgaW50IHNuZF9tdHBhdl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXFxuLS1cXG5zb3VuZC9kcml2ZXJzL210cGF2LmMtNjU3LVxcbnNvdW5kL2RyaXZlcnMvbXRwYXYuYzo2NTg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldi1cXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxcbnNvdW5kL2RyaXZlcnMvbXRwYXYuYy02NTktXFx0XFx0XFx0XFx0c2l6ZW9mKCptdHBfY2FyZCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2RyaXZlcnMvcGNtdGVzdC5jPTYwMD1zdGF0aWMgaW50IHBjbXRzdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuc291bmQvZHJpdmVycy9wY210ZXN0LmMtNjA5LVxcbnNvdW5kL2RyaXZlcnMvcGNtdGVzdC5jOjYxMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvZHJpdmVycy9wY210ZXN0LmMtNjExLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYz05OD1zdGF0aWMgaW50IHNuZF9jYXJkX3Bjc3BfcHJvYmUoaW50IGRldm51bSwgc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYy0xMDctXFxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYzoxMDg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYy0xMDktXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmM9MzIxPXN0YXRpYyBpbnQgc25kX3NlcmlhbF9nZW5lcmljX3Byb2JlKHN0cnVjdCBzZXJkZXZfZGV2aWNlICpzZXJkZXYpXFxuLS1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmMtMzI2LVxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYzozMjc6XFx0ZXJyICA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZzZXJkZXYtXFx1MDAzZWRldiwgU05EUlZfREVGQVVMVF9JRFgxLFxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLWdlbmVyaWMuYy0zMjgtXFx0XFx0XFx0XFx0U05EUlZfREVGQVVMVF9TVFIxLCBUSElTX01PRFVMRSxcXG4tLVxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jPTg0Mj1zdGF0aWMgaW50IHNuZF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxcbi0tXFxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMtODg0LVxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jOjg4NTpcXHRlcnIgID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldnB0ci1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYy04ODYtXFx0XFx0XFx0XFx0IDAsIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jPTcxPXN0YXRpYyBpbnQgc25kX3Zpcm1pZGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxcbi0tXFxuc291bmQvZHJpdmVycy92aXJtaWRpLmMtNzctXFxuc291bmQvZHJpdmVycy92aXJtaWRpLmM6Nzg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldnB0ci1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYy03OS1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmM9MTE3PXN0YXRpYyBpbnQgc25kX2NhcmRfYWQxODE2YV9wcm9iZShpbnQgZGV2LCBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXFxuLS1cXG5zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMtMTI0LVxcbnNvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYzoxMjU6XFx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNhcmQtXFx1MDAzZWNhcmQtXFx1MDAzZWRldixcXG5zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMtMTI2LVxcdFxcdFxcdFxcdCAgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuLS1cXG5zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jPTY5PXN0YXRpYyBpbnQgc25kX2FkMTg0OF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYy03NC1cXG5zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jOjc1OlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYy03Ni1cXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi0tXFxuc291bmQvaXNhL2FkbGliLmM9NDY9c3RhdGljIGludCBzbmRfYWRsaWJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcXG4tLVxcbnNvdW5kL2lzYS9hZGxpYi5jLTUxLVxcbnNvdW5kL2lzYS9hZGxpYi5jOjUyOlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvaXNhL2FkbGliLmMtNTMtXFx0aWYgKGVycm9yIFxcdTAwM2MgMCkge1xcbi0tXFxuc291bmQvaXNhL2FsczEwMC5jPTE2MT1zdGF0aWMgaW50IHNuZF9jYXJkX2FsczEwMF9wcm9iZShpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL2FsczEwMC5jLTE3MC1cXG5zb3VuZC9pc2EvYWxzMTAwLmM6MTcxOlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjYXJkLVxcdTAwM2VjYXJkLVxcdTAwM2VkZXYsXFxuc291bmQvaXNhL2FsczEwMC5jLTE3Mi1cXHRcXHRcXHRcXHQgIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbi0tXFxuc291bmQvaXNhL2F6dDIzMjAuYz0xNjA9c3RhdGljIGludCBzbmRfY2FyZF9henQyMzIwX3Byb2JlKGludCBkZXYsXFxuLS1cXG5zb3VuZC9pc2EvYXp0MjMyMC5jLTE2OS1cXG5zb3VuZC9pc2EvYXp0MjMyMC5jOjE3MDpcXHRlcnJvciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2FyZC1cXHUwMDNlY2FyZC1cXHUwMDNlZGV2LFxcbnNvdW5kL2lzYS9henQyMzIwLmMtMTcxLVxcdFxcdFxcdFxcdCAgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuLS1cXG5zb3VuZC9pc2EvY21pODMyOC5jPTIxOD1zdGF0aWMgaW50IHNuZF9jbWk4MzI4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBuZGV2KVxcbi0tXFxuc291bmQvaXNhL2NtaTgzMjguYy0yOTYtXFxuc291bmQvaXNhL2NtaTgzMjguYzoyOTc6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbbmRldl0sIGlkW25kZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2EvY21pODMyOC5jLTI5OC1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzI4KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL2NtaTgzMzAuYz01MDA9c3RhdGljIGludCBzbmRfY21pODMzMF9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL2NtaTgzMzAuYy01MDYtXFxuc291bmQvaXNhL2NtaTgzMzAuYzo1MDc6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL2NtaTgzMzAuYy01MDgtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfY21pODMzMCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmM9NzY9c3RhdGljIGludCBzbmRfY3M0MjMxX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXFxuLS1cXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jLTgxLVxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmM6ODI6XFx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsIFxcdTAwMjZjYXJkKTtcXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jLTgzLVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLS1cXG5zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jPTMxMz1zdGF0aWMgaW50IHNuZF9jczQyM3hfY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGRldiwgaW50IGRldixcXG4tLVxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMtMzE4LVxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmM6MzE5OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMtMzIwLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYz0xNjQ9c3RhdGljIGludCBzbmRfZXMxNjg4X2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYy0xNjgtXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYzoxNjk6XFx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYy0xNzAtXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHNuZF9lczE2ODgpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jPTI1OT1zdGF0aWMgaW50IHNuZF9lczk2OF9wbnBfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCxcXG4tLVxcbnNvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMtMjc0LVxcbnNvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmM6Mjc1OlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjYXJkLVxcdTAwM2VjYXJkLVxcdTAwM2VkZXYsXFxuc291bmQvaXNhL2VzMTY4OC9lczE2ODguYy0yNzYtXFx0XFx0XFx0XFx0ICBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG4tLVxcbnNvdW5kL2lzYS9lczE4eHguYz0yMDM4PXN0YXRpYyBpbnQgc25kX2VzMTh4eF9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL2VzMTh4eC5jLTIwNDAte1xcbnNvdW5kL2lzYS9lczE4eHguYzoyMDQxOlxcdHJldHVybiBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2EvZXMxOHh4LmMtMjA0Mi1cXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBzbmRfZXMxOHh4KSwgY2FyZHApO1xcbi0tXFxuc291bmQvaXNhL2dhbGF4eS9nYWxheHkuYz00ODE9c3RhdGljIGludCBfX3NuZF9nYWxheHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbilcXG4tLVxcbnNvdW5kL2lzYS9nYWxheHkvZ2FsYXh5LmMtNDg4LVxcbnNvdW5kL2lzYS9nYWxheHkvZ2FsYXh5LmM6NDg5OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2EvZ2FsYXh5L2dhbGF4eS5jLTQ5MC1cXHRcXHRcXHRcXHRzaXplb2YoKmdhbGF4eSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jPTEzMj1zdGF0aWMgaW50IHNuZF9ndXNjbGFzc2ljX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pXFxuLS1cXG5zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYy0xMzctXFxuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmM6MTM4OlxcdGVycm9yID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2LCBpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCBcXHUwMDI2Y2FyZCk7XFxuc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMtMTM5LVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLS1cXG5zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYz0yMzI9c3RhdGljIGludCBzbmRfZ3VzZXh0cmVtZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMtMjQwLVxcbnNvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jOjI0MTpcXHRlcnJvciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYy0yNDItXFx0XFx0XFx0XFx0ICBzaXplb2YoKmd1c2V4dHJlbWUpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2EvZ3VzL2d1c21heC5jPTE4NT1zdGF0aWMgaW50IHNuZF9ndXNtYXhfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldilcXG4tLVxcbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmMtMTk0LVxcbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmM6MTk1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9ndXMvZ3VzbWF4LmMtMTk2LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2d1c21heCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmM9NjI1PXN0YXRpYyBpbnQgc25kX2ludGVyd2F2ZV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYy02MzEtXFxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYzo2MzI6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYy02MzMtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfaW50ZXJ3YXZlKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jPTg1Nz1zdGF0aWMgaW50IHNuZF9tc25kX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaWR4KVxcbi0tXFxuc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jLTg3MS1cXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmM6ODcyOlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYy04NzMtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfbXNuZCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYz0xMDkwPXN0YXRpYyBpbnQgc25kX21zbmRfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXFxuLS1cXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMtMTEzMS1cXHQgKi9cXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmM6MTEzMjpcXHRyZXQgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNhcmQtXFx1MDAzZWNhcmQtXFx1MDAzZWRldixcXG5zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMtMTEzMy1cXHRcXHRcXHRcXHRpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSxcXG4tLVxcbnNvdW5kL2lzYS9vcGwzc2EyLmM9NTk1PXN0YXRpYyBpbnQgc25kX29wbDNzYTJfY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGRldiwgaW50IGRldixcXG4tLVxcbnNvdW5kL2lzYS9vcGwzc2EyLmMtNjAxLVxcbnNvdW5kL2lzYS9vcGwzc2EyLmM6NjAyOlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KHBkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9vcGwzc2EyLmMtNjAzLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX29wbDNzYTIpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmM9MTU2MD1zdGF0aWMgaW50IHNuZF9taXJvX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBuKVxcbi0tXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE1NzMtXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jOjE1NzQ6XFx0ZXJyb3IgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXZwdHIsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE1NzUtXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IHNuZF9taXJvKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jPTE3NzQ9c3RhdGljIGludCBzbmRfbWlyb19wbnBfcHJvYmUoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLFxcbi0tXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE3ODQtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jOjE3ODU6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjYXJkLVxcdTAwM2VjYXJkLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL29wdGk5eHgvbWlyby5jLTE3ODYtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfbWlybyksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmM9OTA4PXN0YXRpYyBpbnQgc25kX29wdGk5eHhfY2FyZF9uZXcoc3RydWN0IGRldmljZSAqcGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApXFxuLS1cXG5zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jLTkxMi1cXG5zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jOjkxMzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhwZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMtOTE0LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX29wdGk5eHgpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9pc2Evc2IvamF6ejE2LmM9MjE1PXN0YXRpYyBpbnQgc25kX2phenoxNl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpXFxuLS1cXG5zb3VuZC9pc2Evc2IvamF6ejE2LmMtMjI1LVxcbnNvdW5kL2lzYS9zYi9qYXp6MTYuYzoyMjY6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoZGV2cHRyLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9pc2Evc2IvamF6ejE2LmMtMjI3LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL3NiL3NiMTYuYz0yODk9c3RhdGljIGludCBzbmRfc2IxNl9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIGludCBkZXYsXFxuLS1cXG5zb3VuZC9pc2Evc2Ivc2IxNi5jLTI5NC1cXG5zb3VuZC9pc2Evc2Ivc2IxNi5jOjI5NTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXZwdHIsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2lzYS9zYi9zYjE2LmMtMjk2LVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfc2IxNiksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9zYi9zYjguYz03Mz1zdGF0aWMgaW50IHNuZF9zYjhfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldilcXG4tLVxcbnNvdW5kL2lzYS9zYi9zYjguYy04MC1cXG5zb3VuZC9pc2Evc2Ivc2I4LmM6ODE6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL3NiL3NiOC5jLTgyLVxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc25kX3NiOCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9zYzYwMDAuYz01NzU9c3RhdGljIGludCBfX3NuZF9zYzYwMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgZGV2KVxcbi0tXFxuc291bmQvaXNhL3NjNjAwMC5jLTU4OC1cXG5zb3VuZC9pc2Evc2M2MDAwLmM6NTg5OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldnB0ciwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL3NjNjAwMC5jLTU5MC1cXHRcXHRcXHRcXHRzaXplb2YoKnNjNjAwMCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2lzYS9zc2NhcGUuYz0xMjE0PXN0YXRpYyBpbnQgc25kX3NzY2FwZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KVxcbi0tXFxuc291bmQvaXNhL3NzY2FwZS5jLTEyMTktXFxuc291bmQvaXNhL3NzY2FwZS5jOjEyMjA6XFx0cmV0ID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL3NzY2FwZS5jLTEyMjEtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvaXNhL3NzY2FwZS5jPTEyNjg9c3RhdGljIGludCBzc2NhcGVfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsXFxuLS1cXG5zb3VuZC9pc2Evc3NjYXBlLmMtMTMwMi1cXHQgKi9cXG5zb3VuZC9pc2Evc3NjYXBlLmM6MTMwMzpcXHRyZXQgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNhcmQtXFx1MDAzZWNhcmQtXFx1MDAzZWRldixcXG5zb3VuZC9pc2Evc3NjYXBlLmMtMTMwNC1cXHRcXHRcXHRcXHRpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSxcXG4tLVxcbnNvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmM9MzEyPXN0YXRpYyBpbnQgc25kX3dhdmVmcm9udF9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwZGV2LCBpbnQgZGV2LFxcbi0tXFxuc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYy0zMTgtXFxuc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYzozMTk6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcocGRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYy0zMjAtXFx0XFx0XFx0XFx0c2l6ZW9mKHNuZF93YXZlZnJvbnRfY2FyZF90KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2FkMTg4OS5jPTg0MD1fX3NuZF9hZDE4ODlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9hZDE4ODkuYy04NTYtXFx0LyogKDIpICovXFxuc291bmQvcGNpL2FkMTg4OS5jOjg1NzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvYWQxODg5LmMtODU4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYz0yMDg5PXN0YXRpYyBpbnQgX19zbmRfYWxpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMtMjA5Ny1cXG5zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmM6MjA5ODpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jLTIwOTktXFx0XFx0XFx0XFx0c2l6ZW9mKCpjb2RlYyksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hbHMzMDAuYz02NzQ9c3RhdGljIGludCBzbmRfYWxzMzAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYWxzMzAwLmMtNjg4LVxcbnNvdW5kL3BjaS9hbHMzMDAuYzo2ODk6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvYWxzMzAwLmMtNjkwLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hbHM0MDAwLmM9ODAxPXN0YXRpYyBpbnQgX19zbmRfY2FyZF9hbHM0MDAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYWxzNDAwMC5jLTgzOS1cXHRcXG5zb3VuZC9wY2kvYWxzNDAwMC5jOjg0MDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9hbHM0MDAwLmMtODQxLVxcdFxcdFxcdFxcdHNpemVvZigqYWNhcmQpIC8qIHByaXZhdGVfZGF0YTogYWNhcmQgKi8sXFxuLS1cXG5zb3VuZC9wY2kvYXRpaXhwLmM9MTU1Mz1zdGF0aWMgaW50IF9fc25kX2F0aWl4cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL2F0aWl4cC5jLTE1NTktXFxuc291bmQvcGNpL2F0aWl4cC5jOjE1NjA6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9hdGlpeHAuYy0xNTYxLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYz0xMTg1PXN0YXRpYyBpbnQgX19zbmRfYXRpaXhwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMtMTE5MS1cXG5zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmM6MTE5MjpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jLTExOTMtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYz0xOTU9X19zbmRfdm9ydGV4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpXFxuLS1cXG5zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jLTIwOS1cXHQvLyAoMilcXG5zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jOjIxMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMtMjExLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYz0yNTA9c3RhdGljIGludCBzbmRfYXcyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMtMjY2LVxcdC8qICgyKSBDcmVhdGUgY2FyZCBpbnN0YW5jZSAqL1xcbnNvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYzoyNjc6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMtMjY4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9henQzMzI4LmM9MjQwNj1fX3NuZF9hemYzMzI4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpXFxuLS1cXG5zb3VuZC9wY2kvYXp0MzMyOC5jLTI0MjAtXFxuc291bmQvcGNpL2F6dDMzMjguYzoyNDIxOlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2F6dDMzMjguYy0yNDIyLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9idDg3eC5jPTgwMT1zdGF0aWMgaW50IF9fc25kX2J0ODd4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvYnQ4N3guYy04MjQtXFxuc291bmQvcGNpL2J0ODd4LmM6ODI1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2J0ODd4LmMtODI2LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYz0xNzEzPXN0YXRpYyBpbnQgX19zbmRfY2EwMTA2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMtMTcyNy1cXG5zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmM6MTcyODpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYy0xNzI5LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9jbWlwY2kuYz0zMTY5PXN0YXRpYyBpbnQgc25kX2NtaXBjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL2NtaXBjaS5jLTMxODItXFxuc291bmQvcGNpL2NtaXBjaS5jOjMxODM6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvY21pcGNpLmMtMzE4NC1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGNtaXBjaSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9jczQyODEuYz0xODE0PXN0YXRpYyBpbnQgX19zbmRfY3M0MjgxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvY3M0MjgxLmMtMTgyOS1cXG5zb3VuZC9wY2kvY3M0MjgxLmM6MTgzMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9jczQyODEuYy0xODMxLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmM9NTQ9c3RhdGljIGludCBzbmRfY2FyZF9jczQ2eHhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMtNjgtXFxuc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYzo2OTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMtNzAtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2NzNTUzMC5jPTE4NT1zdGF0aWMgaW50IHNuZF9jczU1MzBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9jczU1MzAuYy0xOTktXFxuc291bmQvcGNpL2NzNTUzMC5jOjIwMDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9jczU1MzAuYy0yMDEtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmM9Mjg2PXN0YXRpYyBpbnQgX19zbmRfY3M1NTM1YXVkaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jLTMwMC1cXG5zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYzozMDE6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYy0zMDItXFx0XFx0XFx0XFx0c2l6ZW9mKCpjczU1MzVhdSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmM9MTkzNz1zdGF0aWMgaW50IF9fc25kX2VjaG9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMtMTk1Mi1cXG5zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jOjE5NTM6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jLTE5NTQtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jPTY5PXN0YXRpYyBpbnQgc25kX2NhcmRfZW11MTBrMV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jLTg2LVxcbnNvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYzo4NzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYy04OC1cXHRcXHRcXHRcXHRzaXplb2YoKmVtdSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmM9MTQ1MD1zdGF0aWMgaW50IF9fc25kX2VtdTEwazF4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jLTE0NjQtXFxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYzoxNDY1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYy0xNDY2LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lbnMxMzcwLmM9MjI3MD1zdGF0aWMgaW50IF9fc25kX2F1ZGlvcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZW5zMTM3MC5jLTIyODQtXFxuc291bmQvcGNpL2VuczEzNzAuYzoyMjg1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2VuczEzNzAuYy0yMjg2LVxcdFxcdFxcdFxcdHNpemVvZigqZW5zb25pcSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lczE5MzguYz0xNjg2PXN0YXRpYyBpbnQgX19zbmRfZXMxOTM4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZXMxOTM4LmMtMTcwMS1cXG5zb3VuZC9wY2kvZXMxOTM4LmM6MTcwMjpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9lczE5MzguYy0xNzAzLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9lczE5NjguYz0yNjk1PXN0YXRpYyBpbnQgX19zbmRfZXMxOTY4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZXMxOTY4LmMtMjcxMC1cXG5zb3VuZC9wY2kvZXMxOTY4LmM6MjcxMTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9lczE5NjguYy0yNzEyLVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9mbTgwMS5jPTEyNjc9c3RhdGljIGludCBfX3NuZF9jYXJkX2ZtODAxX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvZm04MDEuYy0xMjgyLVxcbnNvdW5kL3BjaS9mbTgwMS5jOjEyODM6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvZm04MDEuYy0xMjg0LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYz0yNTI3PXN0YXRpYyBpbnQgX19zbmRfdnQxNzI0X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMtMjU0Mi1cXG5zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmM6MjU0MzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYy0yNTQ0LVxcdFxcdFxcdFxcdHNpemVvZigqaWNlKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2ludGVsOHgwLmM9MzE3MD1zdGF0aWMgaW50IF9fc25kX2ludGVsOHgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvaW50ZWw4eDAuYy0zMTc3LVxcbnNvdW5kL3BjaS9pbnRlbDh4MC5jOjMxNzg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleCwgaWQsIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9pbnRlbDh4MC5jLTMxNzktXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2ludGVsOHgwbS5jPTEyMjE9c3RhdGljIGludCBfX3NuZF9pbnRlbDh4MG1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9pbnRlbDh4MG0uYy0xMjI4LVxcbnNvdW5kL3BjaS9pbnRlbDh4MG0uYzoxMjI5OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvaW50ZWw4eDBtLmMtMTIzMC1cXHRcXHRcXHRcXHRzaXplb2YoKmNoaXApLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYz0yMjE4PXNuZF9rb3JnMTIxMl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMtMjIzMi1cXHR9XFxuc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmM6MjIzMzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jLTIyMzQtXFx0XFx0XFx0XFx0c2l6ZW9mKCprb3JnMTIxMiksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9sb2xhL2xvbGEuYz02NDQ9c3RhdGljIGludCBfX2xvbGFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9sb2xhL2xvbGEuYy02NTgtXFxuc291bmQvcGNpL2xvbGEvbG9sYS5jOjY1OTpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9sb2xhL2xvbGEuYy02NjAtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmM9OTgwPXN0YXRpYyBpbnQgc25kX2x4NjQ2NGVzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYy05OTYtXFxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmM6OTk3OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMtOTk4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9tYWVzdHJvMy5jPTI2MzI9X19zbmRfbTNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZClcXG4tLVxcbnNvdW5kL3BjaS9tYWVzdHJvMy5jLTI2NDktXFxuc291bmQvcGNpL21hZXN0cm8zLmM6MjY1MDpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9tYWVzdHJvMy5jLTI2NTEtXFx0XFx0XFx0XFx0c2l6ZW9mKCpjaGlwKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL25tMjU2L25tMjU2LmM9MTU1MT1zdGF0aWMgaW50IHNuZF9ubTI1Nl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL25tMjU2L25tMjU2LmMtMTU3Ni1cXG5zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYzoxNTc3OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYy0xNTc4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jPTU3NT1zdGF0aWMgaW50IF9fb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLFxcbi0tXFxuc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMtNTg3LVxcbnNvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jOjU4ODpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgb3duZXIsXFxuc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMtNTg5LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYz0yMDIzPV9fc25kX2NhcmRfcmlwdGlkZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKVxcbi0tXFxuc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jLTIwMzctXFxuc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jOjIwMzg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMtMjAzOS1cXHRcXHRcXHRcXHRzaXplb2YoKmNoaXApLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9wY2kvcm1lMzIuYz0xODEzPV9fc25kX3JtZTMyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpXFxuLS1cXG5zb3VuZC9wY2kvcm1lMzIuYy0xODI3LVxcbnNvdW5kL3BjaS9ybWUzMi5jOjE4Mjg6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvcm1lMzIuYy0xODI5LVxcdFxcdFxcdFxcdHNpemVvZigqcm1lMzIpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9wY2kvcm1lOTYuYz0yMzU5PV9fc25kX3JtZTk2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvcm1lOTYuYy0yMzc0LVxcdH1cXG5zb3VuZC9wY2kvcm1lOTYuYzoyMzc1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL3JtZTk2LmMtMjM3Ni1cXHRcXHRcXHRcXHRzaXplb2YoKnJtZTk2KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jPTUzMjY9c3RhdGljIGludCBzbmRfaGRzcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jLTUzNDAtXFxuc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jOjUzNDE6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMtNTM0Mi1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGhkc3ApLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jPTY4MDA9c3RhdGljIGludCBzbmRfaGRzcG1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMtNjgxNC1cXG5zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jOjY4MTU6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLFxcbnNvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMtNjgxNi1cXHRcXHRcXHRcXHRUSElTX01PRFVMRSwgc2l6ZW9mKCpoZHNwbSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYz0yNDcwPXN0YXRpYyBpbnQgc25kX3JtZTk2NTJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYy0yNDg0LVxcbnNvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYzoyNDg1OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jLTI0ODYtXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfcm1lOTY1MiksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9zaXM3MDE5LmM9MTMxMj1zdGF0aWMgaW50IF9fc25kX3NpczcwMTlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS9zaXM3MDE5LmMtMTMzMi1cXG5zb3VuZC9wY2kvc2lzNzAxOS5jOjEzMzM6XFx0cmMgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL3NpczcwMTkuYy0xMzM0LVxcdFxcdFxcdCAgICAgICBzaXplb2YoKnNpcyksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL3BjaS9zb25pY3ZpYmVzLmM9MTM2NT1zdGF0aWMgaW50IF9fc25kX3NvbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksXFxuLS1cXG5zb3VuZC9wY2kvc29uaWN2aWJlcy5jLTEzODEtIFxcbnNvdW5kL3BjaS9zb25pY3ZpYmVzLmM6MTM4MjpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL3BjaS9zb25pY3ZpYmVzLmMtMTM4My1cXHRcXHRcXHRcXHRzaXplb2YoKnNvbmljKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jPTUzPXN0YXRpYyBpbnQgc25kX3RyaWRlbnRfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSxcXG4tLVxcbnNvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYy02OC1cXG5zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmM6Njk6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMtNzAtXFx0XFx0XFx0XFx0c2l6ZW9mKCp0cmlkZW50KSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvcGNpL3ZpYTgyeHguYz0yNDM4PXN0YXRpYyBpbnQgX19zbmRfdmlhODJ4eF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLFxcbi0tXFxuc291bmQvcGNpL3ZpYTgyeHguYy0yNDQ2LVxcbnNvdW5kL3BjaS92aWE4Mnh4LmM6MjQ0NzpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIGluZGV4LCBpZCwgVEhJU19NT0RVTEUsXFxuc291bmQvcGNpL3ZpYTgyeHguYy0yNDQ4LVxcdFxcdFxcdFxcdHNpemVvZigqY2hpcCksIFxcdTAwMjZjYXJkKTtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMjo0OS45MjU2MTYyNzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAxNDg1NTQ4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyAtIEEgQ3JpdGljYWwgQ29uY3VycmVuY3kgVUFGIGluIEFMU0EgQ29yZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV293LCBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHVzZWQgZXZlcnl3aGVyZSBpbiBBTFNBIGRyaXZlcnMhXCIgVGhlbiBJIHNlZSB0aGF0IGV2ZW4gYHNvdW5kL2RyaXZlcnMvZHVtbXkuY2AgYW5kIGBzb3VuZC9kcml2ZXJzL2Fsb29wLmNgIHVzZSBpdCwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhpcyBpcyB3aXRoaW4gU3l6a2FsbGVyJ3MgcmVhY2guIFRoZSBmYWN0IHRoYXQgdGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIFwic3l6LWNsdXN0ZXJcIiBhbmQgYSBcInBhdGNoIHVuZGVyIHJldmlld1wiIHN0cm9uZ2x5IGhpbnRzIHRoaXMgaXMgYSBmaXggZm9yIGEgU3l6a2FsbGVyLWZvdW5kIGJ1ZyDigJMgYSBVQUYsIG5vIGxlc3MsIGluIGBzbmRfY2FyZF9kb19mcmVlYCByZWxhdGVkIHRvIHRoZSBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBmaWVsZC5cblxuVGhlIHByb21wdCwgb2YgY291cnNlLCB0aHJvd3MgYSBjdXJ2ZWJhbGwgYWJvdXQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBidXQgY29uc2lkZXJpbmcgdGhhdCBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAgYXJlIGVhc2lseSBlbXVsYXRlZCB3aXRoaW4gc3VjaCBlbnZpcm9ubWVudHMsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbk5vdywgbGV0J3MgZGlzc2VjdCB0aGUgY29uZGl0aW9ucyBuZWVkZWQgdG8gdHJpZ2dlciB0aGUgVUFGLiBUaGUgdnVsbmVyYWJpbGl0eSBib2lscyBkb3duIHRvIGBjYXJkYCBiZWluZyBmcmVlZCBieSBgZGV2cmVzYCBiZWZvcmUgYHNuZF9jYXJkX2RvX2ZyZWVgIGNvbXBsZXRlcy4gVGhpcyByZXF1aXJlcyBgc25kX2NhcmRfZnJlZWAgdG8gYmUgY2FsbGVkLCB3aGljaCwgaW4gdHVybiwgd2FpdHMgb24gYHJlbGVhc2VfY29tcGxldGlvbmAuIGBzbmRfY2FyZF9mcmVlYCBpcyBjYWxsZWQgYnkgYF9fc25kX2NhcmRfcmVsZWFzZWAsIHdoaWNoIGlzIHRoZSBgZGV2cmVzYCByZWxlYXNlIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd291bGQgYmUgc3luY2hyb25vdXMuXG5cblNvLCBJIHRyYWNlIHRoZSBleGVjdXRpb246IGBkZXZyZXNgIGNhbGxzIGBfX3NuZF9jYXJkX3JlbGVhc2VgLCB3aGljaCBjYWxscyBgc25kX2NhcmRfZnJlZWAuIGBzbmRfY2FyZF9mcmVlYCBjYWxscyBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIHdoaWNoIGNhbGxzIGBwdXRfZGV2aWNlKFx1MDAyNmNhcmQtXHUwMDNlY2FyZF9kZXYpYC4gSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIGByZWxlYXNlX2NhcmRfZGV2aWNlYCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4gY2FsbHMgYHNuZF9jYXJkX2RvX2ZyZWVgLiBJbnNpZGUgYHNuZF9jYXJkX2RvX2ZyZWVgLCBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCBpcyBjYWxsZWQuIFRoZW4gYHNuZF9jYXJkX2ZyZWVgIHdha2VzIHVwIGFuZCByZXR1cm5zLiBUaGVuIGBfX3NuZF9jYXJkX3JlbGVhc2VgIHJldHVybnMuIFRoZW4gYGRldnJlc2AgZnJlZXMgdGhlIG1lbW9yeSBvZiBgY2FyZGAhIEl0J3MgYWxsIHN5bmNocm9ub3VzLCBhbmQgSSB3YXMgc3RhcnRpbmcgdG8gdGhpbmsgdGhpcyB3YXNuJ3QgYSByZWFsIGJ1Zy5cblxuQnV0IHdhaXQsIGBwdXRfZGV2aWNlYCBpcyB0aGUga2V5LiBJZiBpdCBkcm9wcyB0aGUgKmxhc3QqIHJlZmVyZW5jZSwgdGhlIG9wZXJhdGlvbiBJUyBzeW5jaHJvbm91cy4gSG93ZXZlciwgaWYgdGhlcmUgYXJlIHN0aWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycywgdGhlIHJlZmNvdW50IGlzIGdyZWF0ZXIgdGhhbiAwLiBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAgcmV0dXJucywgYW5kIGBzbmRfY2FyZF9mcmVlYCB3YWl0cy4gTGF0ZXIsIHdoZW4gdGhlIGxhc3QgZmlsZSBkZXNjcmlwdG9yIGlzIGNsb3NlZCAoZS5nLiwgaW4gYGZwdXRgKSwgYHB1dF9kZXZpY2VgIGlzIGNhbGxlZCAqZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQqLiBgcHV0X2RldmljZWAgY2FsbHMgYHJlbGVhc2VfY2FyZF9kZXZpY2VgIC1cdTAwM2UgYHNuZF9jYXJkX2RvX2ZyZWVgLiBJbnNpZGUgYHNuZF9jYXJkX2RvX2ZyZWVgLCBpdCBjYWxscyBgY29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgd2hpY2ggd2FrZXMgdXAgdGhlIG9yaWdpbmFsIHRocmVhZCB3YWl0aW5nIGluIGBzbmRfY2FyZF9mcmVlYC4gVGhhdCBmaXJzdCB0aHJlYWQgcmV0dXJucywgYW5kIFRIRU4gYGRldnJlc2AgZnJlZXMgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUuIE1lYW53aGlsZSwgdGhlIHNlY29uZCB0aHJlYWQgY29udGludWVzIGV4ZWN1dGlvbiwgYXR0ZW1wdGluZyB0byBhY2Nlc3MgYGNhcmQtXHUwMDNlbWFuYWdlZGAhIEJpbmdvIVxuXG5UaGlzIGlzIGEgY2xhc3NpYyBhbmQgdmVyeSBleHBsb2l0YWJsZSBjb25jdXJyZW5jeSBVQUYuIFRocmVhZCAxIChkZXZpY2UgcmVtb3ZhbCkgY2FsbHMgdGhlIGBkZXZyZXNgIHJlbGVhc2UgZnVuY3Rpb24sIGFuZCBUaHJlYWQgMiAoY2xvc2luZyB0aGUgbGFzdCBmaWxlIGRlc2NyaXB0b3IpIGV4ZWN1dGVzIHRoZSBmaW5hbCByZWxlYXNlIHBhdGguIFRocmVhZCAyIGFjY2Vzc2VzIHRoZSBmcmVlZCBtZW1vcnksIGNhdXNpbmcgdGhlIFVBRi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRvIHRhcmdldCB0aGlzLCB0aGUgZnV6emluZyBlZmZvcnRzIHNob3VsZCBjb25jZW50cmF0ZSBvbiBgc25kX2NhcmRfZG9fZnJlZWAsIGBzbmRfY2FyZF9mcmVlYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AsIHdpdGggdGhlIEFMU0EgZnJhbWV3b3JrIGVuYWJsZWQsIGFsb25nIHdpdGggZHJpdmVycyBsaWtlIGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjEwLjA3NDE3NDc1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NjU4NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNORF9EVU1NWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnPTQ5PWNvbmZpZyBTTkRfUENTUFxcbi0tXFxuc291bmQvZHJpdmVycy9LY29uZmlnLTc4LVxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZzo3OTpjb25maWcgU05EX0RVTU1ZXFxuc291bmQvZHJpdmVycy9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJEdW1teSAoL2Rldi9udWxsKSBzb3VuZGNhcmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjEwLjE1NTE0OTIxMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjcwNjg5MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgdGhlc2Ugc291bmQgZHJpdmVycyBhcmUgY29uZmlndXJlZCwgc3BlY2lmaWNhbGx5IGBTTkRfRFVNTVlgIGFuZCBgU05EX0FMT09QYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIHNvdW5kIHN1YnN5c3RlbSdzIGNvbmZpZ3VyYXRpb24sIHdoaWNoIEkga25vdyBpcyB0eXBpY2FsbHkgbWFuYWdlZCB1bmRlciB0aGUgYHNvdW5kL2RyaXZlcnMvYCBkaXJlY3RvcnkuIFRoYXQgYEtjb25maWdgIGZpbGUgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBwb2ludCBmb3IgdGhvc2Uga2luZHMgb2YgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gb3BlbiB0aGF0IHVwIGFuZCBzZWFyY2ggZm9yIHRob3NlIHN5bWJvbHMuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBwcm9iYWJseSBLY29uZmlnLCBpcyBnb2luZyB0byBkaWN0YXRlIHdoZXRoZXIgb3Igbm90IHRoZXNlIGRyaXZlcnMgYXJlIGV2ZW4gY29tcGlsZWQgaW4sIGJ1aWx0IGFzIG1vZHVsZXMsIG9yIGNvbXBsZXRlbHkgZXhjbHVkZWQuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBhcmNoaXRlY3R1cmVzLiBJdCdzIGEgYnJlYWRjcnVtYiB0cmFpbCBJIGNhbiBmb2xsb3cgdG8gdW5kZXJzdGFuZCB0aGVpciBhdmFpbGFiaWxpdHkgYW5kIGhvdyB0aGV5J3JlIGludGVuZGVkIHRvIGJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjI1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6MTUuNDI1ODQxMTY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3OTpcXHRjb25maWcgU05EX0RVTU1ZXFxuICA4MDpcXHRcXHR0cmlzdGF0ZSBcXFwiRHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkXFxcIlxcbiAgODE6XFx0XFx0c2VsZWN0IFNORF9QQ01cXG4gIDgyOlxcdFxcdGhlbHBcXG4gIDgzOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHRoZSBkdW1teSBkcml2ZXIuICBUaGlzIGRyaXZlciBkb2VzXFxuICA4NDpcXHRcXHQgIG5vdGhpbmcsIGJ1dCBlbXVsYXRlcyB2YXJpb3VzIG1peGVyIGNvbnRyb2xzIGFuZCBQQ00gZGV2aWNlcy5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBZb3UgZG9uJ3QgbmVlZCB0aGlzIHVubGVzcyB5b3UncmUgdGVzdGluZyB0aGUgaGFyZHdhcmUgc3VwcG9ydFxcbiAgODc6XFx0XFx0ICBvZiBwcm9ncmFtcyB1c2luZyB0aGUgQUxTQSBBUEkuXFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgOTA6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzbmQtZHVtbXkuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBTTkRfQUxPT1BcXG4gIDkzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIGxvb3BiYWNrIGRyaXZlciAoUENNKVxcXCJcXG4gIDk0OlxcdFxcdHNlbGVjdCBTTkRfUENNXFxuICA5NTpcXHRcXHRzZWxlY3QgU05EX1RJTUVSXFxuICA5NjpcXHRcXHRoZWxwXFxuICA5NzpcXHRcXHQgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFBDTSBsb29wYmFjayBkZXZpY2UuXFxuICA5ODpcXHRcXHQgIFRoaXMgbW9kdWxlIHJldHVybnMgcGxheWVkIHNhbXBsZXMgYmFjayB0byB0aGUgdXNlciBzcGFjZSB1c2luZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzoxNS40MjU5MTk3ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1MjU5ODI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgYSBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gZm9jdXNpbmcgb24gZmluZGluZyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nIGJhc2VkIG9uIGEgc3VzcGVjdGVkIFVzZS1BZnRlci1GcmVlIChVQUYpIGNvbmRpdGlvbi4gYFNORF9EVU1NWWAgYW5kIGBTTkRfQUxPT1BgIGFyZSBsb29raW5nIGxpa2Ugc3Ryb25nIGNvbnRlbmRlcnMgaW5pdGlhbGx5LiBBbmQgYFNORF9VU0JfQVVESU9gIGlzIGFsc28gYXR0cmFjdGl2ZSBiZWNhdXNlIG9mIGl0cyBob3RwbHVnIGNhcGFiaWxpdGllcyB3aXRoaW4gc3l6a2FsbGVyIHVzaW5nIGBkdW1teV9oY2RgLlxuXG5IYW5nIG9uLCBsZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHZ1bG5lcmFiaWxpdHkgc2VlbXMgdGllZCB0byBob3cgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgaXMgbWFuYWdlZCwgcGFydGljdWxhcmx5IHRoZSBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBmbGFnLiBJIGtub3cgZnJvbSBsb29raW5nIGF0IGBzb3VuZC91c2IvY2FyZC5jYCB0aGF0IGl0ICpkb2Vzbid0KiB1c2UgYHNuZF9kZXZtX2NhcmRfbmV3YC4gU28gdGhhdCdzIGltcG9ydGFudC4gRG9lcyBpdCB1c2UgYHNuZF9jYXJkX2ZyZWVgPyBZZXMsIGl0IGRvZXMuIEJ1dCB0aGUgY29yZSBvZiB0aGlzIGJ1ZyBoaW5nZXMgb24gdGhhdCBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBmbGFnLCB3aGljaCBpcyAqb25seSogc2V0IHRvIHRydWUgd2hlbiBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIHVzZWQuXG5cblJpZ2h0LCBpZiBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpcyBmYWxzZSwgYHNuZF9jYXJkX2RvX2ZyZWVgIHdpbGwganVzdCBjYWxsIGBrZnJlZShjYXJkKWAuIE9rYXksIHRoYXQncyBjcml0aWNhbC4gSWYgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaXMgZmFsc2UsIG1lYW5pbmcgaXQgKndhc24ndCogYWxsb2NhdGVkIHVzaW5nIHRoZSBcIm1hbmFnZWRcIiB2ZXJzaW9uLCBga2ZyZWUoY2FyZClgIGdldHMgY2FsbGVkIHdpdGhpbiBgc25kX2NhcmRfZG9fZnJlZWAuXG5cbk5vdywgaWYgd2UgaGF2ZSB0d28gdGhyZWFkcywgVGhyZWFkIDIsIGl0IHNlZW1zLCBkb2VzIHRoZSBmb2xsb3dpbmc6XG4tICAgYGNvbXBsZXRlKGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKWBcbi0gICBgaWYgKCFjYXJkLVx1MDAzZW1hbmFnZWQpYCB3aGljaCByZWFkcyBgY2FyZC1cdTAwM2VtYW5hZ2VkYFxuLSAgIGBrZnJlZShjYXJkKWBcblxuQW5kIFRocmVhZCAxIGlzIGRvaW5nIHRoaXM6XG4tICAgYHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2cmVsZWFzZWQpYFxuLSAgIHJldHVybnMgZnJvbSBgc25kX2NhcmRfZnJlZWBcbi0gICByZXR1cm5zIGZyb20gYF9fc25kX2NhcmRfcmVsZWFzZWAgKGJ1dCB0aGlzIGlzICpub3QqIGFwcGxpY2FibGUgYmVjYXVzZSB0aGUgY2FyZCBpc24ndCBtYW5hZ2VkKVxuLSAgIHJldHVybnMgZnJvbSB3aGF0ZXZlciBjYWxsZWQgYHNuZF9jYXJkX2ZyZWVgXG5cbklmIHRoZSBgY2FyZGAgKmlzbid0KiBtYW5hZ2VkLCBUaHJlYWQgMSAqZG9lc24ndCogZnJlZSBgY2FyZGAuIFRocmVhZCAyICpkb2VzKi5cblxuU28sIHdhaXQsIHJlYWRpbmcgYGNhcmQtXHUwMDNlbWFuYWdlZGAgaW4gVGhyZWFkIDIgaXMgc2FmZSBiZWNhdXNlIHRoZSBgY2FyZGAgaXRzZWxmIGlzbid0IGZyZWVkIHVudGlsIHRoZSBzdWJzZXF1ZW50IGxpbmUsIGBrZnJlZShjYXJkKWAuIFRoZSBVQUYgKm9ubHkqIGhhcHBlbnMgd2hlbiBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpcyB0cnVlLiBUaGlzIGluIHR1cm4gbWVhbnMgdGhlIGNhcmQgaGFkIHRvIGhhdmUgYmVlbiBhbGxvY2F0ZWQgd2l0aCBgc25kX2Rldm1fY2FyZF9uZXdgLlxuXG5UaGVyZWZvcmUsIHdlIGFic29sdXRlbHkgKm11c3QqIGZvY3VzIG9uIGRyaXZlcnMgdGhhdCB1c2UgYHNuZF9kZXZtX2NhcmRfbmV3YC4gYFNORF9EVU1NWWAgYW5kIGBTTkRfQUxPT1BgIGFyZSBsb29raW5nIGV2ZW4gYmV0dGVyIG5vdy4gVGhlaXIgdmlydHVhbCBuYXR1cmUgaXMgcGVyZmVjdCBmb3IgdGVzdGluZyB0aGlzLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGtlcm5lbCBmb3IgYW55IG90aGVyIHZpcnR1YWwgZHJpdmVycyB0aGF0IGFyZSB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBqdXN0IHRvIGJlIGNlcnRhaW4gd2UgaGF2ZW4ndCBtaXNzZWQgYSBtb3JlIGludGVyZXN0aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzoyMy42Nzg1MjE1MThaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDQ2NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9kZXZtX2NhcmRfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2RyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2RyaXZlcnMvYWxvb3AuYz0xNzk4PXN0YXRpYyBpbnQgbG9vcGJhY2tfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxcbi0tXFxuc291bmQvZHJpdmVycy9hbG9vcC5jLTE4MDQtXFxuc291bmQvZHJpdmVycy9hbG9vcC5jOjE4MDU6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldnB0ci1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL2Fsb29wLmMtMTgwNi1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGxvb3BiYWNrKSwgXFx1MDAyNmNhcmQpO1xcbi0tXFxuc291bmQvZHJpdmVycy9kdW1teS5jPTEwMTI9c3RhdGljIGludCBzbmRfZHVtbXlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKVxcbi0tXFxuc291bmQvZHJpdmVycy9kdW1teS5jLTEwMTktXFxuc291bmQvZHJpdmVycy9kdW1teS5jOjEwMjA6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNmRldnB0ci1cXHUwMDNlZGV2LCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL2R1bW15LmMtMTAyMS1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHNuZF9kdW1teSksIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jPTUyPXN0YXRpYyBpbnQgc25kX21wdTQwMV9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2cHRyLCBpbnQgZGV2LFxcbi0tXFxuc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMtNjEtXFx0KnJjYXJkID0gTlVMTDtcXG5zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYzo2MjpcXHRlcnIgPSBzbmRfZGV2bV9jYXJkX25ldyhkZXZwdHIsIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLFxcbnNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jLTYzLVxcdFxcdFxcdFxcdDAsIFxcdTAwMjZjYXJkKTtcXG4tLVxcbnNvdW5kL2RyaXZlcnMvbXRwYXYuYz02NTI9c3RhdGljIGludCBzbmRfbXRwYXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxcbi0tXFxuc291bmQvZHJpdmVycy9tdHBhdi5jLTY1Ny1cXG5zb3VuZC9kcml2ZXJzL210cGF2LmM6NjU4OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZkZXYtXFx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSxcXG5zb3VuZC9kcml2ZXJzL210cGF2LmMtNjU5LVxcdFxcdFxcdFxcdHNpemVvZigqbXRwX2NhcmQpLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYz02MDA9c3RhdGljIGludCBwY210c3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbnNvdW5kL2RyaXZlcnMvcGNtdGVzdC5jLTYwOS1cXG5zb3VuZC9kcml2ZXJzL3BjbXRlc3QuYzo2MTA6XFx0ZXJyID0gc25kX2Rldm1fY2FyZF9uZXcoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgXFx1MDAyNmNhcmQpO1xcbnNvdW5kL2RyaXZlcnMvcGNtdGVzdC5jLTYxMS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmM9OTg9c3RhdGljIGludCBzbmRfY2FyZF9wY3NwX3Byb2JlKGludCBkZXZudW0sIHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMtMTA3LVxcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmM6MTA4OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KGRldiwgaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgXFx1MDAyNmNhcmQpO1xcbnNvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMtMTA5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jPTMyMT1zdGF0aWMgaW50IHNuZF9zZXJpYWxfZ2VuZXJpY19wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxcbi0tXFxuc291bmQvZHJpdmVycy9zZXJpYWwtZ2VuZXJpYy5jLTMyNi1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmM6MzI3OlxcdGVyciAgPSBzbmRfZGV2bV9jYXJkX25ldyhcXHUwMDI2c2VyZGV2LVxcdTAwM2VkZXYsIFNORFJWX0RFRkFVTFRfSURYMSxcXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC1nZW5lcmljLmMtMzI4LVxcdFxcdFxcdFxcdFNORFJWX0RFRkFVTFRfU1RSMSwgVEhJU19NT0RVTEUsXFxuLS1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYz04NDI9c3RhdGljIGludCBzbmRfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cilcXG4tLVxcbnNvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jLTg4NC1cXG5zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYzo4ODU6XFx0ZXJyICA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZkZXZwdHItXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMtODg2LVxcdFxcdFxcdFxcdCAwLCBcXHUwMDI2Y2FyZCk7XFxuLS1cXG5zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYz03MT1zdGF0aWMgaW50IHNuZF92aXJtaWRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cilcXG4tLVxcbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jLTc3LVxcbnNvdW5kL2RyaXZlcnMvdmlybWlkaS5jOjc4OlxcdGVyciA9IHNuZF9kZXZtX2NhcmRfbmV3KFxcdTAwMjZkZXZwdHItXFx1MDAzZWRldiwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsXFxuc291bmQvZHJpdmVycy92aXJtaWRpLmMtNzktXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpKSwgXFx1MDAyNmNhcmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzoyMy43Mjg5Nzc3NTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MDQzNzA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBBdWRpbyBEcml2ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuUmlnaHQsIGxldCdzIHNlZS4gQmV5b25kIHRoZSB1c3VhbCBzdXNwZWN0cywgSSByZWNhbGwgdGhhdCBgU05EX1BDTVRFU1RgIGFuZCBgU05EX1ZJUk1JRElgIGFyZSBsaWtlbHkgYWxzbyB3b3J0aCBhIGxvb2suIFRoZXkgb2Z0ZW4gcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBvciBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMuIE15IG5leHQgbW92ZSBpcyBjbGVhciDigJMgSSdsbCBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYXVkaW8gZHJpdmVycy4gSSBuZWVkIHRvIGV4YW1pbmUgYHNvdW5kL2RyaXZlcnMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRldGFpbHMsIGRlcGVuZGVuY2llcywgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYm90aCBgU05EX1BDTVRFU1RgIGFuZCBgU05EX1ZJUk1JRElgLiBUaGlzIHNob3VsZCBpbGx1bWluYXRlIHRoZWlyIHB1cnBvc2UgYW5kIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoaW4gdGhlIG92ZXJhbGwgYXVkaW8gc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQxNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjI2Ljg5OTQxOTYyM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzcyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNORF9QQ01URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC9kcml2ZXJzL0tjb25maWc9OTI9Y29uZmlnIFNORF9BTE9PUFxcbi0tXFxuc291bmQvZHJpdmVycy9LY29uZmlnLTExMS1cXG5zb3VuZC9kcml2ZXJzL0tjb25maWc6MTEyOmNvbmZpZyBTTkRfUENNVEVTVFxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgUENNIHRlc3QgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzoyNi45NDc4NzAyODFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzODAxNjU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBTTkRfVklSTUlESWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIGBTTkRfVklSTUlESWAuLi4gdGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBjZXJ0YWluIGFzc29jaWF0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHdoZXJlIHRoYXQgZml0cyBpbiB0aGUgY3VycmVudCBwcm9qZWN0LCBvciBkZWJ1Z2dpbmcgc2NlbmFyaW8uIElzIHRoaXMgYWJvdXQgYSBwb3RlbnRpYWwgZHJpdmVyIGNvbmZsaWN0LCBhIHNwZWNpZmljIHNvdW5kIHN5bnRoZXNpcyBwcm9jZXNzLCBvciBwZXJoYXBzIGEgTUlESSByb3V0aW5nIGlzc3VlPyBUaGUgbmFtZSBzdWdnZXN0cyBzb21ldGhpbmcgdmlydHVhbCwgc28gSSdtIGxpa2VseSBkZWFsaW5nIHdpdGggc29mdHdhcmUtYmFzZWQgTUlESSBpbnRlcmFjdGlvbiwgd2hpY2ggbmFycm93cyBpdCBkb3duIHNvbWV3aGF0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmV2aWV3IHRoZSBjb2RlIHJlbGF0ZWQgdG8gdGhhdCBzdWJzeXN0ZW0uIExldCdzIG1ha2Ugc3VyZSB0aGF0IHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IEkgaGF2ZSB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdGhlIHZpcnR1YWwgTUlESSBwb3J0LiBUaGVuLCBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgY291bGQgaGF2ZSBpbXBhY3RlZCB0aGlzIGFyZWEuIEFyZSB0aGVyZSBhbnkga25vd24gYnVncz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gaW5jb25zaXN0ZW5jaWVzPyBJJ2xsIHByb2JhYmx5IGFsc28gY3Jvc3MtcmVmZXJlbmNlIGl0IHdpdGggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgc291bmQgY2FyZCBvciB0aGUgTUlESSBzZXR1cC4gSXQncyBhIHF1aWNrIHRyaWFnZTsgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBtb3N0IGxpa2VseSBwcm9ibGVtIGFyZWFzIHF1aWNrbHkgc28gSSBjYW4gZWZmaWNpZW50bHkgZGlhZ25vc2UgdGhlIGlzc3VlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzMwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6MzEuNTg1ODg5NTE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg4ODUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU05EX1ZJUk1JRElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZz0xMTI9Y29uZmlnIFNORF9QQ01URVNUXFxuLS1cXG5zb3VuZC9kcml2ZXJzL0tjb25maWctMTI4LVxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZzoxMjk6Y29uZmlnIFNORF9WSVJNSURJXFxuc291bmQvZHJpdmVycy9LY29uZmlnLTEzMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBNSURJIHNvdW5kY2FyZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6MzEuNjMyNzgxODYyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzgyNDkyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBTb3VuZCBEcml2ZXIgVnVsbmVyYWJpbGl0eSBMYW5kc2NhcGUqKlxuXG5SaWdodCwgb2theSwgYmFzZWQgb24gdGhpcywgaXQgc2VlbXMgd2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgYnVpbGRpbmcgd2l0aCBzdXBwb3J0IGZvciBgU05EX0RVTU1ZYCwgYFNORF9BTE9PUGAsIGBTTkRfUENNVEVTVGAsIGFuZCBgU05EX1ZJUk1JRElgLiBUaGVzZSBhcmUgdGhlIGtleSBtb2R1bGVzIHdlIG5lZWQgdG8gaGF2ZSBhY3RpdmUgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBNeSBmb2N1cywgaG93ZXZlciwgaXMgZ29pbmcgdG8gYmUgZGlyZWN0ZWQgYXQgc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc291bmQgY2FyZCBtYW5hZ2VtZW50IGNvZGUuIFdlIG5lZWQgdG8gemVybyBpbiBvbiBgc25kX2NhcmRfZG9fZnJlZWAsIGBzbmRfY2FyZF9mcmVlYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AuIFRoZXNlIGFyZSBsaWtlbHkgYXJlYXMgd2hlcmUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGNvdWxkIG1hbmlmZXN0IGFzIHZ1bG5lcmFiaWxpdGllcy4gSG1tLCBoYW5nIG9uIGEgc2Vjb25kLi4uIGlzIGBzbmRfY2FyZF9kb19mcmVlYCBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbj8gVGhhdCdzIGdvaW5nIHRvIGNoYW5nZSB0aGluZ3MuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0OyBpZiBpdCdzIHN0YXRpYywgaXQgbGltaXRzIHRoZSBzY29wZSBhbmQgaG93IGVhc2lseSB3ZSBjYW4gdGFyZ2V0IGl0LiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBkZWZpbml0aW9u4oCmIHRoYXQgZGVmaW5pdGVseSBpbXBhY3RzIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDEwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzozNS43MTEwMzQzNjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjIzMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9jYXJkX2RvX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvY29yZS9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic291bmQvY29yZS9pbml0LmM9MTQ1PXN0YXRpYyBpbnQgc25kX2NhcmRfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTE0Ny1cXHRcXHRcXHQgc2l6ZV90IGV4dHJhX3NpemUpO1xcbnNvdW5kL2NvcmUvaW5pdC5jOjE0ODpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKTtcXG5zb3VuZC9jb3JlL2luaXQuYy0xNDktc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgY2FyZF9kZXZfYXR0cl9ncm91cDtcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jPTE1MT1zdGF0aWMgdm9pZCByZWxlYXNlX2NhcmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG5zb3VuZC9jb3JlL2luaXQuYy0xNTIte1xcbnNvdW5kL2NvcmUvaW5pdC5jOjE1MzpcXHRzbmRfY2FyZF9kb19mcmVlKGRldl90b19zbmRfY2FyZChkZXYpKTtcXG5zb3VuZC9jb3JlL2luaXQuYy0xNTQtfVxcbi0tXFxuc291bmQvY29yZS9pbml0LmM9NTgzPUVYUE9SVF9TWU1CT0xfR1BMKHNuZF9jYXJkX2Rpc2Nvbm5lY3Rfc3luYyk7XFxuc291bmQvY29yZS9pbml0LmMtNTg0LVxcbnNvdW5kL2NvcmUvaW5pdC5jOjU4NTpzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxcbnNvdW5kL2NvcmUvaW5pdC5jLTU4Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjM1Ljc2MDY2MjYxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTc3Njk2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGF1ZGlvIHN5c3RlbXMgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQXVkaW8gQ2FyZCBSZXNvdXJjZSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gU28sIGl0J3Mgbm90IGEgcHVibGljIGVudHJ5IHBvaW50IHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggZGlyZWN0bHkgaW4gdGhpcyBicm9hZGVyIGNvbnRleHQgb2YgYXVkaW8gZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBzbyBpdCdzIHByb2JhYmx5IGFuIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24uIFRoYXQgbWVhbnMgbXkgYXR0ZW50aW9uIHNob3VsZCBzaGlmdCB0byB0aGUgbW9yZSBwdWJsaWMgZmFjaW5nIGNvdW50ZXJwYXJ0czogYHNuZF9jYXJkX2ZyZWVgIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byByZWFsbHkgZm9jdXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGF0IGEgaGlnaGVyIGxldmVsLiBXYWl0IGEgbWludXRlLi4uIGBzbmRfY2FyZF9mcmVlYCBpcyAqZXhwb3J0ZWQqPyBUaGF04oCZcyBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdOKAmXMgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCBkb2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhhdCByZXNvdXJjZXMgYXJlIGNvbnNpc3RlbnRseSBhbmQgY29ycmVjdGx5IG1hbmFnZWQsIGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIGNhcmQgbWlnaHQgYmUgdW5leHBlY3RlZGx5IGNsb3NlZCBvciByZW1vdmVkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBhbmQgZW5zdXJpbmcgc3RhYmxlIGF1ZGlvIHN5c3RlbSBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6MzkuNzc4NDM1NTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDMzNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvY29yZS9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic291bmQvY29yZS9pbml0LmM9NTg1PXN0YXRpYyBpbnQgc25kX2NhcmRfZG9fZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy02MTEtLyoqXFxuc291bmQvY29yZS9pbml0LmM6NjEyOiAqIHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQgLSBEaXNjb25uZWN0IHRoZSBjYXJkLCBmcmVlIGl0IGxhdGVyIGV2ZW50dWFsbHlcXG5zb3VuZC9jb3JlL2luaXQuYy02MTMtICogQGNhcmQ6IHNvdW5kY2FyZCBzdHJ1Y3R1cmVcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTYyMS0gKi9cXG5zb3VuZC9jb3JlL2luaXQuYzo2MjI6dm9pZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG5zb3VuZC9jb3JlL2luaXQuYy02MjMte1xcbi0tXFxuc291bmQvY29yZS9pbml0LmMtNjMwLX1cXG5zb3VuZC9jb3JlL2luaXQuYzo2MzE6RVhQT1JUX1NZTUJPTChzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKTtcXG5zb3VuZC9jb3JlL2luaXQuYy02MzItXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz02NDY9dm9pZCBzbmRfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTY1OS1cXHRjYXJkLVxcdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24gPSBcXHUwMDI2cmVsZWFzZWQ7XFxuc291bmQvY29yZS9pbml0LmM6NjYwOlxcdHNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoY2FyZCk7XFxuc291bmQvY29yZS9pbml0LmMtNjYxLVxcbi0tXFxuc291bmQvY29yZS9pbml0LmM9MTA4OD1FWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZpbGVfYWRkKTtcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTEwOTYtICogIHNuZF9jYXJkX2ZpbGVfYWRkKCkgZnVuY3Rpb24uXFxuc291bmQvY29yZS9pbml0LmM6MTA5NzogKiAgSWYgYWxsIGZpbGVzIGFyZSByZW1vdmVkIGFuZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKCkgd2FzXFxuc291bmQvY29yZS9pbml0LmMtMTA5OC0gKiAgY2FsbGVkIGJlZm9yZWhhbmQsIGl0IHByb2Nlc3NlcyB0aGUgcGVuZGluZyByZWxlYXNlIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjM5LjgyNTQ3NTU2OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk1MDQ3MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBBTFNBIEF1ZGlvIENhcmQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGdpdmVuIGEgdGFzayBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gQUxTQSBzb3VuZCBjYXJkcywgZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBlbnRyeXBvaW50cy4gUmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGVhZGluZyBtZSB0byBmb2N1cyBvbiBgc25kX2NhcmRfZnJlZWAsIGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AuIFRoZXNlIHNlZW0gbGlrZSBzdHJvbmcgY2FuZGlkYXRlcy4gV2FpdCBhIG1pbnV0ZSB0aG91Z2guLi4gSSByZWNhbGwgYHNuZF9jYXJkX2ZyZWVgIGlzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IGBfX3NuZF9jYXJkX3JlbGVhc2VgIHdoaWNoIGlzIGl0c2VsZiB0aWVkIHRvIHRoZSBgZGV2cmVzYCBtZWNoYW5pc20uIEhtbW0sIGlzIGBfX3NuZF9jYXJkX3JlbGVhc2VgIHN0YXRpYz8gWWVzLCBpdCBpcy5cblxuQWgsIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogd2FudHMgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBQZXJmZWN0ISBUaGlzIGNvbmZpcm1zIHRoYXQgYHNuZF9jYXJkX2ZyZWVgLCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAsIGFuZCBgc25kX2Rldm1fY2FyZF9uZXdgIGFyZSBleGFjdGx5IHdoYXQgSSBzaG91bGQgYmUgbG9va2luZyBhdC4gVGhlc2UgYXJlIHRoZSBvbmVzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLiBJIGtub3cgYFNORGAgaXMgdGhlIGdlbmVyYWwgQUxTQSBjb25maWd1cmF0aW9uIHN5bWJvbCwgc28gbGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYHNvdW5kL0tjb25maWdgIGZpbGUgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIFRoaXMgcXVpY2sgY2hlY2sgd2lsbCBnaXZlIG1lIHBlYWNlIG9mIG1pbmQgYmVmb3JlIEkgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzM6NDUuMTIwNTI4NjUyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODcxMzUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU05EJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL0tjb25maWc9NDA9c291cmNlIFxcXCJzb3VuZC9vc3MvZG1hc291bmQvS2NvbmZpZ1xcXCJcXG5zb3VuZC9LY29uZmlnLTQxLVxcbnNvdW5kL0tjb25maWc6NDI6bWVudWNvbmZpZyBTTkRcXG5zb3VuZC9LY29uZmlnLTQzLVxcdHRyaXN0YXRlIFxcXCJBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjQ1LjE2OTI0ODg2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5Mzc3MDM5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGF1ZGlvIGV4cGVydDpcblxuKipBdWRpbyBEZXZpY2UgRGlzY292ZXJ5IGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgYXVkaW8gc3lzdGVtLiBGaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBTTkRgIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZC4gVGhlbiwgSSBzZWUgYSBsaXN0IG9mIG90aGVyIGF1ZGlvIGRldmljZSB0eXBlczogYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBhbmQgYFNORF9WSVJNSURJYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIGFsbCB1c2VmdWwgY29tcG9uZW50cy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlua2luZyBhYm91dCB0aGVzZSBuZXcgcGllY2VzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdWxseSBhd2FyZSBvZiB0aGVpciBpbXBvcnRhbmNlIGFuZCBwb3NzaWJsZSBjb21wbGV4aXR5LiBIb2xkIG9uLi4uIGRvZXMgYFNORF9EVU1NWWAgYWN0dWFsbHkgcmVseSBvbiBhbnkgb3RoZXIgbW9kdWxlIG9yIHBpZWNlIG9mIHRoZSBjb3JlIHN5c3RlbT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIGJlY2F1c2UgaWYgaXQgKmRvZXMqIGRlcGVuZCBvbiBzb21ldGhpbmcsIHRoYXQgY2hhbmdlcyB0aGUgd2hvbGUgcGljdHVyZS4gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIHRoZSBoaWVyYXJjaHksIHRoZSBkZXBlbmRlbmNpZXMuIE5lZWQgdG8gZmlndXJlIHRoYXQgb3V0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzo1MS4xMDY5NTYxMjRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODg4OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTkRfRFVNTVlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZz00OT1jb25maWcgU05EX1BDU1BcXG4tLVxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy03OC1cXG5zb3VuZC9kcml2ZXJzL0tjb25maWc6Nzk6Y29uZmlnIFNORF9EVU1NWVxcbnNvdW5kL2RyaXZlcnMvS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiRHVtbXkgKC9kZXYvbnVsbCkgc291bmRjYXJkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzo1MS4xNTQ4NTEyNzJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3NTAyMTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBTTkRfRFVNTVkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBzb3VuZC9kcml2ZXJzL0tjb25maWdgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFNORF9EVU1NWWAuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgbG9naWMgdGhhdCBkZWZpbmVzIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBkdW1teSBzb3VuZCBkcml2ZXIgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGNvbW1lbnRzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgaW50ZW5kZWQgdXNlIGNhc2UuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogRG9lcyBpdCByZWx5IG9uIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBkcml2ZXIgbWlnaHQgYmUgc2VsZWN0ZWQgaW4gc29tZSBidWlsZHMgYnV0IG5vdCBpbiBvdGhlcnMuXG4qICAgKipEZWZhdWx0IFN0YXRlOioqIElzIGBTTkRfRFVNTVlgIHVzdWFsbHkgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGRldGVybWluZWQgYnkgc29tZSBvdGhlciBmYWN0b3I/IFVuZGVyc3RhbmRpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBzdHJhdGVneS5cbiogICAqKkhlbHAgVGV4dDoqKiBIb3BlZnVsbHksIHRoZXJlJ3Mgc29tZSBkZWNlbnQgaGVscCB0ZXh0LiBJIGFtIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb25hbGl0eSB0aGlzIGRyaXZlciBwcm92aWRlcywgYW5kIHRoZSB0eXBlcyBvZiBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBpcyBtZWFudCB0byBiZSBlbmFibGVkLlxuKiAgICoqTG9jYXRpb246KiogV2hlcmUgZG9lcyB0aGlzIGRyaXZlciBwaHlzaWNhbGx5IHJlc2lkZSwgYW5kIGNhbiBJIGlkZW50aWZ5IHNpbWlsYXIgZHJpdmVycyB0aGF0IHdpbGwgcG9pbnQgdG8gYSBsYXJnZXIgcmVsYXRpb25zaGlwLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgd2lsbCBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSdtIHJlYWR5IGZvciBhbnl0aGluZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjU1LjUyOTg3NzQ1MloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzb3VuZC9kcml2ZXJzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0XFxuICA3MTpcXHRcXHQgIFlvdSBkb24ndCBuZWVkIHRoaXMgZHJpdmVyIGlmIHlvdSBvbmx5IHdhbnQgeW91ciBwYy1zcGVha2VyIHRvIGJlZXAuXFxuICA3MjpcXHRcXHQgIFlvdSBkb24ndCBuZWVkIHRoaXMgZHJpdmVyIGlmIHlvdSBoYXZlIGEgdGFibGV0IHBpZXpvIGJlZXBlclxcbiAgNzM6XFx0XFx0ICBpbiB5b3VyIFBDIGluc3RlYWQgb2YgdGhlIHJlYWwgc3BlYWtlci5cXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0ICBTYXkgTiBpZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQuXFxuICA3NjpcXHRcXHQgIFNheSBNIGlmIHlvdSBkb24ndC5cXG4gIDc3OlxcdFxcdCAgU2F5IFkgb25seSBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgZG8uXFxuICA3ODpcXHRcXG4gIDc5OlxcdGNvbmZpZyBTTkRfRFVNTVlcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJEdW1teSAoL2Rldi9udWxsKSBzb3VuZGNhcmRcXFwiXFxuICA4MTpcXHRcXHRzZWxlY3QgU05EX1BDTVxcbiAgODI6XFx0XFx0aGVscFxcbiAgODM6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIGR1bW15IGRyaXZlci4gIFRoaXMgZHJpdmVyIGRvZXNcXG4gIDg0OlxcdFxcdCAgbm90aGluZywgYnV0IGVtdWxhdGVzIHZhcmlvdXMgbWl4ZXIgY29udHJvbHMgYW5kIFBDTSBkZXZpY2VzLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIFlvdSBkb24ndCBuZWVkIHRoaXMgdW5sZXNzIHlvdSdyZSB0ZXN0aW5nIHRoZSBoYXJkd2FyZSBzdXBwb3J0XFxuICA4NzpcXHRcXHQgIG9mIHByb2dyYW1zIHVzaW5nIHRoZSBBTFNBIEFQSS5cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjMzOjU1LjUyOTk2NTkxMloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk4MDA5OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgYW5kIFNORF9BTE9PUCoqXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGhlcmUgY2VudGVycyBvbiBkZXBlbmRlbmNpZXMg4oCTIG9yIHJhdGhlciwgdGhlICpsYWNrKiB0aGVyZW9mLiBXaGVuIGV2YWx1YXRpbmcgYSBuZXcgc3lzdGVtLCBwcm90b2NvbCwgb3IgcG90ZW50aWFsIGludGVncmF0aW9uLCBJIGFsd2F5cyBiZWdpbiBieSBhc3Nlc3NpbmcgaXRzIHJlbGlhbmNlIG9uIGV4dGVybmFsIGNvbXBvbmVudHMuIFwiTm8gZGVwZW5kZW5jaWVzXCIgaXMgYSBzaWduaWZpY2FudCBzdGF0ZW1lbnQuIEl0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgY2VydGFpbiBsZXZlbCBvZiBzZWxmLWNvbnRhaW5tZW50LCBwb3RlbnRpYWxseSBpbmNyZWFzZWQgcG9ydGFiaWxpdHksIG9yIG1heWJlIGV2ZW4gYSBzaW1wbGVyIGRlcGxveW1lbnQgbW9kZWwuIFRoYXQgc2ltcGxpY2l0eSBpcyBhdHRyYWN0aXZlLCBvYnZpb3VzbHkuXG5cbkhvd2V2ZXIsIHRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3Mg4oCTIFwiV2hhdCBhYm91dCBgU05EX0FMT09QYD9cIiDigJMgY3V0cyByaWdodCB0byB0aGUgaGVhcnQgb2YgcHJhY3RpY2FsIGFwcGxpY2F0aW9uLiBUaGUgbG9vcGJhY2sgc291bmQgZGV2aWNlIChgU05EX0FMT09QYCkgaXMgZnVuZGFtZW50YWwgaW4gbWFueSBhdWRpbyBzeXN0ZW1zLCBwYXJ0aWN1bGFybHkgZm9yIGNhcHR1cmluZyBhbmQgcm91dGluZyBzb3VuZCBpbnRlcm5hbGx5IHdpdGhpbiBhIHN5c3RlbS4gRXZlbiBpZiBzb21ldGhpbmcgaXMgZGVzaWduZWQgd2l0aCAqbm8gZGVjbGFyZWQqIGRlcGVuZGVuY2llcywgaXQgaXMgbGlrZWx5IHRvIGhhdmUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucy4gVGhpcyByYWlzZXMgY29uY2VybnMuIERvZXMgdGhpcyBtZWFuIGl0IHdvbid0ICp3b3JrKiB3aXRoIGBTTkRfQUxPT1BgPyBJcyBpdCBpbnRlbnRpb25hbGx5IGJ5cGFzc2luZyBpdD8gT3IgcGVyaGFwcywgdGhlIGludGVncmF0aW9uIGlzIGRlc2lnbmVkIHdpdGggYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIGxvb3BiYWNrIGRldmljZS5cblxuSSB3b3VsZCBuZWVkIHRvIGtub3cgbW9yZSBhYm91dCB0aGUgY29udGV4dC4gS25vd2luZyB0aGUgYW5zd2VyIHRvIHRoYXQgcXVlc3Rpb24gd291bGQgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byB0aGUgZmxleGliaWxpdHkgb2YgdGhlIGRlc2lnbiwgYW5kIHRvIHdoaWNoIHN5c3RlbXMgaXQgY2FuIGJlIGltcGxlbWVudGVkLiBVbHRpbWF0ZWx5LCB0aGUgcXVlc3Rpb24gc2lnbmFscyBteSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlLCBhbmQgaXQncyByZWxhdGlvbnNoaXAgd2l0aCBzdGFuZGFyZCBhdWRpbyBzZXR1cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzo1OS41Mjc5NzkzNzNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc25kLWR1bW15LlxcbiAgOTE6XFx0XFxuICA5MjpcXHRjb25maWcgU05EX0FMT09QXFxuICA5MzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBsb29wYmFjayBkcml2ZXIgKFBDTSlcXFwiXFxuICA5NDpcXHRcXHRzZWxlY3QgU05EX1BDTVxcbiAgOTU6XFx0XFx0c2VsZWN0IFNORF9USU1FUlxcbiAgOTY6XFx0XFx0aGVscFxcbiAgOTc6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQQ00gbG9vcGJhY2sgZGV2aWNlLlxcbiAgOTg6XFx0XFx0ICBUaGlzIG1vZHVsZSByZXR1cm5zIHBsYXllZCBzYW1wbGVzIGJhY2sgdG8gdGhlIHVzZXIgc3BhY2UgdXNpbmdcXG4gIDk5OlxcdFxcdCAgdGhlIHN0YW5kYXJkIEFMU0EgUENNIGRldmljZS4gVGhlIGRldmljZXMgYXJlIHJvdXRlZCAwLVxcdTAwM2UxIGFuZFxcbiAxMDA6XFx0XFx0ICAxLVxcdTAwM2UwLCB3aGVyZSBmaXJzdCBudW1iZXIgaXMgdGhlIHBsYXliYWNrIFBDTSBkZXZpY2UgYW5kIHNlY29uZFxcbiAxMDE6XFx0XFx0ICBudW1iZXIgaXMgdGhlIGNhcHR1cmUgZGV2aWNlLiBNb2R1bGUgY3JlYXRlcyB0d28gUENNIGRldmljZXMgYW5kXFxuIDEwMjpcXHRcXHQgIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHN1YnN0cmVhbXMgKHNlZSB0aGUgcGNtX3N1YnN0cmVhbXMgbW9kdWxlXFxuIDEwMzpcXHRcXHQgIHBhcmFtZXRlcikuXFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdCAgVGhlIGxvb3BiYWNrIGRldmljZSBhbGxvd3MgdGltZSBzeW5jaHJvbml6YXRpb24gd2l0aCBhbiBleHRlcm5hbFxcbiAxMDY6XFx0XFx0ICB0aW1pbmcgc291cmNlIHVzaW5nIHRoZSB0aW1lIHNoaWZ0IHVuaXZlcnNhbCBjb250cm9sICgrLTIwJVxcbiAxMDc6XFx0XFx0ICBvZiBzeXN0ZW0gdGltZSkuXFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozMzo1OS41MjgwNzE3NjRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0Mjc4MTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbmRlcGVuZGVudCBBc3Nlc3NtZW50IFx1MDAyNiBQQ00gQ29uc2lkZXJhdGlvbioqXG5cblJpZ2h0LCBubyBpbW1lZGlhdGUsIG9idmlvdXMgZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGNsZWFuIGV2YWx1YXRpb24uIEJ1dCBob2xkIG9uLCBiZWZvcmUgSSBnZXQgdG9vIGNhcnJpZWQgYXdheSB3aXRoIHRoYXQsIEkgbmVlZCB0byBjb25zaWRlciBgU05EX1BDTVRFU1RgLiBJIGtub3cgaXQncyBub3QgYSBkaXJlY3QgZGVwZW5kZW5jeSAqaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlKiwgYnV0IGl0J3MgYSBjcml0aWNhbCB0b29sIGZvciB2YWxpZGF0aW9uIGFuZCByZWdyZXNzaW9uIHRlc3RpbmcgaW4gdGhpcyBzcGFjZSwgcmlnaHQ/IElnbm9yaW5nIGl0IHdvdWxkIGJlIGZvb2xpc2gsIGV2ZW4gaWYgaXQgZG9lc24ndCBhcHBlYXIgaW4gYSBkaXJlY3QgbGlua2luZyBvciBjb21waWxhdGlvbiBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gZmFjdG9yIGluIGhvdyBJJ2xsIHVzZSBgU05EX1BDTVRFU1RgIG9yIHNpbWlsYXIgdXRpbGl0aWVzIGR1cmluZyB2YWxpZGF0aW9uLCBhcyBJIHByb2dyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzg5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MDIuNzcwODU2NTI3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNvdW5kL2RyaXZlcnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBzbmQtYWxvb3AuXFxuIDExMTpcXHRcXG4gMTEyOlxcdGNvbmZpZyBTTkRfUENNVEVTVFxcbiAxMTM6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgUENNIHRlc3QgZHJpdmVyXFxcIlxcbiAxMTQ6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbiAxMTU6XFx0XFx0c2VsZWN0IFNORF9QQ01cXG4gMTE2OlxcdFxcdGhlbHBcXG4gMTE3OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgVmlydHVhbCBQQ00gdGVzdCBkcml2ZXIuXFxuIDExODpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGFpbWVkIGF0IGV4dGVuZGVkIHRlc3Rpbmcgb2YgdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnNcXG4gMTE5OlxcdFxcdCAgd2hpY2ggdXNlIHRoZSBBTFNBIEFQSSwgYXMgd2VsbCBhcyB0aGUgUENNIG1pZGRsZSBsYXllciB0ZXN0aW5nLlxcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHQgIEl0IGNhbiBnZW5lcmF0ZSByYW5kb20gb3IgcGF0dGVybi1iYXNlZCBkYXRhIGludG8gdGhlIGNhcHR1cmUgc3RyZWFtLFxcbiAxMjI6XFx0XFx0ICBjaGVjayB0aGUgcGxheWJhY2sgc3RyZWFtIGZvciBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBwYXR0ZXJuLCBpbmplY3RcXG4gMTIzOlxcdFxcdCAgdGltZSBkZWxheXMgZHVyaW5nIGNhcHR1cmUvcGxheWJhY2ssIHJlZGVmaW5lIHRoZSBSRVNFVCBpb2N0bCBvcGVyYXRpb25cXG4gMTI0OlxcdFxcdCAgdG8gcGVyZm9ybSB0aGUgUENNIG1pZGRsZSBsYXllciB0ZXN0aW5nIGFuZCBpbmplY3QgZXJyb3JzIGR1cmluZyB0aGVcXG4gMTI1OlxcdFxcdCAgUENNIGNhbGxiYWNrcy4gSXQgc3VwcG9ydHMgYm90aCBpbnRlcmxlYXZlZCBhbmQgbm9uLWludGVybGVhdmVkIGFjY2Vzc1xcbiAxMjY6XFx0XFx0ICBtb2Rlcy4gWW91IGNhbiBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IGluIHRoZSAnYWxzYSdcXG4gMTI3OlxcdFxcdCAgc2VsZnRlc3RzIGZvbGRlci5cXG4gMTI4OlxcdFxcbiAxMjk6XFx0Y29uZmlnIFNORF9WSVJNSURJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjAyLjc3MDk0NjEyN1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjI3MjIxODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgQUxTQSBLZXJuZWwgTW9kdWxlIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IGBTTkRfUENNVEVTVGAg4oCTIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgbW9kdWxlIHJlcXVpcmVzIGBERUJVR19GU2AuIFRoYXQncyBub3QgdW5leHBlY3RlZDsgaXQgbWFrZXMgc2Vuc2UgZm9yIHRlc3RpbmcgdXRpbGl0aWVzIHRvIHVzZSB0aGUgZGVidWdnaW5nIGZpbGUgc3lzdGVtLiBCdXQsIGl0IGdvdCBtZSB0aGlua2luZy4uLiB3aGF0J3MgdGhlIGRlcGVuZGVuY3kgc2l0dWF0aW9uIHdpdGggYFNORF9WSVJNSURJYD8gSSB3b25kZXIgaWYgaXQgaGFzIGFueSBzaW1pbGFyIHJlcXVpcmVtZW50cywgb3IgaWYgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgc2VsZi1jb250YWluZWQuIE5lZWQgdG8gZHJpbGwgZG93biBvbiB0aGF0IG9uZSBhbmQgY2hlY2sgaXRzIGNvbmZpZyBvcHRpb25zIGFuZCBhbnkgcG90ZW50aWFsIHNoYXJlZCBjb2RlLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaWYgYFZJUk1JRElgIGlzIGFub3RoZXIgY2FuZGlkYXRlIHRvIGJlIHB1bGxlZCBpbiBjb25kaXRpb25hbGx5IG9yIGlmIGl0IGlzIGluZGVwZW5kZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MDcuMzk4MTcxMjNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic291bmQvZHJpdmVycy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyOTpcXHRjb25maWcgU05EX1ZJUk1JRElcXG4gMTMwOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIE1JREkgc291bmRjYXJkXFxcIlxcbiAxMzE6XFx0XFx0ZGVwZW5kcyBvbiBTTkRfU0VRVUVOQ0VSXFxuIDEzMjpcXHRcXHRzZWxlY3QgU05EX1RJTUVSXFxuIDEzMzpcXHRcXHRzZWxlY3QgU05EX1JBV01JRElcXG4gMTM0OlxcdFxcdHNlbGVjdCBTTkRfU0VRX1ZJUk1JRElcXG4gMTM1OlxcdFxcdHNlbGVjdCBTTkRfU0VRX01JRElfRVZFTlRcXG4gMTM2OlxcdFxcdGhlbHBcXG4gMTM3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHRoZSB2aXJ0dWFsIE1JREkgZHJpdmVyLiAgVGhpcyBkcml2ZXJcXG4gMTM4OlxcdFxcdCAgYWxsb3dzIHRvIGNvbm5lY3QgYXBwbGljYXRpb25zIHVzaW5nIHJhdyBNSURJIGRldmljZXMgdG9cXG4gMTM5OlxcdFxcdCAgc2VxdWVuY2VyIGNsaWVudHMuXFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBNSURJIGlzLCBzYXkgTiBoZXJlLlxcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTQ0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc25kLXZpcm1pZGkuXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBTTkRfTVRQQVZcXG4gMTQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJNT1RVIE1pZGlUaW1lUGllY2UgQVYgbXVsdGlwb3J0IE1JRElcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT1BPUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MDcuMzk4MjU5NDE5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjc3NjMwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgc29tZSBzb3VuZCBkcml2ZXJzIHRvIHNlZSBpZiBJIGNhbiBzaGFrZSBsb29zZSBhbnkgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLiBgU05EX1ZJUk1JRElgIGlzIHRoZSBmaXJzdCBvbmUgdGhhdCBqdW1wcyBvdXQsIGJ1dCB0aGF0J3MgZGVwZW5kZW50IG9uIGBTTkRfU0VRVUVOQ0VSYCwgc28gSSdsbCBuZWVkIHRvIGluY2x1ZGUgYm90aCBvZiB0aGVtLiBMZXQncyBzdGFydCB3aXRoIGEgYmFzZSBjb25maWd1cmF0aW9uOiBgU05EYCwgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBgREVCVUdfRlNgLCBgU05EX1ZJUk1JRElgLCBhbmQgYFNORF9TRVFVRU5DRVJgIHRvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5IYW5nIG9uLCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgYFNORF9VU0JfQVVESU9gIG1pZ2h0IGJlIGEgZ29vZCBhZGRpdGlvbiBhcyB3ZWxsLiBJIHJlY2FsbCB0aGF0IGl0J3MgZ290IHNvbWUgZXJyb3IgcGF0aHMgdGhhdCB1dGlsaXplIGBzbmRfY2FyZF9mcmVlYCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBhcmVhIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nLiBQbHVzLCBVU0IgaXMgYSBwcmV0dHkgcmljaCBhdHRhY2sgc3VyZmFjZS4gWWVhaCwgbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgU05EX1VTQl9BVURJT2AgYW5kIG1ha2Ugc3VyZSBpdCdzIHVwIHRvIHNudWZmIGZvciB0aGlzIGV4ZXJjaXNlLiBJdCdzIHByb2JhYmx5IHdvcnRoIHRoZSBlZmZvcnQgdG8gYWRkIGl0IHRvIHRoZSBtaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MTIuNjY2MDI1OTEzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQyMTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU05EX1VTQl9BVURJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzb3VuZC91c2IvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzb3VuZC91c2IvS2NvbmZpZz0xMT1pZiBTTkRfVVNCIFxcdTAwMjZcXHUwMDI2IFVTQlxcbnNvdW5kL3VzYi9LY29uZmlnLTEyLVxcbnNvdW5kL3VzYi9LY29uZmlnOjEzOmNvbmZpZyBTTkRfVVNCX0FVRElPXFxuc291bmQvdXNiL0tjb25maWctMTQtXFx0dHJpc3RhdGUgXFxcIlVTQiBBdWRpby9NSURJIGRyaXZlclxcXCJcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnLTI3LVxcbnNvdW5kL3VzYi9LY29uZmlnOjI4OmNvbmZpZyBTTkRfVVNCX0FVRElPX01JRElfVjJcXG5zb3VuZC91c2IvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJNSURJIDIuMCBzdXBwb3J0IGJ5IFVTQiBBdWRpbyBkcml2ZXJcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy0zNy1cXG5zb3VuZC91c2IvS2NvbmZpZzozODpjb25maWcgU05EX1VTQl9BVURJT19VU0VfTUVESUFfQ09OVFJPTExFUlxcbnNvdW5kL3VzYi9LY29uZmlnLTM5LVxcdGJvb2xcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnPTE3OD1jb25maWcgU05EX0JDRDIwMDBcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnLTE5MC1cXG5zb3VuZC91c2IvS2NvbmZpZzoxOTE6Y29uZmlnIFNORF9VU0JfQVVESU9fUU1JXFxuc291bmQvdXNiL0tjb25maWctMTkyLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBBdWRpbyBPZmZsb2FkIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MTIuNzExNDU0MjgyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjIyMzUxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRlcGVuZGVuY3kgQW5hbHlzaXM6IEF1ZGlvIE92ZXIgVVNCKipcblxuT2theSwgc28gYFNORF9VU0JfQVVESU9gLi4uIHRoYXQncyBvdXIgYXVkaW8gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgVVNCIGRldmljZXMsIHJpZ2h0PyBNYWtlcyBzZW5zZS4gTm93LCBiZWZvcmUgSSBldmVuIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mICp0aGF0KiBwYXJ0aWN1bGFyIGRyaXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25hbCBkZXBlbmRlbmNpZXMuIFRoZSB0ZXh0IGNsZWFybHkgc3RhdGVzIHRoYXQgYFNORF9VU0JfQVVESU9gIGlzIGJ1aWx0IHVwb24gYm90aCBgU05EX1VTQmAgYW5kIGBVU0JgLiBUaGF0IHRlbGxzIG1lIEkgY2FuJ3QgZXZlbiBiZWdpbiB0byB0cm91Ymxlc2hvb3Qgb3IgY29uZmlndXJlIHRoZSBhdWRpbyBzaWRlIHVudGlsIEkgdmVyaWZ5IHRoZSBsb3dlci1sZXZlbCBVU0IgYW5kIGdlbmVyaWMgVVNCIHNvdW5kIHN1cHBvcnQgYXJlIGNvcnJlY3RseSBlbmFibGVkIGFuZCBmdW5jdGlvbmluZy4gVGhlcmVmb3JlLCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYFNORF9VU0JgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGdlbmVyYWwgVVNCIHNvdW5kIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcyBleHBlY3RlZC4gTm8gcG9pbnQgaW4gbG9va2luZyBhdCB0aGUgYXVkaW8gZGV0YWlscyBpZiB0aGUgVVNCIHBsdW1iaW5nIGlzIGJyb2tlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozNDoxNi4wNzM2OTMyNTJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzMyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTkRfVVNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL3VzYi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL3VzYi9LY29uZmlnLTMtXFxuc291bmQvdXNiL0tjb25maWc6NDptZW51Y29uZmlnIFNORF9VU0JcXG5zb3VuZC91c2IvS2NvbmZpZy01LVxcdGJvb2wgXFxcIlVTQiBzb3VuZCBkZXZpY2VzXFxcIlxcbi0tXFxuc291bmQvdXNiL0tjb25maWc9MTE9aWYgU05EX1VTQiBcXHUwMDI2XFx1MDAyNiBVU0JcXG5zb3VuZC91c2IvS2NvbmZpZy0xMi1cXG5zb3VuZC91c2IvS2NvbmZpZzoxMzpjb25maWcgU05EX1VTQl9BVURJT1xcbnNvdW5kL3VzYi9LY29uZmlnLTE0LVxcdHRyaXN0YXRlIFxcXCJVU0IgQXVkaW8vTUlESSBkcml2ZXJcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy0yNy1cXG5zb3VuZC91c2IvS2NvbmZpZzoyODpjb25maWcgU05EX1VTQl9BVURJT19NSURJX1YyXFxuc291bmQvdXNiL0tjb25maWctMjktXFx0Ym9vbCBcXFwiTUlESSAyLjAgc3VwcG9ydCBieSBVU0IgQXVkaW8gZHJpdmVyXFxcIlxcbi0tXFxuc291bmQvdXNiL0tjb25maWctMzctXFxuc291bmQvdXNiL0tjb25maWc6Mzg6Y29uZmlnIFNORF9VU0JfQVVESU9fVVNFX01FRElBX0NPTlRST0xMRVJcXG5zb3VuZC91c2IvS2NvbmZpZy0zOS1cXHRib29sXFxuc291bmQvdXNiL0tjb25maWctNDAtXFxuc291bmQvdXNiL0tjb25maWc6NDE6Y29uZmlnIFNORF9VU0JfVUExMDFcXG5zb3VuZC91c2IvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiRWRpcm9sIFVBLTEwMS9VQS0xMDAwIGRyaXZlclxcXCJcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnLTUxLVxcbnNvdW5kL3VzYi9LY29uZmlnOjUyOmNvbmZpZyBTTkRfVVNCX1VTWDJZXFxuc291bmQvdXNiL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIlRhc2NhbSBVUy0xMjIsIFVTLTIyNCBhbmQgVVMtNDI4IFVTQiBkcml2ZXJcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy02NC1cXG5zb3VuZC91c2IvS2NvbmZpZzo2NTpjb25maWcgU05EX1VTQl9DQUlBUVxcbnNvdW5kL3VzYi9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJOYXRpdmUgSW5zdHJ1bWVudHMgVVNCIGF1ZGlvIGRldmljZXNcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy05MS1cXG5zb3VuZC91c2IvS2NvbmZpZzo5Mjpjb25maWcgU05EX1VTQl9DQUlBUV9JTlBVVFxcbnNvdW5kL3VzYi9LY29uZmlnLTkzLVxcdGJvb2wgXFxcImVuYWJsZSBpbnB1dCBkZXZpY2UgZm9yIGNvbnRyb2xsZXJzXFxcIlxcbi0tXFxuc291bmQvdXNiL0tjb25maWctMTA3LVxcbnNvdW5kL3VzYi9LY29uZmlnOjEwODpjb25maWcgU05EX1VTQl9VUzEyMkxcXG5zb3VuZC91c2IvS2NvbmZpZy0xMDktXFx0dHJpc3RhdGUgXFxcIlRhc2NhbSBVUy0xMjJMIFVTQiBkcml2ZXJcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy0xMTktXFxuc291bmQvdXNiL0tjb25maWc6MTIwOmNvbmZpZyBTTkRfVVNCX1VTMTQ0TUtJSVxcbnNvdW5kL3VzYi9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiVGFzY2FtIFVTLTE0NE1LSUkgVVNCIGRyaXZlclxcXCJcXG4tLVxcbnNvdW5kL3VzYi9LY29uZmlnLTEzMS1cXG5zb3VuZC91c2IvS2NvbmZpZzoxMzI6Y29uZmlnIFNORF9VU0JfNkZJUkVcXG5zb3VuZC91c2IvS2NvbmZpZy0xMzMtXFx0dHJpc3RhdGUgXFxcIlRlcnJhVGVjIERNWCA2RmlyZSBVU0JcXFwiXFxuLS1cXG5zb3VuZC91c2IvS2NvbmZpZy0xNDYtXFxuc291bmQvdXNiL0tjb25maWc6MTQ3OmNvbmZpZyBTTkRfVVNCX0hJRkFDRVxcbnNvdW5kL3VzYi9LY29uZmlnLTE0OC1cXHR0cmlzdGF0ZSBcXFwiTTJUZWNoIGhpRmFjZSBVU0ItU1BESUYgZHJpdmVyXFxcIlxcbi0tXFxuc291bmQvdXNiL0tjb25maWc9MTc4PWNvbmZpZyBTTkRfQkNEMjAwMFxcbi0tXFxuc291bmQvdXNiL0tjb25maWctMTkwLVxcbnNvdW5kL3VzYi9LY29uZmlnOjE5MTpjb25maWcgU05EX1VTQl9BVURJT19RTUlcXG5zb3VuZC91c2IvS2NvbmZpZy0xOTItXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIEF1ZGlvIE9mZmxvYWQgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozNDoxNi4xMjEwMzA3OVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI0Mjc4NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVTQiBBdWRpbyBDYXJkIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhZGRpbmcgYFNORF9VU0JgLCBgVVNCYCwgYW5kIGBTTkRfVVNCX0FVRElPYCB0byB0aGUgY29uZmlndXJhdGlvbi4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gYmFja3RyYWNrLiBUaGUgcm9vdCBjYXVzZSBvZiB0aGUgYnVnLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIGxpa2VseSByZXNpZGluZyBpbiBgc25kX2NhcmRfZG9fZnJlZWAuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGZsYWcgaXMgc2V0IHRvIHRydWUuIE15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBTTkRfVVNCX0FVRElPYCAqZG9lc24ndCogdXRpbGl6ZSBgc25kX2Rldm1fY2FyZF9uZXdgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCBtZSBxdWlja2x5IHZlcmlmeSBpZiB0aGUgYFNORF9VU0JfQVVESU9gIHBhdGggaW5kZWVkIGRldmlhdGVzIGZyb20gdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YC4gVGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZXMgaGluZ2VzIG9uIHRoaXMgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjE5Ljk0NTMxMjk5N1oiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNzI4MTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuZF9kZXZtX2NhcmRfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjE5Ljk5MDY5Mzk3NloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjkzMzE1NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVUFGIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgYFNORF9VU0JfQVVESU9gIGRyaXZlciBpcyBhIGRlYWQgZW5kLiBUaGUgVXNlLUFmdGVyLUZyZWUgKFVBRikgYnVnICp3b24ndCogdHJpZ2dlciB0aGVyZSBiZWNhdXNlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIHdpbGwgYmUgZmFsc2UuICBJZiBgY2FyZC1cdTAwM2VtYW5hZ2VkYCBpcyBmYWxzZSwgYHNuZF9jYXJkX2RvX2ZyZWVgIGp1c3QgY2FsbHMgYGtmcmVlKGNhcmQpYCwgd2hpY2ggYXZvaWRzIHRoZSByYWNlIGNvbmRpdGlvbi4gVGhlIFVBRiAqb25seSogaGFwcGVucyB3aGVuIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIHRydWUsIGJlY2F1c2UgdGhhdCBtZWFucyBgZGV2cmVzYCBmcmVlcyB0aGUgY2FyZCwgYW5kIHRoZW4gYHNuZF9jYXJkX2RvX2ZyZWVgIGFjY2Vzc2VzIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGFmdGVyIHRoZSBgY29tcGxldGVgIGNhbGwgd2FrZXMgdXAgdGhlIHRocmVhZC4gIFRoZXJlZm9yZSwgdG8gZXhwbG9pdCB0aGlzLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZm9jdXMgb24gZHJpdmVycyB0aGF0IHV0aWxpemUgYHNuZF9kZXZtX2NhcmRfbmV3YC5cblxuTXkgYXR0ZW50aW9uIG5vdyBuZWVkcyB0byBzaGlmdCB0byB0aGUgZHJpdmVycyB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLiBCYXNlZCBvbiB0aGF0LCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgYXJlIGBTTkRfRFVNTVlgLCBgU05EX0FMT09QYCwgYFNORF9QQ01URVNUYCwgYW5kIGBTTkRfVklSTUlESWAuIFRob3NlIGFyZSB0aGUgb25lcyB0byBwcmlvcml0aXplLlxuXG5MZXQgbWUgcmVjYXAgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOlxuKiAgIGBTTkRgXG4qICAgYFNORF9EVU1NWWBcbiogICBgU05EX0FMT09QYFxuKiAgIGBTTkRfUENNVEVTVGBcbiogICBgREVCVUdfRlNgXG4qICAgYFNORF9WSVJNSURJYFxuKiAgIGBTTkRfU0VRVUVOQ0VSYFxuXG5BbmQgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZDpcbiogICBgc25kX2NhcmRfZnJlZWBcbiogICBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGBcbiogICBgc25kX2Rldm1fY2FyZF9uZXdgXG5cbk5vdywgYHNuZF9jYXJkX2ZyZWVgIGFuZCBgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZGAgYXJlIGNhbGxlZCB3aGVuIHRoZSBjYXJkIGlzIGZyZWVkLCBzbyB0aGV5J3JlIGltcG9ydGFudC4gIFRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGNsZWFybHkgYHNuZF9kZXZtX2NhcmRfbmV3YC4gIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXQncyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBwcm9iZS9yZW1vdmUgZnVuY3Rpb25zIGZvciB0aGVzZSBkcml2ZXJzOiBgc25kX2R1bW15X3Byb2JlYCwgYGxvb3BiYWNrX3Byb2JlYCwgYHBjbXRzdF9wcm9iZWAsIGFuZCBgc25kX3Zpcm1pZGlfcHJvYmVgLiBIb3dldmVyLCBzeXprYWxsZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZnV6eiB0aGVzZSBpZiB0aGUgY29uZmlncyBhcmUgZW5hYmxlZCwgc28gdGhhdCdzIGhlbHBmdWwuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgc25kX2Rldm1fY2FyZF9uZXdgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDAwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjI3LjY4NDAxMzg3N1oiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5OTUyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc25kX2Rldm1fY2FyZF9uZXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic291bmQvY29yZS9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic291bmQvY29yZS9pbml0LmM9MjI3PWludCBzbmRfZGV2bV9jYXJkX25ldyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCxcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTI1MC19XFxuc291bmQvY29yZS9pbml0LmM6MjUxOkVYUE9SVF9TWU1CT0xfR1BMKHNuZF9kZXZtX2NhcmRfbmV3KTtcXG5zb3VuZC9jb3JlL2luaXQuYy0yNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjI3LjcyOTAxNDAxNVoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzUxODE3MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIEV4cG9ydCBTdGF0dXMgYW5kIEZ1bmN0aW9uIEF2YWlsYWJpbGl0eSoqXG5cblJpZ2h0LCBzbyBJJ3ZlIGNvbmZpcm1lZCBpdCdzIGV4cG9ydGVkLiBUaGF0J3MgYSBrZXkgZmlyc3Qgc3RlcDsgb3RoZXJ3aXNlLCB3ZSdyZSBub3QgZXZlbiBsb29raW5nIGF0IHRoZSByaWdodCBmdW5jdGlvbi4gTm93LCBhIGZvbGxvdy11cCBxdWVzdGlvbiBwb3BzIHVwOiBXaGF0J3MgdGhlIHN0YXR1cyBvZiBgc25kX2NhcmRfZnJlZWA/IFdlJ3JlIG9uIHRoaXMgc3BlY2lmaWMgYXVkaW8gY2FyZCBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgZXZlcnl0aGluZyBhYm91dCBpdHMgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXMgd2VsbC4gRG9lcyBgc25kX2NhcmRfZnJlZWAgZXhpc3Q/IEFuZCBtb3JlIGltcG9ydGFudGx5IGlzIGl0IGFsc28gZXhwb3J0ZWQ/IElzIGl0IHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBvdXIgY3VycmVudCBwcm9ibGVtIG9yIGludmVzdGlnYXRpb24/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgYXZhaWxhYmlsaXR5IGFuZCByZWxldmFuY2UgdG8gd2hhdCBJJ20gZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MTY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MzEuNDgwODMzODM0WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgyMTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzbmRfY2FyZF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNvdW5kL2NvcmUvaW5pdC5jPTI2ND1pbnQgc25kX2NhcmRfZnJlZV9vbl9lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQpXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy0yNzQtfVxcbnNvdW5kL2NvcmUvaW5pdC5jOjI3NTpFWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9mcmVlX29uX2Vycm9yKTtcXG5zb3VuZC9jb3JlL2luaXQuYy0yNzYtXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYz02MjI9dm9pZCBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcXG4tLVxcbnNvdW5kL2NvcmUvaW5pdC5jLTYzMC19XFxuc291bmQvY29yZS9pbml0LmM6NjMxOkVYUE9SVF9TWU1CT0woc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZCk7XFxuc291bmQvY29yZS9pbml0LmMtNjMyLVxcbi0tXFxuc291bmQvY29yZS9pbml0LmM9NjQ2PXZvaWQgc25kX2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpXFxuLS1cXG5zb3VuZC9jb3JlL2luaXQuYy02NjQtfVxcbnNvdW5kL2NvcmUvaW5pdC5jOjY2NTpFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2ZyZWUpO1xcbnNvdW5kL2NvcmUvaW5pdC5jLTY2Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6MzEuNTI2NjU5NDQzWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTA4MjM5MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgQUxTQSBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgeWVzLCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBleHBvc2VkIGFuZCBleHBvcnRhYmxlLiBJIG5lZWQgdG8gZG9jdW1lbnQgbXkgcmVhc29uaW5nIGNvbmNpc2VseS5cblxuVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgQUxTQSBjb3JlIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGluIGBzbmRfY2FyZF9kb19mcmVlYC4gVGhlIGlzc3VlIGFyaXNlcyB3aGVuIGFuIEFMU0EgY2FyZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgd2hpY2ggdXRpbGl6ZXMgYGRldnJlc2AgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBzY2VuYXJpb3MsIGBkZXZyZXNgIHRyaWdnZXJzIGBfX3NuZF9jYXJkX3JlbGVhc2VgLCBldmVudHVhbGx5IGxlYWRpbmcgdG8gYHNuZF9jYXJkX2ZyZWVgLiBUaGlzIGZ1bmN0aW9uIHdhaXRzIG9uIGEgYHJlbGVhc2VfY29tcGxldGlvbmAgZm9yIGFsbCBkZXZpY2UgcmVmZXJlbmNlcyB0byBiZSByZWxlYXNlZC4gT25jZSB0aGUgZmluYWwgcmVmZXJlbmNlIGRyb3BzLCBgc25kX2NhcmRfZG9fZnJlZWAgaXMgaW52b2tlZCwgc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLiBIZXJlJ3MgdGhlIGNhdGNoOiB0aGUgb3JpZ2luYWwgY29kZSBhY2Nlc3NlZCBgY2FyZC1cdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgb3BlbmluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBkZXZyZXNgIGNvdWxkIGZyZWUgdGhlIGNhcmQncyBtZW1vcnkgY29uY3VycmVudGx5LCByZXN1bHRpbmcgaW4gYSB1c2UtYWZ0ZXItZnJlZS5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ7IGNhY2hlIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gU2ltcGxlLCBidXQgZWZmZWN0aXZlLlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBidWcgaXMgcmVhY2hhYmxlIHRocm91Z2ggYW55IEFMU0EgZHJpdmVyIHRoYXQgdXNlcyBgc25kX2Rldm1fY2FyZF9uZXdgLCB3aGljaCBpbmNsdWRlcyB2aXJ0dWFsIGRyaXZlcnMgbGlrZSBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAsIHdoaWNoIEkga25vdyBhcmUgaGVhdmlseSB0YXJnZXRlZCBieSBzeXprYWxsZXIuIFRoYXQgbWFrZXMgdGhpcyBhIGhpZ2gtcHJpb3JpdHkgaXRlbSBmb3IgZnV6emluZyBlZmZvcnRzLlxuXG5JJ3ZlIHJldmlld2VkIHRoZSByZWxldmFudCBFbmFibGVDb25maWdzOiBgU05EYCwgYFNORF9EVU1NWWAsIGBTTkRfQUxPT1BgLCBgU05EX1BDTVRFU1RgLCBgREVCVUdfRlNgLCBgU05EX1ZJUk1JRElgLCBhbmQgYFNORF9TRVFVRU5DRVJgLlxuXG5BbmQsIGZvciB0aGUgRm9jdXNTeW1ib2xzOiBgc25kX2NhcmRfZnJlZWAsIGBzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkYCwgYW5kIGBzbmRfZGV2bV9jYXJkX25ld2AuIEFsbCB0aGUgcmlnaHQgcGllY2VzIGFyZSB0aGVyZS5cblxuU2VlbXMgbGlrZSBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMgYW5kIGEgY2xlYXIgcGF0aCBmb3IgbWl0aWdhdGlvbiBhbmQgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2NDgsIk91dHB1dFRva2VucyI6MzU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjQyLjQzNDkwMTQ5OFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzE2MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTkRcIixcbiAgICBcIlNORF9EVU1NWVwiLFxuICAgIFwiU05EX0FMT09QXCIsXG4gICAgXCJTTkRfUENNVEVTVFwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIlNORF9WSVJNSURJXCIsXG4gICAgXCJTTkRfU0VRVUVOQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic25kX2NhcmRfZnJlZVwiLFxuICAgIFwic25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZFwiLFxuICAgIFwic25kX2Rldm1fY2FyZF9uZXdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIEFMU0EgY29yZSBmcmFtZXdvcmsgKGBzbmRfY2FyZF9kb19mcmVlYCkuIFdoZW4gYW4gQUxTQSBjYXJkIGlzIGFsbG9jYXRlZCB1c2luZyBgc25kX2Rldm1fY2FyZF9uZXdgLCBpdHMgbWVtb3J5IGlzIG1hbmFnZWQgYnkgYGRldnJlc2AuIER1cmluZyBkZXZpY2UgcmVtb3ZhbCBvciBlcnJvciBwYXRocywgYGRldnJlc2AgdHJpZ2dlcnMgYHNuZF9jYXJkX2ZyZWVgLCB3aGljaCB3YWl0cyBvbiBhIGNvbXBsZXRpb24gKGByZWxlYXNlX2NvbXBsZXRpb25gKSB1bnRpbCBhbGwgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIE9uY2UgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGBzbmRfY2FyZF9kb19mcmVlYCBpcyBleGVjdXRlZCwgd2hpY2ggc2lnbmFscyB0aGUgY29tcGxldGlvbi4gVGhpcyB3YWtlcyB1cCB0aGUgd2FpdGluZyB0aHJlYWQsIGFsbG93aW5nIGBkZXZyZXNgIHRvIHByb2NlZWQgYW5kIGZyZWUgdGhlIGNhcmQncyBtZW1vcnkuIEhvd2V2ZXIsIGBzbmRfY2FyZF9kb19mcmVlYCBwcmV2aW91c2x5IGFjY2Vzc2VkIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCAqYWZ0ZXIqIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiwgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGlmIGBkZXZyZXNgIGZyZWVkIHRoZSBjYXJkIGNvbmN1cnJlbnRseS4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgY2FjaGluZyBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgaW4gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgc2lnbmFsaW5nIHRoZSBjb21wbGV0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIGFueSBBTFNBIGRyaXZlciB1dGlsaXppbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaW5jbHVkaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRyaXZlcnMgbGlrZSBgc25kLWR1bW15YCBhbmQgYHNuZC1hbG9vcGAsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU05EXCIsXG4gICAgXCJTTkRfRFVNTVlcIixcbiAgICBcIlNORF9BTE9PUFwiLFxuICAgIFwiU05EX1BDTVRFU1RcIixcbiAgICBcIkRFQlVHX0ZTXCIsXG4gICAgXCJTTkRfVklSTUlESVwiLFxuICAgIFwiU05EX1NFUVVFTkNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNuZF9jYXJkX2ZyZWVcIixcbiAgICBcInNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWRcIixcbiAgICBcInNuZF9kZXZtX2NhcmRfbmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IGluIHRoZSBBTFNBIGNvcmUgZnJhbWV3b3JrIChgc25kX2NhcmRfZG9fZnJlZWApLiBXaGVuIGFuIEFMU0EgY2FyZCBpcyBhbGxvY2F0ZWQgdXNpbmcgYHNuZF9kZXZtX2NhcmRfbmV3YCwgaXRzIG1lbW9yeSBpcyBtYW5hZ2VkIGJ5IGBkZXZyZXNgLiBEdXJpbmcgZGV2aWNlIHJlbW92YWwgb3IgZXJyb3IgcGF0aHMsIGBkZXZyZXNgIHRyaWdnZXJzIGBzbmRfY2FyZF9mcmVlYCwgd2hpY2ggd2FpdHMgb24gYSBjb21wbGV0aW9uIChgcmVsZWFzZV9jb21wbGV0aW9uYCkgdW50aWwgYWxsIGRldmljZSByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBPbmNlIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBgc25kX2NhcmRfZG9fZnJlZWAgaXMgZXhlY3V0ZWQsIHdoaWNoIHNpZ25hbHMgdGhlIGNvbXBsZXRpb24uIFRoaXMgd2FrZXMgdXAgdGhlIHdhaXRpbmcgdGhyZWFkLCBhbGxvd2luZyBgZGV2cmVzYCB0byBwcm9jZWVkIGFuZCBmcmVlIHRoZSBjYXJkJ3MgbWVtb3J5LiBIb3dldmVyLCBgc25kX2NhcmRfZG9fZnJlZWAgcHJldmlvdXNseSBhY2Nlc3NlZCBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgKmFmdGVyKiBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24sIGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBpZiBgZGV2cmVzYCBmcmVlZCB0aGUgY2FyZCBjb25jdXJyZW50bHkuIFRoZSBwYXRjaCByZXNvbHZlcyB0aGlzIGJ5IGNhY2hpbmcgYGNhcmQtXFx1MDAzZW1hbmFnZWRgIGluIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBhbnkgQUxTQSBkcml2ZXIgdXRpbGl6aW5nIGBzbmRfZGV2bV9jYXJkX25ld2AsIGluY2x1ZGluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkcml2ZXJzIGxpa2UgYHNuZC1kdW1teWAgYW5kIGBzbmQtYWxvb3BgLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozNDo0Mi41MTcyMjYwNDZaIiwiU2VxIjo2NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODg0NzQxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDozNDo0Mi41MTc4NDY0NjZaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODc4Nzg0ODE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB2dWxuZXJhYmlsaXR5IGluIGBzbmRfY2FyZF9kb19mcmVlYC4gQnkgc2F2aW5nIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCB0byBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSBjYWxsaW5nIGBjb21wbGV0ZShjYXJkLVxcdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCBpcyBjaGVja2VkLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0YzYxMmEwNDQ4MjA1OGZhYTFiMGIwOTQ4MGZjZjk4NzFkYjQwZTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDozMTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmNcbmluZGV4IDU2ZGRlNWJkNzNjNGUuLjU3NzMzODUyNjI0YTcgMTAwNjQ0XG4tLS0gYS9zb3VuZC9jb3JlL2luaXQuY1xuKysrIGIvc291bmQvY29yZS9pbml0LmNcbkBAIC01ODQsNiArNTg0LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoc25kX2NhcmRfZGlzY29ubmVjdF9zeW5jKTtcbiBcbiBzdGF0aWMgaW50IHNuZF9jYXJkX2RvX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKVxuIHtcbitcdGJvb2wgbWFuYWdlZCA9IGNhcmQtXHUwMDNlbWFuYWdlZDtcbitcbiBcdGNhcmQtXHUwMDNlcmVsZWFzaW5nID0gdHJ1ZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfU05EX01JWEVSX09TUylcbiBcdGlmIChzbmRfbWl4ZXJfb3NzX25vdGlmeV9jYWxsYmFjaylcbkBAIC02MDEsNyArNjAzLDcgQEAgc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZClcbiBcdH1cbiBcdGlmIChjYXJkLVx1MDAzZXJlbGVhc2VfY29tcGxldGlvbilcbiBcdFx0Y29tcGxldGUoY2FyZC1cdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pO1xuLVx0aWYgKCFjYXJkLVx1MDAzZW1hbmFnZWQpXG4rXHRpZiAoIW1hbmFnZWQpXG4gXHRcdGtmcmVlKGNhcmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6MzQ6NDIuNTE3ODUyMzA2WiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3ODc4MDM4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU291bmQgQ2FyZCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGBzb3VuZC9jb3JlL2luaXQuY2AgdGhhdCdzIHR3ZWFraW5nIGBzbmRfY2FyZF9kb19mcmVlYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSwgYG1hbmFnZWRgLCBhbmQgY29waWVzIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGludG8gaXQgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFRoZW4sIGxhdGVyLCB0aGUgY29kZSB1c2VzIGBtYW5hZ2VkYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIGBjYXJkLVx1MDAzZW1hbmFnZWRgIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBga2ZyZWUoY2FyZClgLlxuXG5Mb29raW5nIGNsb3NlciwgdGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgKFVBRikgZml4LCBhbmQgdGhhdCdzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYnV0IGl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB3aGF0IHdlIGFyZSBmaXhpbmcuIFRoZSBsb2dpYyBoZXJlIGlzIHRoYXQgaWYgYGNhcmQtXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uYCBpcyBjb21wbGV0ZWQsIGFub3RoZXIgdGhyZWFkICptaWdodCogYXR0ZW1wdCB0byBmcmVlIHRoZSBgY2FyZGAsIG9yIHRoZSBtZW1vcnkgYmFja2luZyBpdCBpZiBpdCBpcyBtYW5hZ2VkLCBldmVuIHRob3VnaCB0aGUgY2FyZCBpcyBzdGlsbCBpbiB1c2UuIElmIGBjYXJkLVx1MDAzZW1hbmFnZWRgIGlzIHRydWUsIHRoZSBjYXJkIGlzIGZyZWVkIGJ5IGRldnJlcy4gVGhhdCBtZWFucyBhIHRocmVhZCBjb3VsZCBwcm9jZWVkIGFmdGVyIHRoZSBjb21wbGV0aW9uIHNpZ25hbCBhbmQgdGhlbiBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoZSBkZXZyZXMgZnJlZS4gVGhpcyBwYXRjaCBlc3NlbnRpYWxseSBzZXJpYWxpemVzIHRoZSBhY2Nlc3MgdG8gYGNhcmQtXHUwMDNlbWFuYWdlZGAgYnkgY29weWluZyBpdCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHRoZSB2dWxuZXJhYmxlIHNlY3Rpb24gaXMgZW50ZXJlZC4gSWYgdGhlIGNhcmQgaXMgbWFuYWdlZCwgdGhlIGRldnJlcyBjbGVhbnVwIGlzIHRyaWdnZXJlZC4gU28sIGJ5IHRoZSB0aW1lIHRoZSBjb2RlIGdldHMgdG8gYGlmICghY2FyZC1cdTAwM2VtYW5hZ2VkKWAsIHRoZSBtZW1vcnkgYmFja2luZyBgY2FyZGAgbWlnaHQgYWxyZWFkeSBiZSBnb25lLiAgQnkgdXNpbmcgdGhlIGxvY2FsIGBtYW5hZ2VkYCB2YXJpYWJsZSwgd2UncmUgZW5zdXJpbmcgdGhhdCB3ZSdyZSBtYWtpbmcgdGhlIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdG8gZnJlZSB0aGUgY2FyZCBiYXNlZCBvbiBhIHZhbHVlIHRoYXQncyBubyBsb25nZXIgdnVsbmVyYWJsZSB0byBjaGFuZ2VzIGJ5IGFub3RoZXIgdGhyZWFkLlxuXG5UaGUgcGF0Y2ggc2VlbXMgc291bmQgaW4gcmVzb2x2aW5nIHRoaXMgaXNzdWUsIGJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBhc2sgbXlzZWxmIGlmIHRoaXMgZml4IGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFNpbmNlIHRoZSBwYXRjaCBvbmx5IHNhdmVzIGEgYm9vbGVhbiwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQsIHRvIGEgbG9jYWwgdmFyaWFibGUgdG8gYXZvaWQgYSBVQUYsIEkgZG9uJ3Qgc2VlIGFueSByaXNrIGhlcmUuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgdGhhdCdzIG5vdCB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBhZGRyZXNzZWQgYnkgS0FTQU4uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGV4cG9zdXJlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgaXQgc2ltcGx5IHNhdmVzIHRoZSB2YWx1ZSBvZiBhIGJvb2xlYW4gZmllbGQgdG8gYXZvaWQgYSBVQUYgY29uZGl0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDUzLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjM0OjUxLjMwNTY2MTAzNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSB2dWxuZXJhYmlsaXR5IGluIGBzbmRfY2FyZF9kb19mcmVlYC4gQnkgc2F2aW5nIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCB0byBhIGxvY2FsIHZhcmlhYmxlIGJlZm9yZSBjYWxsaW5nIGBjb21wbGV0ZShjYXJkLVxcdTAwM2VyZWxlYXNlX2NvbXBsZXRpb24pYCwgaXQgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNhcmRgIHN0cnVjdHVyZSBjb3VsZCBiZSBmcmVlZCBieSBhbm90aGVyIHRocmVhZCAoZS5nLiwgdmlhIGRldnJlcykgYmVmb3JlIGBjYXJkLVxcdTAwM2VtYW5hZ2VkYCBpcyBjaGVja2VkLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eSBpbiBgc25kX2NhcmRfZG9fZnJlZWAuIEJ5IHNhdmluZyBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSBiZWZvcmUgY2FsbGluZyBgY29tcGxldGUoY2FyZC1cXHUwMDNlcmVsZWFzZV9jb21wbGV0aW9uKWAsIGl0IHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGBjYXJkYCBzdHJ1Y3R1cmUgY291bGQgYmUgZnJlZWQgYnkgYW5vdGhlciB0aHJlYWQgKGUuZy4sIHZpYSBkZXZyZXMpIGJlZm9yZSBgY2FyZC1cXHUwMDNlbWFuYWdlZGAgaXMgY2hlY2tlZC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[1] Phase: Succeeded StartedAt: 2026-08-13 20:35:02 +0000 UTC FinishedAt: 2026-08-13 20:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 20:35:02 +0000 UTC FinishedAt: 2026-08-13 20:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2] Phase: Succeeded StartedAt: 2026-08-13 20:35:02 +0000 UTC FinishedAt: 2026-08-14 00:26:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 20:35:02 +0000 UTC FinishedAt: 2026-08-14 00:26:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 20:35:02 +0000 UTC FinishedAt: 2026-08-13 20:35:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 20:35:02 +0000 UTC FinishedAt: 2026-08-13 20:35:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowx97vd/series-workflowx97vd-convert-artifact-999512141/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 20:35:13 +0000 UTC FinishedAt: 2026-08-13 20:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 20:35:13 +0000 UTC FinishedAt: 2026-08-13 20:51: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:*1baa3af6-609f-498f-b732-bfcb1675a443,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-workflowx97vd/series-workflowx97vd-convert-artifact-999512141/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": "8c9a1687-924e-44dd-818d-8bf893d028d8", "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-workflowx97vd/series-workflowx97vd-build-action-3179780291/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 20:35:13 +0000 UTC FinishedAt: 2026-08-13 20:51:49 +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:*1baa3af6-609f-498f-b732-bfcb1675a443,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-workflowx97vd/series-workflowx97vd-convert-artifact-999512141/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": "8c9a1687-924e-44dd-818d-8bf893d028d8", "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-workflowx97vd/series-workflowx97vd-build-action-3179780291/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 20:51:59 +0000 UTC FinishedAt: 2026-08-13 20:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 20:51:59 +0000 UTC FinishedAt: 2026-08-13 20:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 20:51:59 +0000 UTC FinishedAt: 2026-08-13 20:52:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 20:51:59 +0000 UTC FinishedAt: 2026-08-13 20:52:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowx97vd/series-workflowx97vd-convert-artifact-2996643240/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 20:52:09 +0000 UTC FinishedAt: 2026-08-13 20:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 20:52:09 +0000 UTC FinishedAt: 2026-08-13 20:54:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8c9a1687-924e-44dd-818d-8bf893d028d8,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-workflowx97vd/series-workflowx97vd-build-action-3179780291/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-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 20:54:40 +0000 UTC FinishedAt: 2026-08-13 20:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 20:54:40 +0000 UTC FinishedAt: 2026-08-13 20:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 20:54:40 +0000 UTC FinishedAt: 2026-08-13 21:14:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 20:54:40 +0000 UTC FinishedAt: 2026-08-13 21:14: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:*1baa3af6-609f-498f-b732-bfcb1675a443,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-workflowx97vd/series-workflowx97vd-convert-artifact-2996643240/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": "26fee423-019a-4fc0-81ec-9801da6a48d2", "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-workflowx97vd/series-workflowx97vd-build-action-1642472276/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 20:54:40 +0000 UTC FinishedAt: 2026-08-13 21:14: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:*1baa3af6-609f-498f-b732-bfcb1675a443,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-workflowx97vd/series-workflowx97vd-convert-artifact-2996643240/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": "26fee423-019a-4fc0-81ec-9801da6a48d2", "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-workflowx97vd/series-workflowx97vd-build-action-1642472276/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 21:14:41 +0000 UTC FinishedAt: 2026-08-13 21:14:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 21:14:41 +0000 UTC FinishedAt: 2026-08-13 21:14:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 21:14:41 +0000 UTC FinishedAt: 2026-08-13 21:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 21:14:41 +0000 UTC FinishedAt: 2026-08-13 21:16:38 +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:*26fee423-019a-4fc0-81ec-9801da6a48d2,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-workflowx97vd/series-workflowx97vd-build-action-1642472276/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-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 21:16:48 +0000 UTC FinishedAt: 2026-08-14 00:26:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 21:16:48 +0000 UTC FinishedAt: 2026-08-14 00:26:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},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:*8c9a1687-924e-44dd-818d-8bf893d028d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*26fee423-019a-4fc0-81ec-9801da6a48d2,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-workflowx97vd/series-workflowx97vd-build-action-3179780291/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-workflowx97vd/series-workflowx97vd-build-action-1642472276/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 21:16:48 +0000 UTC FinishedAt: 2026-08-13 21:16:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 21:16:48 +0000 UTC FinishedAt: 2026-08-13 21:16:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},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-workflowx97vd/series-workflowx97vd-convert-artifact-1441985249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 21:16:48 +0000 UTC FinishedAt: 2026-08-13 21:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 21:16:48 +0000 UTC FinishedAt: 2026-08-13 21:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 21:16:48 +0000 UTC FinishedAt: 2026-08-13 21:16:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 21:16:58 +0000 UTC FinishedAt: 2026-08-14 00:26:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx97vd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snd_card_free","snd_card_free_when_closed","snd_devm_card_new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SND","SND_DUMMY","SND_ALOOP","SND_PCMTEST","DEBUG_FS","SND_VIRMIDI","SND_SEQUENCER"],"series_id":"c98ddf48-5cfb-4f6e-b682-9716e4af7a41","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 21:16:58 +0000 UTC FinishedAt: 2026-08-14 00:26:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8c9a1687-924e-44dd-818d-8bf893d028d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*26fee423-019a-4fc0-81ec-9801da6a48d2,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-workflowx97vd/series-workflowx97vd-build-action-3179780291/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-workflowx97vd/series-workflowx97vd-build-action-1642472276/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-workflowx97vd/series-workflowx97vd-convert-artifact-1441985249/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,}