Name: series-workflowl6lpp Phase: Succeeded StartedAt: 2026-08-11 07:28:17 +0000 UTC FinishedAt: 2026-08-11 11:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[0] Phase: Succeeded StartedAt: 2026-08-11 07:28:17 +0000 UTC FinishedAt: 2026-08-11 07:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 07:28:17 +0000 UTC FinishedAt: 2026-08-11 07:32:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d08ff75a47a3e7e2ab45a3bcab6723b4d906422", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EROFS_FS_BACKED_BY_FILE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d08ff75a47a3e7e2ab45a3bcab6723b4d906422", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EROFS_FS_BACKED_BY_FILE" ], "series_id": "ef6239d3-2a9e-451d-a517-251a95a039b2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "erofs_fc_test_file_super", "erofs_fc_get_tree_file", "get_tree_super" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2dldF90cmVlX2ZpbGUmIzM0OywKICAgICYjMzQ7Z2V0X3RyZWVfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIEVST0ZTIGZpbGUtYmFja2VkIG1vdW50cyBhbmQgYWRkcyBsb2dpYyB0byBzaGFyZSBzdXBlcmJsb2NrcyB3aGVuIGNvbXBhdGlibGUgb3B0aW9ucyBhcmUgdXNlZC4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgdXNlcyBgbWVtY21wYCB0byBjb21wYXJlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIFdoaWxlIHRoaXMgc3RydWN0IGNvbnRhaW5zIHBhZGRpbmcsIGluc3RhbmNlcyBvZiBpdCBhcmUgZW1iZWRkZWQgd2l0aGluIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AsIHdoaWNoIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCAoaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGApLiBDb25zZXF1ZW50bHksIHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIHJlbWFpbnMgemVybywgbWVhbmluZyBgbWVtY21wYCBzYWZlbHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhvdXQgdHJpZ2dlcmluZyBLTVNBTiBvciBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBzaGFyaW5nKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBzdXBlcmJsb2NrIHNoYXJpbmcgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBtb3VudCBsb2dpYyBmb3IgRVJPRlMgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjFmZTQ0NmFmMzVkZTkzMTdmYzQ2MjIyZWYyNDBkZjA2OThlNzAzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjMwOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbmluZGV4IGQzMDFkOWFjOTQ2YTkuLjQ5YzRlN2RiYzVkNjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbkBAIC0xMzksNiAmIzQzOzEzOSw5IEBAIGlub2RlX3NoYXJlICAgICAgICAgICAgRW5hYmxlIGlub2RlIHBhZ2Ugc2hhcmluZyBmb3IgdGhpcyBmaWxlc3lzdGVtLiAgSW5vZGVzIHdpXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGNhY2hlLlxuIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBhcyBhbiBhbHJlYWR5LW9wZW5lZCBmaWxlIGRlc2NyaXB0b3IuXG4mIzQzO3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWVcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGVcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXG4gPT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiBGaWxlLWJhY2tlZCBtb3VudHNcbkBAIC0xNTYsNiAmIzQzOzE1OSwxMSBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXRcbiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoXG4gaW5zdGVhZC5cbiBcbiYjNDM7V2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCBhbmQgdGhlIHNhbWUgYmFja2luZyBmaWxlIChpZGVudGlmaWVkXG4mIzQzO2J5IGlub2RlIGFuZCBmc29mZnNldCkgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUgbW91bnRcbiYjNDM7b3B0aW9ucywgdGhlIGtlcm5lbCByZXVzZXMgdGhlIGV4aXN0aW5nIHN1cGVyYmxvY2sgaW5zdGVhZCBvZiBjcmVhdGluZyBhXG4mIzQzO25ldyBvbmUuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy5cbiYjNDM7XG4gU3lzZnMgRW50cmllc1xuID09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbkBAIC0xNTYsNiAmIzQzOzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlx0XHQweDAwMDAwMDgwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cdFx0MHgwMDAwMDEwMFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcdFx0MHgwMDAwMDIwMFxuJiM0MzsjZGVmaW5lIEVST0ZTX01PVU5UX1NVUEVSQkxPQ0tfU0hBUkVcdDB4MDAwMDA0MDBcbiBcbiAjZGVmaW5lIGNsZWFyX29wdChvcHQsIG9wdGlvbilcdCgob3B0KS1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pXG4gI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbilcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xuaW5kZXggZGRjOTcxOWU2ZDE4ZS4uNDU3ZTA2NzQ0N2Q1ZiAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbkBAIC0zODYsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIGVudW0ge1xuIFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxuIFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcbi1cdE9wdF9zb3VyY2UsXG4mIzQzO1x0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XG5AQCAtNDE1LDYgJiM0Mzs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbiBcdGZzcGFyYW1fdTY0KFwmIzM0O2Zzb2Zmc2V0XCYjMzQ7LFx0XHRcdE9wdF9mc29mZnNldCksXG4gXHRmc3BhcmFtX2ZsYWcoXCYjMzQ7aW5vZGVfc2hhcmVcJiMzNDssXHRcdE9wdF9pbm9kZV9zaGFyZSksXG4gXHRmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKFwmIzM0O3NvdXJjZVwmIzM0OyxcdE9wdF9zb3VyY2UpLFxuJiM0MztcdGZzcGFyYW1fZmxhZyhcJiMzNDtzdXBlcmJsb2NrX3NoYXJlXCYjMzQ7LFx0T3B0X3N1cGVyYmxvY2tfc2hhcmUpLFxuIFx0e31cbiB9O1xuIFxuQEAgLTU2MCw2ICYjNDM7NTYxLDEyIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRlbHNlXG4gXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XG4mIzQzO1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcbiYjNDM7XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcJiMzNDssIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBPcHRfc291cmNlOlxuIFx0XHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XG4gXHR9XG5AQCAtNjUyLDYgJiM0Mzs2NTksMTcgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuJiM0MztcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG4mIzQzO1x0XHRlcnJvcmZjKGZjLCBcJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdC8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi9cbiYjNDM7XHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNiaS1cdTAwM2VkZXZzLVx1MDAzZWV4dHJhX2RldmljZXMpIHtcbiYjNDM7XHRcdGVycm9yZmMoZmMsIFwmIzM0O3N1cGVyYmxvY2tfc2hhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRyYSBkZXZpY2VzXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdHNiaS1cdTAwM2VibGtzemJpdHMgPSBQQUdFX1NISUZUO1xuIFx0aWYgKCFzYi1cdTAwM2VzX2JkZXYpIHtcbkBAIC03NzksNiAmIzQzOzc5NywzNiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXRcbiYjNDM7XHQgKiBoYXMgU1VQRVJCTE9DS19TSEFSRSBzZXQsIHNvIHRoYXQgdGhlIG1lbWNtcCBsYXRlciBlbnN1cmVzXG4mIzQzO1x0ICogbmV3X3NiaSBhbHNvIGlzIHNoYXJlYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Ioc2IpO1xuJiM0MztcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19pZmxhZ3MgXHUwMDI2IFNCX0lfUkVUSVJFRClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghc2JpLVx1MDAzZWRpZjAuZmlsZSB8fCAhbmV3X3NiaS1cdTAwM2VkaWYwLmZpbGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXHUwMDNlZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktXHUwMDNlZGlmMC5maWxlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgc2JpLVx1MDAzZWRpZjAuZnNvZmYgPT0gbmV3X3NiaS1cdTAwM2VkaWYwLmZzb2ZmIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAhbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbiYjNDM7XHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4gXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuQEAgLTc5NCw3ICYjNDM7ODQyLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7c291cmNlIGlzIHVuc3VwcG9ydGVkXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuLVx0XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuJiM0MztcdFx0cmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpO1xuIFx0fVxuIFxuIFx0cmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlcixcbkBAIC04MTIsNyAmIzQzOzg2MCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0XHRpZiAoU19JU1JFRyhmaWxlX2lub2RlKHNiaS1cdTAwM2VkaWYwLmZpbGUpLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBzYmktXHUwMDNlZGlmMC5maWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VyZWFkX2ZvbGlvKVxuLVx0XHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4mIzQzO1x0XHRcdHJldHVybiBlcm9mc19mY19nZXRfdHJlZV9maWxlKGZjKTtcbiBcdH1cbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTgyNSw2ICYjNDM7ODczLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0REJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTtcbiBcbiYjNDM7XHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cbiYjNDM7XHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiBcdGlmIChuZXdfc2JpLVx1MDAzZWRvbWFpbl9pZClcbiBcdFx0ZXJvZnNfaW5mbyhzYiwgXCYjMzQ7aWdub3JpbmcgcmVjb25maWd1cmF0aW9uIGZvciBkb21haW5faWQuXCYjMzQ7KTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmNcbkBAIC0xMzg5LDcgJiM0MzsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiYjNDM7LyoqXG4mIzQzOyAqIGdldF90cmVlX3N1cGVyIC0gR2V0IGEgc3VwZXJibG9jaywgb3B0aW9uYWxseSBzaGFyaW5nIGFuIGV4aXN0aW5nIG9uZVxuJiM0MzsgKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVyc1xuJiM0MzsgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTFxuJiM0MzsgKiBAZmlsbF9zdXBlcjogSGVscGVyIHRvIGluaXRpYWxpc2UgYSBuZXcgc3VwZXJibG9ja1xuJiM0MzsgKlxuJiM0MzsgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXNcbiYjNDM7ICogcmV1c2VkOyBvdGhlcndpc2UgYSBuZXcgYW5vbnltb3VzIHN1cGVyYmxvY2sgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgd2l0aFxuJiM0MzsgKiBAZmlsbF9zdXBlci4gIFBhc3NpbmcgTlVMTCBmb3IgQHRlc3QgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgc3VwZXJibG9jay5cbiYjNDM7ICovXG4mIzQzO2ludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcbiBcdFx0aW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbkBAIC0xNDE2LDEyICYjNDM7MTQyNiwxMyBAQCBzdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpO1xuIFxuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuIHtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTtcbiBcbkBAIC0xNDI5LDcgJiM0MzsxNDQwLDcgQEAgaW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuIHtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7XG4mIzQzO1x0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc2luZ2xlKTtcbiBcbkBAIC0xNDM5LDcgJiM0MzsxNDUwLDcgQEAgaW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0dm9pZCAqa2V5KVxuIHtcbiBcdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGtleTtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5pbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5AQCAtMTUwLDYgJiM0MzsxNTAsMTAgQEAgZXh0ZXJuIGludCB2ZnNfcGFyc2VfZnNfcGFyYW1fc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xuIGV4dGVybiB2b2lkIGZjX2Ryb3BfbG9ja2VkKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4gXG4mIzQzO2V4dGVybiBpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuJiM0MztcdFx0XHQgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuJiM0MztcdFx0XHQgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpO1xuIGV4dGVybiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZSYjMzQ7LAogICAgJiMzNDtnZXRfdHJlZV9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBzdXBlcmJsb2NrIHNoYXJpbmcgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBtb3VudCBsb2dpYyBmb3IgRVJPRlMgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjFmZTQ0NmFmMzVkZTkzMTdmYzQ2MjIyZWYyNDBkZjA2OThlNzAzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA3OjMwOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdAppbmRleCBkMzAxZDlhYzk0NmE5Li40OWM0ZTdkYmM1ZDYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdApAQCAtMTM5LDYgJiM0MzsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aQogICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGNhY2hlLgogc291cmNlPSVzICAgICAgICAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU3BlY2lmeSB0aGUgYmFja2luZyBpbWFnZSBhcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLgomIzQzO3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLgogPT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogRmlsZS1iYWNrZWQgbW91bnRzCkBAIC0xNTYsNiAmIzQzOzE1OSwxMSBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXQKIHJlc2lkZXMgb24gYSBibG9jayBkZXZpY2UsIHVzZSB0aGUgdHJhZGl0aW9uYWwgYmxvY2sgZGV2aWNlIG1vdW50IHBhdGgKIGluc3RlYWQuCiAKJiM0MztXaGVuIHN1cGVyYmxvY2tfc2hhcmUgaXMgc3BlY2lmaWVkIGFuZCB0aGUgc2FtZSBiYWNraW5nIGZpbGUgKGlkZW50aWZpZWQKJiM0MztieSBpbm9kZSBhbmQgZnNvZmZzZXQpIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG1vdW50CiYjNDM7b3B0aW9ucywgdGhlIGtlcm5lbCByZXVzZXMgdGhlIGV4aXN0aW5nIHN1cGVyYmxvY2sgaW5zdGVhZCBvZiBjcmVhdGluZyBhCiYjNDM7bmV3IG9uZS4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLgomIzQzOwogU3lzZnMgRW50cmllcwogPT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaAppbmRleCA1N2JkMjE4NTljNjVkLi44NmRhMjE5ZjhmNGVjIDEwMDY0NAotLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKQEAgLTE1Niw2ICYjNDM7MTU2LDcgQEAgc3RydWN0IGVyb2ZzX3NiX2luZm8gewogI2RlZmluZSBFUk9GU19NT1VOVF9EQVhfTkVWRVIJCTB4MDAwMDAwODAKICNkZWZpbmUgRVJPRlNfTU9VTlRfRElSRUNUX0lPCQkweDAwMDAwMTAwCiAjZGVmaW5lIEVST0ZTX01PVU5UX0lOT0RFX1NIQVJFCQkweDAwMDAwMjAwCiYjNDM7I2RlZmluZSBFUk9GU19NT1VOVF9TVVBFUkJMT0NLX1NIQVJFCTB4MDAwMDA0MDAKIAogI2RlZmluZSBjbGVhcl9vcHQob3B0LCBvcHRpb24pCSgob3B0KS0mZ3Q7bW91bnRfb3B0ICZhbXA7PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pCiAjZGVmaW5lIHNldF9vcHQob3B0LCBvcHRpb24pCSgob3B0KS0mZ3Q7bW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKQpkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmMKaW5kZXggZGRjOTcxOWU2ZDE4ZS4uNDU3ZTA2NzQ0N2Q1ZiAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9zdXBlci5jCkBAIC0zODYsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKQogZW51bSB7CiAJT3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLAogCU9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsCi0JT3B0X3NvdXJjZSwKJiM0MzsJT3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7CkBAIC00MTUsNiAmIzQzOzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0gewogCWZzcGFyYW1fdTY0KCYjMzQ7ZnNvZmZzZXQmIzM0OywJCQlPcHRfZnNvZmZzZXQpLAogCWZzcGFyYW1fZmxhZygmIzM0O2lub2RlX3NoYXJlJiMzNDssCQlPcHRfaW5vZGVfc2hhcmUpLAogCWZzcGFyYW1fZmlsZV9vcl9zdHJpbmcoJiMzNDtzb3VyY2UmIzM0OywJT3B0X3NvdXJjZSksCiYjNDM7CWZzcGFyYW1fZmxhZygmIzM0O3N1cGVyYmxvY2tfc2hhcmUmIzM0OywJT3B0X3N1cGVyYmxvY2tfc2hhcmUpLAogCXt9CiB9OwogCkBAIC01NjAsNiAmIzQzOzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJZWxzZQogCQkJc2V0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBJTk9ERV9TSEFSRSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIE9wdF9zdXBlcmJsb2NrX3NoYXJlOgomIzQzOwkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpCiYjNDM7CQkJZXJyb3JmYyhmYywgJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZCYjMzQ7LCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2V0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgT3B0X3NvdXJjZToKIAkJcmV0dXJuIGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShmYywgcGFyYW0pOwogCX0KQEAgLTY1Miw2ICYjNDM7NjU5LDE3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCWVycm9yZmMoZmMsICYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQomIzQzOwlpZiAodGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgdGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgSU5PREVfU0hBUkUpKSB7CiYjNDM7CQllcnJvcmZjKGZjLCAmIzM0O3N1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CS8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi8KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpICZhbXA7JmFtcDsKJiM0MzsJICAgIHNiaS0mZ3Q7ZGV2cy0mZ3Q7ZXh0cmFfZGV2aWNlcykgewomIzQzOwkJZXJyb3JmYyhmYywgJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0cmEgZGV2aWNlcyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlzYmktJmd0O2Jsa3N6Yml0cyA9IFBBR0VfU0hJRlQ7CiAJaWYgKCFzYi0mZ3Q7c19iZGV2KSB7CkBAIC03NzksNiAmIzQzOzc5NywzNiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKJiM0MzsJCQkJICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXQKJiM0MzsJICogaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LCBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlcwomIzQzOwkgKiBuZXdfc2JpIGFsc28gaXMgc2hhcmVhYmxlLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGVyb2ZzX3NiX2luZm8gKm5ld19zYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwomIzQzOwomIzQzOwlpZiAoc2ItJmd0O3NfaWZsYWdzICZhbXA7IFNCX0lfUkVUSVJFRCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAoIXNiaS0mZ3Q7ZGlmMC5maWxlIHx8ICFuZXdfc2JpLSZndDtkaWYwLmZpbGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGZpbGVfaW5vZGUoc2JpLSZndDtkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBzYmktJmd0O2RpZjAuZnNvZmYgPT0gbmV3X3NiaS0mZ3Q7ZGlmMC5mc29mZiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAhbWVtY21wKCZhbXA7c2JpLSZndDtvcHQsICZhbXA7bmV3X3NiaS0mZ3Q7b3B0LCBzaXplb2Yoc2JpLSZndDtvcHQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwomIzQzOwomIzQzOwlpZiAoIXRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKQomIzQzOwkJcmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogewogCXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwpAQCAtNzk0LDcgJiM0Mzs4NDIsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAkJCWVycm9yZmMoZmMsICYjMzQ7c291cmNlIGlzIHVuc3VwcG9ydGVkJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJcmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0MzsJCXJldHVybiBlcm9mc19mY19nZXRfdHJlZV9maWxlKGZjKTsKIAl9CiAKIAlyZXQgPSBnZXRfdHJlZV9iZGV2X2ZsYWdzKGZjLCBlcm9mc19mY19maWxsX3N1cGVyLApAQCAtODEyLDcgJiM0Mzs4NjAsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAogCQlpZiAoU19JU1JFRyhmaWxlX2lub2RlKHNiaS0mZ3Q7ZGlmMC5maWxlKS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7CiAJCSAgICBzYmktJmd0O2RpZjAuZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDthX29wcy0mZ3Q7cmVhZF9mb2xpbykKLQkJCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CQkJcmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtODI1LDYgJiM0Mzs4NzMsMTAgQEAgc3RhdGljIGludCBlcm9mc19mY19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAKIAlEQkdfQlVHT04oIXNiX3Jkb25seShzYikpOwogCiYjNDM7CS8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqLwomIzQzOwlpZiAodGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSkpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwogCWlmIChuZXdfc2JpLSZndDtkb21haW5faWQpCiAJCWVyb2ZzX2luZm8oc2IsICYjMzQ7aWdub3JpbmcgcmVjb25maWd1cmF0aW9uIGZvciBkb21haW5faWQuJiMzNDspOwogCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA1ZmVlY2Y1ZDkwMzhkLi43MWNkMmRiYWRlNWIzIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTEzODksNyAmIzQzOzEzODksMTcgQEAgc3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKJiM0MzsvKioKJiM0MzsgKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmUKJiM0MzsgKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVycwomIzQzOyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMCiYjNDM7ICogQGZpbGxfc3VwZXI6IEhlbHBlciB0byBpbml0aWFsaXNlIGEgbmV3IHN1cGVyYmxvY2sKJiM0MzsgKgomIzQzOyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpcwomIzQzOyAqIHJldXNlZDsgb3RoZXJ3aXNlIGEgbmV3IGFub255bW91cyBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpc2VkIHdpdGgKJiM0MzsgKiBAZmlsbF9zdXBlci4gIFBhc3NpbmcgTlVMTCBmb3IgQHRlc3QgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgc3VwZXJibG9jay4KJiM0MzsgKi8KJiM0MztpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQlpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksCiAJCWludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKQpAQCAtMTQxNiwxMiAmIzQzOzE0MjYsMTMgQEAgc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiAJcmV0dXJuIGVycjsKIH0KJiM0MztFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTsKIAogaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKQogewotCXJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfbm9kZXYpOwogCkBAIC0xNDI5LDcgJiM0MzsxNDQwLDcgQEAgaW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCSAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKIHsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpOwomIzQzOwlyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc2luZ2xlKTsKIApAQCAtMTQzOSw3ICYjNDM7MTQ1MCw3IEBAIGludCBnZXRfdHJlZV9rZXllZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCXZvaWQgKmtleSkKIHsKIAlmYy0mZ3Q7c19mc19pbmZvID0ga2V5OwotCXJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oCmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oCkBAIC0xNTAsNiAmIzQzOzE1MCwxMCBAQCBleHRlcm4gaW50IHZmc19wYXJzZV9mc19wYXJhbV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkJCSAgICAgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pOwogZXh0ZXJuIHZvaWQgZmNfZHJvcF9sb2NrZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTsKIAomIzQzO2V4dGVybiBpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLAomIzQzOwkJCSBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksCiYjNDM7CQkJIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTsKIGV4dGVybiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkJIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCSAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVJPRlMgRmlsZXN5c3RlbSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgYSBuZXcgbW91bnQgb3B0aW9uLCBgc3VwZXJibG9ja19zaGFyZWAsIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gZW5hYmxlIHN1cGVyYmxvY2sgc2hhcmluZyB3aGVuIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG11bHRpcGxlIHRpbWVzIHdpdGggY29tcGF0aWJsZSBzZXR0aW5ncy4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBgZnMvZXJvZnMvc3VwZXIuY2AsIGBmcy9lcm9mcy9pbnRlcm5hbC5oYCwgYGZzL3N1cGVyLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvZnNfY29udGV4dC5oYC4gVGhlIGNvcmUgbW9kaWZpY2F0aW9uIGluIGBmcy9zdXBlci5jYCBzZWVtcyB0byBiZSByZW5hbWluZyBgdmZzX2dldF9zdXBlcmAgdG8gYGdldF90cmVlX3N1cGVyYCBhbmQgZXhwb3J0aW5nIGl0LiBJbiBgZnMvZXJvZnMvc3VwZXIuY2Agc3BlY2lmaWNhbGx5LCBuZXcgZnVuY3Rpb25zIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAgYXJlIGFkZGVkLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIHRhcmdldGluZyB3aXRoIGZ1enppbmc/IERlZmluaXRlbHkuIEl0JiMzOTtzIGEgKm5ldyogbW91bnQgb3B0aW9uIGZvciBFUk9GUy4gTW91bnQgb3B0aW9ucyBhcmUgcHJhY3RpY2FsbHkgdGFpbG9yLW1hZGUgZm9yIGZ1enppbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZXkmIzM5O3JlIGEgZGlyZWN0IGVudHJ5IHBvaW50IGZvciBtYW5pcHVsYXRpbmcgdGhlIGZpbGVzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZyBvcHRpb25zLiBDbGVhcmx5LCBgQ09ORklHX0VST0ZTX0ZTYCBpcyB0aGUgYmlnIG9uZSBmb3IgZW5hYmxpbmcgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gaXRzZWxmLiBUaGUgcGF0Y2ggY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSB0aGUgY29kZSBzbmlwcGV0IGluIGBmcy9lcm9mcy9zdXBlci5jYCwgaW5jbHVkZXMgYSBjaGVjayBmb3IgYENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50OyBpZiB0aGF0IG9wdGlvbiBpc24mIzM5O3QgZW5hYmxlZCwgdGhlIGBzdXBlcmJsb2NrX3NoYXJlYCBvcHRpb24gdGhyb3dzIGFuIGVycm9yLiBTbywgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYm90aCBgRVJPRlNfRlNgIGFuZCBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIHRvIHByb3Blcmx5IGV4ZXJjaXNlIHRoaXMgZmVhdHVyZS4KCkZpbmFsbHksIEkgc2hvdWxkIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9lcm9mcy9LY29uZmlnYCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCByZXF1aXJlbWVudHMgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMgYmVmb3JlIEkgc3RhcnQgY3JhZnRpbmcgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFUk9GU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvS2NvbmZpZy0yLVxuZnMvZXJvZnMvS2NvbmZpZzozOmNvbmZpZyBFUk9GU19GU1xuZnMvZXJvZnMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7RVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy00OS1cbmZzL2Vyb2ZzL0tjb25maWc6NTA6Y29uZmlnIEVST0ZTX0ZTX0RFQlVHXG5mcy9lcm9mcy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtFUk9GUyBkZWJ1Z2dpbmcgZmVhdHVyZVwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctNTktXG5mcy9lcm9mcy9LY29uZmlnOjYwOmNvbmZpZyBFUk9GU19GU19YQVRUUlxuZnMvZXJvZnMvS2NvbmZpZy02MS1cdGJvb2wgXCYjMzQ7RVJPRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctNzAtXG5mcy9lcm9mcy9LY29uZmlnOjcxOmNvbmZpZyBFUk9GU19GU19QT1NJWF9BQ0xcbmZzL2Vyb2ZzL0tjb25maWctNzItXHRib29sIFwmIzM0O0VST0ZTIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy04NC1cbmZzL2Vyb2ZzL0tjb25maWc6ODU6Y29uZmlnIEVST0ZTX0ZTX1NFQ1VSSVRZXG5mcy9lcm9mcy9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtFUk9GUyBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTk3LVxuZnMvZXJvZnMvS2NvbmZpZzo5ODpjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcbmZzL2Vyb2ZzL0tjb25maWctOTktXHRib29sIFwmIzM0O0ZpbGUtYmFja2VkIEVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTExLVxuZnMvZXJvZnMvS2NvbmZpZzoxMTI6Y29uZmlnIEVST0ZTX0ZTX1pJUFxuZnMvZXJvZnMvS2NvbmZpZy0xMTMtXHRib29sIFwmIzM0O0VST0ZTIERhdGEgQ29tcHJlc3Npb24gU3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTIxLVxuZnMvZXJvZnMvS2NvbmZpZzoxMjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BXG5mcy9lcm9mcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7RVJPRlMgTFpNQSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTMzLVxuZnMvZXJvZnMvS2NvbmZpZzoxMzQ6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BX0RFRkFVTFRfTUFYX1NUUkVBTVNcbmZzL2Vyb2ZzL0tjb25maWctMTM1LVx0aW50IFwmIzM0O0VST0ZTIExaTUEgZGVmYXVsdCBtYXhpbXVtIGRlY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTQ3LVxuZnMvZXJvZnMvS2NvbmZpZzoxNDg6Y29uZmlnIEVST0ZTX0ZTX1pJUF9ERUZMQVRFXG5mcy9lcm9mcy9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7RVJPRlMgREVGTEFURSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTU4LVxuZnMvZXJvZnMvS2NvbmZpZzoxNTk6Y29uZmlnIEVST0ZTX0ZTX1pJUF9aU1REXG5mcy9lcm9mcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7RVJPRlMgWnN0YW5kYXJkIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNjktXG5mcy9lcm9mcy9LY29uZmlnOjE3MDpjb25maWcgRVJPRlNfRlNfWklQX0FDQ0VMXG5mcy9lcm9mcy9LY29uZmlnLTE3MS1cdGJvb2wgXCYjMzQ7RVJPRlMgaGFyZHdhcmUgZGVjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xODMtXG5mcy9lcm9mcy9LY29uZmlnOjE4NDpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEXG5mcy9lcm9mcy9LY29uZmlnLTE4NS1cdGJvb2wgXCYjMzQ7RVJPRlMgcGVyLWNwdSBkZWNvbXByZXNzaW9uIGt0aHJlYWQgd29ya2Vyc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTkyLVxuZnMvZXJvZnMvS2NvbmZpZzoxOTM6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRF9ISVBSSVxuZnMvZXJvZnMvS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O0VST0ZTIGhpZ2ggcHJpb3JpdHkgcGVyLUNQVSBrdGhyZWFkIHdvcmtlcnNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTIwMi1cbmZzL2Vyb2ZzL0tjb25maWc6MjAzOmNvbmZpZyBFUk9GU19GU19QQUdFX0NBQ0hFX1NIQVJFXG5mcy9lcm9mcy9LY29uZmlnLTIwNC1cdGJvb2wgXCYjMzQ7RVJPRlMgcGFnZSBjYWNoZSBzaGFyZSBzdXBwb3J0IChleHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipDaGVja2luZyBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgLiBCZWZvcmUgSSBldmVuIHRvdWNoIGFueXRoaW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgb2YgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucywgbW9kdWxlcywgb3IgZmVhdHVyZXMgaGluZ2Ugb24gdGhpcyBvbmU/IEFyZSB0aGVyZSBhbnkgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSBpbXBhY3RzIEkgbmVlZCB0byBjb25zaWRlcj8gV2hhdCBkb2VzIHRoaXMgZW5hYmxlIG9yIGRpc2FibGUsIGFuZCBob3cgZG9lcyB0aGF0IGFmZmVjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gZnVuY3Rpb25hbGl0eT8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0gYW5kIGNyb3NzLXJlZmVyZW5jZSByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHN0YWJpbGl0eSBhbmQgaW1wYWN0IG9mIHRoaXMgY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBjaGFuZ2luZyB0aGlzIGRvZXNuJiMzOTt0IGFjY2lkZW50YWxseSBicmVhayBzb21ldGhpbmcgZWxzZSBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggZmVhdHVyZXMgaXQgZW5hYmxlcyBhbmQgZGlzYWJsZXMuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBpcyBjb25uZWN0ZWQgdG8uIExldCYjMzk7cyBkbyB0aGlzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHRcdCAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUsIHNheSBOLlxuICA5NzpcdFxuICA5ODpcdGNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxuICA5OTpcdFx0Ym9vbCBcJiMzNDtGaWxlLWJhY2tlZCBFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAxMDA6XHRcdGRlcGVuZHMgb24gRVJPRlNfRlNcbiAxMDE6XHRcdGRlZmF1bHQgeVxuIDEwMjpcdFx0aGVscFxuIDEwMzpcdFx0ICBUaGlzIGFsbG93cyBFUk9GUyB0byB1c2UgZmlsZXN5c3RlbSBpbWFnZSBmaWxlcyBkaXJlY3RseSwgd2l0aG91dFxuIDEwNDpcdFx0ICB0aGUgaW50ZXJjZXNzaW9uIG9mIGxvb3BiYWNrIGJsb2NrIGRldmljZXMgb3IgbGlrZXdpc2UuIEl0IGlzXG4gMTA1Olx0XHQgIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGNvbnRhaW5lciBpbWFnZXMgd2l0aCBudW1lcm91cyBibG9icyBhbmRcbiAxMDY6XHRcdCAgb3RoZXIgc2FuZGJveGVzLCB3aGVyZSBsb29wIGRldmljZXMgYmVoYXZlIGludHJpY2F0ZWx5LiAgSXQgY2FuIGFsc29cbiAxMDc6XHRcdCAgYmUgdXNlZCB0byBzaW1wbGlmeSBlcnJvci1wcm9uZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIHVubmVjZXNzYXJ5XG4gMTA4Olx0XHQgIHZpcnR1YWwgYmxvY2sgZGV2aWNlcy5cbiAxMDk6XHRcbiAxMTA6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUsIHNheSBOLlxuIDExMTpcdFxuIDExMjpcdGNvbmZpZyBFUk9GU19GU19aSVBcbiAxMTM6XHRcdGJvb2wgXCYjMzQ7RVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XCYjMzQ7XG4gMTE0Olx0XHRkZXBlbmRzIG9uIEVST0ZTX0ZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipBbmFseXppbmcgRVJPRlMgYW5kIEl0cyBGaWxlLUJhY2tlZCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAgaXMsIGFzIEkgc3VzcGVjdGVkLCBjb250aW5nZW50IG9uIHRoZSBjb3JlIGBFUk9GU19GU2AgZnVuY3Rpb25hbGl0eS4gVGhhdCBtYWtlcyBzZW5zZSwgYSBmaWxlLWJhY2tlZCBzeXN0ZW0gYnVpbGRzIG9uIHRoZSBmb3VuZGF0aW9ucyBvZiB0aGUgYmFzaWMgRVJPRlMgc3RydWN0dXJlLgoKTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBvciBiZWVuIGFkZGVkIHRvIGFjY29tbW9kYXRlIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGxpc3QgdGhvc2UgZnVuY3Rpb25zOiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLCBhbmQgYGdldF90cmVlX3N1cGVyYC4gVGhlIGxhc3Qgb25lLCBgZ2V0X3RyZWVfc3VwZXJgLCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBleHBvcnRlZCBmcm9tIGBmcy9zdXBlci5jYC4gVGhhdCBoaW50cyBhdCBhIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoIHRoZSBjb3JlIFZGUyBzdXBlciBibG9jayBtYW5hZ2VtZW50LgoKSSYjMzk7bGwgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBmcy9zdXBlci5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBnZXRfdHJlZV9zdXBlcmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGxldmVyYWdlZCwgb3IgcG90ZW50aWFsbHkgZXh0ZW5kZWQsIHdpdGhpbiB0aGlzIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAgY29udGV4dC4gVGhhdCB3aWxsIGxpa2VseSBwcm92aWRlIGluc2lnaHQgaW50byBob3cgdGhlIGZpbGUtYmFja2VkIEVST0ZTIGlzIG1vdW50aW5nIGFuZCBpbnRlZ3JhdGluZyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3RyZWVfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9MTM4Nz1zdGF0aWMgaW50IHRlc3Rfc2luZ2xlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3N1cGVyLmMtMTM5Mi0vKipcbmZzL3N1cGVyLmM6MTM5MzogKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmVcbmZzL3N1cGVyLmMtMTM5NC0gKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVyc1xuLS1cbmZzL3N1cGVyLmMtMTQwMS0gKi9cbmZzL3N1cGVyLmM6MTQwMjppbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvc3VwZXIuYy0xNDAzLVx0XHRpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4tLVxuZnMvc3VwZXIuYy0xNDI4LX1cbmZzL3N1cGVyLmM6MTQyOTpFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTtcbmZzL3N1cGVyLmMtMTQzMC1cbmZzL3N1cGVyLmM9MTQzMT1pbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuLS1cbmZzL3N1cGVyLmMtMTQzNC17XG5mcy9zdXBlci5jOjE0MzU6XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuZnMvc3VwZXIuYy0xNDM2LX1cbi0tXG5mcy9zdXBlci5jPTE0Mzk9aW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvc3VwZXIuYy0xNDQyLXtcbmZzL3N1cGVyLmM6MTQ0MzpcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xuZnMvc3VwZXIuYy0xNDQ0LX1cbi0tXG5mcy9zdXBlci5jPTE0NDc9aW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbi0tXG5mcy9zdXBlci5jLTE0NTItXHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBrZXk7XG5mcy9zdXBlci5jOjE0NTM6XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuZnMvc3VwZXIuYy0xNDU0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFUk9GUyBGaWxlc3lzdGVtIE1vdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gbW91bnRzLCBhbmQgSSYjMzk7bSBicmVha2luZyBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIGBnZXRfdHJlZV9zdXBlcmAgc2VlbXMgdG8gYmUgYSBnZW5lcmFsIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgZnVuY3Rpb24sIG5vdGhpbmcgcGFydGljdWxhcmx5IEVST0ZTLXNwZWNpZmljIGFib3V0IHRoYXQuIE15IHJlYWwgaW50ZXJlc3QgbGllcyBpbiBob3cgRVJPRlMgaG9va3MgaW50byB0aGlzIGdlbmVyYWwgZnJhbWV3b3JrLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAgYXJlIHRoZSBFUk9GUy1zcGVjaWZpYyBwaWVjZXMgdGhhdCBhY3R1YWxseSBoYW5kbGUgdGhlIGZpbGUgc3lzdGVtJiMzOTtzIGRldGFpbHMuIEFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVgIGxvb2tzIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IOKAkyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1vdW50aW5nIEVST0ZTIHZvbHVtZXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZnMvZXJvZnMvc3VwZXIuY2AsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGVzZSB0d28gRVJPRlMtc3BlY2lmaWMgZnVuY3Rpb25zLCBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLCBpbiBkZXRhaWwuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwYXJ0cyBpbnRlcmFjdCwgcGFydGljdWxhcmx5IHdpdGggdGhlIGdlbmVyaWMgVkZTIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYz02NDM9c3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTc5OS1cbmZzL2Vyb2ZzL3N1cGVyLmM6ODAwOnN0YXRpYyBpbnQgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9lcm9mcy9zdXBlci5jLTgwMS1cdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz04MjA9c3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTgyNi1cbmZzL2Vyb2ZzL3N1cGVyLmM6ODI3Olx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuZnMvZXJvZnMvc3VwZXIuYy04MjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTc0CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFUk9GUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIGBzdXBlcmJsb2NrX3NoYXJlYCBtb3VudCBvcHRpb24gZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgYWxsb3dpbmcgZm9yIHNoYXJlZCBzdXBlcmJsb2NrcyB3aGVuIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG11bHRpcGxlIHRpbWVzLCB3aGljaCBpcyBhIG5lYXQgb3B0aW1pemF0aW9uLCBpZiBpdCB3b3JrcyBjb3JyZWN0bHkuCgpUaGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyBhcmUgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAsIGBlcm9mc19mY19nZXRfdHJlZV9maWxlYCwgYW5kIGBnZXRfdHJlZV9zdXBlcmAuIFRoZXNlIGFyZSB0aGUga2V5IGFyZWFzIHdoZXJlIHRoZSBuZXcgbG9naWMgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBjb3JlIG1vdW50IHByb2Nlc3Mgb2YgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuCgpOb3csIGFzIGZhciBhcyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYEVST0ZTX0ZTYCBhbmQgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gWXVwLCBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIGRlcGVuZHMgb24gYEVST0ZTX0ZTYCwgYnV0IG5vdGhpbmcgZWxzZSBzZWVtcyByZWxldmFudC4gVGhvc2UgdHdvIHNob3VsZCBjb3ZlciB3aGF0JiMzOTtzIG5lZWRlZCB0byB0ZXN0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGF0IGEgZ2xhbmNlLCBzbyB0aG9zZSBzZWVtIHN1ZmZpY2llbnQuCgpGcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZSwgdGhlIHJhdGlvbmFsZSBpcyBjbGVhci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIGFuZCBpdOKAmXMgcmVhY2hhYmxlLCBtZWFuaW5nIGl0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gbW91bnRpbmcuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIG1vdW50IHByb2Nlc3MsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzLiBUaGUgbmV3IG1vdW50IG9wdGlvbiBhbmQgcmVsYXRlZCBsb2dpYyBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2dldF90cmVlX2ZpbGUmIzM0OywKICAgICYjMzQ7Z2V0X3RyZWVfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgc3VwZXJibG9jayBzaGFyaW5nIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbW91bnQgbG9naWMgZm9yIEVST0ZTIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZSYjMzQ7LAogICAgJiMzNDtnZXRfdHJlZV9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBzdXBlcmJsb2NrIHNoYXJpbmcgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBtb3VudCBsb2dpYyBmb3IgRVJPRlMgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgZmlsZS1iYWNrZWQgbW91bnRzIGFuZCBhZGRzIGxvZ2ljIHRvIHNoYXJlIHN1cGVyYmxvY2tzIHdoZW4gY29tcGF0aWJsZSBvcHRpb25zIGFyZSB1c2VkLiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCB1c2VzIGBtZW1jbXBgIHRvIGNvbXBhcmUgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYC4gV2hpbGUgdGhpcyBzdHJ1Y3QgY29udGFpbnMgcGFkZGluZywgaW5zdGFuY2VzIG9mIGl0IGFyZSBlbWJlZGRlZCB3aXRoaW4gYHN0cnVjdCBlcm9mc19zYl9pbmZvYCwgd2hpY2ggaXMgYWx3YXlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgIChpbiBgZXJvZnNfaW5pdF9mc19jb250ZXh0YCkuIENvbnNlcXVlbnRseSwgdGhlIHBhZGRpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgcmVtYWlucyB6ZXJvLCBtZWFuaW5nIGBtZW1jbXBgIHNhZmVseSByZWFkcyBpbml0aWFsaXplZCBtZW1vcnkgd2l0aG91dCB0cmlnZ2VyaW5nIEtNU0FOIG9yIGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIHNoYXJpbmcpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYxZmU0NDZhZjM1ZGU5MzE3ZmM0NjIyMmVmMjQwZGYwNjk4ZTcwM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzozMDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKaW5kZXggZDMwMWQ5YWM5NDZhOS4uNDljNGU3ZGJjNWQ2MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKQEAgLTEzOSw2ICYjNDM7MTM5LDkgQEAgaW5vZGVfc2hhcmUgICAgICAgICAgICBFbmFibGUgaW5vZGUgcGFnZSBzaGFyaW5nIGZvciB0aGlzIGZpbGVzeXN0ZW0uICBJbm9kZXMgd2kKICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS4KIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIGFscmVhZHktb3BlbmVkIGZpbGUgZGVzY3JpcHRvci4KJiM0MztzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy4KID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEZpbGUtYmFja2VkIG1vdW50cwpAQCAtMTU2LDYgJiM0MzsxNTksMTEgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0CiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoCiBpbnN0ZWFkLgogCiYjNDM7V2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCBhbmQgdGhlIHNhbWUgYmFja2luZyBmaWxlIChpZGVudGlmaWVkCiYjNDM7YnkgaW5vZGUgYW5kIGZzb2Zmc2V0KSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZSBtb3VudAomIzQzO29wdGlvbnMsIHRoZSBrZXJuZWwgcmV1c2VzIHRoZSBleGlzdGluZyBzdXBlcmJsb2NrIGluc3RlYWQgb2YgY3JlYXRpbmcgYQomIzQzO25ldyBvbmUuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy4KJiM0MzsKIFN5c2ZzIEVudHJpZXMKID09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9pbnRlcm5hbC5oCkBAIC0xNTYsNiAmIzQzOzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHsKICNkZWZpbmUgRVJPRlNfTU9VTlRfREFYX05FVkVSCQkweDAwMDAwMDgwCiAjZGVmaW5lIEVST0ZTX01PVU5UX0RJUkVDVF9JTwkJMHgwMDAwMDEwMAogI2RlZmluZSBFUk9GU19NT1VOVF9JTk9ERV9TSEFSRQkJMHgwMDAwMDIwMAomIzQzOyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRQkweDAwMDAwNDAwCiAKICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKQkoKG9wdCktJmd0O21vdW50X29wdCAmYW1wOz0gfkVST0ZTX01PVU5UXyMjb3B0aW9uKQogI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKQkoKG9wdCktJmd0O21vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbikKZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jCmluZGV4IGRkYzk3MTllNmQxOGUuLjQ1N2UwNjc0NDdkNWYgMTAwNjQ0Ci0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvc3VwZXIuYwpAQCAtMzg2LDcgJiM0MzszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSkKIGVudW0gewogCU9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSwKIAlPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLAotCU9wdF9zb3VyY2UsCiYjNDM7CU9wdF9zb3VyY2UsIE9wdF9zdXBlcmJsb2NrX3NoYXJlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBlcm9mc19wYXJhbV9jYWNoZV9zdHJhdGVneVtdID0gewpAQCAtNDE1LDYgJiM0Mzs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHsKIAlmc3BhcmFtX3U2NCgmIzM0O2Zzb2Zmc2V0JiMzNDssCQkJT3B0X2Zzb2Zmc2V0KSwKIAlmc3BhcmFtX2ZsYWcoJiMzNDtpbm9kZV9zaGFyZSYjMzQ7LAkJT3B0X2lub2RlX3NoYXJlKSwKIAlmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKCYjMzQ7c291cmNlJiMzNDssCU9wdF9zb3VyY2UpLAomIzQzOwlmc3BhcmFtX2ZsYWcoJiMzNDtzdXBlcmJsb2NrX3NoYXJlJiMzNDssCU9wdF9zdXBlcmJsb2NrX3NoYXJlKSwKIAl7fQogfTsKIApAQCAtNTYwLDYgJiM0Mzs1NjEsMTIgQEAgc3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCWVsc2UKIAkJCXNldF9vcHQoJmFtcDtzYmktJmd0O29wdCwgSU5PREVfU0hBUkUpOwogCQlicmVhazsKJiM0MzsJY2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZToKJiM0MzsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKQomIzQzOwkJCWVycm9yZmMoZmMsICYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWQmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNldF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSk7CiYjNDM7CQlicmVhazsKIAljYXNlIE9wdF9zb3VyY2U6CiAJCXJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTsKIAl9CkBAIC02NTIsNiAmIzQzOzY1OSwxNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCQllcnJvcmZjKGZjLCAmIzM0O0ZTREFYIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb24mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpICZhbXA7JmFtcDsKJiM0MzsJICAgIHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIElOT0RFX1NIQVJFKSkgewomIzQzOwkJZXJyb3JmYyhmYywgJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb24mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwkvKiBFeHRyYSBkZXZpY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIHN1cGVyYmxvY2sgc2hhcmluZy4gICovCiYjNDM7CWlmICh0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzYmktJmd0O2RldnMtJmd0O2V4dHJhX2RldmljZXMpIHsKJiM0MzsJCWVycm9yZmMoZmMsICYjMzQ7c3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXMmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiAJc2JpLSZndDtibGtzemJpdHMgPSBQQUdFX1NISUZUOwogCWlmICghc2ItJmd0O3NfYmRldikgewpAQCAtNzc5LDYgJiM0Mzs3OTcsMzYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2l0aCBhIHNiaSB0aGF0CiYjNDM7CSAqIGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCwgc28gdGhhdCB0aGUgbWVtY21wIGxhdGVyIGVuc3VyZXMKJiM0MzsJICogbmV3X3NiaSBhbHNvIGlzIHNoYXJlYWJsZS4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJaWYgKHNiLSZndDtzX2lmbGFncyAmYW1wOyBTQl9JX1JFVElSRUQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFzYmktJmd0O2RpZjAuZmlsZSB8fCAhbmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiBmaWxlX2lub2RlKHNiaS0mZ3Q7ZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktJmd0O2RpZjAuZmlsZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc2JpLSZndDtkaWYwLmZzb2ZmID09IG5ld19zYmktJmd0O2RpZjAuZnNvZmYgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIW1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSkKJiM0MzsJCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIHsKIAlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKQEAgLTc5NCw3ICYjNDM7ODQyLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCQllcnJvcmZjKGZjLCAmIzM0O3NvdXJjZSBpcyB1bnN1cHBvcnRlZCYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CQlyZXR1cm4gZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShmYyk7CiAJfQogCiAJcmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlciwKQEAgLTgxMiw3ICYjNDM7ODYwLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAKIAkJaWYgKFNfSVNSRUcoZmlsZV9pbm9kZShzYmktJmd0O2RpZjAuZmlsZSktJmd0O2lfbW9kZSkgJmFtcDsmYW1wOwogCQkgICAgc2JpLSZndDtkaWYwLmZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O3JlYWRfZm9saW8pCi0JCQlyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpOwomIzQzOwkJCXJldHVybiBlcm9mc19mY19nZXRfdHJlZV9maWxlKGZjKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgyNSw2ICYjNDM7ODczLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCiAJREJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTsKIAomIzQzOwkvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi8KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAobmV3X3NiaS0mZ3Q7ZG9tYWluX2lkKQogCQllcm9mc19pbmZvKHNiLCAmIzM0O2lnbm9yaW5nIHJlY29uZmlndXJhdGlvbiBmb3IgZG9tYWluX2lkLiYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0xMzg5LDcgJiM0MzsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiYjNDM7LyoqCiYjNDM7ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lCiYjNDM7ICogQGZjOiBUaGUgZmlsZXN5c3RlbSBjb250ZXh0IGhvbGRpbmcgdGhlIHBhcmFtZXRlcnMKJiM0MzsgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTAomIzQzOyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrCiYjNDM7ICoKJiM0MzsgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXMKJiM0MzsgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoCiYjNDM7ICogQGZpbGxfc3VwZXIuICBQYXNzaW5nIE5VTEwgZm9yIEB0ZXN0IGFsd2F5cyBjcmVhdGVzIGEgbmV3IHN1cGVyYmxvY2suCiYjNDM7ICovCiYjNDM7aW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLAogCQlpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKQEAgLTE0MTYsMTIgJiM0MzsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpOwogCXJldHVybiBlcnI7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7CiAKIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCSAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKIHsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTsKIApAQCAtMTQyOSw3ICYjNDM7MTQ0MCw3IEBAIGludCBnZXRfdHJlZV9zaW5nbGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpCiB7Ci0JcmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7CiAKQEAgLTE0MzksNyAmIzQzOzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQl2b2lkICprZXkpCiB7CiAJZmMtJmd0O3NfZnNfaW5mbyA9IGtleTsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaAppbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaApAQCAtMTUwLDYgJiM0MzsxNTAsMTAgQEAgZXh0ZXJuIGludCB2ZnNfcGFyc2VfZnNfcGFyYW1fc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCQkgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKTsKIGV4dGVybiB2b2lkIGZjX2Ryb3BfbG9ja2VkKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7CiAKJiM0MztleHRlcm4gaW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKJiM0MzsJCQkgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLAomIzQzOwkJCSBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQkJICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7CiBleHRlcm4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCSBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRVJPRlMgTW91bnQgT3B0aW9uIENvbmNlcm4qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgRVJPRlMgZmlsZS1iYWNrZWQgbW91bnRzLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCBtb2RpZmllcyBgZnMvZXJvZnMvc3VwZXIuY2AgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIG9mIHRoaXMgbmV3IG9wdGlvbiBhbmQsIGNydWNpYWxseSwgdG8gc3dpdGNoIGZyb20gdXNpbmcgYGdldF90cmVlX25vZGV2KClgIHRvIGBnZXRfdHJlZV9zdXBlcigpYCB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gVGhlIHBhdGNoIGFsc28gZXhwb3NlcyBgZ2V0X3RyZWVfc3VwZXIoKWAgZnJvbSBgZnMvc3VwZXIuY2AsIHJlbmFtaW5nIHRoZSBleGlzdGluZyBgdmZzX2dldF9zdXBlcmAgdG8gYGdldF90cmVlX3N1cGVyYCBpbiB0aGUgcHJvY2Vzcy4gSSBzZWUgdGhhdCB0aGUgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgZnVuY3Rpb24gbm93IGNvbXBhcmVzIHRoZSBgc2JpLSZndDtvcHRgIGFuZCBgbmV3X3NiaS0mZ3Q7b3B0YCBzdHJ1Y3R1cmVzIHVzaW5nIGBtZW1jbXBgLgoKKldhaXQgYSBzZWNvbmQuLi4qIGBtZW1jbXAoJmFtcDtzYmktJmd0O29wdCwgJmFtcDtuZXdfc2JpLSZndDtvcHQsIHNpemVvZihzYmktJmd0O29wdCkpYD8gVGhhdCBjb21wYXJpc29uJiMzOTtzIGdvdCBteSBhdHRlbnRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCBgc2JpLSZndDtvcHRgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHBhZGRpbmcgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBBIGJ5dGUtd2lzZSBjb21wYXJpc29uIGxpa2UgdGhhdCBpcyBhbHdheXMgYSBiaXQgcmlza3kgaWYgeW91JiMzOTtyZSBub3QgYWJzb2x1dGVseSBjZXJ0YWluIGFib3V0IHRoZSBjb250ZW50cy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgaW4gYGZzL2Vyb2ZzL2ludGVybmFsLmhgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgZ290Y2hhcyB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgZXZlcnl0aGluZyBpbiBgc2JpLSZndDtvcHRgIGlzIGluaXRpYWxpemVkIHRvIGEgcmVsaWFibGUgdmFsdWUgYW5kIHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFueSB1bmRlZmluZWQgcGFkZGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlIGBtZW1jbXBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvaW50ZXJuYWwuaD01ND1lbnVtIHtcbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTU5LVxuZnMvZXJvZnMvaW50ZXJuYWwuaDo2MDpzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyB7XG5mcy9lcm9mcy9pbnRlcm5hbC5oLTYxLVx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGVyb2ZzL2ludGVybmFsLmhgKioKCk9rYXksIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBFUk9GUyBpcyBzdHJ1Y3R1cmVkIGludGVybmFsbHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZnMvZXJvZnMvaW50ZXJuYWwuaGAgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIGxvb2tpbmcgYXJvdW5kIGxpbmUgNjAgbWlnaHQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgc29tZSBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgb3IgZGVmaW5pdGlvbnMgdGhlcmUgdGhhdCBhcmUgY3JpdGljYWwgdG8gdGhlIGZpbGUgc3lzdGVtJiMzOTtzIG9wZXJhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcywgcGVyaGFwcyBmb2N1c2luZyBvbiB0aGUgY3JpdGljYWwgZGF0YXR5cGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgaGVhZGVyIGZpbGUsIGVzcGVjaWFsbHkgbmVhciB0aGF0IGxpbmUsIHdpbGwgbGlrZWx5IGdpdmUgbWUgaW5zaWdodHMgaW50byBob3cgdGhlIEVST0ZTIGxheWVyIGludGVyYWN0cyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFuZCwgdWx0aW1hdGVseSwgaG93IGl0IG1hbmFnZXMgaXRzIHJlYWQtb25seSBuYXR1cmUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvaW50ZXJuYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTQ6XHRlbnVtIHtcbiAgNTU6XHRcdEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPLFxuICA1NjpcdFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09OLFxuICA1NzpcdFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09GRlxuICA1ODpcdH07XG4gIDU5Olx0XG4gIDYwOlx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xuICA2MTpcdFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cbiAgNjI6XHRcdHVuc2lnbmVkIGNoYXIgY2FjaGVfc3RyYXRlZ3k7XG4gIDYzOlx0XHR1bnNpZ25lZCBpbnQgbW91bnRfb3B0O1xuICA2NDpcdH07XG4gIDY1Olx0XG4gIDY2Olx0c3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0IHtcbiAgNjc6XHRcdHN0cnVjdCBpZHIgdHJlZTtcbiAgNjg6XHRcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XG4gIDY5Olx0XG4gIDcwOlx0XHR1bnNpZ25lZCBpbnQgZXh0cmFfZGV2aWNlcztcbiAgNzE6XHRcdGJvb2wgZmxhdGRldjtcbiAgNzI6XHR9O1xuICA3MzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhZGRpbmcgV29lcyBpbiBgZXJvZnNfbW91bnRfb3B0c2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGRlZmluaXRpb24gYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHNvbWV0aGluZyB0aGF0JiMzOTtzIG1ha2luZyBteSBpbnRlcm5hbCBjb21waWxlciB3aGltcGVyLiBBbiBgdW5zaWduZWQgY2hhcmAgZm9sbG93ZWQgYnkgYW4gYHVuc2lnbmVkIGludGA/IFRoYXQgc2NyZWFtcyBwYWRkaW5nIHRvIG1lLiBMZXQmIzM5O3Mgc2VlLi4uIGEgYnl0ZSBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzLiBUaGF0JiMzOTtzIHRocmVlIGJ5dGVzIHdhc3RlZCEgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzdHJ1Y3R1cmUgdGhhdCYjMzk7cyBwcm9iYWJseSBmcmVxdWVudGx5IGFjY2Vzc2VkLCBzbyB0aGlzIGNvdWxkIHRyYW5zbGF0ZSB0byBhIHBlcmZvcm1hbmNlIGhpdCwgZXZlbiBpZiBtaW5vciwgaW4gc29tZSBzY2VuYXJpb3MsIHJpZ2h0PwoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucywgSSB3YW50IHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBzYmktJmd0O29wdGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyB3aGVuIGl0JiMzOTtzIGFsbG9jYXRlZC4gVGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgSSB0aGluayBhYm91dCB0aGlzIHBvdGVudGlhbCBwYWRkaW5nIGlzc3VlLiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdG8gYGVyb2ZzX2ZjX2dldF90cmVlYCBhbmQgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgYmVjYXVzZSBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3Mgd2hlcmUgYHNiaWAgaXMgYWxsb2NhdGVkLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgdGhhdCBhbGxvY2F0aW9uIGhhcHBlbnMgYW5kIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZjLVx1MDAzZXNfZnNfaW5mbyA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmM9OTUxPXN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTk2My1cdH1cbmZzL2Vyb2ZzL3N1cGVyLmM6OTY0Olx0ZmMtXHUwMDNlc19mc19pbmZvID0gc2JpO1xuZnMvZXJvZnMvc3VwZXIuYy05NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgRVJPRlMgRmlsZXN5c3RlbSBDb250ZXh0IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgZmlsZXN5c3RlbSBjb250ZXh0IGZvciBFUk9GUyBpcyBzZXQgdXAg4oCTIHNwZWNpZmljYWxseSwgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBoYW5kbGVkLCBhbnkgY2hlY2tzIG9yIHZhbGlkYXRpb25zLCBhbmQgaG93IHRoaXMgY29udGV4dCB1bHRpbWF0ZWx5IGluZmx1ZW5jZXMgdGhlIG1vdW50IHByb2Nlc3MuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyB0aGUgY29yZSBvZiBlc3RhYmxpc2hpbmcgdGhlIGVudmlyb25tZW50IGZvciBhbiBFUk9GUyBmaWxlc3lzdGVtIGluc3RhbmNlLCBzbyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgaGVyZSBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3Igb3B0aW1pemF0aW9uIGxhdGVyLiBUaW1lIHRvIG5hdmlnYXRlIGBmcy9lcm9mcy9zdXBlci5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUxOlx0c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIDk1MjpcdHtcbiA5NTM6XHRcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmk7XG4gOTU0Olx0XG4gOTU1Olx0XHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcbiA5NTY6XHRcdGlmICghc2JpKVxuIDk1NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NTg6XHRcbiA5NTk6XHRcdHNiaS1cdTAwM2VkZXZzID0ga3phbGxvY19vYmooc3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0KTtcbiA5NjA6XHRcdGlmICghc2JpLVx1MDAzZWRldnMpIHtcbiA5NjE6XHRcdFx0a2ZyZWUoc2JpKTtcbiA5NjI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTYzOlx0XHR9XG4gOTY0Olx0XHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBzYmk7XG4gOTY1Olx0XG4gOTY2Olx0XHRpZHJfaW5pdChcdTAwMjZzYmktXHUwMDNlZGV2cy1cdTAwM2V0cmVlKTtcbiA5Njc6XHRcdGluaXRfcndzZW0oXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNlcndzZW0pO1xuIDk2ODpcdFx0ZXJvZnNfZGVmYXVsdF9vcHRpb25zKHNiaSk7XG4gOTY5Olx0XHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZlcm9mc19jb250ZXh0X29wcztcbiA5NzA6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjE1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBgc2JpYCBBbGxvY2F0aW9uIGFuZCBgc2JpLSZndDtvcHRgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBzYmlgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKnNiaSlgLiBSaWdodCBvZmYgdGhlIGJhdCwgbXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgYGt6YWxsb2Nfb2JqYCBpcyBsaWtlbHkgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBga3phbGxvY2AsIHNwZWNpZmljYWxseSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgYHNiaWAgYW5kIGluaXRpYWxpemVzIGl0IHRvIHplcm8uIEJ1dCB3YWl0LCBga3phbGxvY19vYmpgPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBkZWZpbml0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gWWVwLCBqdXN0IGFzIEkgc3VzcGVjdGVkLCBpdCYjMzk7cyBqdXN0IGEgZGlyZWN0IGNhbGwgdG8gYGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKWAgb3Igc29tZXRoaW5nIG5lYXJseSBpZGVudGljYWwuCgpUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbjogc2luY2UgYGt6YWxsb2NgIGlzIHVzZWQsIHRoZSBwYWRkaW5nIHdpdGhpbiBgc2JpYCAqc2hvdWxkKiBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0JiMzOTtzIGdvb2QsIHByZWRpY3RhYmxlIGJlaGF2aW9yLiBCdXQgdGhpcyBicmluZ3MgdXAgYW5vdGhlciBpbXBvcnRhbnQgcG9pbnQ6IHdoYXQgaGFwcGVucyBpZiBgc2JpLSZndDtvcHRgIGlzIHN1YnNlcXVlbnRseSAqbW9kaWZpZWQqPyBTcGVjaWZpY2FsbHksIHdoYXQgaWYgaXQmIzM5O3MgY29waWVkIG9yIGFzc2lnbmVkIGEgdmFsdWU/IFRoZSBpbml0aWFsIHplcm9pbmcgYnkgYGt6YWxsb2NgIGlzIG9ubHkgZ3VhcmFudGVlZCBhdCBhbGxvY2F0aW9uLCBhbmQgYW55IGxhdGVyIGFzc2lnbm1lbnQgY291bGQgb3ZlcndyaXRlIHRoYXQgemVybyB2YWx1ZS4KClNvLCB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdGhvcm91Z2hseSBjaGVjayB0aGUgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBzYmktJmd0O29wdGAgaXMgKm5ldmVyKiBhc3NpZ25lZCBieSB2YWx1ZSBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBhbmQgaG93IHRoZSBgc2JpLSZndDtvcHRgIG1lbWJlciBpcyB1cGRhdGVkLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGlmIEkgY2FuIHRydXN0IHRoYXQgdGhlIHBhZGRpbmcgcmVtYWlucyB6ZXJvZWQgdGhyb3VnaG91dCB0aGUgbGlmZXRpbWUgb2YgdGhlIGBzYmlgIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3B0ID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYz00Nzc9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy00ODQtXG5mcy9lcm9mcy9zdXBlci5jOjQ4NTpcdG9wdCA9IGZzX3BhcnNlKGZjLCBlcm9mc19mc19wYXJhbWV0ZXJzLCBwYXJhbSwgXHUwMDI2cmVzdWx0KTtcbmZzL2Vyb2ZzL3N1cGVyLmMtNDg2LVx0aWYgKG9wdCBcdTAwM2MgMClcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTg2OD1zdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTg4Ny1cbmZzL2Vyb2ZzL3N1cGVyLmM6ODg4Olx0c2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O1xuZnMvZXJvZnMvc3VwZXIuYy04ODktXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz0xMTM2PXN0YXRpYyBpbnQgZXJvZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMTEzOC1cdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihyb290LVx1MDAzZWRfc2IpO1xuZnMvZXJvZnMvc3VwZXIuYzoxMTM5Olx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMgKm9wdCA9IFx1MDAyNnNiaS1cdTAwM2VvcHQ7XG5mcy9lcm9mcy9zdXBlci5jLTExNDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFUk9GUyBGaWxlc3lzdGVtIFJlY29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZXJvZnNfZmNfcmVjb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGlzIGxpbmU6IGBzYmktJmd0O29wdCA9IG5ld19zYmktJmd0O29wdDtgLiBUaGF0IGp1bXBzIG91dCBhdCBtZS4gSSYjMzk7bSB0aGlua2luZywgaGFuZyBvbi4uLiBgbmV3X3NiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIHdoaWNoIGNhbGxzIGBremFsbG9jYC4gUmlnaHQsIHNvIGBremFsbG9jYCB6ZXJvZXMgb3V0IHRoZSBtZW1vcnkuIFRoZW4sIHRoZSBwYXJhbWV0ZXJzIGFyZSBwYXJzZWQgaW50byBgbmV3X3NiaS0mZ3Q7b3B0YC4gTm93LCB0aGF0IGFzc2lnbm1lbnQuLi4gaXQmIzM5O3MgYSBzdHJ1Y3QgYXNzaWdubWVudCwgaXNuJiMzOTt0IGl0PwoKUmlnaHQsIHRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IEMgaGFuZGxlcyBzdHJ1Y3QgYXNzaWdubWVudC4gSXQgY29waWVzIHRoZSAqZmllbGRzKiwgYnV0IHdoYXQgYWJvdXQgcGFkZGluZz8gVGhhdCYjMzk7cyB0aGUgcG90ZW50aWFsIGdvdGNoYS4gSXQmIzM5O3Mgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYSBgbWVtY3B5YCBpZiB0aGUgc3RydWN0IGlzIGxhcmdlLCBvciBldmVuIGp1c3QgZmllbGQtYnktZmllbGQgb3Igd29yZC1ieS13b3JkLiBOb3csIGlmIGl0JiMzOTtzICp3b3JkKi1ieS13b3JkLCB0aGVuIHRoZSBwYWRkaW5nICppcyogY29waWVkIQoKQnV0IGhvbGQgb24uLi4gYG5ld19zYmlgIHdhcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHNvIGFsbCB0aGUgcGFkZGluZyAqaW4qIGBuZXdfc2JpYCBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseS4gU28sIGlmIGBuZXdfc2JpLSZndDtvcHRgIGhhcyB6ZXJvIHBhZGRpbmcgdG8gYmVnaW4gd2l0aCwgYW5kIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBzYmktJmd0O29wdGAsIHRoZW4gYHNiaS0mZ3Q7b3B0YCYjMzk7cyBwYWRkaW5nIHNob3VsZCAqcmVtYWluKiB6ZXJvLCBvciBiZWNvbWUgemVybywgd2hpY2ggaXMgbGlrZWx5IHRoZSBkZXNpcmVkIGJlaGF2aW9yLiBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSB0aGUgY29tcGlsZXImIzM5O3MgYmVoYXZpb3IsIGJ1dCBpdCYjMzk7cyBsaWtlbHkgc2FmZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgYXQgYWxsIHRoZSBwbGFjZXMgYG9wdGAgaXMgbW9kaWZpZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFkZGluZyBiZWluZyBzZXQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2RlZmF1bHRfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jPTI1MD1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMzczLVxuZnMvZXJvZnMvc3VwZXIuYzozNzQ6c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG5mcy9lcm9mcy9zdXBlci5jLTM3NS17XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz05NTE9c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtOTY3LVx0aW5pdF9yd3NlbShcdTAwMjZzYmktXHUwMDNlZGV2cy1cdTAwM2Vyd3NlbSk7XG5mcy9lcm9mcy9zdXBlci5jOjk2ODpcdGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzYmkpO1xuZnMvZXJvZnMvc3VwZXIuYy05NjktXHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZlcm9mc19jb250ZXh0X29wcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHNldCBhcyBkZWZhdWx0cyBmb3IgRVJPRlMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIGNvbXByZXNzaW9uIHNldHRpbmdzLCBhbnkgc3BlY2lmaWMgYmxvY2sgc2l6ZXMsIGFuZCBhbnkgdW51c3VhbCBmbGFncyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHBlcmZvcm1hbmNlIG9yIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIGRvY3VtZW50YXRpb24gdG8gc2VlIGlmIHRoZXNlIGRlZmF1bHRzIGFyZSBpbmxpbmUgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgZGlmZmVyZW50IHVzZSBjYXNlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSB0aGUgZmlsZXN5c3RlbSBtaWdodCBiZSB1c2VkIG9uLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gd2F0Y2ggb3V0IGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgJiMzNDtsZWdhY3kmIzM0OyAtIG1pZ2h0IGJlIGEgc2lnbiB3ZSBzaG91bGQgYmUgY29uc2lkZXJpbmcgY2hhbmdlcyB0byBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3NDpcdHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIDM3NTpcdHtcbiAzNzY6XHQjaWZkZWYgQ09ORklHX0VST0ZTX0ZTX1pJUFxuIDM3NzpcdFx0c2JpLVx1MDAzZW9wdC5jYWNoZV9zdHJhdGVneSA9IEVST0ZTX1pJUF9DQUNIRV9SRUFEQVJPVU5EO1xuIDM3ODpcdFx0c2JpLVx1MDAzZXN5bmNfZGVjb21wcmVzcyA9IEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPO1xuIDM3OTpcdCNlbmRpZlxuIDM4MDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSlcbiAzODE6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcbiAzODI6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKVxuIDM4MzpcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFBPU0lYX0FDTCk7XG4gMzg0Olx0fVxuIDM4NTpcdFxuIDM4NjpcdGVudW0ge1xuIDM4NzpcdFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxuIDM4ODpcdFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEtNU0FOIElzc3VlcyB3aXRoIEVST0ZTIE1vdW50IE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBob3cgYHNiaS0mZ3Q7b3B0YCBpcyBoYW5kbGVkLiBJIG5vdGljZWQgdGhhdCBpdCYjMzk7cyBtb2RpZmllZCBmaWVsZCBieSBmaWVsZCwgbGlrZSB3aXRoIHRoZSBjYWNoZSBzdHJhdGVneSwgYW5kIGFsc28gdGhyb3VnaCBgc2V0X29wdGAuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0aGF0IHRoaXMgd291bGRuJiMzOTt0IGxlYXZlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBiZWNhdXNlIGBzYmlgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAuIFRoZSBrZXkgYXNzdW1wdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IHNoYXJlZCBzdXBlcmJsb2Nrcywgd2hpY2ggaXMgcmVsZXZhbnQsIGJ1dCB3aGF0IHJlYWxseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhpcyBgbWVtY21wYCBvbiBgJmFtcDtzYmktJmd0O29wdGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIEtNU0FOIHF1ZXN0aW9uIGFyaXNlcy4KCk15IGNvbmNlcm4gaXMgd2hldGhlciBgc2JpLSZndDtvcHRgIGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBwYWRkaW5nLiBJZiBpdCYjMzk7cyBga3phbGxvY2AmIzM5O2QsIHRoZSBwYWRkaW5nICpzaG91bGQqIGJlIHplcm9lZCwgcmlnaHQ/IEJ1dCB3aGF0IGlmIGBzYmktJmd0O29wdGAgaXMgbGF0ZXIgYXNzaWduZWQgYXMgYSB3aG9sZSB1c2luZyBgc2JpLSZndDtvcHQgPSBuZXdfc2JpLSZndDtvcHQ7YD8gQyBzdHJ1Y3QgYXNzaWdubWVudCwgaW4gc29tZSBjYXNlcywgKm1pZ2h0KiBub3QgY29weSBwYWRkaW5nLiBJZiBpdCBkb2VzbiYjMzk7dCwgdGhhdCBwYWRkaW5nIGNvdWxkIHJldGFpbiBpdHMgb3JpZ2luYWwsIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZW4sIHdoZW4gYG1lbWNtcGAgaXMgY2FsbGVkLCBLTVNBTiBjb3VsZCBwb3RlbnRpYWxseSBmbGFnIHRoYXQgYXMgYSBwcm9ibGVtLiBBbHRob3VnaCwgaWYgdGhlIG9yaWdpbmFsIGBzYmlgIHdhcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCB0aGVuIHBhZGRpbmcgd291bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIHplcm8gdG8gYmVnaW4gd2l0aC4KCldhaXQsIHRoZSBuZXh0IHRoaW5nIEkgdGhvdWdodCBhYm91dCB3YXMgaWYgYHNiaS0mZ3Q7b3B0YCB3YXMgcGFzc2VkIGJ5IHZhbHVlIGFueXdoZXJlLiBCdXQgbm8sIGl0JiMzOTtzIGp1c3QgYSBmaWVsZCB3aXRoaW4gdGhlIGBzYmlgIHN0cnVjdCwgc28gdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLgoKVGhlbiBpdCBoaXRzIG1lOiAqeWVzKiwgYG1lbWNtcGAgb24gYSBzdHJ1Y3Qgd2l0aCBwYWRkaW5nICpjb3VsZCogdHJpZ2dlciBLTVNBTiEgS01TQU4gaXMgdmVyeSBncmFudWxhcjsgaXQgdHJhY2tzIGluaXRpYWxpemF0aW9uIGF0IHRoZSBiaXQvYnl0ZSBsZXZlbC4gSWYgcGFkZGluZyBleGlzdHMgYW5kIGlzbiYjMzk7dCBpbml0aWFsaXplZCwgYSBgbWVtY21wYCBvcGVyYXRpb24gY291bGQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXZlbiBpZiB0aGUgdXNlciBpc24mIzM5O3QgZGlyZWN0bHkgYWNjZXNzaW5nIGl0LiBIb3dldmVyLCBpZiB0aGUgc3RydWN0IHdhcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCB0aGUgcGFkZGluZyBpcyBhbHJlYWR5IGluaXRpYWxpemVkIHRvIHplcm8sIG1ha2luZyB0aGlzIGEgbm9uLWlzc3VlLiAKClNvIHRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBpZiB0aGUgc3RydWN0IGlzIGNvcGllZCB2aWEgYXNzaWdubWVudCwgZG9lcyB0aGUgY29tcGlsZXIgcmVhZCB0aGUgcGFkZGluZz8gSWYgdGhlIGFzc2lnbm1lbnQgaXMgaW1wbGVtZW50ZWQgYXMgYSB3b3JkLXNpemVkIHJlYWQvd3JpdGUsIGl0ICp3aWxsKiByZWFkIHRoZSBwYWRkaW5nLiBCdXQsIGJlY2F1c2UgdGhhdCBwYWRkaW5nIHdhcyB6ZXJvZWQgYnkgdGhlIGBremFsbG9jYCBjYWxsLCB0aGUgcmVhZCBpcyBzYWZlLgoKTm93LCBLTVNBTiBjaGVja3MgZm9yIG1lbW9yeSB0aGF0IGlzIHVuaW5pdGlhbGl6ZWQuIElmIHRoZSBtZW1vcnkgd2FzIHplcm9lZCBieSBga3phbGxvY2AsIGl0IGlzIGluaXRpYWxpemVkLgoKQnV0IHdhaXQsIHdoYXQgaWYgYHNiaS0mZ3Q7b3B0YCBpc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQgKnNvbWV3aGVyZSo/IEkgbmVlZCB0byBsb29rIGF0IHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gTGV0JiMzOTtzIHNlZS4uLgoKYGBgYwpzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyB7CgkvKiBjdXJyZW50IHN0cmF0ZWd5IG9mIGhvdyB0byB1c2UgbWFuYWdlZCBjYWNoZSAqLwoJdW5zaWduZWQgY2hhciBjYWNoZV9zdHJhdGVneTsKCXVuc2lnbmVkIGludCBtb3VudF9vcHQ7Cn07CmBgYApPa2F5LCBpdCBsb29rcyBsaWtlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZpZWxkcy4gVGhlIGBremFsbG9jYCBpbml0aWFsaXphdGlvbiBvZiBgc2JpYCBzaG91bGQgZnVsbHkgaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9lcm9mcy9pbnRlcm5hbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzIHtcbiAgNjE6XHRcdC8qIGN1cnJlbnQgc3RyYXRlZ3kgb2YgaG93IHRvIHVzZSBtYW5hZ2VkIGNhY2hlICovXG4gIDYyOlx0XHR1bnNpZ25lZCBjaGFyIGNhY2hlX3N0cmF0ZWd5O1xuICA2MzpcdFx0dW5zaWduZWQgaW50IG1vdW50X29wdDtcbiAgNjQ6XHR9O1xuICA2NTpcdFxuICA2NjpcdHN0cnVjdCBlcm9mc19kZXZfY29udGV4dCB7XG4gIDY3Olx0XHRzdHJ1Y3QgaWRyIHRyZWU7XG4gIDY4Olx0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtO1xuICA2OTpcdFxuICA3MDpcdFx0dW5zaWduZWQgaW50IGV4dHJhX2RldmljZXM7XG4gIDcxOlx0XHRib29sIGZsYXRkZXY7XG4gIDcyOlx0fTtcbiAgNzM6XHRcbiAgNzQ6XHQvKiBhbGwgZmlsZXN5c3RlbS13aWRlIGx6NCBjb25maWd1cmF0aW9ucyAqL1xuICA3NTpcdHN0cnVjdCBlcm9mc19zYl9sejRfaW5mbyB7XG4gIDc2Olx0XHQvKiAjIG9mIHBhZ2VzIG5lZWRlZCBmb3IgRVJPRlMgbHo0IHJvbGxpbmcgZGVjb21wcmVzc2lvbiAqL1xuICA3NzpcdFx0dTE2IG1heF9kaXN0YW5jZV9wYWdlcztcbiAgNzg6XHRcdC8qIG1heGltdW0gcG9zc2libGUgYmxvY2tzIGZvciBwY2x1c3RlcnMgaW4gdGhlIGZpbGVzeXN0ZW0gKi9cbiAgNzk6XHRcdHUxNiBtYXhfcGNsdXN0ZXJibGtzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIzNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGVyb2ZzX21vdW50X29wdHMgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGZpZWxkcy4gUmlnaHQsIHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGlzIG9ubHkgOCBieXRlcyB0b3RhbCwgYnJva2VuIGRvd24gYXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBzb21lIHBhZGRpbmcsIGFuZCB0aGVuIGFuIGludGVnZXIuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBtZW1jbXBgIGNhbGw6IGBtZW1jbXAoJmFtcDtzYmktJmd0O29wdCwgJmFtcDtuZXdfc2JpLSZndDtvcHQsIHNpemVvZihzYmktJmd0O29wdCkpYC4gSXQmIzM5O3MgY29tcGFyaW5nIDggYnl0ZXMuIFNpbmNlIGJvdGggYHNiaWAgYW5kIGBuZXdfc2JpYCBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCB0aGUgcGFkZGluZyBzaG91bGQgYmUgemVyb2VkIG91dC4gU28sIGBtZW1jbXBgIGlzIHJlYWRpbmcgaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIHNlbnNlLgoKQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElzIHRoZXJlIGFueSBzY2VuYXJpbyB3aGVyZSBgc2JpLSZndDtvcHRgICppc24mIzM5O3QqIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLCBvciBtYXliZSBnZXRzIHBsYWNlZCBvbiB0aGUgc3RhY2s/IEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBlcm9mc19zYl9pbmZvYCBpcyBhY3R1YWxseSBhbGxvY2F0ZWQgdG8gY29uZmlybSB0aGVyZSYjMzk7cyBubyB3YXkgdG8gZW5kIHVwIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgd2hlcmUgdGhlIGBlcm9mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2MuKmVyb2ZzX3NiX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gRVJPRlMgU3VwZXJibG9jayBJbmZvcm1hdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuIExldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIGFsbG9jYXRpb24gb2YgbWVtb3J5IGZvciB0aGUgYGVyb2ZzX3NiX2luZm9gIHN0cnVjdHVyZSB1c2luZyBga3phbGxvY2AuIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGhvdyB0aGUgc3VwZXJibG9jayBpbmZvcm1hdGlvbiBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIGBremFsbG9jYCDigJMgemVyb2luZyB0aGUgbWVtb3J5IOKAkyByaWdodCBmcm9tIHRoZSBvdXRzZXQuIFRoaXMgY291bGQgYmUgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgYSBjbGVhbiBzbGF0ZSwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBkYXRhIG9yIHBvaW50ZXJzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byBhIGtub3duIHN0YXRlLiBLbm93aW5nIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcgYWxsb3dzIG1lIHRvIGluZmVyIGNlcnRhaW4gdGhpbmdzIGFib3V0IGhvdyB0aGUgRVJPRlMgZHJpdmVyIGlzIGRlc2lnbmVkLCB3aGF0IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgZGF0YSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBnYXJiYWdlIHZhbHVlcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvYy4qc2JpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmM9OTUxPXN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTk1NC1cbmZzL2Vyb2ZzL3N1cGVyLmM6OTU1Olx0c2JpID0ga3phbGxvY19vYmooKnNiaSk7XG5mcy9lcm9mcy9zdXBlci5jLTk1Ni1cdGlmICghc2JpKVxuLS1cbmZzL2Vyb2ZzL3hhdHRyLmM9NDk0PWludCBlcm9mc194YXR0cl9wcmVmaXhlc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXJvZnMveGF0dHIuYy01MDUtXG5mcy9lcm9mcy94YXR0ci5jOjUwNjpcdHBmcyA9IGt6YWxsb2Nfb2JqcygqcGZzLCBzYmktXHUwMDNleGF0dHJfcHJlZml4X2NvdW50KTtcbmZzL2Vyb2ZzL3hhdHRyLmMtNTA3LVx0aWYgKCFwZnMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQ0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGt6YWxsb2Nfb2JqYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcgcG9wcyBvdXQuIGBremFsbG9jX29iamAuLi4gd2FpdCwgdGhhdCYjMzk7cyBhIG1hY3JvLiBSaWdodC4gSSBuZWVkIHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hhdCB0aGF0IGV4cGFuZHMgdG8gaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBiZWluZyB1c2VkIGNvcnJlY3RseSBoZXJlPyBJcyB0aGVyZSBhIHN1YnRsZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9yLCB3b3JzZSwgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaWYgaXQmIzM5O3Mgbm90IGhhbmRsZWQgd2l0aCBjYXJlPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgdXNhZ2UgcGF0dGVybnMgb2YgdGhpcyBtYWNybyB0byBhc3Nlc3MgaXRzIGFwcHJvcHJpYXRlbmVzcyBoZXJlLiBJcyB0aGVyZSBhbnkgb2J2aW91cyB3YXkgdGhpcyBjb3VsZCBsZWFkIHRvIGZyYWdtZW50YXRpb24sIG9yIGluZWZmaWNpZW50IHplcm9pbmc/IFRpbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUga3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipUcmFjaW5nIGBremFsbG9jX29iamAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBga3phbGxvY19vYmpgIGZ1bmN0aW9uIGJldHRlci4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBpdHMgZGVmaW5pdGlvbi4gV2hlcmUgaXMgaXQgYWN0dWFsbHkgZGVjbGFyZWQgYW5kIGltcGxlbWVudGVkIHdpdGhpbiB0aGlzIGNvZGViYXNlPyBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIGFueSBkb2N1bWVudGF0aW9uIGNvbW1lbnRzIGlmIHRoZXkgZXhpc3QsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0aGUgYWN0dWFsIGNvZGUgd2l0aGluIGl0LiBUaGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IG9wZXJhdGVzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIHRyYWNrIGl0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDczPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU0LS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1NTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTYtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU3OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU4LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWmVyby1Jbml0aWFsaXphdGlvbiBvZiBgc2JpLSZndDtvcHRgIGluIEVST0ZTKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFNvLCBga3phbGxvY19vYmooKnNiaSlgIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGBzYmlgIGFuZCwgaW1wb3J0YW50bHksIHplcm9lcyBpdC4gVGhpcyBtZWFucyBgc2JpLSZndDtvcHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoYXQgYHNiaWAgc3RydWN0LCBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgZWxzZSBtaWdodCBgc2JpLSZndDtvcHRgIGJlIG1vZGlmaWVkPyBJIHJlbWVtYmVyIHNlZWluZyBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIGFuZCBgZXJvZnNfZmNfcmVjb25maWd1cmVgLgoKYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCBpcyB3aGVyZSBpdCBzZWVtcyBsaWtlIGBzYmktJmd0O29wdGAgZ2V0cyBkaXJlY3RseSB1cGRhdGVkOiBgc2JpLSZndDtvcHQgPSBuZXdfc2JpLSZndDtvcHQ7YC4gQ3J1Y2lhbGx5LCBgbmV3X3NiaS0mZ3Q7b3B0YCBpcyBpbml0aWFsaXplZCBhcyB6ZXJvLCB0aGVuIGZpZWxkcyBhcmUgc2V0LiBTbywgdGhlIHBhZGRpbmcgd2l0aGluIGBuZXdfc2JpLSZndDtvcHRgIHJlbWFpbnMgemVyby4gVGhlIGFzc2lnbm1lbnQgYHNiaS0mZ3Q7b3B0ID0gbmV3X3NiaS0mZ3Q7b3B0O2AgaXMgYSBzdHJ1Y3QgY29weS4gRXZlbiBpZiB0aGUgY29tcGlsZXIgb3B0aW1pemVzIHRoaXMgd2l0aCA2NC1iaXQgcmVhZHMvd3JpdGVzLCBpdCYjMzk7cyBjb3B5aW5nIGluaXRpYWxpemVkIG1lbW9yeSAoemVyb2VzIGluIHRoZSBwYWRkaW5nKSB0byB0aGUgZGVzdGluYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhZGRpbmcgaW4gYHNiaS0mZ3Q7b3B0YCBzaG91bGQgYWxzbyBiZSB6ZXJvIGFmdGVyIHRoZSBjb3B5LgoKVGhhdCYjMzk7cyBjcml0aWNhbCBiZWNhdXNlIHRoZW4gdGhlIGBtZW1jbXAoJmFtcDtzYmktJmd0O29wdCwgJmFtcDtuZXdfc2JpLSZndDtvcHQsIHNpemVvZihzYmktJmd0O29wdCkpYCBjb21wYXJlcyBhbGwgOCBieXRlcy4gU2luY2UgdGhlIHBhZGRpbmcgaXMgemVybyBpbiBib3RoLCB0aGUgYG1lbWNtcGAgd2lsbCBjb21wYXJlIHRoZSBmaWVsZHMmIzM5OyB2YWx1ZXMsIGFuZCB0aGUgcGFkZGluZyBieXRlcyBzaG91bGQgbWF0Y2guCgpOb3csIHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBjb3ZlciBteSBiYXNlcy4gSXMgdGhlcmUgYW55IHNjZW5hcmlvIHdoZXJlIGBzYmktJmd0O29wdGAgKmNvdWxkKiBlbmQgdXAgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmc/IExldCYjMzk7cyBydWxlIG91dCBzb21lIHRoaW5ncy4gQ291bGQgYHNiaS0mZ3Q7b3B0YCBiZSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlPyBObywgaXQmIzM5O3MgcGFyc2VkIGZyb20gdGhlIG1vdW50IG9wdGlvbnMsIHNvIHRoZSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgY29udHJvbGxlZC4gQ291bGQgc29tZSBvdGhlciBmdW5jdGlvbiBtb2RpZnkgYHNiaS0mZ3Q7b3B0YD8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhhdC4gVGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgYWxsIG9jY3VycmVuY2VzIG9mIGBvcHRgIGluIHRoZSBgZnMvZXJvZnMvYCBkaXJlY3RvcnkgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC1cdTAwM2VvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvZmlsZWlvLmM9NDQ9c3RhdGljIHZvaWQgZXJvZnNfZmlsZWlvX3JxX3N1Ym1pdChzdHJ1Y3QgZXJvZnNfZmlsZWlvX3JxICpycSlcbi0tXG5mcy9lcm9mcy9maWxlaW8uYy01My1cdHJxLVx1MDAzZWlvY2Iua2lfY29tcGxldGUgPSBlcm9mc19maWxlaW9fa2lfY29tcGxldGU7XG5mcy9lcm9mcy9maWxlaW8uYzo1NDpcdGlmICh0ZXN0X29wdChcdTAwMjZFUk9GU19TQihycS1cdTAwM2VzYiktXHUwMDNlb3B0LCBESVJFQ1RfSU8pIFx1MDAyNlx1MDAyNlxuZnMvZXJvZnMvZmlsZWlvLmMtNTUtXHQgICAgcnEtXHUwMDNlaW9jYi5raV9maWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ0FOX09ESVJFQ1QpXG4tLVxuZnMvZXJvZnMvaW5vZGUuYz0zNj1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9lcm9mcy9pbm9kZS5jLTIxNC1cdGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2PSB+U19EQVg7XG5mcy9lcm9mcy9pbm9kZS5jOjIxNTpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSBcdTAwMjZcdTAwMjYgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXJvZnMvaW5vZGUuYy0yMTYtXHQgICAgKHZpLVx1MDAzZWRhdGFsYXlvdXQgPT0gRVJPRlNfSU5PREVfRkxBVF9QTEFJTiB8fFxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9MTI1PXN0YXRpYyBpbnQgZXJvZnNfaW5pdF9kZXZpY2Uoc3RydWN0IGVyb2ZzX2J1ZiAqYnVmLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMTY0LVx0XHR9XG5mcy9lcm9mcy9zdXBlci5jOjE2NTpcdFx0aWYgKCFkaWYtXHUwMDNlZGF4X2RldiBcdTAwMjZcdTAwMjYgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgREFYX0FMV0FZUykpIHtcbmZzL2Vyb2ZzL3N1cGVyLmMtMTY2LVx0XHRcdGVyb2ZzX2luZm8oc2IsIFwmIzM0O0RBWCB1bnN1cHBvcnRlZCBieSAlcy4gVHVybmluZyBvZmYgREFYLlwmIzM0OyxcbmZzL2Vyb2ZzL3N1cGVyLmMtMTY3LVx0XHRcdFx0ICAgZGlmLVx1MDAzZXBhdGgpO1xuZnMvZXJvZnMvc3VwZXIuYzoxNjg6XHRcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpO1xuZnMvZXJvZnMvc3VwZXIuYy0xNjktXHRcdH1cbi0tXG5mcy9lcm9mcy9zdXBlci5jPTE4Mz1zdGF0aWMgaW50IGVyb2ZzX3NjYW5fZGV2aWNlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMjA1LVxuZnMvZXJvZnMvc3VwZXIuYzoyMDY6XHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgREFYX0FMV0FZUykgXHUwMDI2XHUwMDI2ICFzYmktXHUwMDNlZGlmMC5kYXhfZGV2KSB7XG5mcy9lcm9mcy9zdXBlci5jLTIwNy1cdFx0ZXJvZnNfaW5mbyhzYiwgXCYjMzQ7REFYIHVuc3VwcG9ydGVkIGJ5IGJsb2NrIGRldmljZS4gVHVybmluZyBvZmYgREFYLlwmIzM0Oyk7XG5mcy9lcm9mcy9zdXBlci5jOjIwODpcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpO1xuZnMvZXJvZnMvc3VwZXIuYy0yMDktXHR9XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz0zNzQ9c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0zNzYtI2lmZGVmIENPTkZJR19FUk9GU19GU19aSVBcbmZzL2Vyb2ZzL3N1cGVyLmM6Mzc3Olx0c2JpLVx1MDAzZW9wdC5jYWNoZV9zdHJhdGVneSA9IEVST0ZTX1pJUF9DQUNIRV9SRUFEQVJPVU5EO1xuZnMvZXJvZnMvc3VwZXIuYy0zNzgtXHRzYmktXHUwMDNlc3luY19kZWNvbXByZXNzID0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE87XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0zODAtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxuZnMvZXJvZnMvc3VwZXIuYzozODE6XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XG5mcy9lcm9mcy9zdXBlci5jLTM4Mi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKVxuZnMvZXJvZnMvc3VwZXIuYzozODM6XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgUE9TSVhfQUNMKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtMzg0LX1cbi0tXG5mcy9lcm9mcy9zdXBlci5jPTQyMj1zdGF0aWMgYm9vbCBlcm9mc19mY19zZXRfZGF4X21vZGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCB1bnNpZ25lZCBpbnQgbW9kZSlcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTQyNy1cdFx0aWYgKG1vZGUgPT0gRVJPRlNfTU9VTlRfREFYX0FMV0FZUykge1xuZnMvZXJvZnMvc3VwZXIuYzo0Mjg6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfQUxXQVlTKTtcbmZzL2Vyb2ZzL3N1cGVyLmM6NDI5Olx0XHRcdGNsZWFyX29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfTkVWRVIpO1xuZnMvZXJvZnMvc3VwZXIuYy00MzAtXHRcdFx0cmV0dXJuIHRydWU7XG5mcy9lcm9mcy9zdXBlci5jLTQzMS1cdFx0fSBlbHNlIGlmIChtb2RlID09IEVST0ZTX01PVU5UX0RBWF9ORVZFUikge1xuZnMvZXJvZnMvc3VwZXIuYzo0MzI6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfTkVWRVIpO1xuZnMvZXJvZnMvc3VwZXIuYzo0MzM6XHRcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpO1xuZnMvZXJvZnMvc3VwZXIuYy00MzQtXHRcdFx0cmV0dXJuIHRydWU7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz00Nzc9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy00OTMtXHRcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxuZnMvZXJvZnMvc3VwZXIuYzo0OTQ6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtNDk1LVx0XHRlbHNlXG5mcy9lcm9mcy9zdXBlci5jOjQ5NjpcdFx0XHRjbGVhcl9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XG5mcy9lcm9mcy9zdXBlci5jLTQ5Ny1cdFx0YnJlYWs7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy01MDEtXHRcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxuZnMvZXJvZnMvc3VwZXIuYzo1MDI6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xuZnMvZXJvZnMvc3VwZXIuYy01MDMtXHRcdGVsc2VcbmZzL2Vyb2ZzL3N1cGVyLmM6NTA0Olx0XHRcdGNsZWFyX29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xuZnMvZXJvZnMvc3VwZXIuYy01MDUtXHRcdGJyZWFrO1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtNTA5LVx0XHRlbHNlXG5mcy9lcm9mcy9zdXBlci5jOjUxMDpcdFx0XHRzYmktXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gcmVzdWx0LnVpbnRfMzI7XG5mcy9lcm9mcy9zdXBlci5jLTUxMS1cdFx0YnJlYWs7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy01NTAtXHRcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxuZnMvZXJvZnMvc3VwZXIuYzo1NTE6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBESVJFQ1RfSU8pO1xuZnMvZXJvZnMvc3VwZXIuYy01NTItXHRcdGVsc2VcbmZzL2Vyb2ZzL3N1cGVyLmM6NTUzOlx0XHRcdGNsZWFyX29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBESVJFQ1RfSU8pO1xuZnMvZXJvZnMvc3VwZXIuYy01NTQtXHRcdGJyZWFrO1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtNTYxLVx0XHRlbHNlXG5mcy9lcm9mcy9zdXBlci5jOjU2MjpcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtNTYzLVx0XHRicmVhaztcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTU2Ny1cdFx0ZWxzZVxuZnMvZXJvZnMvc3VwZXIuYzo1Njg6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtNTY5LVx0XHRicmVhaztcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTY0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtNjUzLVxuZnMvZXJvZnMvc3VwZXIuYzo2NTQ6XHRpZiAoIXNiaS1cdTAwM2Vkb21haW5faWQgXHUwMDI2XHUwMDI2IHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xuZnMvZXJvZnMvc3VwZXIuYy02NTUtXHRcdGVycm9yZmMoZmMsIFwmIzM0O2RvbWFpbl9pZCBpcyBuZWVkZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02NTctXHR9XG5mcy9lcm9mcy9zdXBlci5jOjY1ODpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSBcdTAwMjZcdTAwMjYgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG5mcy9lcm9mcy9zdXBlci5jLTY1OS1cdFx0ZXJyb3JmYyhmYywgXCYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02NjEtXHR9XG5mcy9lcm9mcy9zdXBlci5jOjY2MjpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbmZzL2Vyb2ZzL3N1cGVyLmM6NjYzOlx0ICAgIHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xuZnMvZXJvZnMvc3VwZXIuYy02NjQtXHRcdGVycm9yZmMoZmMsIFwmIzM0O3N1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02NjctXHQvKiBFeHRyYSBkZXZpY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIHN1cGVyYmxvY2sgc2hhcmluZy4gICovXG5mcy9lcm9mcy9zdXBlci5jOjY2ODpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbmZzL2Vyb2ZzL3N1cGVyLmMtNjY5LVx0ICAgIHNiaS1cdTAwM2VkZXZzLVx1MDAzZWV4dHJhX2RldmljZXMpIHtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTczMy1cbmZzL2Vyb2ZzL3N1cGVyLmM6NzM0Olx0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpIFx1MDAyNlx1MDAyNiBzYmktXHUwMDNlYmxrc3piaXRzICE9IFBBR0VfU0hJRlQpIHtcbmZzL2Vyb2ZzL3N1cGVyLmMtNzM1LVx0XHRlcm9mc19pbmZvKHNiLCBcJiMzNDt1bnN1cHBvcnRlZCBibG9ja3NpemUgZm9yIERBWFwmIzM0Oyk7XG5mcy9lcm9mcy9zdXBlci5jOjczNjpcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpO1xuZnMvZXJvZnMvc3VwZXIuYy03MzctXHR9XG5mcy9lcm9mcy9zdXBlci5jOjczODpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkgXHUwMDI2XHUwMDI2ICFlcm9mc19zYl9oYXNfaXNoYXJlX3hhdHRycyhzYmkpKSB7XG5mcy9lcm9mcy9zdXBlci5jLTczOS1cdFx0ZXJvZnNfaW5mbyhzYiwgXCYjMzQ7b24tZGlzayBpc2hhcmUgeGF0dHJzIG5vdCBmb3VuZC4gVHVybmluZyBvZmYgaW5vZGVfc2hhcmUuXCYjMzQ7KTtcbmZzL2Vyb2ZzL3N1cGVyLmM6NzQwOlx0XHRjbGVhcl9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xuZnMvZXJvZnMvc3VwZXIuYy03NDEtXHR9XG5mcy9lcm9mcy9zdXBlci5jOjc0MjpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkpXG5mcy9lcm9mcy9zdXBlci5jLTc0My1cdFx0ZXJvZnNfaW5mbyhzYiwgXCYjMzQ7RVhQRVJJTUVOVEFMIEVST0ZTIHBhZ2UgY2FjaGUgc2hhcmUgc3VwcG9ydCBpbiB1c2UuIFVzZSBhdCB5b3VyIG93biByaXNrIVwmIzM0Oyk7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy03NDgtXG5mcy9lcm9mcy9zdXBlci5jOjc0OTpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpKVxuZnMvZXJvZnMvc3VwZXIuYy03NTAtXHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUE9TSVhBQ0w7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz04MDA9c3RhdGljIGludCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTgxNi1cdCAgICAgICBzYmktXHUwMDNlZGlmMC5mc29mZiA9PSBuZXdfc2JpLVx1MDAzZWRpZjAuZnNvZmYgXHUwMDI2XHUwMDI2XG5mcy9lcm9mcy9zdXBlci5jOjgxNzpcdCAgICAgICAhbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpO1xuZnMvZXJvZnMvc3VwZXIuYy04MTgtfVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9ODIwPXN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy04MjMtXG5mcy9lcm9mcy9zdXBlci5jOjgyNDpcdGlmICghdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG5mcy9lcm9mcy9zdXBlci5jLTgyNS1cdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTg2OD1zdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTg3Ni1cdC8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqL1xuZnMvZXJvZnMvc3VwZXIuYzo4Nzc6XHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG5mcy9lcm9mcy9zdXBlci5jLTg3OC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTg4Mi1cbmZzL2Vyb2ZzL3N1cGVyLmM6ODgzOlx0aWYgKHRlc3Rfb3B0KFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpKVxuZnMvZXJvZnMvc3VwZXIuYy04ODQtXHRcdGZjLVx1MDAzZXNiX2ZsYWdzIHw9IFNCX1BPU0lYQUNMO1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtODg3LVxuZnMvZXJvZnMvc3VwZXIuYzo4ODg6XHRzYmktXHUwMDNlb3B0ID0gbmV3X3NiaS1cdTAwM2VvcHQ7XG5mcy9lcm9mcy9zdXBlci5jLTg4OS1cbi0tXG5mcy9lcm9mcy9zdXBlci5jPTExMzY9c3RhdGljIGludCBlcm9mc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0xMTM4LVx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHJvb3QtXHUwMDNlZF9zYik7XG5mcy9lcm9mcy9zdXBlci5jOjExMzk6XHRzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyAqb3B0ID0gXHUwMDI2c2JpLVx1MDAzZW9wdDtcbmZzL2Vyb2ZzL3N1cGVyLmMtMTE0MC1cbi0tXG5mcy9lcm9mcy9zeXNmcy5jPTExNz1zdGF0aWMgdW5zaWduZWQgY2hhciAqX19zdHJ1Y3RfcHRyKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZXJvZnMvc3lzZnMuYy0xMjItXHRpZiAoc3RydWN0X3R5cGUgPT0gc3RydWN0X2Vyb2ZzX21vdW50X29wdHMpXG5mcy9lcm9mcy9zeXNmcy5jOjEyMzpcdFx0cmV0dXJuICh1bnNpZ25lZCBjaGFyICopXHUwMDI2c2JpLVx1MDAzZW9wdCAmIzQzOyBvZmZzZXQ7XG5mcy9lcm9mcy9zeXNmcy5jLTEyNC1cdHJldHVybiBOVUxMO1xuLS1cbmZzL2Vyb2ZzL3hhdHRyLmM9NDA2PXN0YXRpYyBib29sIGVyb2ZzX3hhdHRyX3VzZXJfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9lcm9mcy94YXR0ci5jLTQwNy17XG5mcy9lcm9mcy94YXR0ci5jOjQwODpcdHJldHVybiB0ZXN0X29wdChcdTAwMjZFUk9GU19TQihkZW50cnktXHUwMDNlZF9zYiktXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcbmZzL2Vyb2ZzL3hhdHRyLmMtNDA5LX1cbi0tXG5mcy9lcm9mcy94YXR0ci5jPTQxNj1zdGF0aWMgaW50IGVyb2ZzX3hhdHRyX2dlbmVyaWNfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2Vyb2ZzL3hhdHRyLmMtNDIwLVx0aWYgKGhhbmRsZXItXHUwMDNlZmxhZ3MgPT0gRVJPRlNfWEFUVFJfSU5ERVhfVVNFUiBcdTAwMjZcdTAwMjZcbmZzL2Vyb2ZzL3hhdHRyLmM6NDIxOlx0ICAgICF0ZXN0X29wdChcdTAwMjZFUk9GU19JX1NCKGlub2RlKS1cdTAwM2VvcHQsIFhBVFRSX1VTRVIpKVxuZnMvZXJvZnMveGF0dHIuYy00MjItXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9lcm9mcy94YXR0ci5jPTYxOD1pbnQgZXJvZnNfeGF0dHJfZmlsbF9pbm9kZV9maW5nZXJwcmludChzdHJ1Y3QgZXJvZnNfaW5vZGVfZmluZ2VycHJpbnQgKmZwLFxuLS1cbmZzL2Vyb2ZzL3hhdHRyLmMtNjI1LVxuZnMvZXJvZnMveGF0dHIuYzo2MjY6XHRpZiAoIXRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKSlcbmZzL2Vyb2ZzL3hhdHRyLmMtNjI3LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZnMvZXJvZnMvemRhdGEuYz01MTY9c3RhdGljIGJvb2wgel9lcm9mc19zaG91bGRfYWxsb2NfY2FjaGUoc3RydWN0IHpfZXJvZnNfZnJvbnRlbmQgKmZlKVxuZnMvZXJvZnMvemRhdGEuYy01MTcte1xuZnMvZXJvZnMvemRhdGEuYzo1MTg6XHR1bnNpZ25lZCBpbnQgY2FjaGVzdHJhdGVneSA9IEVST0ZTX0lfU0IoZmUtXHUwMDNlaW5vZGUpLVx1MDAzZW9wdC5jYWNoZV9zdHJhdGVneTtcbmZzL2Vyb2ZzL3pkYXRhLmMtNTE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yYXZlbGluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIEVST0ZTIE1vdW50IE9wdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEVST0ZTIGNvZGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBoYW5kbGluZyBvZiBtb3VudCBvcHRpb25zIGFuZCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBleHBvc3VyZSBvZiBgc2JpLSZndDtvcHRgIHZpYSBzeXNmcyDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIHJlZCBmbGFnLiBCdXQgdGhlbiBJIHJlYWxpemVkLCBzeXNmcyBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIGZpZWxkLWJ5LWZpZWxkLCBzbyB0aGV5IHdvdWxkbiYjMzk7dCBleHBvc2UgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIHBhZGRpbmcgYW5kIGFsbC4gR29vZCwgdGhhdCYjMzk7cyBvbmUgYXZlbnVlIGNsb3NlZC4KClRoZSBjb3JlIG9mIG15IGNvbmNlcm4gaGVyZSBzZWVtcyB0byBiZSBgbWVtY21wKCZhbXA7c2JpLSZndDtvcHQsICZhbXA7bmV3X3NiaS0mZ3Q7b3B0LCBzaXplb2Yoc2JpLSZndDtvcHQpKWAuIElzIGl0IHBvc3NpYmxlIHRoYXQgYG5ld19zYmktJmd0O29wdGAgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIHBhZGRpbmcgd2hlbiBpdCYjMzk7cyBhbGxvY2F0ZWQgdmlhIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIGFuZCB6ZXJvZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYD8gTm8uIFNpbmNlIGl0IGlzIGluaXRpYWxpemVkIGJ5IGBremFsbG9jYCwgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIHBhZGRpbmcgaXMgemVyb2VkLiBMYXRlciBtb2RpZmljYXRpb25zIHdpdGhpbiBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIG9ubHkgdG91Y2ggc3BlY2lmaWMgZmllbGRzLCBsZWF2aW5nIHRoZSBwYWRkaW5nIHVudG91Y2hlZCBhbmQgcmVtYWluaW5nIHplcm9lZC4gU28sIHRoZSBgbWVtY21wYCB3aWxsIGJlIGNvbXBhcmluZyBpbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LgoKVGhlbiwgSSBzdGFydGVkIHdvbmRlcmluZyBpZiBgc2JpLSZndDtvcHRgIHdhcyBjb3BpZWQgZnJvbSBzb21ld2hlcmUgZWxzZSB0aGF0ICp3YXNuJiMzOTt0KiB6ZXJvZWQuIEJ1dCBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgY29kZSBzaG93cyB0aGF0IGBzYmktJmd0O29wdGAgaXMgYXNzaWduZWQgdXNpbmcgYHNiaS0mZ3Q7b3B0ID0gbmV3X3NiaS0mZ3Q7b3B0O2AgaW4gYGVyb2ZzX2ZjX3JlY29uZmlndXJlYC4gR2l2ZW4gdGhhdCBgbmV3X3NiaWAgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgd2UmIzM5O3JlIGd1YXJhbnRlZWQgdG8gYmUgc2FmZSBmcm9tIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcG9zc2liaWxpdHkgdGhhdCBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIG1pZ2h0IGludm9sdmUgYSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24gb24gdGhlIHdob2xlIHdvcmQsIGluY2x1ZGluZyBwYWRkaW5nLiBIb3dldmVyLCB0aGUgcGFkZGluZyB3aWxsIGJlIHplcm8uIFRoZXJlZm9yZSwgZXZlbiBpZiBhIGNvbXBpbGVyIGdlbmVyYXRlcyBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbiBvbiB0aGUgd2hvbGUgd29yZCwgaXQgcmVhZHMgaW5pdGlhbGl6ZWQgKHplcm8pIG1lbW9yeSwgZG9lcyBzb21ldGhpbmcsIGFuZCB3cml0ZXMgdGhlIHBhZGRpbmcgYmFjayBhcyB6ZXJvLiBUaGF0JiMzOTtzIHN0aWxsIHNhZmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYHN1cGVyYmxvY2tfc2hhcmVgIGFuZCBpdHMgdXNlIGluIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgLiBUaGUgY29tcGFyaXNvbiB0aGVyZSBsb29rcyBhdCBgc2JpLSZndDtkaWYwLmZpbGVgLCBgc2JpLSZndDtkaWYwLmZzb2ZmYCwgYG5ld19zYmktJmd0O2RpZjAuZmlsZWAsIGFuZCBgbmV3X3NiaS0mZ3Q7ZGlmMC5mc29mZmAsIGFsb25nIHdpdGggYG1lbWNtcGAgb2YgdGhlIG9wdGlvbnMuIEFyZSB0aG9zZSBpbml0aWFsaXplZD8gSSYjMzk7bSBwcmV0dHkgc3VyZSBgZGlmMGAgaXMgcGFydCBvZiBgc2JpYCB3aGljaCBpcyBpbml0aWFsaXplZCBieSBga3phbGxvY2AsIG1lYW5pbmcgdGhlIGBmc29mZmAgaXMgYWx3YXlzIGluaXRpYWxpemVkLiBFdmVuIGlmIGl0JiMzOTtzIG5vdCBwcm92aWRlZCB2aWEgYSBtb3VudCBvcHRpb24sIGl0IHJlbWFpbnMgemVyby4gVGhlbiBgc2JpLSZndDtkaWYwLmZpbGVgIGlzIHNldCBmcm9tIHRoZSBgT3B0X3NvdXJjZWAgb3B0aW9uLCBhbmQgaXQmIzM5O3MgaGFuZGxlZCBwcm9wZXJseSBpZiBpdCYjMzk7cyBOVUxMICh1bnNwZWNpZmllZCkgd2l0aCB0aGUgY29uZGl0aW9uYWwgY2hlY2suCgpJIGRpZCBhIG1lbnRhbCBjaGVjayBvZiBgZ2V0X3RyZWVfc3VwZXJgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIFZGUyBmdW5jdGlvbi4gVGhlcmUmIzM5O3Mgbm90aGluZyB1bnVzdWFsIHRoZXJlLgoKSXMgYW55dGhpbmcgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlPyBObywgdGhpcyBpcyBqdXN0IGludGVybmFsIG1vdW50IG9wdGlvbiBoYW5kbGluZyBhbmQgc3VwZXJibG9jayBzaGFyaW5nLiBJcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIGV2ZXJ5dGhpbmcmIzM5O3MgaW5pdGlhbGl6ZWQuIE5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUsIHRoZSBzdHJ1Y3R1cmVzIGFyZSBzdHJhaWdodGZvcndhcmQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcmV2aWV3IGFnYWluOiBgc2JpLSZndDtvcHRgIGFuZCBpdHMgcGFkZGluZyBhcmUgemVyb2VkIGJ5IGBremFsbG9jYC4gSWYgYHNiaS0mZ3Q7b3B0YCBpcyBhc3NpZ25lZCBmcm9tIGEgYG5ld19zYmktJmd0O29wdGAsIHRoYXQgYWxzbyBnZXRzIGluaXRpYWxpemVkIGJ5IGBremFsbG9jYC4gVGhlIG1vZGlmaWNhdGlvbnMgdmlhIGBlcm9mc19kZWZhdWx0X29wdGlvbnNgIGFuZCBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIGRvIG5vdCB0b3VjaCB0aGUgcGFkZGluZy4gVGhlcmUmIzM5O3Mgbm8gY29weWluZyB0byB1c2VyIHNwYWNlIGV4Y2VwdCBmb3IgcHJpbnRpbmcgdGhlIG9wdGlvbnMgZmllbGQtYnktZmllbGQgaW4gYGVyb2ZzX3Nob3dfb3B0aW9uc2AuIFRoZSBvcHRpb25zIGFyZSBwcmludGVkIHZpYSBhIHNlcV9maWxlLCB3aGljaCBpcyBzZW50IHRvIHVzZXIgc3BhY2UsIGJ1dCB0aGlzIGhhcHBlbnMgZmllbGQtYnktZmllbGQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gc3RydWN0IGNvcHlpbmcsIG5vIHBhZGRpbmcsIGFuZCBubyBwcm9ibGVtLgoKT2theSwgSSB0aGluayBJJiMzOTt2ZSB0aG9yb3VnaGx5IHZldHRlZCB0aGUgY29kZSwgYW5kIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBtb3VudCBvcHRpb24gaGFuZGxpbmcgaW4gdGhpcyBwYXRjaC4gSSYjMzk7bSBzYXRpc2ZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzNjpcdHN0YXRpYyBpbnQgZXJvZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuMTEzNzpcdHtcbjExMzg6XHRcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihyb290LVx1MDAzZWRfc2IpO1xuMTEzOTpcdFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMgKm9wdCA9IFx1MDAyNnNiaS1cdTAwM2VvcHQ7XG4xMTQwOlx0XG4xMTQxOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxuMTE0MjpcdFx0XHRzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgWEFUVFJfVVNFUikgP1xuMTE0MzpcdFx0XHRcdFx0XCYjMzQ7LHVzZXJfeGF0dHJcJiMzNDsgOiBcJiMzNDssbm91c2VyX3hhdHRyXCYjMzQ7KTtcbjExNDQ6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKVxuMTE0NTpcdFx0XHRzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgUE9TSVhfQUNMKSA/IFwmIzM0OyxhY2xcJiMzNDsgOiBcJiMzNDssbm9hY2xcJiMzNDspO1xuMTE0NjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkgXHUwMDI2XHUwMDI2IHNiaS1cdTAwM2VhdmFpbGFibGVfY29tcHJfYWxncylcbjExNDc6XHRcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyxjYWNoZV9zdHJhdGVneT0lc1wmIzM0OyxcbjExNDg6XHRcdFx0XHQgIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W29wdC1cdTAwM2VjYWNoZV9zdHJhdGVneV0ubmFtZSk7XG4xMTQ5Olx0XHRpZiAodGVzdF9vcHQob3B0LCBEQVhfQUxXQVlTKSlcbjExNTA6XHRcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDssZGF4PWFsd2F5c1wmIzM0Oyk7XG4xMTUxOlx0XHRpZiAodGVzdF9vcHQob3B0LCBEQVhfTkVWRVIpKVxuMTE1MjpcdFx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0OyxkYXg9bmV2ZXJcJiMzNDspO1xuMTE1MzpcdFx0aWYgKGVyb2ZzX2lzX2ZpbGVpb19tb2RlKHNiaSkgXHUwMDI2XHUwMDI2IHRlc3Rfb3B0KG9wdCwgRElSRUNUX0lPKSlcbjExNTQ6XHRcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDssZGlyZWN0aW9cJiMzNDspO1xuMTE1NTpcdFx0aWYgKHNiaS1cdTAwM2VkaWYwLmZzb2ZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE2NQoJCQkJCQkJb3V0cHV0OiAyNjIKCQkJCQkJCXRob3VnaHRzOiAxNzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQgb2YgRVJPRlMgU3VwZXJibG9jayBTaGFyaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB5ZXMsIHRoZSBjb2RlICpkb2VzKiBzZWVtIHRvIHByaW50IGZpZWxkIGJ5IGZpZWxkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHNlZSB0aGF0IHRoZSBvbmx5IHVzZSBvZiBgc2JpLSZndDtvcHRgIGFzIGEgd2hvbGUgaXMgaW4gYG1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSlgLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwb2ludC4gQm90aCBgc2JpYCBhbmQgYG5ld19zYmlgIGFyZSBga3phbGxvY2AmIzM5O2QsIHdoaWNoIG1lYW5zIHRoZWlyIHBhZGRpbmcgaXMgKnplcm9lZCogYnkgZGVmYXVsdC4gU28gZXZlbiBpZiBgbWVtY21wYCByZWFkcyB0aGF0IHBhZGRpbmcsIGl0JiMzOTtzIHJlYWRpbmcgKmluaXRpYWxpemVkKiBtZW1vcnkgKHNwZWNpZmljYWxseSwgemVyb3MpLiBLTVNBTiBzaG91bGRuJiMzOTt0IGNvbXBsYWluLgoKTm93LCBjb3VsZCB0aGUgYHNiaS0mZ3Q7b3B0YCBzdHJ1Y3QsIGluIHBhcnRpY3VsYXIsIGhhdmUgYml0ZmllbGRzPyBObywgaXQgZG9lc24mIzM5O3QuIEl0JiMzOTtzIGdvdCBgdW5zaWduZWQgY2hhciBjYWNoZV9zdHJhdGVneWAgYW5kIGB1bnNpZ25lZCBpbnQgbW91bnRfb3B0YC4gVGhlcmUgaXMgMyBieXRlcyBvZiBwYWRkaW5nIGJldHdlZW4gdGhlc2UgdHdvIGZpZWxkcywgZHVlIHRvIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0LiBCdXQgc2luY2UgaXQmIzM5O3MgYGt6YWxsb2NgJiMzOTtkLCB0aGF0IHBhZGRpbmcgaXMgemVyby4gQW55IHdyaXRlIHRvIGBjYWNoZV9zdHJhdGVneWAgb3IgYG1vdW50X29wdGAgZ2VuZXJhdGVzIGJ5dGUgb3Igd29yZCB3cml0ZXMsIGFuZCBpdCBuZXZlciB0b3VjaGVzIHRoZSBwYWRkaW5nLiBUaGF0IHBhZGRpbmcgKnJlbWFpbnMqIHplcm8uIFRoZSBgbWVtY21wYCBjYWxsIHdpbGwgY29tcGFyZSB0aGUgcGFkZGluZyBieXRlcywgYW5kIHRoZXkgYXJlIGJvdGggemVybywgc28gdGhleSBtYXRjaC4gVGhpcyBpcyBwZXJmZWN0bHkgc2FmZS4gSXQmIzM5O3Mgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTGV0JiMzOTtzIGxvb2sgbW9yZSBicm9hZGx5IGF0IHRoZSBwYXRjaC4gSXQgaW50cm9kdWNlcyBgc3VwZXJibG9ja19zaGFyZWAgbW91bnQgb3B0aW9uLiBOb3csIGl0IGRvZXMgbW9kaWZ5IGBlcm9mc19mY19wYXJzZV9wYXJhbWAgdG8gc2V0IGBTVVBFUkJMT0NLX1NIQVJFYC4gVGhpcyBqdXN0IHNldHMgYSBmbGFnIGluIGBzYmktJmd0O29wdC5tb3VudF9vcHRgLiBgZXJvZnNfZmNfZmlsbF9zdXBlcmAgY2hlY2tzIGZsYWdzIHRoYXQgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgoKVGhlIG5ldyBmdW5jdGlvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgcGxhY2Ugd2hlcmUgaXQgY291bGQgZmFpbC4gQnV0IGxldCYjMzk7cyBzZWUuIEhlcmUsIHdlIHNlZSBjb21wYXJpc29ucyBhZ2FpbnN0IGBzYi0mZ3Q7c19pZmxhZ3NgLCB0aGUgYHNiaS0mZ3Q7ZGlmMGAgbWVtYmVycywgYW5kIGZpbmFsbHkgYG1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSlgLiBBbGwgdGhlc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBpbml0aWFsaXplZCBmbGFncy4KClRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLCB3aGljaCBqdXN0IGNhbGxzIGFub3RoZXIgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIGEgZmxhZy4gQW5kIGBlcm9mc19mY19yZWNvbmZpZ3VyZWAganVzdCBjaGVja3MgYSBmbGFnLCB0b28uCgpGaW5hbGx5LCB0aGUgYGZzL3N1cGVyLmNgIGNoYW5nZSBqdXN0IGV4cG9ydHMgYGdldF90cmVlX3N1cGVyYC4KClRoZXJlIGlzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBgbWVtY21wYCBvbiBhIHN0cnVjdCB3aXRoIHBhZGRpbmcgaXMgc2FmZSBiZWNhdXNlIG9mIGBremFsbG9jYC4gVGhlIHBhZGRpbmcgaXMgbmV2ZXIgbW9kaWZpZWQsIGFuZCByZW1haW5zIHplcm8uIEtNU0FOIHNlZXMgdGhlIHBhZGRpbmcgYXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gemVyby4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gVGhlIGNoYW5nZXMgYXJlIGFsbCByZWxhdGVkIHRvIG1vdW50IG9wdGlvbnMgYW5kIHN1cGVyYmxvY2sgc2hhcmluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCB3aWxsIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIGFuZCB0aG9zZSBhcmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBkZXRlY3RvcnMuIFRoZXJlIGFyZSBubyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTbywgaGVyZSYjMzk7cyBteSByZWFzb25pbmcsIGluIHN1bW1hcnk6CgoqICAgVGhlIHBhdGNoIGludHJvZHVjZXMgYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBmaWxlLWJhY2tlZCBtb3VudHMuCiogICBJdCBhZGRzIGEgY29tcGFyaXNvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCB0aGF0IHVzZXMgYG1lbWNtcGAgb24gYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYC4KKiAgIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgaGFzIHBhZGRpbmcsIGJ1dCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLCBzbyBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kICpyZW1haW5zKiB6ZXJvLiBgbWVtY21wYCBzYWZlbHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgTm8gc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZS4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgaW4gY29udHJvbCBmbG93LgoqICAgUG90ZW50aWFsIGJ1Z3MgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIGxvZ2ljIGVycm9ycykgYXJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgdGVzdGluZy4KKiAgIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpc24mIzM5O3QganVzdGlmaWVkLiBUaGlzIHNob3VsZCBiZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIEVST0ZTIGZpbGUtYmFja2VkIG1vdW50cyBhbmQgYWRkcyBsb2dpYyB0byBzaGFyZSBzdXBlcmJsb2NrcyB3aGVuIGNvbXBhdGlibGUgb3B0aW9ucyBhcmUgdXNlZC4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgdXNlcyBgbWVtY21wYCB0byBjb21wYXJlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIFdoaWxlIHRoaXMgc3RydWN0IGNvbnRhaW5zIHBhZGRpbmcsIGluc3RhbmNlcyBvZiBpdCBhcmUgZW1iZWRkZWQgd2l0aGluIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AsIHdoaWNoIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCAoaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGApLiBDb25zZXF1ZW50bHksIHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIHJlbWFpbnMgemVybywgbWVhbmluZyBgbWVtY21wYCBzYWZlbHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhvdXQgdHJpZ2dlcmluZyBLTVNBTiBvciBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBzaGFyaW5nKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBmaWxlLWJhY2tlZCBtb3VudHMgYW5kIGFkZHMgbG9naWMgdG8gc2hhcmUgc3VwZXJibG9ja3Mgd2hlbiBjb21wYXRpYmxlIG9wdGlvbnMgYXJlIHVzZWQuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIHVzZXMgYG1lbWNtcGAgdG8gY29tcGFyZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBXaGlsZSB0aGlzIHN0cnVjdCBjb250YWlucyBwYWRkaW5nLCBpbnN0YW5jZXMgb2YgaXQgYXJlIGVtYmVkZGVkIHdpdGhpbiBgc3RydWN0IGVyb2ZzX3NiX2luZm9gLCB3aGljaCBpcyBhbHdheXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AgKGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgKS4gQ29uc2VxdWVudGx5LCB0aGUgcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCByZW1haW5zIHplcm8sIG1lYW5pbmcgYG1lbWNtcGAgc2FmZWx5IHJlYWRzIGluaXRpYWxpemVkIG1lbW9yeSB3aXRob3V0IHRyaWdnZXJpbmcgS01TQU4gb3IgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3IuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZXJlIGlzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHN1cGVyYmxvY2sgc2hhcmluZykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6MjYuNDA2ODQyMTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NTQ0Mzg4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19nZXRfdHJlZV9maWxlXCIsXG4gICAgXCJnZXRfdHJlZV9zdXBlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBmaWxlLWJhY2tlZCBtb3VudHMgYW5kIGFkZHMgbG9naWMgdG8gc2hhcmUgc3VwZXJibG9ja3Mgd2hlbiBjb21wYXRpYmxlIG9wdGlvbnMgYXJlIHVzZWQuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIHVzZXMgYG1lbWNtcGAgdG8gY29tcGFyZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBXaGlsZSB0aGlzIHN0cnVjdCBjb250YWlucyBwYWRkaW5nLCBpbnN0YW5jZXMgb2YgaXQgYXJlIGVtYmVkZGVkIHdpdGhpbiBgc3RydWN0IGVyb2ZzX3NiX2luZm9gLCB3aGljaCBpcyBhbHdheXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AgKGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgKS4gQ29uc2VxdWVudGx5LCB0aGUgcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCByZW1haW5zIHplcm8sIG1lYW5pbmcgYG1lbWNtcGAgc2FmZWx5IHJlYWRzIGluaXRpYWxpemVkIG1lbW9yeSB3aXRob3V0IHRyaWdnZXJpbmcgS01TQU4gb3IgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3IuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBzaGFyaW5nKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0sIGFsbG93aW5nIHN1cGVyYmxvY2sgc2hhcmluZyB3aGVuIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG11bHRpcGxlIHRpbWVzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIG1vdW50IGxvZ2ljIGZvciBFUk9GUyBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGxpa2UgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgYW5kIGBlcm9mc19mY19nZXRfdHJlZV9maWxlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIG1vdW50IHBhdGggdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMwOjI2LjQwNjg0ODE4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1NzA3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjFmZTQ0NmFmMzVkZTkzMTdmYzQ2MjIyZWYyNDBkZjA2OThlNzAzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzozMDoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XFxuaW5kZXggZDMwMWQ5YWM5NDZhOS4uNDljNGU3ZGJjNWQ2MSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XFxuQEAgLTEzOSw2ICsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgY2FjaGUuXFxuIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoXFxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLlxcbitzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lXFxuKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlXFxuKyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxcbiA9PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG4gRmlsZS1iYWNrZWQgbW91bnRzXFxuQEAgLTE1Niw2ICsxNTksMTEgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0XFxuIHJlc2lkZXMgb24gYSBibG9jayBkZXZpY2UsIHVzZSB0aGUgdHJhZGl0aW9uYWwgYmxvY2sgZGV2aWNlIG1vdW50IHBhdGhcXG4gaW5zdGVhZC5cXG4gXFxuK1doZW4gc3VwZXJibG9ja19zaGFyZSBpcyBzcGVjaWZpZWQgYW5kIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSAoaWRlbnRpZmllZFxcbitieSBpbm9kZSBhbmQgZnNvZmZzZXQpIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG1vdW50XFxuK29wdGlvbnMsIHRoZSBrZXJuZWwgcmV1c2VzIHRoZSBleGlzdGluZyBzdXBlcmJsb2NrIGluc3RlYWQgb2YgY3JlYXRpbmcgYVxcbituZXcgb25lLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXFxuK1xcbiBTeXNmcyBFbnRyaWVzXFxuID09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL2ludGVybmFsLmggYi9mcy9lcm9mcy9pbnRlcm5hbC5oXFxuaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDRcXG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxcbkBAIC0xNTYsNiArMTU2LDcgQEAgc3RydWN0IGVyb2ZzX3NiX2luZm8ge1xcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlxcdFxcdDB4MDAwMDAwODBcXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cXHRcXHQweDAwMDAwMTAwXFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcXHRcXHQweDAwMDAwMjAwXFxuKyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRVxcdDB4MDAwMDA0MDBcXG4gXFxuICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKVxcdCgob3B0KS1cXHUwMDNlbW91bnRfb3B0IFxcdTAwMjY9IH5FUk9GU19NT1VOVF8jI29wdGlvbilcXG4gI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKVxcdCgob3B0KS1cXHUwMDNlbW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKVxcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xcbmluZGV4IGRkYzk3MTllNmQxOGUuLjQ1N2UwNjc0NDdkNWYgMTAwNjQ0XFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcXG5AQCAtMzg2LDcgKzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxcbiBlbnVtIHtcXG4gXFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxcbiBcXHRPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLFxcbi1cXHRPcHRfc291cmNlLFxcbitcXHRPcHRfc291cmNlLCBPcHRfc3VwZXJibG9ja19zaGFyZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbXSA9IHtcXG5AQCAtNDE1LDYgKzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0ge1xcbiBcXHRmc3BhcmFtX3U2NChcXFwiZnNvZmZzZXRcXFwiLFxcdFxcdFxcdE9wdF9mc29mZnNldCksXFxuIFxcdGZzcGFyYW1fZmxhZyhcXFwiaW5vZGVfc2hhcmVcXFwiLFxcdFxcdE9wdF9pbm9kZV9zaGFyZSksXFxuIFxcdGZzcGFyYW1fZmlsZV9vcl9zdHJpbmcoXFxcInNvdXJjZVxcXCIsXFx0T3B0X3NvdXJjZSksXFxuK1xcdGZzcGFyYW1fZmxhZyhcXFwic3VwZXJibG9ja19zaGFyZVxcXCIsXFx0T3B0X3N1cGVyYmxvY2tfc2hhcmUpLFxcbiBcXHR7fVxcbiB9O1xcbiBcXG5AQCAtNTYwLDYgKzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZTpcXG4rXFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpXFxuK1xcdFxcdFxcdGVycm9yZmMoZmMsIFxcXCIlcyBvcHRpb24gbm90IHN1cHBvcnRlZFxcXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE9wdF9zb3VyY2U6XFxuIFxcdFxcdHJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTtcXG4gXFx0fVxcbkBAIC02NTIsNiArNjU5LDE3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIFxcdFxcdGVycm9yZmMoZmMsIFxcXCJGU0RBWCBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuK1xcdGlmICh0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xcbitcXHRcXHRlcnJvcmZjKGZjLCBcXFwic3VwZXJibG9ja19zaGFyZSBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdC8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi9cXG4rXFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNiaS1cXHUwMDNlZGV2cy1cXHUwMDNlZXh0cmFfZGV2aWNlcykge1xcbitcXHRcXHRlcnJvcmZjKGZjLCBcXFwic3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXNcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4gXFxuIFxcdHNiaS1cXHUwMDNlYmxrc3piaXRzID0gUEFHRV9TSElGVDtcXG4gXFx0aWYgKCFzYi1cXHUwMDNlc19iZGV2KSB7XFxuQEAgLTc3OSw2ICs3OTcsMzYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHdpdGggYSBzYmkgdGhhdFxcbitcXHQgKiBoYXMgU1VQRVJCTE9DS19TSEFSRSBzZXQsIHNvIHRoYXQgdGhlIG1lbWNtcCBsYXRlciBlbnN1cmVzXFxuK1xcdCAqIG5ld19zYmkgYWxzbyBpcyBzaGFyZWFibGUuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Ioc2IpO1xcbitcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqbmV3X3NiaSA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuK1xcbitcXHRpZiAoc2ItXFx1MDAzZXNfaWZsYWdzIFxcdTAwMjYgU0JfSV9SRVRJUkVEKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFzYmktXFx1MDAzZWRpZjAuZmlsZSB8fCAhbmV3X3NiaS1cXHUwMDNlZGlmMC5maWxlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGZpbGVfaW5vZGUoc2JpLVxcdTAwM2VkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS1cXHUwMDNlZGlmMC5maWxlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgc2JpLVxcdTAwM2VkaWYwLmZzb2ZmID09IG5ld19zYmktXFx1MDAzZWRpZjAuZnNvZmYgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgICFtZW1jbXAoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBcXHUwMDI2bmV3X3NiaS1cXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVxcdTAwM2VvcHQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4re1xcbitcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4rXFxuK1xcdGlmICghdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcXG4rXFx0XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rXFxuK1xcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIHtcXG4gXFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuQEAgLTc5NCw3ICs4NDIsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0XFx0XFx0ZXJyb3JmYyhmYywgXFxcInNvdXJjZSBpcyB1bnN1cHBvcnRlZFxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbitcXHRcXHRyZXR1cm4gZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShmYyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsXFxuQEAgLTgxMiw3ICs4NjAsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFxuIFxcdFxcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVxcdTAwM2VkaWYwLmZpbGUpLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBzYmktXFx1MDAzZWRpZjAuZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlcmVhZF9mb2xpbylcXG4tXFx0XFx0XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpO1xcbiBcXHR9XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtODI1LDYgKzg3MywxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFxuIFxcdERCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7XFxuIFxcbitcXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cXG4rXFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbiBcXHRpZiAobmV3X3NiaS1cXHUwMDNlZG9tYWluX2lkKVxcbiBcXHRcXHRlcm9mc19pbmZvKHNiLCBcXFwiaWdub3JpbmcgcmVjb25maWd1cmF0aW9uIGZvciBkb21haW5faWQuXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMTM4OSw3ICsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbisvKipcXG4rICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXFxuKyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXFxuKyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXFxuKyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrXFxuKyAqXFxuKyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xcbisgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoXFxuKyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxcbisgKi9cXG4raW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxcbiBcXHRcXHRpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXFxuQEAgLTE0MTYsMTIgKzE0MjYsMTMgQEAgc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpO1xcbiBcXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4ge1xcbi1cXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuK1xcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XFxuIFxcbkBAIC0xNDI5LDcgKzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4ge1xcbi1cXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbitcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7XFxuIFxcbkBAIC0xNDM5LDcgKzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbiBcXHRcXHR2b2lkICprZXkpXFxuIHtcXG4gXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IGtleTtcXG4tXFx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbitcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxcbkBAIC0xNTAsNiArMTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xcbiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiBcXG4rZXh0ZXJuIGludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuK1xcdFxcdFxcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXFxuK1xcdFxcdFxcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcXG4gZXh0ZXJuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6MjcuMDEzMTI0MTQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjYzMTY2NDMyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19nZXRfdHJlZV9maWxlXCIsXG4gICAgXCJnZXRfdHJlZV9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0sIGFsbG93aW5nIHN1cGVyYmxvY2sgc2hhcmluZyB3aGVuIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG11bHRpcGxlIHRpbWVzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIG1vdW50IGxvZ2ljIGZvciBFUk9GUyBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGxpa2UgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgYW5kIGBlcm9mc19mY19nZXRfdHJlZV9maWxlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIG1vdW50IHBhdGggdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYxZmU0NDZhZjM1ZGU5MzE3ZmM0NjIyMmVmMjQwZGYwNjk4ZTcwM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzozMDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbmluZGV4IGQzMDFkOWFjOTQ2YTkuLjQ5YzRlN2RiYzVkNjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbkBAIC0xMzksNiArMTM5LDkgQEAgaW5vZGVfc2hhcmUgICAgICAgICAgICBFbmFibGUgaW5vZGUgcGFnZSBzaGFyaW5nIGZvciB0aGlzIGZpbGVzeXN0ZW0uICBJbm9kZXMgd2lcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgY2FjaGUuXG4gc291cmNlPSVzICAgICAgICAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU3BlY2lmeSB0aGUgYmFja2luZyBpbWFnZSBhcyBhIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIGFscmVhZHktb3BlbmVkIGZpbGUgZGVzY3JpcHRvci5cbitzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lXG4rICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGVcbisgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy5cbiA9PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIEZpbGUtYmFja2VkIG1vdW50c1xuQEAgLTE1Niw2ICsxNTksMTEgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0XG4gcmVzaWRlcyBvbiBhIGJsb2NrIGRldmljZSwgdXNlIHRoZSB0cmFkaXRpb25hbCBibG9jayBkZXZpY2UgbW91bnQgcGF0aFxuIGluc3RlYWQuXG4gXG4rV2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCBhbmQgdGhlIHNhbWUgYmFja2luZyBmaWxlIChpZGVudGlmaWVkXG4rYnkgaW5vZGUgYW5kIGZzb2Zmc2V0KSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZSBtb3VudFxuK29wdGlvbnMsIHRoZSBrZXJuZWwgcmV1c2VzIHRoZSBleGlzdGluZyBzdXBlcmJsb2NrIGluc3RlYWQgb2YgY3JlYXRpbmcgYVxuK25ldyBvbmUuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy5cbitcbiBTeXNmcyBFbnRyaWVzXG4gPT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL2ludGVybmFsLmggYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5pbmRleCA1N2JkMjE4NTljNjVkLi44NmRhMjE5ZjhmNGVjIDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuQEAgLTE1Niw2ICsxNTYsNyBAQCBzdHJ1Y3QgZXJvZnNfc2JfaW5mbyB7XG4gI2RlZmluZSBFUk9GU19NT1VOVF9EQVhfTkVWRVJcdFx0MHgwMDAwMDA4MFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfRElSRUNUX0lPXHRcdDB4MDAwMDAxMDBcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0lOT0RFX1NIQVJFXHRcdDB4MDAwMDAyMDBcbisjZGVmaW5lIEVST0ZTX01PVU5UX1NVUEVSQkxPQ0tfU0hBUkVcdDB4MDAwMDA0MDBcbiBcbiAjZGVmaW5lIGNsZWFyX29wdChvcHQsIG9wdGlvbilcdCgob3B0KS1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pXG4gI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbilcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xuaW5kZXggZGRjOTcxOWU2ZDE4ZS4uNDU3ZTA2NzQ0N2Q1ZiAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcbisrKyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbkBAIC0zODYsNyArMzg2LDcgQEAgc3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG4gZW51bSB7XG4gXHRPcHRfdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X2NhY2hlX3N0cmF0ZWd5LCBPcHRfZGF4LCBPcHRfZGF4X2VudW0sXG4gXHRPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLFxuLVx0T3B0X3NvdXJjZSxcbitcdE9wdF9zb3VyY2UsIE9wdF9zdXBlcmJsb2NrX3NoYXJlLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBlcm9mc19wYXJhbV9jYWNoZV9zdHJhdGVneVtdID0ge1xuQEAgLTQxNSw2ICs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbiBcdGZzcGFyYW1fdTY0KFwiZnNvZmZzZXRcIixcdFx0XHRPcHRfZnNvZmZzZXQpLFxuIFx0ZnNwYXJhbV9mbGFnKFwiaW5vZGVfc2hhcmVcIixcdFx0T3B0X2lub2RlX3NoYXJlKSxcbiBcdGZzcGFyYW1fZmlsZV9vcl9zdHJpbmcoXCJzb3VyY2VcIixcdE9wdF9zb3VyY2UpLFxuK1x0ZnNwYXJhbV9mbGFnKFwic3VwZXJibG9ja19zaGFyZVwiLFx0T3B0X3N1cGVyYmxvY2tfc2hhcmUpLFxuIFx0e31cbiB9O1xuIFxuQEAgLTU2MCw2ICs1NjEsMTIgQEAgc3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdGVsc2VcbiBcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIE9wdF9zdXBlcmJsb2NrX3NoYXJlOlxuK1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcbitcdFx0XHRlcnJvcmZjKGZjLCBcIiVzIG9wdGlvbiBub3Qgc3VwcG9ydGVkXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBPcHRfc291cmNlOlxuIFx0XHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XG4gXHR9XG5AQCAtNjUyLDYgKzY1OSwxNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0XHRlcnJvcmZjKGZjLCBcIkZTREFYIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuK1x0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xuK1x0XHRlcnJvcmZjKGZjLCBcInN1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHQvKiBFeHRyYSBkZXZpY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIHN1cGVyYmxvY2sgc2hhcmluZy4gICovXG4rXHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2JpLVx1MDAzZWRldnMtXHUwMDNlZXh0cmFfZGV2aWNlcykge1xuK1x0XHRlcnJvcmZjKGZjLCBcInN1cGVyYmxvY2tfc2hhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRyYSBkZXZpY2VzXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcbiBcdHNiaS1cdTAwM2VibGtzemJpdHMgPSBQQUdFX1NISUZUO1xuIFx0aWYgKCFzYi1cdTAwM2VzX2JkZXYpIHtcbkBAIC03NzksNiArNzk3LDM2IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0LypcbitcdCAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXRcbitcdCAqIGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCwgc28gdGhhdCB0aGUgbWVtY21wIGxhdGVyIGVuc3VyZXNcbitcdCAqIG5ld19zYmkgYWxzbyBpcyBzaGFyZWFibGUuXG4rXHQgKi9cbitcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7XG4rXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqbmV3X3NiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbitcbitcdGlmIChzYi1cdTAwM2VzX2lmbGFncyBcdTAwMjYgU0JfSV9SRVRJUkVEKVxuK1x0XHRyZXR1cm4gMDtcbitcdGlmICghc2JpLVx1MDAzZWRpZjAuZmlsZSB8fCAhbmV3X3NiaS1cdTAwM2VkaWYwLmZpbGUpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSkgPT0gZmlsZV9pbm9kZShuZXdfc2JpLVx1MDAzZWRpZjAuZmlsZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgc2JpLVx1MDAzZWRpZjAuZnNvZmYgPT0gbmV3X3NiaS1cdTAwM2VkaWYwLmZzb2ZmIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICFtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbitcbitcdGlmICghdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG4rXHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlciwgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIHtcbiBcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG5AQCAtNzk0LDcgKzg0Miw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0XHRcdGVycm9yZmMoZmMsIFwic291cmNlIGlzIHVuc3VwcG9ydGVkXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXHRcdHJldHVybiBlcm9mc19mY19nZXRfdHJlZV9maWxlKGZjKTtcbiBcdH1cbiBcbiBcdHJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsXG5AQCAtODEyLDcgKzg2MCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0XHRpZiAoU19JU1JFRyhmaWxlX2lub2RlKHNiaS1cdTAwM2VkaWYwLmZpbGUpLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBzYmktXHUwMDNlZGlmMC5maWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VyZWFkX2ZvbGlvKVxuLVx0XHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXHRcdFx0cmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpO1xuIFx0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtODI1LDYgKzg3MywxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcbiBcdERCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7XG4gXG4rXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbiBcdGlmIChuZXdfc2JpLVx1MDAzZWRvbWFpbl9pZClcbiBcdFx0ZXJvZnNfaW5mbyhzYiwgXCJpZ25vcmluZyByZWNvbmZpZ3VyYXRpb24gZm9yIGRvbWFpbl9pZC5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMTM4OSw3ICsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbisvKipcbisgKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmVcbisgKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVyc1xuKyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXG4rICogQGZpbGxfc3VwZXI6IEhlbHBlciB0byBpbml0aWFsaXNlIGEgbmV3IHN1cGVyYmxvY2tcbisgKlxuKyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xuKyAqIHJldXNlZDsgb3RoZXJ3aXNlIGEgbmV3IGFub255bW91cyBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpc2VkIHdpdGhcbisgKiBAZmlsbF9zdXBlci4gIFBhc3NpbmcgTlVMTCBmb3IgQHRlc3QgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgc3VwZXJibG9jay5cbisgKi9cbitpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4gXHRcdGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHQgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG5AQCAtMTQxNiwxMiArMTQyNiwxMyBAQCBzdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7XG4gXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuK1x0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XG4gXG5AQCAtMTQyOSw3ICsxNDQwLDcgQEAgaW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuIHtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zaW5nbGUpO1xuIFxuQEAgLTE0MzksNyArMTQ1MCw3IEBAIGludCBnZXRfdHJlZV9rZXllZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdHZvaWQgKmtleSlcbiB7XG4gXHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBrZXk7XG4tXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5pbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5AQCAtMTUwLDYgKzE1MCwxMCBAQCBleHRlcm4gaW50IHZmc19wYXJzZV9mc19wYXJhbV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG4gZXh0ZXJuIHZvaWQgZmNfZHJvcF9sb2NrZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiBcbitleHRlcm4gaW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbitcdFx0XHQgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuK1x0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiBleHRlcm4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHQgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDoyNy4wMTMxMjUzMTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg4OTc3MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRVJPRlMgRmlsZXN5c3RlbSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIGVuYWJsZSBzdXBlcmJsb2NrIHNoYXJpbmcgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGNvbXBhdGlibGUgc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgYGZzL2Vyb2ZzL3N1cGVyLmNgLCBgZnMvZXJvZnMvaW50ZXJuYWwuaGAsIGBmcy9zdXBlci5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaGAuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpbiBgZnMvc3VwZXIuY2Agc2VlbXMgdG8gYmUgcmVuYW1pbmcgYHZmc19nZXRfc3VwZXJgIHRvIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGV4cG9ydGluZyBpdC4gSW4gYGZzL2Vyb2ZzL3N1cGVyLmNgIHNwZWNpZmljYWxseSwgbmV3IGZ1bmN0aW9ucyBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgIGFyZSBhZGRlZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIHRhcmdldGluZyB3aXRoIGZ1enppbmc/IERlZmluaXRlbHkuIEl0J3MgYSAqbmV3KiBtb3VudCBvcHRpb24gZm9yIEVST0ZTLiBNb3VudCBvcHRpb25zIGFyZSBwcmFjdGljYWxseSB0YWlsb3ItbWFkZSBmb3IgZnV6emluZyB3aXRoIHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4gVGhleSdyZSBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBmaWxlc3lzdGVtJ3MgYmVoYXZpb3IuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMuIENsZWFybHksIGBDT05GSUdfRVJPRlNfRlNgIGlzIHRoZSBiaWcgb25lIGZvciBlbmFibGluZyB0aGUgRVJPRlMgZmlsZXN5c3RlbSBpdHNlbGYuIFRoZSBwYXRjaCBjb2RlIGl0c2VsZiwgc3BlY2lmaWNhbGx5IHRoZSBjb2RlIHNuaXBwZXQgaW4gYGZzL2Vyb2ZzL3N1cGVyLmNgLCBpbmNsdWRlcyBhIGNoZWNrIGZvciBgQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gVGhhdCdzIGltcG9ydGFudDsgaWYgdGhhdCBvcHRpb24gaXNuJ3QgZW5hYmxlZCwgdGhlIGBzdXBlcmJsb2NrX3NoYXJlYCBvcHRpb24gdGhyb3dzIGFuIGVycm9yLiBTbywgSSdsbCBuZWVkIHRvIGVuYWJsZSBib3RoIGBFUk9GU19GU2AgYW5kIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhpcyBmZWF0dXJlLlxuXG5GaW5hbGx5LCBJIHNob3VsZCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgZnMvZXJvZnMvS2NvbmZpZ2AgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCByZXF1aXJlbWVudHMgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMgYmVmb3JlIEkgc3RhcnQgY3JhZnRpbmcgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6MzQuMDAyMTA1MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNDk5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFUk9GU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL0tjb25maWctMi1cXG5mcy9lcm9mcy9LY29uZmlnOjM6Y29uZmlnIEVST0ZTX0ZTXFxuZnMvZXJvZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTQ5LVxcbmZzL2Vyb2ZzL0tjb25maWc6NTA6Y29uZmlnIEVST0ZTX0ZTX0RFQlVHXFxuZnMvZXJvZnMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJFUk9GUyBkZWJ1Z2dpbmcgZmVhdHVyZVxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctNTktXFxuZnMvZXJvZnMvS2NvbmZpZzo2MDpjb25maWcgRVJPRlNfRlNfWEFUVFJcXG5mcy9lcm9mcy9LY29uZmlnLTYxLVxcdGJvb2wgXFxcIkVST0ZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTcwLVxcbmZzL2Vyb2ZzL0tjb25maWc6NzE6Y29uZmlnIEVST0ZTX0ZTX1BPU0lYX0FDTFxcbmZzL2Vyb2ZzL0tjb25maWctNzItXFx0Ym9vbCBcXFwiRVJPRlMgQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTg0LVxcbmZzL2Vyb2ZzL0tjb25maWc6ODU6Y29uZmlnIEVST0ZTX0ZTX1NFQ1VSSVRZXFxuZnMvZXJvZnMvS2NvbmZpZy04Ni1cXHRib29sIFxcXCJFUk9GUyBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTk3LVxcbmZzL2Vyb2ZzL0tjb25maWc6OTg6Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXFxuZnMvZXJvZnMvS2NvbmZpZy05OS1cXHRib29sIFxcXCJGaWxlLWJhY2tlZCBFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTExMS1cXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMTMtXFx0Ym9vbCBcXFwiRVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiRVJPRlMgTFpNQSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTMzLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTM0OmNvbmZpZyBFUk9GU19GU19aSVBfTFpNQV9ERUZBVUxUX01BWF9TVFJFQU1TXFxuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXFx0aW50IFxcXCJFUk9GUyBMWk1BIGRlZmF1bHQgbWF4aW11bSBkZWNvbXByZXNzaW9uIHN0cmVhbXNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE0Ny1cXG5mcy9lcm9mcy9LY29uZmlnOjE0ODpjb25maWcgRVJPRlNfRlNfWklQX0RFRkxBVEVcXG5mcy9lcm9mcy9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJFUk9GUyBERUZMQVRFIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTgtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNTk6Y29uZmlnIEVST0ZTX0ZTX1pJUF9aU1REXFxuZnMvZXJvZnMvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiRVJPRlMgWnN0YW5kYXJkIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNjktXFxuZnMvZXJvZnMvS2NvbmZpZzoxNzA6Y29uZmlnIEVST0ZTX0ZTX1pJUF9BQ0NFTFxcbmZzL2Vyb2ZzL0tjb25maWctMTcxLVxcdGJvb2wgXFxcIkVST0ZTIGhhcmR3YXJlIGRlY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTgzLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTg0OmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURcXG5mcy9lcm9mcy9LY29uZmlnLTE4NS1cXHRib29sIFxcXCJFUk9GUyBwZXItY3B1IGRlY29tcHJlc3Npb24ga3RocmVhZCB3b3JrZXJzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xOTItXFxuZnMvZXJvZnMvS2NvbmZpZzoxOTM6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRF9ISVBSSVxcbmZzL2Vyb2ZzL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIkVST0ZTIGhpZ2ggcHJpb3JpdHkgcGVyLUNQVSBrdGhyZWFkIHdvcmtlcnNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTIwMi1cXG5mcy9lcm9mcy9LY29uZmlnOjIwMzpjb25maWcgRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRVxcbmZzL2Vyb2ZzL0tjb25maWctMjA0LVxcdGJvb2wgXFxcIkVST0ZTIHBhZ2UgY2FjaGUgc2hhcmUgc3VwcG9ydCAoZXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6MzQuMTEyNjA4NzQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMDI0NTE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAuIEJlZm9yZSBJIGV2ZW4gdG91Y2ggYW55dGhpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUuIExldCdzIHN0YXJ0IHdpdGggYSBkZXBlbmRlbmN5IGFuYWx5c2lzIG9mIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAuIFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGhpbmdlIG9uIHRoaXMgb25lPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gaW1wYWN0cyBJIG5lZWQgdG8gY29uc2lkZXI/IFdoYXQgZG9lcyB0aGlzIGVuYWJsZSBvciBkaXNhYmxlLCBhbmQgaG93IGRvZXMgdGhhdCBhZmZlY3QgdGhlIG92ZXJhbGwgc3lzdGVtIGZ1bmN0aW9uYWxpdHk/IEknbGwgcHJvYmFibHkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbSBhbmQgY3Jvc3MtcmVmZXJlbmNlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGUgc3RhYmlsaXR5IGFuZCBpbXBhY3Qgb2YgdGhpcyBjb25maWcgb3B0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGNoYW5naW5nIHRoaXMgZG9lc24ndCBhY2NpZGVudGFsbHkgYnJlYWsgc29tZXRoaW5nIGVsc2UgZG93biB0aGUgbGluZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggZmVhdHVyZXMgaXQgZW5hYmxlcyBhbmQgZGlzYWJsZXMuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBpcyBjb25uZWN0ZWQgdG8uIExldCdzIGRvIHRoaXMgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDozNy44NDI4NTYwNjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9lcm9mcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSwgc2F5IE4uXFxuICA5NzpcXHRcXG4gIDk4OlxcdGNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxcbiAgOTk6XFx0XFx0Ym9vbCBcXFwiRmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbiAxMDA6XFx0XFx0ZGVwZW5kcyBvbiBFUk9GU19GU1xcbiAxMDE6XFx0XFx0ZGVmYXVsdCB5XFxuIDEwMjpcXHRcXHRoZWxwXFxuIDEwMzpcXHRcXHQgIFRoaXMgYWxsb3dzIEVST0ZTIHRvIHVzZSBmaWxlc3lzdGVtIGltYWdlIGZpbGVzIGRpcmVjdGx5LCB3aXRob3V0XFxuIDEwNDpcXHRcXHQgIHRoZSBpbnRlcmNlc3Npb24gb2YgbG9vcGJhY2sgYmxvY2sgZGV2aWNlcyBvciBsaWtld2lzZS4gSXQgaXNcXG4gMTA1OlxcdFxcdCAgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY29udGFpbmVyIGltYWdlcyB3aXRoIG51bWVyb3VzIGJsb2JzIGFuZFxcbiAxMDY6XFx0XFx0ICBvdGhlciBzYW5kYm94ZXMsIHdoZXJlIGxvb3AgZGV2aWNlcyBiZWhhdmUgaW50cmljYXRlbHkuICBJdCBjYW4gYWxzb1xcbiAxMDc6XFx0XFx0ICBiZSB1c2VkIHRvIHNpbXBsaWZ5IGVycm9yLXByb25lIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgdW5uZWNlc3NhcnlcXG4gMTA4OlxcdFxcdCAgdmlydHVhbCBibG9jayBkZXZpY2VzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQgIElmIHlvdSBkb24ndCB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUsIHNheSBOLlxcbiAxMTE6XFx0XFxuIDExMjpcXHRjb25maWcgRVJPRlNfRlNfWklQXFxuIDExMzpcXHRcXHRib29sIFxcXCJFUk9GUyBEYXRhIENvbXByZXNzaW9uIFN1cHBvcnRcXFwiXFxuIDExNDpcXHRcXHRkZXBlbmRzIG9uIEVST0ZTX0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMwOjM3Ljg0Mjk1MDk0MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjMwOTE0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipBbmFseXppbmcgRVJPRlMgYW5kIEl0cyBGaWxlLUJhY2tlZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCBpcywgYXMgSSBzdXNwZWN0ZWQsIGNvbnRpbmdlbnQgb24gdGhlIGNvcmUgYEVST0ZTX0ZTYCBmdW5jdGlvbmFsaXR5LiBUaGF0IG1ha2VzIHNlbnNlLCBhIGZpbGUtYmFja2VkIHN5c3RlbSBidWlsZHMgb24gdGhlIGZvdW5kYXRpb25zIG9mIHRoZSBiYXNpYyBFUk9GUyBzdHJ1Y3R1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSB3aGF0J3MgY2hhbmdlZCBvciBiZWVuIGFkZGVkIHRvIGFjY29tbW9kYXRlIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gTGV0J3MgbGlzdCB0aG9zZSBmdW5jdGlvbnM6IGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgLCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAsIGFuZCBgZ2V0X3RyZWVfc3VwZXJgLiBUaGUgbGFzdCBvbmUsIGBnZXRfdHJlZV9zdXBlcmAsIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgZXhwb3J0ZWQgZnJvbSBgZnMvc3VwZXIuY2AuIFRoYXQgaGludHMgYXQgYSBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnQgd2l0aCB0aGUgY29yZSBWRlMgc3VwZXIgYmxvY2sgbWFuYWdlbWVudC5cblxuSSdsbCBzaGlmdCBteSBhdHRlbnRpb24gdG8gYGZzL3N1cGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgYGdldF90cmVlX3N1cGVyYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgbGV2ZXJhZ2VkLCBvciBwb3RlbnRpYWxseSBleHRlbmRlZCwgd2l0aGluIHRoaXMgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCBjb250ZXh0LiBUaGF0IHdpbGwgbGlrZWx5IHByb3ZpZGUgaW5zaWdodCBpbnRvIGhvdyB0aGUgZmlsZS1iYWNrZWQgRVJPRlMgaXMgbW91bnRpbmcgYW5kIGludGVncmF0aW5nIHdpdGggdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDU5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDo0Mi4xNjYwNDQ5MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3MTI2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3RyZWVfc3VwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zdXBlci5jPTEzODc9c3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3N1cGVyLmMtMTM5Mi0vKipcXG5mcy9zdXBlci5jOjEzOTM6ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXFxuZnMvc3VwZXIuYy0xMzk0LSAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXFxuLS1cXG5mcy9zdXBlci5jLTE0MDEtICovXFxuZnMvc3VwZXIuYzoxNDAyOmludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuZnMvc3VwZXIuYy0xNDAzLVxcdFxcdGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcXG4tLVxcbmZzL3N1cGVyLmMtMTQyOC19XFxuZnMvc3VwZXIuYzoxNDI5OkVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpO1xcbmZzL3N1cGVyLmMtMTQzMC1cXG5mcy9zdXBlci5jPTE0MzE9aW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcbmZzL3N1cGVyLmMtMTQzNC17XFxuZnMvc3VwZXIuYzoxNDM1OlxcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuZnMvc3VwZXIuYy0xNDM2LX1cXG4tLVxcbmZzL3N1cGVyLmM9MTQzOT1pbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcbmZzL3N1cGVyLmMtMTQ0Mi17XFxuZnMvc3VwZXIuYzoxNDQzOlxcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbmZzL3N1cGVyLmMtMTQ0NC19XFxuLS1cXG5mcy9zdXBlci5jPTE0NDc9aW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcbmZzL3N1cGVyLmMtMTQ1Mi1cXHRmYy1cXHUwMDNlc19mc19pbmZvID0ga2V5O1xcbmZzL3N1cGVyLmM6MTQ1MzpcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbmZzL3N1cGVyLmMtMTQ1NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMwOjQyLjIyNzc2MTY1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjY5ODE2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVST0ZTIEZpbGVzeXN0ZW0gTW91bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gbW91bnRzLCBhbmQgSSdtIGJyZWFraW5nIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZS4gYGdldF90cmVlX3N1cGVyYCBzZWVtcyB0byBiZSBhIGdlbmVyYWwgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKSBmdW5jdGlvbiwgbm90aGluZyBwYXJ0aWN1bGFybHkgRVJPRlMtc3BlY2lmaWMgYWJvdXQgdGhhdC4gTXkgcmVhbCBpbnRlcmVzdCBsaWVzIGluIGhvdyBFUk9GUyBob29rcyBpbnRvIHRoaXMgZ2VuZXJhbCBmcmFtZXdvcmsuIEl0J3MgY2xlYXIgdGhhdCBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgIGFyZSB0aGUgRVJPRlMtc3BlY2lmaWMgcGllY2VzIHRoYXQgYWN0dWFsbHkgaGFuZGxlIHRoZSBmaWxlIHN5c3RlbSdzIGRldGFpbHMuIEFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVgIGxvb2tzIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IOKAkyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1vdW50aW5nIEVST0ZTIHZvbHVtZXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZnMvZXJvZnMvc3VwZXIuY2AsIGFzIHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZXNlIHR3byBFUk9GUy1zcGVjaWZpYyBmdW5jdGlvbnMsIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAsIGluIGRldGFpbC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBhcnRzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgZ2VuZXJpYyBWRlMgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDo0Ni42NTQ3NDg3NDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMTk2NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL3N1cGVyLmM9NjQzPXN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTc5OS1cXG5mcy9lcm9mcy9zdXBlci5jOjgwMDpzdGF0aWMgaW50IGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2Vyb2ZzL3N1cGVyLmMtODAxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTgyMD1zdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy04MjYtXFxuZnMvZXJvZnMvc3VwZXIuYzo4Mjc6XFx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtODI4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6NDYuNzI3OTUxNTY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0Nzk3NDY0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRVJPRlMgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbiBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbGxvd2luZyBmb3Igc2hhcmVkIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMsIHdoaWNoIGlzIGEgbmVhdCBvcHRpbWl6YXRpb24sIGlmIGl0IHdvcmtzIGNvcnJlY3RseS5cblxuVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMgYXJlIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgLCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAsIGFuZCBgZ2V0X3RyZWVfc3VwZXJgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGlzIGludGVncmF0ZWQgaW50byB0aGUgY29yZSBtb3VudCBwcm9jZXNzIG9mIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5Ob3csIGFzIGZhciBhcyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgRVJPRlNfRlNgIGFuZCBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgLiBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIFl1cCwgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCBkZXBlbmRzIG9uIGBFUk9GU19GU2AsIGJ1dCBub3RoaW5nIGVsc2Ugc2VlbXMgcmVsZXZhbnQuIFRob3NlIHR3byBzaG91bGQgY292ZXIgd2hhdCdzIG5lZWRlZCB0byB0ZXN0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBJIGRvbid0IHNlZSBhbnkgb3RoZXIgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXQgYSBnbGFuY2UsIHNvIHRob3NlIHNlZW0gc3VmZmljaWVudC5cblxuRnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUsIHRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwYXRoLCBhbmQgaXTigJlzIHJlYWNoYWJsZSwgbWVhbmluZyBpdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIG1vdW50aW5nLiBHaXZlbiB0aGF0IGl0J3MgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIG1vdW50IHByb2Nlc3MsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzLiBUaGUgbmV3IG1vdW50IG9wdGlvbiBhbmQgcmVsYXRlZCBsb2dpYyBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk3NCwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6NTMuMjA3NzAyMTk4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDYyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVcIixcbiAgICBcImdldF90cmVlX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgc3VwZXJibG9jayBzaGFyaW5nIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbW91bnQgbG9naWMgZm9yIEVST0ZTIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVcIixcbiAgICBcImdldF90cmVlX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgc3VwZXJibG9jayBzaGFyaW5nIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbW91bnQgbG9naWMgZm9yIEVST0ZTIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6NTMuMzI5NzcwOTk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4MzE0OTM2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDo1My4zMzAzMzQzMjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA1ODMwOTI0OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIEVST0ZTIGZpbGUtYmFja2VkIG1vdW50cyBhbmQgYWRkcyBsb2dpYyB0byBzaGFyZSBzdXBlcmJsb2NrcyB3aGVuIGNvbXBhdGlibGUgb3B0aW9ucyBhcmUgdXNlZC4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgdXNlcyBgbWVtY21wYCB0byBjb21wYXJlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIFdoaWxlIHRoaXMgc3RydWN0IGNvbnRhaW5zIHBhZGRpbmcsIGluc3RhbmNlcyBvZiBpdCBhcmUgZW1iZWRkZWQgd2l0aGluIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AsIHdoaWNoIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCAoaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGApLiBDb25zZXF1ZW50bHksIHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIHJlbWFpbnMgemVybywgbWVhbmluZyBgbWVtY21wYCBzYWZlbHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhvdXQgdHJpZ2dlcmluZyBLTVNBTiBvciBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvci5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIHNoYXJpbmcpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjFmZTQ0NmFmMzVkZTkzMTdmYzQ2MjIyZWYyNDBkZjA2OThlNzAzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjMwOjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuaW5kZXggZDMwMWQ5YWM5NDZhOS4uNDljNGU3ZGJjNWQ2MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuQEAgLTEzOSw2ICsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS5cbiBzb3VyY2U9JXMgICAgICAgICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTcGVjaWZ5IHRoZSBiYWNraW5nIGltYWdlIGFzIGEgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLlxuK3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWVcbisgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZVxuKyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gRmlsZS1iYWNrZWQgbW91bnRzXG5AQCAtMTU2LDYgKzE1OSwxMSBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXRcbiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoXG4gaW5zdGVhZC5cbiBcbitXaGVuIHN1cGVyYmxvY2tfc2hhcmUgaXMgc3BlY2lmaWVkIGFuZCB0aGUgc2FtZSBiYWNraW5nIGZpbGUgKGlkZW50aWZpZWRcbitieSBpbm9kZSBhbmQgZnNvZmZzZXQpIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG1vdW50XG4rb3B0aW9ucywgdGhlIGtlcm5lbCByZXVzZXMgdGhlIGV4aXN0aW5nIHN1cGVyYmxvY2sgaW5zdGVhZCBvZiBjcmVhdGluZyBhXG4rbmV3IG9uZS4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuK1xuIFN5c2ZzIEVudHJpZXNcbiA9PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbmluZGV4IDU3YmQyMTg1OWM2NWQuLjg2ZGEyMTlmOGY0ZWMgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5AQCAtMTU2LDYgKzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlx0XHQweDAwMDAwMDgwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cdFx0MHgwMDAwMDEwMFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcdFx0MHgwMDAwMDIwMFxuKyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRVx0MHgwMDAwMDQwMFxuIFxuICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCBcdTAwMjY9IH5FUk9GU19NT1VOVF8jI29wdGlvbilcbiAjZGVmaW5lIHNldF9vcHQob3B0LCBvcHRpb24pXHQoKG9wdCktXHUwMDNlbW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKVxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jXG5pbmRleCBkZGM5NzE5ZTZkMThlLi40NTdlMDY3NDQ3ZDVmIDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xuKysrIGIvZnMvZXJvZnMvc3VwZXIuY1xuQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSlcbiBlbnVtIHtcbiBcdE9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSxcbiBcdE9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsXG4tXHRPcHRfc291cmNlLFxuK1x0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XG5AQCAtNDE1LDYgKzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0ge1xuIFx0ZnNwYXJhbV91NjQoXCJmc29mZnNldFwiLFx0XHRcdE9wdF9mc29mZnNldCksXG4gXHRmc3BhcmFtX2ZsYWcoXCJpbm9kZV9zaGFyZVwiLFx0XHRPcHRfaW5vZGVfc2hhcmUpLFxuIFx0ZnNwYXJhbV9maWxlX29yX3N0cmluZyhcInNvdXJjZVwiLFx0T3B0X3NvdXJjZSksXG4rXHRmc3BhcmFtX2ZsYWcoXCJzdXBlcmJsb2NrX3NoYXJlXCIsXHRPcHRfc3VwZXJibG9ja19zaGFyZSksXG4gXHR7fVxuIH07XG4gXG5AQCAtNTYwLDYgKzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ZWxzZVxuIFx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XG4rXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKVxuK1x0XHRcdGVycm9yZmMoZmMsIFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcIiwgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE9wdF9zb3VyY2U6XG4gXHRcdHJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTtcbiBcdH1cbkBAIC02NTIsNiArNjU5LDE3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdGVycm9yZmMoZmMsIFwiRlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4rXHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG4rXHRcdGVycm9yZmMoZmMsIFwic3VwZXJibG9ja19zaGFyZSBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdC8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi9cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbitcdCAgICBzYmktXHUwMDNlZGV2cy1cdTAwM2VleHRyYV9kZXZpY2VzKSB7XG4rXHRcdGVycm9yZmMoZmMsIFwic3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXNcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuIFx0c2JpLVx1MDAzZWJsa3N6Yml0cyA9IFBBR0VfU0hJRlQ7XG4gXHRpZiAoIXNiLVx1MDAzZXNfYmRldikge1xuQEAgLTc3OSw2ICs3OTcsMzYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHQvKlxuK1x0ICogVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHdpdGggYSBzYmkgdGhhdFxuK1x0ICogaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LCBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlc1xuK1x0ICogbmV3X3NiaSBhbHNvIGlzIHNoYXJlYWJsZS5cbitcdCAqL1xuK1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTtcbitcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0aWYgKHNiLVx1MDAzZXNfaWZsYWdzIFx1MDAyNiBTQl9JX1JFVElSRUQpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFzYmktXHUwMDNlZGlmMC5maWxlIHx8ICFuZXdfc2JpLVx1MDAzZWRpZjAuZmlsZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXHUwMDNlZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktXHUwMDNlZGlmMC5maWxlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBzYmktXHUwMDNlZGlmMC5mc29mZiA9PSBuZXdfc2JpLVx1MDAzZWRpZjAuZnNvZmYgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIW1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKTtcbit9XG4rXG4rc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0aWYgKCF0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbitcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbit9XG4rXG4gc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4ge1xuIFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbkBAIC03OTQsNyArODQyLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdFx0ZXJyb3JmYyhmYywgXCJzb3VyY2UgaXMgdW5zdXBwb3J0ZWRcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcdFx0cmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpO1xuIFx0fVxuIFxuIFx0cmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlcixcbkBAIC04MTIsNyArODYwLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXG4gXHRcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSktXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHNiaS1cdTAwM2VkaWYwLmZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXJlYWRfZm9saW8pXG4tXHRcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcdFx0XHRyZXR1cm4gZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShmYyk7XG4gXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjUsNiArODczLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0REJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTtcbiBcbitcdC8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqL1xuK1x0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0aWYgKG5ld19zYmktXHUwMDNlZG9tYWluX2lkKVxuIFx0XHRlcm9mc19pbmZvKHNiLCBcImlnbm9yaW5nIHJlY29uZmlndXJhdGlvbiBmb3IgZG9tYWluX2lkLlwiKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0xMzg5LDcgKzEzODksMTcgQEAgc3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuKy8qKlxuKyAqIGdldF90cmVlX3N1cGVyIC0gR2V0IGEgc3VwZXJibG9jaywgb3B0aW9uYWxseSBzaGFyaW5nIGFuIGV4aXN0aW5nIG9uZVxuKyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXG4rICogQHRlc3Q6IENvbXBhcmlzb24gZnVuY3Rpb24gdG8gZmluZCBhIG1hdGNoaW5nIGV4aXN0aW5nIHN1cGVyYmxvY2ssIG9yIE5VTExcbisgKiBAZmlsbF9zdXBlcjogSGVscGVyIHRvIGluaXRpYWxpc2UgYSBuZXcgc3VwZXJibG9ja1xuKyAqXG4rICogSWYgQHRlc3QgaXMgbm9uLU5VTEwgYW5kIG1hdGNoZXMgYW4gZXhpc3Rpbmcgc3VwZXJibG9jaywgdGhhdCBzdXBlcmJsb2NrIGlzXG4rICogcmV1c2VkOyBvdGhlcndpc2UgYSBuZXcgYW5vbnltb3VzIHN1cGVyYmxvY2sgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgd2l0aFxuKyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxuKyAqL1xuK2ludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcbiBcdFx0aW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbkBAIC0xNDE2LDEyICsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbitFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTtcbiBcbiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHQgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbiB7XG4tXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTtcbiBcbkBAIC0xNDI5LDcgKzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7XG4gXG5AQCAtMTQzOSw3ICsxNDUwLDcgQEAgaW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0dm9pZCAqa2V5KVxuIHtcbiBcdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGtleTtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTtcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbkBAIC0xNTAsNiArMTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKTtcbiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIFxuK2V4dGVybiBpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuK1x0XHRcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4rXHRcdFx0IGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpO1xuIGV4dGVybiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMwOjUzLjMzMDMzNzUzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk0NDQ3NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVST0ZTIE1vdW50IE9wdGlvbiBDb25jZXJuKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgRVJPRlMgZmlsZS1iYWNrZWQgbW91bnRzLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCBtb2RpZmllcyBgZnMvZXJvZnMvc3VwZXIuY2AgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIG9mIHRoaXMgbmV3IG9wdGlvbiBhbmQsIGNydWNpYWxseSwgdG8gc3dpdGNoIGZyb20gdXNpbmcgYGdldF90cmVlX25vZGV2KClgIHRvIGBnZXRfdHJlZV9zdXBlcigpYCB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gVGhlIHBhdGNoIGFsc28gZXhwb3NlcyBgZ2V0X3RyZWVfc3VwZXIoKWAgZnJvbSBgZnMvc3VwZXIuY2AsIHJlbmFtaW5nIHRoZSBleGlzdGluZyBgdmZzX2dldF9zdXBlcmAgdG8gYGdldF90cmVlX3N1cGVyYCBpbiB0aGUgcHJvY2Vzcy4gSSBzZWUgdGhhdCB0aGUgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgZnVuY3Rpb24gbm93IGNvbXBhcmVzIHRoZSBgc2JpLVx1MDAzZW9wdGAgYW5kIGBuZXdfc2JpLVx1MDAzZW9wdGAgc3RydWN0dXJlcyB1c2luZyBgbWVtY21wYC5cblxuKldhaXQgYSBzZWNvbmQuLi4qIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgPyBUaGF0IGNvbXBhcmlzb24ncyBnb3QgbXkgYXR0ZW50aW9uLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgYHNiaS1cdTAwM2VvcHRgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgaWYgdGhlcmUncyBhbnkgcGFkZGluZyB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIEEgYnl0ZS13aXNlIGNvbXBhcmlzb24gbGlrZSB0aGF0IGlzIGFsd2F5cyBhIGJpdCByaXNreSBpZiB5b3UncmUgbm90IGFic29sdXRlbHkgY2VydGFpbiBhYm91dCB0aGUgY29udGVudHMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGluIGBmcy9lcm9mcy9pbnRlcm5hbC5oYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgZ290Y2hhcyB0aGVyZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBldmVyeXRoaW5nIGluIGBzYmktXHUwMDNlb3B0YCBpcyBpbml0aWFsaXplZCB0byBhIHJlbGlhYmxlIHZhbHVlIGFuZCB0aGF0IHRoZXJlIGlzbid0IGFueSB1bmRlZmluZWQgcGFkZGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlIGBtZW1jbXBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6NTguNjI0Nzg3OTUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODUwODYxOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBlcm9mc19tb3VudF9vcHRzIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL2ludGVybmFsLmg9NTQ9ZW51bSB7XFxuLS1cXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTU5LVxcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NjA6c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNjEtXFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzE6MDEuNDc1NjcwNzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MzU0MTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZXJvZnMvaW50ZXJuYWwuaGAqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgRVJPRlMgaXMgc3RydWN0dXJlZCBpbnRlcm5hbGx5LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZnMvZXJvZnMvaW50ZXJuYWwuaGAgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIGxvb2tpbmcgYXJvdW5kIGxpbmUgNjAgbWlnaHQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBzb21lIG9mIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBkZWZpbml0aW9ucyB0aGVyZSB0aGF0IGFyZSBjcml0aWNhbCB0byB0aGUgZmlsZSBzeXN0ZW0ncyBvcGVyYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcywgcGVyaGFwcyBmb2N1c2luZyBvbiB0aGUgY3JpdGljYWwgZGF0YXR5cGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgaGVhZGVyIGZpbGUsIGVzcGVjaWFsbHkgbmVhciB0aGF0IGxpbmUsIHdpbGwgbGlrZWx5IGdpdmUgbWUgaW5zaWdodHMgaW50byBob3cgdGhlIEVST0ZTIGxheWVyIGludGVyYWN0cyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFuZCwgdWx0aW1hdGVseSwgaG93IGl0IG1hbmFnZXMgaXRzIHJlYWQtb25seSBuYXR1cmUgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTowNC42MjkyMTM5MDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvaW50ZXJuYWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NDpcXHRlbnVtIHtcXG4gIDU1OlxcdFxcdEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPLFxcbiAgNTY6XFx0XFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09OLFxcbiAgNTc6XFx0XFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09GRlxcbiAgNTg6XFx0fTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xcbiAgNjE6XFx0XFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cXG4gIDYyOlxcdFxcdHVuc2lnbmVkIGNoYXIgY2FjaGVfc3RyYXRlZ3k7XFxuICA2MzpcXHRcXHR1bnNpZ25lZCBpbnQgbW91bnRfb3B0O1xcbiAgNjQ6XFx0fTtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0c3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0IHtcXG4gIDY3OlxcdFxcdHN0cnVjdCBpZHIgdHJlZTtcXG4gIDY4OlxcdFxcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdHVuc2lnbmVkIGludCBleHRyYV9kZXZpY2VzO1xcbiAgNzE6XFx0XFx0Ym9vbCBmbGF0ZGV2O1xcbiAgNzI6XFx0fTtcXG4gIDczOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTowNC42MjkyOTY2NjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNDQyMTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYWRkaW5nIFdvZXMgaW4gYGVyb2ZzX21vdW50X29wdHNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgZGVmaW5pdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgc29tZXRoaW5nIHRoYXQncyBtYWtpbmcgbXkgaW50ZXJuYWwgY29tcGlsZXIgd2hpbXBlci4gQW4gYHVuc2lnbmVkIGNoYXJgIGZvbGxvd2VkIGJ5IGFuIGB1bnNpZ25lZCBpbnRgPyBUaGF0IHNjcmVhbXMgcGFkZGluZyB0byBtZS4gTGV0J3Mgc2VlLi4uIGEgYnl0ZSBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzLiBUaGF0J3MgdGhyZWUgYnl0ZXMgd2FzdGVkISBXZSdyZSB0YWxraW5nIGFib3V0IGEgc3RydWN0dXJlIHRoYXQncyBwcm9iYWJseSBmcmVxdWVudGx5IGFjY2Vzc2VkLCBzbyB0aGlzIGNvdWxkIHRyYW5zbGF0ZSB0byBhIHBlcmZvcm1hbmNlIGhpdCwgZXZlbiBpZiBtaW5vciwgaW4gc29tZSBzY2VuYXJpb3MsIHJpZ2h0P1xuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gb3B0aW1pemF0aW9uIGNvbnNpZGVyYXRpb25zLCBJIHdhbnQgdG8gY29uZmlybSBzb21ldGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHNiaS1cdTAwM2VvcHRgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gd2hlbiBpdCdzIGFsbG9jYXRlZC4gVGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgSSB0aGluayBhYm91dCB0aGlzIHBvdGVudGlhbCBwYWRkaW5nIGlzc3VlLiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdG8gYGVyb2ZzX2ZjX2dldF90cmVlYCBhbmQgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgYmVjYXVzZSBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHdoZXJlIGBzYmlgIGlzIGFsbG9jYXRlZC4gTGV0J3MganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgdGhhdCBhbGxvY2F0aW9uIGhhcHBlbnMgYW5kIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTowOS40MzM3MjEyNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NzExODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZjLVxcdTAwM2VzX2ZzX2luZm8gPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvc3VwZXIuYz05NTE9c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy05NjMtXFx0fVxcbmZzL2Vyb2ZzL3N1cGVyLmM6OTY0OlxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBzYmk7XFxuZnMvZXJvZnMvc3VwZXIuYy05NjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjA5LjUxMTQzNzIzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEwMTI0MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgRVJPRlMgRmlsZXN5c3RlbSBDb250ZXh0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIHRoZSBgZXJvZnNfaW5pdF9mc19jb250ZXh0YCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGZpbGVzeXN0ZW0gY29udGV4dCBmb3IgRVJPRlMgaXMgc2V0IHVwIOKAkyBzcGVjaWZpY2FsbHksIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgaGFuZGxlZCwgYW55IGNoZWNrcyBvciB2YWxpZGF0aW9ucywgYW5kIGhvdyB0aGlzIGNvbnRleHQgdWx0aW1hdGVseSBpbmZsdWVuY2VzIHRoZSBtb3VudCBwcm9jZXNzLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyB0aGUgY29yZSBvZiBlc3RhYmxpc2hpbmcgdGhlIGVudmlyb25tZW50IGZvciBhbiBFUk9GUyBmaWxlc3lzdGVtIGluc3RhbmNlLCBzbyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgaGVyZSBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3Igb3B0aW1pemF0aW9uIGxhdGVyLiBUaW1lIHRvIG5hdmlnYXRlIGBmcy9lcm9mcy9zdXBlci5jYC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzE6MTMuMTIxNTYzNTUzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Vyb2ZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUxOlxcdHN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gOTUyOlxcdHtcXG4gOTUzOlxcdFxcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmk7XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdHNiaSA9IGt6YWxsb2Nfb2JqKCpzYmkpO1xcbiA5NTY6XFx0XFx0aWYgKCFzYmkpXFxuIDk1NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTU4OlxcdFxcbiA5NTk6XFx0XFx0c2JpLVxcdTAwM2VkZXZzID0ga3phbGxvY19vYmooc3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0KTtcXG4gOTYwOlxcdFxcdGlmICghc2JpLVxcdTAwM2VkZXZzKSB7XFxuIDk2MTpcXHRcXHRcXHRrZnJlZShzYmkpO1xcbiA5NjI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk2MzpcXHRcXHR9XFxuIDk2NDpcXHRcXHRmYy1cXHUwMDNlc19mc19pbmZvID0gc2JpO1xcbiA5NjU6XFx0XFxuIDk2NjpcXHRcXHRpZHJfaW5pdChcXHUwMDI2c2JpLVxcdTAwM2VkZXZzLVxcdTAwM2V0cmVlKTtcXG4gOTY3OlxcdFxcdGluaXRfcndzZW0oXFx1MDAyNnNiaS1cXHUwMDNlZGV2cy1cXHUwMDNlcndzZW0pO1xcbiA5Njg6XFx0XFx0ZXJvZnNfZGVmYXVsdF9vcHRpb25zKHNiaSk7XFxuIDk2OTpcXHRcXHRmYy1cXHUwMDNlb3BzID0gXFx1MDAyNmVyb2ZzX2NvbnRleHRfb3BzO1xcbiA5NzA6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjEzLjEyMTY0OTgyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQ3OTQ4MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBgc2JpYCBBbGxvY2F0aW9uIGFuZCBgc2JpLVx1MDAzZW9wdGAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgc2JpYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKCpzYmkpYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIG15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGBremFsbG9jX29iamAgaXMgbGlrZWx5IGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgYGt6YWxsb2NgLCBzcGVjaWZpY2FsbHkgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGBzYmlgIGFuZCBpbml0aWFsaXplcyBpdCB0byB6ZXJvLiBCdXQgd2FpdCwgYGt6YWxsb2Nfb2JqYD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwganVzdCBhcyBJIHN1c3BlY3RlZCwgaXQncyBqdXN0IGEgZGlyZWN0IGNhbGwgdG8gYGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKWAgb3Igc29tZXRoaW5nIG5lYXJseSBpZGVudGljYWwuXG5cblRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3N1bXB0aW9uOiBzaW5jZSBga3phbGxvY2AgaXMgdXNlZCwgdGhlIHBhZGRpbmcgd2l0aGluIGBzYmlgICpzaG91bGQqIGJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQncyBnb29kLCBwcmVkaWN0YWJsZSBiZWhhdmlvci4gQnV0IHRoaXMgYnJpbmdzIHVwIGFub3RoZXIgaW1wb3J0YW50IHBvaW50OiB3aGF0IGhhcHBlbnMgaWYgYHNiaS1cdTAwM2VvcHRgIGlzIHN1YnNlcXVlbnRseSAqbW9kaWZpZWQqPyBTcGVjaWZpY2FsbHksIHdoYXQgaWYgaXQncyBjb3BpZWQgb3IgYXNzaWduZWQgYSB2YWx1ZT8gVGhlIGluaXRpYWwgemVyb2luZyBieSBga3phbGxvY2AgaXMgb25seSBndWFyYW50ZWVkIGF0IGFsbG9jYXRpb24sIGFuZCBhbnkgbGF0ZXIgYXNzaWdubWVudCBjb3VsZCBvdmVyd3JpdGUgdGhhdCB6ZXJvIHZhbHVlLlxuXG5TbywgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHRob3JvdWdobHkgY2hlY2sgdGhlIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgc2JpLVx1MDAzZW9wdGAgaXMgKm5ldmVyKiBhc3NpZ25lZCBieSB2YWx1ZSBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBhbmQgaG93IHRoZSBgc2JpLVx1MDAzZW9wdGAgbWVtYmVyIGlzIHVwZGF0ZWQuIFRoaXMgd2lsbCBkZXRlcm1pbmUgaWYgSSBjYW4gdHJ1c3QgdGhhdCB0aGUgcGFkZGluZyByZW1haW5zIHplcm9lZCB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGUgYHNiaWAgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjE1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzE6MTcuNTY5NjAyODMxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODY0NjM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvcHQgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvc3VwZXIuYz00Nzc9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTQ4NC1cXG5mcy9lcm9mcy9zdXBlci5jOjQ4NTpcXHRvcHQgPSBmc19wYXJzZShmYywgZXJvZnNfZnNfcGFyYW1ldGVycywgcGFyYW0sIFxcdTAwMjZyZXN1bHQpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNDg2LVxcdGlmIChvcHQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz04Njg9c3RhdGljIGludCBlcm9mc19mY19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTg4Ny1cXG5mcy9lcm9mcy9zdXBlci5jOjg4ODpcXHRzYmktXFx1MDAzZW9wdCA9IG5ld19zYmktXFx1MDAzZW9wdDtcXG5mcy9lcm9mcy9zdXBlci5jLTg4OS1cXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9MTEzNj1zdGF0aWMgaW50IGVyb2ZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMTEzOC1cXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuZnMvZXJvZnMvc3VwZXIuYzoxMTM5OlxcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzICpvcHQgPSBcXHUwMDI2c2JpLVxcdTAwM2VvcHQ7XFxuZnMvZXJvZnMvc3VwZXIuYy0xMTQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMToxNy42MjgyNTM4MjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc2ODMyMjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVST0ZTIEZpbGVzeXN0ZW0gUmVjb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZXJvZnNfZmNfcmVjb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGlzIGxpbmU6IGBzYmktXHUwMDNlb3B0ID0gbmV3X3NiaS1cdTAwM2VvcHQ7YC4gVGhhdCBqdW1wcyBvdXQgYXQgbWUuIEknbSB0aGlua2luZywgaGFuZyBvbi4uLiBgbmV3X3NiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIHdoaWNoIGNhbGxzIGBremFsbG9jYC4gUmlnaHQsIHNvIGBremFsbG9jYCB6ZXJvZXMgb3V0IHRoZSBtZW1vcnkuIFRoZW4sIHRoZSBwYXJhbWV0ZXJzIGFyZSBwYXJzZWQgaW50byBgbmV3X3NiaS1cdTAwM2VvcHRgLiBOb3csIHRoYXQgYXNzaWdubWVudC4uLiBpdCdzIGEgc3RydWN0IGFzc2lnbm1lbnQsIGlzbid0IGl0P1xuXG5SaWdodCwgdGhlIGtleSBxdWVzdGlvbiBpcyBob3cgQyBoYW5kbGVzIHN0cnVjdCBhc3NpZ25tZW50LiBJdCBjb3BpZXMgdGhlICpmaWVsZHMqLCBidXQgd2hhdCBhYm91dCBwYWRkaW5nPyBUaGF0J3MgdGhlIHBvdGVudGlhbCBnb3RjaGEuIEl0J3Mgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYSBgbWVtY3B5YCBpZiB0aGUgc3RydWN0IGlzIGxhcmdlLCBvciBldmVuIGp1c3QgZmllbGQtYnktZmllbGQgb3Igd29yZC1ieS13b3JkLiBOb3csIGlmIGl0J3MgKndvcmQqLWJ5LXdvcmQsIHRoZW4gdGhlIHBhZGRpbmcgKmlzKiBjb3BpZWQhXG5cbkJ1dCBob2xkIG9uLi4uIGBuZXdfc2JpYCB3YXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBzbyBhbGwgdGhlIHBhZGRpbmcgKmluKiBgbmV3X3NiaWAgaXMgemVyb2VkIG91dCBpbml0aWFsbHkuIFNvLCBpZiBgbmV3X3NiaS1cdTAwM2VvcHRgIGhhcyB6ZXJvIHBhZGRpbmcgdG8gYmVnaW4gd2l0aCwgYW5kIGl0J3MgYXNzaWduZWQgdG8gYHNiaS1cdTAwM2VvcHRgLCB0aGVuIGBzYmktXHUwMDNlb3B0YCdzIHBhZGRpbmcgc2hvdWxkICpyZW1haW4qIHplcm8sIG9yIGJlY29tZSB6ZXJvLCB3aGljaCBpcyBsaWtlbHkgdGhlIGRlc2lyZWQgYmVoYXZpb3IuIEknZCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGVyJ3MgYmVoYXZpb3IsIGJ1dCBpdCdzIGxpa2VseSBzYWZlLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGF0IGFsbCB0aGUgcGxhY2VzIGBvcHRgIGlzIG1vZGlmaWVkLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWRkaW5nIGJlaW5nIHNldCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMToyMy4zOTY1Nzg5NDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDU3ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyb2ZzX2RlZmF1bHRfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvc3VwZXIuYz0yNTA9c3RhdGljIGludCBlcm9mc19yZWFkX3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzczLVxcbmZzL2Vyb2ZzL3N1cGVyLmM6Mzc0OnN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzc1LXtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9OTUxPXN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtOTY3LVxcdGluaXRfcndzZW0oXFx1MDAyNnNiaS1cXHUwMDNlZGV2cy1cXHUwMDNlcndzZW0pO1xcbmZzL2Vyb2ZzL3N1cGVyLmM6OTY4OlxcdGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzYmkpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtOTY5LVxcdGZjLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZXJvZnNfY29udGV4dF9vcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjIzLjQ2MjA1MDE5MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU5MjAxNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBzZXQgYXMgZGVmYXVsdHMgZm9yIEVST0ZTLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIGNvbXByZXNzaW9uIHNldHRpbmdzLCBhbnkgc3BlY2lmaWMgYmxvY2sgc2l6ZXMsIGFuZCBhbnkgdW51c3VhbCBmbGFncyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHBlcmZvcm1hbmNlIG9yIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlc2UgZGVmYXVsdHMgYXJlIGlubGluZSB3aXRoIGJlc3QgcHJhY3RpY2VzIGZvciBkaWZmZXJlbnQgdXNlIGNhc2VzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHRoZSBmaWxlc3lzdGVtIG1pZ2h0IGJlIHVzZWQgb24uIEknbGwgYWxzbyB3YW50IHRvIHdhdGNoIG91dCBmb3IgYW55dGhpbmcgdGhhdCBzY3JlYW1zIFwibGVnYWN5XCIgLSBtaWdodCBiZSBhIHNpZ24gd2Ugc2hvdWxkIGJlIGNvbnNpZGVyaW5nIGNoYW5nZXMgdG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZS4gTGV0J3Mgc2VlIHdoYXQgdGhpcyByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzE6MjYuODIxMjU0MTI2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Vyb2ZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc0LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzc0OlxcdHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxcbiAzNzU6XFx0e1xcbiAzNzY6XFx0I2lmZGVmIENPTkZJR19FUk9GU19GU19aSVBcXG4gMzc3OlxcdFxcdHNiaS1cXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gRVJPRlNfWklQX0NBQ0hFX1JFQURBUk9VTkQ7XFxuIDM3ODpcXHRcXHRzYmktXFx1MDAzZXN5bmNfZGVjb21wcmVzcyA9IEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPO1xcbiAzNzk6XFx0I2VuZGlmXFxuIDM4MDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxcbiAzODE6XFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xcbiAzODI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXFxuIDM4MzpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgUE9TSVhfQUNMKTtcXG4gMzg0OlxcdH1cXG4gMzg1OlxcdFxcbiAzODY6XFx0ZW51bSB7XFxuIDM4NzpcXHRcXHRPcHRfdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X2NhY2hlX3N0cmF0ZWd5LCBPcHRfZGF4LCBPcHRfZGF4X2VudW0sXFxuIDM4ODpcXHRcXHRPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMToyNi44MjEzNDEwMjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0ODA4OTc2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBLTVNBTiBJc3N1ZXMgd2l0aCBFUk9GUyBNb3VudCBPcHRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IGhvdyBgc2JpLVx1MDAzZW9wdGAgaXMgaGFuZGxlZC4gSSBub3RpY2VkIHRoYXQgaXQncyBtb2RpZmllZCBmaWVsZCBieSBmaWVsZCwgbGlrZSB3aXRoIHRoZSBjYWNoZSBzdHJhdGVneSwgYW5kIGFsc28gdGhyb3VnaCBgc2V0X29wdGAuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0aGF0IHRoaXMgd291bGRuJ3QgbGVhdmUgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJlY2F1c2UgYHNiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYC4gVGhhdCdzIGltcG9ydGFudC5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAuIFRoZSBrZXkgYXNzdW1wdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IHNoYXJlZCBzdXBlcmJsb2Nrcywgd2hpY2ggaXMgcmVsZXZhbnQsIGJ1dCB3aGF0IHJlYWxseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhpcyBgbWVtY21wYCBvbiBgXHUwMDI2c2JpLVx1MDAzZW9wdGAuIFRoYXQncyB3aGVyZSB0aGUgS01TQU4gcXVlc3Rpb24gYXJpc2VzLlxuXG5NeSBjb25jZXJuIGlzIHdoZXRoZXIgYHNiaS1cdTAwM2VvcHRgIGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBwYWRkaW5nLiBJZiBpdCdzIGBremFsbG9jYCdkLCB0aGUgcGFkZGluZyAqc2hvdWxkKiBiZSB6ZXJvZWQsIHJpZ2h0PyBCdXQgd2hhdCBpZiBgc2JpLVx1MDAzZW9wdGAgaXMgbGF0ZXIgYXNzaWduZWQgYXMgYSB3aG9sZSB1c2luZyBgc2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O2A/IEMgc3RydWN0IGFzc2lnbm1lbnQsIGluIHNvbWUgY2FzZXMsICptaWdodCogbm90IGNvcHkgcGFkZGluZy4gSWYgaXQgZG9lc24ndCwgdGhhdCBwYWRkaW5nIGNvdWxkIHJldGFpbiBpdHMgb3JpZ2luYWwsIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZW4sIHdoZW4gYG1lbWNtcGAgaXMgY2FsbGVkLCBLTVNBTiBjb3VsZCBwb3RlbnRpYWxseSBmbGFnIHRoYXQgYXMgYSBwcm9ibGVtLiBBbHRob3VnaCwgaWYgdGhlIG9yaWdpbmFsIGBzYmlgIHdhcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCB0aGVuIHBhZGRpbmcgd291bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIHplcm8gdG8gYmVnaW4gd2l0aC5cblxuV2FpdCwgdGhlIG5leHQgdGhpbmcgSSB0aG91Z2h0IGFib3V0IHdhcyBpZiBgc2JpLVx1MDAzZW9wdGAgd2FzIHBhc3NlZCBieSB2YWx1ZSBhbnl3aGVyZS4gQnV0IG5vLCBpdCdzIGp1c3QgYSBmaWVsZCB3aXRoaW4gdGhlIGBzYmlgIHN0cnVjdCwgc28gdGhhdCdzIG5vdCBhIGNvbmNlcm4uXG5cblRoZW4gaXQgaGl0cyBtZTogKnllcyosIGBtZW1jbXBgIG9uIGEgc3RydWN0IHdpdGggcGFkZGluZyAqY291bGQqIHRyaWdnZXIgS01TQU4hIEtNU0FOIGlzIHZlcnkgZ3JhbnVsYXI7IGl0IHRyYWNrcyBpbml0aWFsaXphdGlvbiBhdCB0aGUgYml0L2J5dGUgbGV2ZWwuIElmIHBhZGRpbmcgZXhpc3RzIGFuZCBpc24ndCBpbml0aWFsaXplZCwgYSBgbWVtY21wYCBvcGVyYXRpb24gY291bGQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXZlbiBpZiB0aGUgdXNlciBpc24ndCBkaXJlY3RseSBhY2Nlc3NpbmcgaXQuIEhvd2V2ZXIsIGlmIHRoZSBzdHJ1Y3Qgd2FzIGluaXRpYWxpemVkIHZpYSBga3phbGxvY2AsIHRoZSBwYWRkaW5nIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gemVybywgbWFraW5nIHRoaXMgYSBub24taXNzdWUuIFxuXG5TbyB0aGUgY29yZSBxdWVzdGlvbiBpcywgaWYgdGhlIHN0cnVjdCBpcyBjb3BpZWQgdmlhIGFzc2lnbm1lbnQsIGRvZXMgdGhlIGNvbXBpbGVyIHJlYWQgdGhlIHBhZGRpbmc/IElmIHRoZSBhc3NpZ25tZW50IGlzIGltcGxlbWVudGVkIGFzIGEgd29yZC1zaXplZCByZWFkL3dyaXRlLCBpdCAqd2lsbCogcmVhZCB0aGUgcGFkZGluZy4gQnV0LCBiZWNhdXNlIHRoYXQgcGFkZGluZyB3YXMgemVyb2VkIGJ5IHRoZSBga3phbGxvY2AgY2FsbCwgdGhlIHJlYWQgaXMgc2FmZS5cblxuTm93LCBLTVNBTiBjaGVja3MgZm9yIG1lbW9yeSB0aGF0IGlzIHVuaW5pdGlhbGl6ZWQuIElmIHRoZSBtZW1vcnkgd2FzIHplcm9lZCBieSBga3phbGxvY2AsIGl0IGlzIGluaXRpYWxpemVkLlxuXG5CdXQgd2FpdCwgd2hhdCBpZiBgc2JpLVx1MDAzZW9wdGAgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQgKnNvbWV3aGVyZSo/IEkgbmVlZCB0byBsb29rIGF0IHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gTGV0J3Mgc2VlLi4uXG5cbmBgYGNcbnN0cnVjdCBlcm9mc19tb3VudF9vcHRzIHtcblx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cblx0dW5zaWduZWQgY2hhciBjYWNoZV9zdHJhdGVneTtcblx0dW5zaWduZWQgaW50IG1vdW50X29wdDtcbn07XG5gYGBcbk9rYXksIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmaWVsZHMuIFRoZSBga3phbGxvY2AgaW5pdGlhbGl6YXRpb24gb2YgYHNiaWAgc2hvdWxkIGZ1bGx5IGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTozOS4zMDIyNDE2MzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Vyb2ZzL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xcbiAgNjE6XFx0XFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cXG4gIDYyOlxcdFxcdHVuc2lnbmVkIGNoYXIgY2FjaGVfc3RyYXRlZ3k7XFxuICA2MzpcXHRcXHR1bnNpZ25lZCBpbnQgbW91bnRfb3B0O1xcbiAgNjQ6XFx0fTtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0c3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0IHtcXG4gIDY3OlxcdFxcdHN0cnVjdCBpZHIgdHJlZTtcXG4gIDY4OlxcdFxcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdHVuc2lnbmVkIGludCBleHRyYV9kZXZpY2VzO1xcbiAgNzE6XFx0XFx0Ym9vbCBmbGF0ZGV2O1xcbiAgNzI6XFx0fTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0LyogYWxsIGZpbGVzeXN0ZW0td2lkZSBsejQgY29uZmlndXJhdGlvbnMgKi9cXG4gIDc1OlxcdHN0cnVjdCBlcm9mc19zYl9sejRfaW5mbyB7XFxuICA3NjpcXHRcXHQvKiAjIG9mIHBhZ2VzIG5lZWRlZCBmb3IgRVJPRlMgbHo0IHJvbGxpbmcgZGVjb21wcmVzc2lvbiAqL1xcbiAgNzc6XFx0XFx0dTE2IG1heF9kaXN0YW5jZV9wYWdlcztcXG4gIDc4OlxcdFxcdC8qIG1heGltdW0gcG9zc2libGUgYmxvY2tzIGZvciBwY2x1c3RlcnMgaW4gdGhlIGZpbGVzeXN0ZW0gKi9cXG4gIDc5OlxcdFxcdHUxNiBtYXhfcGNsdXN0ZXJibGtzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTozOS4zMDIzNjk2MDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5NzUyMjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGVyb2ZzX21vdW50X29wdHMgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHR3byBmaWVsZHMuIFJpZ2h0LCB0aGUgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCBpcyBvbmx5IDggYnl0ZXMgdG90YWwsIGJyb2tlbiBkb3duIGFzIGEgc2luZ2xlIGNoYXJhY3Rlciwgc29tZSBwYWRkaW5nLCBhbmQgdGhlbiBhbiBpbnRlZ2VyLiBOb3csIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBtZW1jbXBgIGNhbGw6IGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBJdCdzIGNvbXBhcmluZyA4IGJ5dGVzLiBTaW5jZSBib3RoIGBzYmlgIGFuZCBgbmV3X3NiaWAgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgdGhlIHBhZGRpbmcgc2hvdWxkIGJlIHplcm9lZCBvdXQuIFNvLCBgbWVtY21wYCBpcyByZWFkaW5nIGluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElzIHRoZXJlIGFueSBzY2VuYXJpbyB3aGVyZSBgc2JpLVx1MDAzZW9wdGAgKmlzbid0KiBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCwgb3IgbWF5YmUgZ2V0cyBwbGFjZWQgb24gdGhlIHN0YWNrPyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgZXJvZnNfc2JfaW5mb2AgaXMgYWN0dWFsbHkgYWxsb2NhdGVkIHRvIGNvbmZpcm0gdGhlcmUncyBubyB3YXkgdG8gZW5kIHVwIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZS4uLiBJJ2xsIGNoZWNrIHdoZXJlIHRoZSBgZXJvZnNfc2JfaW5mb2AgaXMgYWxsb2NhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIzNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjQzLjg5OTg5NTEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExNzk5NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2MuKmVyb2ZzX3NiX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTo0My45NTUwMjI2NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MTAwMjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEVST0ZTIFN1cGVyYmxvY2sgSW5mb3JtYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuIExldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnkgZm9yIHRoZSBgZXJvZnNfc2JfaW5mb2Agc3RydWN0dXJlIHVzaW5nIGBremFsbG9jYC4gSSB3YW50IHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaG93IHRoZSBzdXBlcmJsb2NrIGluZm9ybWF0aW9uIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSBpcyBiZWluZyBpbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBga3phbGxvY2Ag4oCTIHplcm9pbmcgdGhlIG1lbW9yeSDigJMgcmlnaHQgZnJvbSB0aGUgb3V0c2V0LiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgZm9yIGVuc3VyaW5nIGEgY2xlYW4gc2xhdGUsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgZGF0YSBvciBwb2ludGVycyB0aGF0IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gYSBrbm93biBzdGF0ZS4gS25vd2luZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nIGFsbG93cyBtZSB0byBpbmZlciBjZXJ0YWluIHRoaW5ncyBhYm91dCBob3cgdGhlIEVST0ZTIGRyaXZlciBpcyBkZXNpZ25lZCwgd2hhdCBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIGRhdGEsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZ2FyYmFnZSB2YWx1ZXMuIEknbSBnb2luZyB0byBsb29rIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTo0Ny4xMjYwMjc2NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg0MTg0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvYy4qc2JpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Vyb2ZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9zdXBlci5jPTk1MT1zdGF0aWMgaW50IGVyb2ZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTk1NC1cXG5mcy9lcm9mcy9zdXBlci5jOjk1NTpcXHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcXG5mcy9lcm9mcy9zdXBlci5jLTk1Ni1cXHRpZiAoIXNiaSlcXG4tLVxcbmZzL2Vyb2ZzL3hhdHRyLmM9NDk0PWludCBlcm9mc194YXR0cl9wcmVmaXhlc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9lcm9mcy94YXR0ci5jLTUwNS1cXG5mcy9lcm9mcy94YXR0ci5jOjUwNjpcXHRwZnMgPSBremFsbG9jX29ianMoKnBmcywgc2JpLVxcdTAwM2V4YXR0cl9wcmVmaXhfY291bnQpO1xcbmZzL2Vyb2ZzL3hhdHRyLmMtNTA3LVxcdGlmICghcGZzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTo0Ny4yMTQ0NTAxNTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxNDExNzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGt6YWxsb2Nfb2JqYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIHBvcHMgb3V0LiBga3phbGxvY19vYmpgLi4uIHdhaXQsIHRoYXQncyBhIG1hY3JvLiBSaWdodC4gSSBuZWVkIHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hhdCB0aGF0IGV4cGFuZHMgdG8gaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBiZWluZyB1c2VkIGNvcnJlY3RseSBoZXJlPyBJcyB0aGVyZSBhIHN1YnRsZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9yLCB3b3JzZSwgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaWYgaXQncyBub3QgaGFuZGxlZCB3aXRoIGNhcmU/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJucyBvZiB0aGlzIG1hY3JvIHRvIGFzc2VzcyBpdHMgYXBwcm9wcmlhdGVuZXNzIGhlcmUuIElzIHRoZXJlIGFueSBvYnZpb3VzIHdheSB0aGlzIGNvdWxkIGxlYWQgdG8gZnJhZ21lbnRhdGlvbiwgb3IgaW5lZmZpY2llbnQgemVyb2luZz8gVGltZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjUwLjIyODU2OTg0M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTk1ODIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBremFsbG9jX29ialwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjUwLjMxMDk3NTQwNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY1NDE3NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqVHJhY2luZyBga3phbGxvY19vYmpgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBga3phbGxvY19vYmpgIGZ1bmN0aW9uIGJldHRlci4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBpdHMgZGVmaW5pdGlvbi4gV2hlcmUgaXMgaXQgYWN0dWFsbHkgZGVjbGFyZWQgYW5kIGltcGxlbWVudGVkIHdpdGhpbiB0aGlzIGNvZGViYXNlPyBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIGFueSBkb2N1bWVudGF0aW9uIGNvbW1lbnRzIGlmIHRoZXkgZXhpc3QsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0aGUgYWN0dWFsIGNvZGUgd2l0aGluIGl0LiBUaGF0J3MgdGhlIG9ubHkgd2F5IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgb3BlcmF0ZXMgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byB0cmFjayBpdCBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjU0LjI3NjM5NTg4MloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MTA1OTY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUga3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA3Mz12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU0LS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTU6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU2LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU3OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU4LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTo1Ni42Mjc0NTk4OTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk3NDAzMjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFplcm8tSW5pdGlhbGl6YXRpb24gb2YgYHNiaS1cdTAwM2VvcHRgIGluIEVST0ZTKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBTbywgYGt6YWxsb2Nfb2JqKCpzYmkpYCBhbGxvY2F0ZXMgbWVtb3J5IGZvciBgc2JpYCBhbmQsIGltcG9ydGFudGx5LCB6ZXJvZXMgaXQuIFRoaXMgbWVhbnMgYHNiaS1cdTAwM2VvcHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoYXQgYHNiaWAgc3RydWN0LCBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgZWxzZSBtaWdodCBgc2JpLVx1MDAzZW9wdGAgYmUgbW9kaWZpZWQ/IEkgcmVtZW1iZXIgc2VlaW5nIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgYW5kIGBlcm9mc19mY19yZWNvbmZpZ3VyZWAuXG5cbmBlcm9mc19mY19yZWNvbmZpZ3VyZWAgaXMgd2hlcmUgaXQgc2VlbXMgbGlrZSBgc2JpLVx1MDAzZW9wdGAgZ2V0cyBkaXJlY3RseSB1cGRhdGVkOiBgc2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O2AuIENydWNpYWxseSwgYG5ld19zYmktXHUwMDNlb3B0YCBpcyBpbml0aWFsaXplZCBhcyB6ZXJvLCB0aGVuIGZpZWxkcyBhcmUgc2V0LiBTbywgdGhlIHBhZGRpbmcgd2l0aGluIGBuZXdfc2JpLVx1MDAzZW9wdGAgcmVtYWlucyB6ZXJvLiBUaGUgYXNzaWdubWVudCBgc2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O2AgaXMgYSBzdHJ1Y3QgY29weS4gRXZlbiBpZiB0aGUgY29tcGlsZXIgb3B0aW1pemVzIHRoaXMgd2l0aCA2NC1iaXQgcmVhZHMvd3JpdGVzLCBpdCdzIGNvcHlpbmcgaW5pdGlhbGl6ZWQgbWVtb3J5ICh6ZXJvZXMgaW4gdGhlIHBhZGRpbmcpIHRvIHRoZSBkZXN0aW5hdGlvbi4gVGhlcmVmb3JlLCB0aGUgcGFkZGluZyBpbiBgc2JpLVx1MDAzZW9wdGAgc2hvdWxkIGFsc28gYmUgemVybyBhZnRlciB0aGUgY29weS5cblxuVGhhdCdzIGNyaXRpY2FsIGJlY2F1c2UgdGhlbiB0aGUgYG1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKWAgY29tcGFyZXMgYWxsIDggYnl0ZXMuIFNpbmNlIHRoZSBwYWRkaW5nIGlzIHplcm8gaW4gYm90aCwgdGhlIGBtZW1jbXBgIHdpbGwgY29tcGFyZSB0aGUgZmllbGRzJyB2YWx1ZXMsIGFuZCB0aGUgcGFkZGluZyBieXRlcyBzaG91bGQgbWF0Y2guXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGNvdmVyIG15IGJhc2VzLiBJcyB0aGVyZSBhbnkgc2NlbmFyaW8gd2hlcmUgYHNiaS1cdTAwM2VvcHRgICpjb3VsZCogZW5kIHVwIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nPyBMZXQncyBydWxlIG91dCBzb21lIHRoaW5ncy4gQ291bGQgYHNiaS1cdTAwM2VvcHRgIGJlIGNvcGllZCBmcm9tIHVzZXIgc3BhY2U/IE5vLCBpdCdzIHBhcnNlZCBmcm9tIHRoZSBtb3VudCBvcHRpb25zLCBzbyB0aGUgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGNvbnRyb2xsZWQuIENvdWxkIHNvbWUgb3RoZXIgZnVuY3Rpb24gbW9kaWZ5IGBzYmktXHUwMDNlb3B0YD8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhhdC4gVGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgYWxsIG9jY3VycmVuY2VzIG9mIGBvcHRgIGluIHRoZSBgZnMvZXJvZnMvYCBkaXJlY3RvcnkgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMjowMy42MDE0OTQ3NTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDEzMjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLVxcdTAwM2VvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL2ZpbGVpby5jPTQ0PXN0YXRpYyB2b2lkIGVyb2ZzX2ZpbGVpb19ycV9zdWJtaXQoc3RydWN0IGVyb2ZzX2ZpbGVpb19ycSAqcnEpXFxuLS1cXG5mcy9lcm9mcy9maWxlaW8uYy01My1cXHRycS1cXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IGVyb2ZzX2ZpbGVpb19raV9jb21wbGV0ZTtcXG5mcy9lcm9mcy9maWxlaW8uYzo1NDpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNkVST0ZTX1NCKHJxLVxcdTAwM2VzYiktXFx1MDAzZW9wdCwgRElSRUNUX0lPKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL2ZpbGVpby5jLTU1LVxcdCAgICBycS1cXHUwMDNlaW9jYi5raV9maWxwLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DQU5fT0RJUkVDVClcXG4tLVxcbmZzL2Vyb2ZzL2lub2RlLmM9MzY9c3RhdGljIGludCBlcm9mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9lcm9mcy9pbm9kZS5jLTIxNC1cXHRpbm9kZS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2PSB+U19EQVg7XFxuZnMvZXJvZnMvaW5vZGUuYzoyMTU6XFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgREFYX0FMV0FZUykgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL2lub2RlLmMtMjE2LVxcdCAgICAodmktXFx1MDAzZWRhdGFsYXlvdXQgPT0gRVJPRlNfSU5PREVfRkxBVF9QTEFJTiB8fFxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0xMjU9c3RhdGljIGludCBlcm9mc19pbml0X2RldmljZShzdHJ1Y3QgZXJvZnNfYnVmICpidWYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTE2NC1cXHRcXHR9XFxuZnMvZXJvZnMvc3VwZXIuYzoxNjU6XFx0XFx0aWYgKCFkaWYtXFx1MDAzZWRheF9kZXYgXFx1MDAyNlxcdTAwMjYgdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSkge1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMTY2LVxcdFxcdFxcdGVyb2ZzX2luZm8oc2IsIFxcXCJEQVggdW5zdXBwb3J0ZWQgYnkgJXMuIFR1cm5pbmcgb2ZmIERBWC5cXFwiLFxcbmZzL2Vyb2ZzL3N1cGVyLmMtMTY3LVxcdFxcdFxcdFxcdCAgIGRpZi1cXHUwMDNlcGF0aCk7XFxuZnMvZXJvZnMvc3VwZXIuYzoxNjg6XFx0XFx0XFx0Y2xlYXJfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgREFYX0FMV0FZUyk7XFxuZnMvZXJvZnMvc3VwZXIuYy0xNjktXFx0XFx0fVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0xODM9c3RhdGljIGludCBlcm9mc19zY2FuX2RldmljZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMjA1LVxcbmZzL2Vyb2ZzL3N1cGVyLmM6MjA2OlxcdGlmICh0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIERBWF9BTFdBWVMpIFxcdTAwMjZcXHUwMDI2ICFzYmktXFx1MDAzZWRpZjAuZGF4X2Rldikge1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMjA3LVxcdFxcdGVyb2ZzX2luZm8oc2IsIFxcXCJEQVggdW5zdXBwb3J0ZWQgYnkgYmxvY2sgZGV2aWNlLiBUdXJuaW5nIG9mZiBEQVguXFxcIik7XFxuZnMvZXJvZnMvc3VwZXIuYzoyMDg6XFx0XFx0Y2xlYXJfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgREFYX0FMV0FZUyk7XFxuZnMvZXJvZnMvc3VwZXIuYy0yMDktXFx0fVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0zNzQ9c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTM3Ni0jaWZkZWYgQ09ORklHX0VST0ZTX0ZTX1pJUFxcbmZzL2Vyb2ZzL3N1cGVyLmM6Mzc3OlxcdHNiaS1cXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gRVJPRlNfWklQX0NBQ0hFX1JFQURBUk9VTkQ7XFxuZnMvZXJvZnMvc3VwZXIuYy0zNzgtXFx0c2JpLVxcdTAwM2VzeW5jX2RlY29tcHJlc3MgPSBFUk9GU19TWU5DX0RFQ09NUFJFU1NfQVVUTztcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzgwLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXFxuZnMvZXJvZnMvc3VwZXIuYzozODE6XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMzgyLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKVxcbmZzL2Vyb2ZzL3N1cGVyLmM6MzgzOlxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMzg0LX1cXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9NDIyPXN0YXRpYyBib29sIGVyb2ZzX2ZjX3NldF9kYXhfbW9kZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHVuc2lnbmVkIGludCBtb2RlKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy00MjctXFx0XFx0aWYgKG1vZGUgPT0gRVJPRlNfTU9VTlRfREFYX0FMV0FZUykge1xcbmZzL2Vyb2ZzL3N1cGVyLmM6NDI4OlxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKTtcXG5mcy9lcm9mcy9zdXBlci5jOjQyOTpcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfTkVWRVIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNDMwLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNDMxLVxcdFxcdH0gZWxzZSBpZiAobW9kZSA9PSBFUk9GU19NT1VOVF9EQVhfTkVWRVIpIHtcXG5mcy9lcm9mcy9zdXBlci5jOjQzMjpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgREFYX05FVkVSKTtcXG5mcy9lcm9mcy9zdXBlci5jOjQzMzpcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKTtcXG5mcy9lcm9mcy9zdXBlci5jLTQzNC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9NDc3PXN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy00OTMtXFx0XFx0ZWxzZSBpZiAocmVzdWx0LmJvb2xlYW4pXFxuZnMvZXJvZnMvc3VwZXIuYzo0OTQ6XFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNDk1LVxcdFxcdGVsc2VcXG5mcy9lcm9mcy9zdXBlci5jOjQ5NjpcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcXG5mcy9lcm9mcy9zdXBlci5jLTQ5Ny1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNTAxLVxcdFxcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NTAyOlxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNTAzLVxcdFxcdGVsc2VcXG5mcy9lcm9mcy9zdXBlci5jOjUwNDpcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNTA1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy01MDktXFx0XFx0ZWxzZVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NTEwOlxcdFxcdFxcdHNiaS1cXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gcmVzdWx0LnVpbnRfMzI7XFxuZnMvZXJvZnMvc3VwZXIuYy01MTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTU1MC1cXHRcXHRlbHNlIGlmIChyZXN1bHQuYm9vbGVhbilcXG5mcy9lcm9mcy9zdXBlci5jOjU1MTpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgRElSRUNUX0lPKTtcXG5mcy9lcm9mcy9zdXBlci5jLTU1Mi1cXHRcXHRlbHNlXFxuZnMvZXJvZnMvc3VwZXIuYzo1NTM6XFx0XFx0XFx0Y2xlYXJfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgRElSRUNUX0lPKTtcXG5mcy9lcm9mcy9zdXBlci5jLTU1NC1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNTYxLVxcdFxcdGVsc2VcXG5mcy9lcm9mcy9zdXBlci5jOjU2MjpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNTYzLVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy01NjctXFx0XFx0ZWxzZVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NTY4OlxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcXG5mcy9lcm9mcy9zdXBlci5jLTU2OS1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9NjQzPXN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTY1My1cXG5mcy9lcm9mcy9zdXBlci5jOjY1NDpcXHRpZiAoIXNiaS1cXHUwMDNlZG9tYWluX2lkIFxcdTAwMjZcXHUwMDI2IHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XFxuZnMvZXJvZnMvc3VwZXIuYy02NTUtXFx0XFx0ZXJyb3JmYyhmYywgXFxcImRvbWFpbl9pZCBpcyBuZWVkZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblxcXCIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy02NTctXFx0fVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NjU4OlxcdGlmICh0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIERBWF9BTFdBWVMpIFxcdTAwMjZcXHUwMDI2IHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XFxuZnMvZXJvZnMvc3VwZXIuYy02NTktXFx0XFx0ZXJyb3JmYyhmYywgXFxcIkZTREFYIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cXFwiKTtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNjYxLVxcdH1cXG5mcy9lcm9mcy9zdXBlci5jOjY2MjpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL3N1cGVyLmM6NjYzOlxcdCAgICB0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNjY0LVxcdFxcdGVycm9yZmMoZmMsIFxcXCJzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cXFwiKTtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNjY3LVxcdC8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi9cXG5mcy9lcm9mcy9zdXBlci5jOjY2ODpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL3N1cGVyLmMtNjY5LVxcdCAgICBzYmktXFx1MDAzZWRldnMtXFx1MDAzZWV4dHJhX2RldmljZXMpIHtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNzMzLVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NzM0OlxcdGlmICh0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIERBWF9BTFdBWVMpIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlYmxrc3piaXRzICE9IFBBR0VfU0hJRlQpIHtcXG5mcy9lcm9mcy9zdXBlci5jLTczNS1cXHRcXHRlcm9mc19pbmZvKHNiLCBcXFwidW5zdXBwb3J0ZWQgYmxvY2tzaXplIGZvciBEQVhcXFwiKTtcXG5mcy9lcm9mcy9zdXBlci5jOjczNjpcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKTtcXG5mcy9lcm9mcy9zdXBlci5jLTczNy1cXHR9XFxuZnMvZXJvZnMvc3VwZXIuYzo3Mzg6XFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpIFxcdTAwMjZcXHUwMDI2ICFlcm9mc19zYl9oYXNfaXNoYXJlX3hhdHRycyhzYmkpKSB7XFxuZnMvZXJvZnMvc3VwZXIuYy03MzktXFx0XFx0ZXJvZnNfaW5mbyhzYiwgXFxcIm9uLWRpc2sgaXNoYXJlIHhhdHRycyBub3QgZm91bmQuIFR1cm5pbmcgb2ZmIGlub2RlX3NoYXJlLlxcXCIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmM6NzQwOlxcdFxcdGNsZWFyX29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIElOT0RFX1NIQVJFKTtcXG5mcy9lcm9mcy9zdXBlci5jLTc0MS1cXHR9XFxuZnMvZXJvZnMvc3VwZXIuYzo3NDI6XFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNzQzLVxcdFxcdGVyb2ZzX2luZm8oc2IsIFxcXCJFWFBFUklNRU5UQUwgRVJPRlMgcGFnZSBjYWNoZSBzaGFyZSBzdXBwb3J0IGluIHVzZS4gVXNlIGF0IHlvdXIgb3duIHJpc2shXFxcIik7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTc0OC1cXG5mcy9lcm9mcy9zdXBlci5jOjc0OTpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpKVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNzUwLVxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1BPU0lYQUNMO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz04MDA9c3RhdGljIGludCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtODE2LVxcdCAgICAgICBzYmktXFx1MDAzZWRpZjAuZnNvZmYgPT0gbmV3X3NiaS1cXHUwMDNlZGlmMC5mc29mZiBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL3N1cGVyLmM6ODE3OlxcdCAgICAgICAhbWVtY21wKFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgXFx1MDAyNm5ld19zYmktXFx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cXHUwMDNlb3B0KSk7XFxuZnMvZXJvZnMvc3VwZXIuYy04MTgtfVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz04MjA9c3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtODIzLVxcbmZzL2Vyb2ZzL3N1cGVyLmM6ODI0OlxcdGlmICghdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcXG5mcy9lcm9mcy9zdXBlci5jLTgyNS1cXHRcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz04Njg9c3RhdGljIGludCBlcm9mc19mY19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTg3Ni1cXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cXG5mcy9lcm9mcy9zdXBlci5jOjg3NzpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcXG5mcy9lcm9mcy9zdXBlci5jLTg3OC1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy04ODItXFxuZnMvZXJvZnMvc3VwZXIuYzo4ODM6XFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIFBPU0lYX0FDTCkpXFxuZnMvZXJvZnMvc3VwZXIuYy04ODQtXFx0XFx0ZmMtXFx1MDAzZXNiX2ZsYWdzIHw9IFNCX1BPU0lYQUNMO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy04ODctXFxuZnMvZXJvZnMvc3VwZXIuYzo4ODg6XFx0c2JpLVxcdTAwM2VvcHQgPSBuZXdfc2JpLVxcdTAwM2VvcHQ7XFxuZnMvZXJvZnMvc3VwZXIuYy04ODktXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTExMzY9c3RhdGljIGludCBlcm9mc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTExMzgtXFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHJvb3QtXFx1MDAzZWRfc2IpO1xcbmZzL2Vyb2ZzL3N1cGVyLmM6MTEzOTpcXHRzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyAqb3B0ID0gXFx1MDAyNnNiaS1cXHUwMDNlb3B0O1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMTE0MC1cXG4tLVxcbmZzL2Vyb2ZzL3N5c2ZzLmM9MTE3PXN0YXRpYyB1bnNpZ25lZCBjaGFyICpfX3N0cnVjdF9wdHIoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2Vyb2ZzL3N5c2ZzLmMtMTIyLVxcdGlmIChzdHJ1Y3RfdHlwZSA9PSBzdHJ1Y3RfZXJvZnNfbW91bnRfb3B0cylcXG5mcy9lcm9mcy9zeXNmcy5jOjEyMzpcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGNoYXIgKilcXHUwMDI2c2JpLVxcdTAwM2VvcHQgKyBvZmZzZXQ7XFxuZnMvZXJvZnMvc3lzZnMuYy0xMjQtXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy9lcm9mcy94YXR0ci5jPTQwNj1zdGF0aWMgYm9vbCBlcm9mc194YXR0cl91c2VyX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2Vyb2ZzL3hhdHRyLmMtNDA3LXtcXG5mcy9lcm9mcy94YXR0ci5jOjQwODpcXHRyZXR1cm4gdGVzdF9vcHQoXFx1MDAyNkVST0ZTX1NCKGRlbnRyeS1cXHUwMDNlZF9zYiktXFx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XFxuZnMvZXJvZnMveGF0dHIuYy00MDktfVxcbi0tXFxuZnMvZXJvZnMveGF0dHIuYz00MTY9c3RhdGljIGludCBlcm9mc194YXR0cl9nZW5lcmljX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcXG4tLVxcbmZzL2Vyb2ZzL3hhdHRyLmMtNDIwLVxcdGlmIChoYW5kbGVyLVxcdTAwM2VmbGFncyA9PSBFUk9GU19YQVRUUl9JTkRFWF9VU0VSIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXJvZnMveGF0dHIuYzo0MjE6XFx0ICAgICF0ZXN0X29wdChcXHUwMDI2RVJPRlNfSV9TQihpbm9kZSktXFx1MDAzZW9wdCwgWEFUVFJfVVNFUikpXFxuZnMvZXJvZnMveGF0dHIuYy00MjItXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvZXJvZnMveGF0dHIuYz02MTg9aW50IGVyb2ZzX3hhdHRyX2ZpbGxfaW5vZGVfZmluZ2VycHJpbnQoc3RydWN0IGVyb2ZzX2lub2RlX2ZpbmdlcnByaW50ICpmcCxcXG4tLVxcbmZzL2Vyb2ZzL3hhdHRyLmMtNjI1LVxcbmZzL2Vyb2ZzL3hhdHRyLmM6NjI2OlxcdGlmICghdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkpXFxuZnMvZXJvZnMveGF0dHIuYy02MjctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvZXJvZnMvemRhdGEuYz01MTY9c3RhdGljIGJvb2wgel9lcm9mc19zaG91bGRfYWxsb2NfY2FjaGUoc3RydWN0IHpfZXJvZnNfZnJvbnRlbmQgKmZlKVxcbmZzL2Vyb2ZzL3pkYXRhLmMtNTE3LXtcXG5mcy9lcm9mcy96ZGF0YS5jOjUxODpcXHR1bnNpZ25lZCBpbnQgY2FjaGVzdHJhdGVneSA9IEVST0ZTX0lfU0IoZmUtXFx1MDAzZWlub2RlKS1cXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5O1xcbmZzL2Vyb2ZzL3pkYXRhLmMtNTE5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMjowMy43MDE2MzI2MzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5MTIxODk5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yYXZlbGluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIEVST0ZTIE1vdW50IE9wdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBFUk9GUyBjb2RlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaGFuZGxpbmcgb2YgbW91bnQgb3B0aW9ucyBhbmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRyaWdnZXJlZCBieSB0aGUgZXhwb3N1cmUgb2YgYHNiaS1cdTAwM2VvcHRgIHZpYSBzeXNmcyDigJMgdGhhdCdzIG9mdGVuIGEgcmVkIGZsYWcuIEJ1dCB0aGVuIEkgcmVhbGl6ZWQsIHN5c2ZzIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgZmllbGQtYnktZmllbGQsIHNvIHRoZXkgd291bGRuJ3QgZXhwb3NlIHRoZSBlbnRpcmUgc3RydWN0dXJlLCBwYWRkaW5nIGFuZCBhbGwuIEdvb2QsIHRoYXQncyBvbmUgYXZlbnVlIGNsb3NlZC5cblxuVGhlIGNvcmUgb2YgbXkgY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBJcyBpdCBwb3NzaWJsZSB0aGF0IGBuZXdfc2JpLVx1MDAzZW9wdGAgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIHBhZGRpbmcgd2hlbiBpdCdzIGFsbG9jYXRlZCB2aWEgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgYW5kIHplcm9lZCB1c2luZyBga3phbGxvY19vYmpgPyBOby4gU2luY2UgaXQgaXMgaW5pdGlhbGl6ZWQgYnkgYGt6YWxsb2NgLCB0aGUgc3RydWN0dXJlIGFuZCBpdHMgcGFkZGluZyBpcyB6ZXJvZWQuIExhdGVyIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgb25seSB0b3VjaCBzcGVjaWZpYyBmaWVsZHMsIGxlYXZpbmcgdGhlIHBhZGRpbmcgdW50b3VjaGVkIGFuZCByZW1haW5pbmcgemVyb2VkLiBTbywgdGhlIGBtZW1jbXBgIHdpbGwgYmUgY29tcGFyaW5nIGluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuXG5cblRoZW4sIEkgc3RhcnRlZCB3b25kZXJpbmcgaWYgYHNiaS1cdTAwM2VvcHRgIHdhcyBjb3BpZWQgZnJvbSBzb21ld2hlcmUgZWxzZSB0aGF0ICp3YXNuJ3QqIHplcm9lZC4gQnV0IGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIHNob3dzIHRoYXQgYHNiaS1cdTAwM2VvcHRgIGlzIGFzc2lnbmVkIHVzaW5nIGBzYmktXHUwMDNlb3B0ID0gbmV3X3NiaS1cdTAwM2VvcHQ7YCBpbiBgZXJvZnNfZmNfcmVjb25maWd1cmVgLiBHaXZlbiB0aGF0IGBuZXdfc2JpYCBpcyBhbHdheXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCB3ZSdyZSBndWFyYW50ZWVkIHRvIGJlIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGBlcm9mc19mY19wYXJzZV9wYXJhbWAgbWlnaHQgaW52b2x2ZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbiBvbiB0aGUgd2hvbGUgd29yZCwgaW5jbHVkaW5nIHBhZGRpbmcuIEhvd2V2ZXIsIHRoZSBwYWRkaW5nIHdpbGwgYmUgemVyby4gVGhlcmVmb3JlLCBldmVuIGlmIGEgY29tcGlsZXIgZ2VuZXJhdGVzIGEgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9uIG9uIHRoZSB3aG9sZSB3b3JkLCBpdCByZWFkcyBpbml0aWFsaXplZCAoemVybykgbWVtb3J5LCBkb2VzIHNvbWV0aGluZywgYW5kIHdyaXRlcyB0aGUgcGFkZGluZyBiYWNrIGFzIHplcm8uIFRoYXQncyBzdGlsbCBzYWZlLlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIG90aGVyIHBvdGVudGlhbCBpc3N1ZXMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgc3VwZXJibG9ja19zaGFyZWAgYW5kIGl0cyB1c2UgaW4gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAuIFRoZSBjb21wYXJpc29uIHRoZXJlIGxvb2tzIGF0IGBzYmktXHUwMDNlZGlmMC5maWxlYCwgYHNiaS1cdTAwM2VkaWYwLmZzb2ZmYCwgYG5ld19zYmktXHUwMDNlZGlmMC5maWxlYCwgYW5kIGBuZXdfc2JpLVx1MDAzZWRpZjAuZnNvZmZgLCBhbG9uZyB3aXRoIGBtZW1jbXBgIG9mIHRoZSBvcHRpb25zLiBBcmUgdGhvc2UgaW5pdGlhbGl6ZWQ/IEknbSBwcmV0dHkgc3VyZSBgZGlmMGAgaXMgcGFydCBvZiBgc2JpYCB3aGljaCBpcyBpbml0aWFsaXplZCBieSBga3phbGxvY2AsIG1lYW5pbmcgdGhlIGBmc29mZmAgaXMgYWx3YXlzIGluaXRpYWxpemVkLiBFdmVuIGlmIGl0J3Mgbm90IHByb3ZpZGVkIHZpYSBhIG1vdW50IG9wdGlvbiwgaXQgcmVtYWlucyB6ZXJvLiBUaGVuIGBzYmktXHUwMDNlZGlmMC5maWxlYCBpcyBzZXQgZnJvbSB0aGUgYE9wdF9zb3VyY2VgIG9wdGlvbiwgYW5kIGl0J3MgaGFuZGxlZCBwcm9wZXJseSBpZiBpdCdzIE5VTEwgKHVuc3BlY2lmaWVkKSB3aXRoIHRoZSBjb25kaXRpb25hbCBjaGVjay5cblxuSSBkaWQgYSBtZW50YWwgY2hlY2sgb2YgYGdldF90cmVlX3N1cGVyYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBWRlMgZnVuY3Rpb24uIFRoZXJlJ3Mgbm90aGluZyB1bnVzdWFsIHRoZXJlLlxuXG5JcyBhbnl0aGluZyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLCB0aGlzIGlzIGp1c3QgaW50ZXJuYWwgbW91bnQgb3B0aW9uIGhhbmRsaW5nIGFuZCBzdXBlcmJsb2NrIHNoYXJpbmcuIElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZSwgZXZlcnl0aGluZydzIGluaXRpYWxpemVkLiBObyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3BlLCB0aGUgc3RydWN0dXJlcyBhcmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCByZXZpZXcgYWdhaW46IGBzYmktXHUwMDNlb3B0YCBhbmQgaXRzIHBhZGRpbmcgYXJlIHplcm9lZCBieSBga3phbGxvY2AuIElmIGBzYmktXHUwMDNlb3B0YCBpcyBhc3NpZ25lZCBmcm9tIGEgYG5ld19zYmktXHUwMDNlb3B0YCwgdGhhdCBhbHNvIGdldHMgaW5pdGlhbGl6ZWQgYnkgYGt6YWxsb2NgLiBUaGUgbW9kaWZpY2F0aW9ucyB2aWEgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AgYW5kIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgZG8gbm90IHRvdWNoIHRoZSBwYWRkaW5nLiBUaGVyZSdzIG5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBleGNlcHQgZm9yIHByaW50aW5nIHRoZSBvcHRpb25zIGZpZWxkLWJ5LWZpZWxkIGluIGBlcm9mc19zaG93X29wdGlvbnNgLiBUaGUgb3B0aW9ucyBhcmUgcHJpbnRlZCB2aWEgYSBzZXFfZmlsZSwgd2hpY2ggaXMgc2VudCB0byB1c2VyIHNwYWNlLCBidXQgdGhpcyBoYXBwZW5zIGZpZWxkLWJ5LWZpZWxkLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gc3RydWN0IGNvcHlpbmcsIG5vIHBhZGRpbmcsIGFuZCBubyBwcm9ibGVtLlxuXG5Pa2F5LCBJIHRoaW5rIEkndmUgdGhvcm91Z2hseSB2ZXR0ZWQgdGhlIGNvZGUsIGFuZCBJJ20gY29uZmlkZW50IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBtb3VudCBvcHRpb24gaGFuZGxpbmcgaW4gdGhpcyBwYXRjaC4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMyOjE5LjYxMzgyNTEwMloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9lcm9mcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzY6XFx0c3RhdGljIGludCBlcm9mc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuMTEzOTpcXHRcXHRzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyAqb3B0ID0gXFx1MDAyNnNiaS1cXHUwMDNlb3B0O1xcbjExNDA6XFx0XFxuMTE0MTpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxcbjExNDI6XFx0XFx0XFx0c2VxX3B1dHMoc2VxLCB0ZXN0X29wdChvcHQsIFhBVFRSX1VTRVIpID9cXG4xMTQzOlxcdFxcdFxcdFxcdFxcdFxcXCIsdXNlcl94YXR0clxcXCIgOiBcXFwiLG5vdXNlcl94YXR0clxcXCIpO1xcbjExNDQ6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXFxuMTE0NTpcXHRcXHRcXHRzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgUE9TSVhfQUNMKSA/IFxcXCIsYWNsXFxcIiA6IFxcXCIsbm9hY2xcXFwiKTtcXG4xMTQ2OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19aSVApIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlYXZhaWxhYmxlX2NvbXByX2FsZ3MpXFxuMTE0NzpcXHRcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIixjYWNoZV9zdHJhdGVneT0lc1xcXCIsXFxuMTE0ODpcXHRcXHRcXHRcXHQgIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W29wdC1cXHUwMDNlY2FjaGVfc3RyYXRlZ3ldLm5hbWUpO1xcbjExNDk6XFx0XFx0aWYgKHRlc3Rfb3B0KG9wdCwgREFYX0FMV0FZUykpXFxuMTE1MDpcXHRcXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCIsZGF4PWFsd2F5c1xcXCIpO1xcbjExNTE6XFx0XFx0aWYgKHRlc3Rfb3B0KG9wdCwgREFYX05FVkVSKSlcXG4xMTUyOlxcdFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixkYXg9bmV2ZXJcXFwiKTtcXG4xMTUzOlxcdFxcdGlmIChlcm9mc19pc19maWxlaW9fbW9kZShzYmkpIFxcdTAwMjZcXHUwMDI2IHRlc3Rfb3B0KG9wdCwgRElSRUNUX0lPKSlcXG4xMTU0OlxcdFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixkaXJlY3Rpb1xcXCIpO1xcbjExNTU6XFx0XFx0aWYgKHNiaS1cXHUwMDNlZGlmMC5mc29mZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzI6MTkuNjEzOTE0NzMyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NTQ3MzEzMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgRVJPRlMgU3VwZXJibG9jayBTaGFyaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgeWVzLCB0aGUgY29kZSAqZG9lcyogc2VlbSB0byBwcmludCBmaWVsZCBieSBmaWVsZC4gSSdtIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhlcmUncyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkgc2VlIHRoYXQgdGhlIG9ubHkgdXNlIG9mIGBzYmktXHUwMDNlb3B0YCBhcyBhIHdob2xlIGlzIGluIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwb2ludC4gQm90aCBgc2JpYCBhbmQgYG5ld19zYmlgIGFyZSBga3phbGxvY2AnZCwgd2hpY2ggbWVhbnMgdGhlaXIgcGFkZGluZyBpcyAqemVyb2VkKiBieSBkZWZhdWx0LiBTbyBldmVuIGlmIGBtZW1jbXBgIHJlYWRzIHRoYXQgcGFkZGluZywgaXQncyByZWFkaW5nICppbml0aWFsaXplZCogbWVtb3J5IChzcGVjaWZpY2FsbHksIHplcm9zKS4gS01TQU4gc2hvdWxkbid0IGNvbXBsYWluLlxuXG5Ob3csIGNvdWxkIHRoZSBgc2JpLVx1MDAzZW9wdGAgc3RydWN0LCBpbiBwYXJ0aWN1bGFyLCBoYXZlIGJpdGZpZWxkcz8gTm8sIGl0IGRvZXNuJ3QuIEl0J3MgZ290IGB1bnNpZ25lZCBjaGFyIGNhY2hlX3N0cmF0ZWd5YCBhbmQgYHVuc2lnbmVkIGludCBtb3VudF9vcHRgLiBUaGVyZSBpcyAzIGJ5dGVzIG9mIHBhZGRpbmcgYmV0d2VlbiB0aGVzZSB0d28gZmllbGRzLCBkdWUgdG8gdGhlIHN0cnVjdHVyZSBsYXlvdXQuIEJ1dCBzaW5jZSBpdCdzIGBremFsbG9jYCdkLCB0aGF0IHBhZGRpbmcgaXMgemVyby4gQW55IHdyaXRlIHRvIGBjYWNoZV9zdHJhdGVneWAgb3IgYG1vdW50X29wdGAgZ2VuZXJhdGVzIGJ5dGUgb3Igd29yZCB3cml0ZXMsIGFuZCBpdCBuZXZlciB0b3VjaGVzIHRoZSBwYWRkaW5nLiBUaGF0IHBhZGRpbmcgKnJlbWFpbnMqIHplcm8uIFRoZSBgbWVtY21wYCBjYWxsIHdpbGwgY29tcGFyZSB0aGUgcGFkZGluZyBieXRlcywgYW5kIHRoZXkgYXJlIGJvdGggemVybywgc28gdGhleSBtYXRjaC4gVGhpcyBpcyBwZXJmZWN0bHkgc2FmZS4gSXQncyBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkxldCdzIGxvb2sgbW9yZSBicm9hZGx5IGF0IHRoZSBwYXRjaC4gSXQgaW50cm9kdWNlcyBgc3VwZXJibG9ja19zaGFyZWAgbW91bnQgb3B0aW9uLiBOb3csIGl0IGRvZXMgbW9kaWZ5IGBlcm9mc19mY19wYXJzZV9wYXJhbWAgdG8gc2V0IGBTVVBFUkJMT0NLX1NIQVJFYC4gVGhpcyBqdXN0IHNldHMgYSBmbGFnIGluIGBzYmktXHUwMDNlb3B0Lm1vdW50X29wdGAuIGBlcm9mc19mY19maWxsX3N1cGVyYCBjaGVja3MgZmxhZ3MgdGhhdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuXG5cblRoZSBuZXcgZnVuY3Rpb24gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgc2VlbXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHdoZXJlIGl0IGNvdWxkIGZhaWwuIEJ1dCBsZXQncyBzZWUuIEhlcmUsIHdlIHNlZSBjb21wYXJpc29ucyBhZ2FpbnN0IGBzYi1cdTAwM2VzX2lmbGFnc2AsIHRoZSBgc2JpLVx1MDAzZWRpZjBgIG1lbWJlcnMsIGFuZCBmaW5hbGx5IGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBBbGwgdGhlc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBpbml0aWFsaXplZCBmbGFncy5cblxuVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAsIHdoaWNoIGp1c3QgY2FsbHMgYW5vdGhlciBmdW5jdGlvbiBkZXBlbmRpbmcgb24gYSBmbGFnLiBBbmQgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCBqdXN0IGNoZWNrcyBhIGZsYWcsIHRvby5cblxuRmluYWxseSwgdGhlIGBmcy9zdXBlci5jYCBjaGFuZ2UganVzdCBleHBvcnRzIGBnZXRfdHJlZV9zdXBlcmAuXG5cblRoZXJlIGlzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBgbWVtY21wYCBvbiBhIHN0cnVjdCB3aXRoIHBhZGRpbmcgaXMgc2FmZSBiZWNhdXNlIG9mIGBremFsbG9jYC4gVGhlIHBhZGRpbmcgaXMgbmV2ZXIgbW9kaWZpZWQsIGFuZCByZW1haW5zIHplcm8uIEtNU0FOIHNlZXMgdGhlIHBhZGRpbmcgYXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gemVyby5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBUaGUgY2hhbmdlcyBhcmUgYWxsIHJlbGF0ZWQgdG8gbW91bnQgb3B0aW9ucyBhbmQgc3VwZXJibG9jayBzaGFyaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIHdpbGwgYmUgbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcywgYW5kIHRob3NlIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGRldGVjdG9ycy4gVGhlcmUgYXJlIG5vIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIGhlcmUncyBteSByZWFzb25pbmcsIGluIHN1bW1hcnk6XG5cbiogICBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc3VwZXJibG9ja19zaGFyZWAgZm9yIEVST0ZTIGZpbGUtYmFja2VkIG1vdW50cy5cbiogICBJdCBhZGRzIGEgY29tcGFyaXNvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCB0aGF0IHVzZXMgYG1lbWNtcGAgb24gYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYC5cbiogICBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGhhcyBwYWRkaW5nLCBidXQgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCwgc28gcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCAqcmVtYWlucyogemVyby4gYG1lbWNtcGAgc2FmZWx5IHJlYWRzIGluaXRpYWxpemVkIG1lbW9yeS5cbiogICBObyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgaW4gY29udHJvbCBmbG93LlxuKiAgIFBvdGVudGlhbCBidWdzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBsb2dpYyBlcnJvcnMpIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHRlc3RpbmcuXG4qICAgVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzbid0IGp1c3RpZmllZC4gVGhpcyBzaG91bGQgYmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNjUsIk91dHB1dFRva2VucyI6MjYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMyOjM5LjE2MTIzMTM4NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBmaWxlLWJhY2tlZCBtb3VudHMgYW5kIGFkZHMgbG9naWMgdG8gc2hhcmUgc3VwZXJibG9ja3Mgd2hlbiBjb21wYXRpYmxlIG9wdGlvbnMgYXJlIHVzZWQuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIHVzZXMgYG1lbWNtcGAgdG8gY29tcGFyZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBXaGlsZSB0aGlzIHN0cnVjdCBjb250YWlucyBwYWRkaW5nLCBpbnN0YW5jZXMgb2YgaXQgYXJlIGVtYmVkZGVkIHdpdGhpbiBgc3RydWN0IGVyb2ZzX3NiX2luZm9gLCB3aGljaCBpcyBhbHdheXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AgKGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgKS4gQ29uc2VxdWVudGx5LCB0aGUgcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCByZW1haW5zIHplcm8sIG1lYW5pbmcgYG1lbWNtcGAgc2FmZWx5IHJlYWRzIGluaXRpYWxpemVkIG1lbW9yeSB3aXRob3V0IHRyaWdnZXJpbmcgS01TQU4gb3IgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3IuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBzaGFyaW5nKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgZmlsZS1iYWNrZWQgbW91bnRzIGFuZCBhZGRzIGxvZ2ljIHRvIHNoYXJlIHN1cGVyYmxvY2tzIHdoZW4gY29tcGF0aWJsZSBvcHRpb25zIGFyZSB1c2VkLiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCB1c2VzIGBtZW1jbXBgIHRvIGNvbXBhcmUgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYC4gV2hpbGUgdGhpcyBzdHJ1Y3QgY29udGFpbnMgcGFkZGluZywgaW5zdGFuY2VzIG9mIGl0IGFyZSBlbWJlZGRlZCB3aXRoaW4gYHN0cnVjdCBlcm9mc19zYl9pbmZvYCwgd2hpY2ggaXMgYWx3YXlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgIChpbiBgZXJvZnNfaW5pdF9mc19jb250ZXh0YCkuIENvbnNlcXVlbnRseSwgdGhlIHBhZGRpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgcmVtYWlucyB6ZXJvLCBtZWFuaW5nIGBtZW1jbXBgIHNhZmVseSByZWFkcyBpbml0aWFsaXplZCBtZW1vcnkgd2l0aG91dCB0cmlnZ2VyaW5nIEtNU0FOIG9yIGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW9yLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZXJlIGlzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHN1cGVyYmxvY2sgc2hhcmluZykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowl6lpp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 07:28:17 +0000 UTC FinishedAt: 2026-08-11 07:32:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d08ff75a47a3e7e2ab45a3bcab6723b4d906422", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EROFS_FS_BACKED_BY_FILE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d08ff75a47a3e7e2ab45a3bcab6723b4d906422", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EROFS_FS_BACKED_BY_FILE" ], "series_id": "ef6239d3-2a9e-451d-a517-251a95a039b2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "erofs_fc_test_file_super", "erofs_fc_get_tree_file", "get_tree_super" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2dldF90cmVlX2ZpbGUmIzM0OywKICAgICYjMzQ7Z2V0X3RyZWVfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIEVST0ZTIGZpbGUtYmFja2VkIG1vdW50cyBhbmQgYWRkcyBsb2dpYyB0byBzaGFyZSBzdXBlcmJsb2NrcyB3aGVuIGNvbXBhdGlibGUgb3B0aW9ucyBhcmUgdXNlZC4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgdXNlcyBgbWVtY21wYCB0byBjb21wYXJlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIFdoaWxlIHRoaXMgc3RydWN0IGNvbnRhaW5zIHBhZGRpbmcsIGluc3RhbmNlcyBvZiBpdCBhcmUgZW1iZWRkZWQgd2l0aGluIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AsIHdoaWNoIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCAoaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGApLiBDb25zZXF1ZW50bHksIHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIHJlbWFpbnMgemVybywgbWVhbmluZyBgbWVtY21wYCBzYWZlbHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhvdXQgdHJpZ2dlcmluZyBLTVNBTiBvciBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBzaGFyaW5nKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBzdXBlcmJsb2NrIHNoYXJpbmcgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBtb3VudCBsb2dpYyBmb3IgRVJPRlMgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjFmZTQ0NmFmMzVkZTkzMTdmYzQ2MjIyZWYyNDBkZjA2OThlNzAzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjMwOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbmluZGV4IGQzMDFkOWFjOTQ2YTkuLjQ5YzRlN2RiYzVkNjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbkBAIC0xMzksNiAmIzQzOzEzOSw5IEBAIGlub2RlX3NoYXJlICAgICAgICAgICAgRW5hYmxlIGlub2RlIHBhZ2Ugc2hhcmluZyBmb3IgdGhpcyBmaWxlc3lzdGVtLiAgSW5vZGVzIHdpXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGNhY2hlLlxuIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBhcyBhbiBhbHJlYWR5LW9wZW5lZCBmaWxlIGRlc2NyaXB0b3IuXG4mIzQzO3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWVcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGVcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXG4gPT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiBGaWxlLWJhY2tlZCBtb3VudHNcbkBAIC0xNTYsNiAmIzQzOzE1OSwxMSBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXRcbiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoXG4gaW5zdGVhZC5cbiBcbiYjNDM7V2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCBhbmQgdGhlIHNhbWUgYmFja2luZyBmaWxlIChpZGVudGlmaWVkXG4mIzQzO2J5IGlub2RlIGFuZCBmc29mZnNldCkgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUgbW91bnRcbiYjNDM7b3B0aW9ucywgdGhlIGtlcm5lbCByZXVzZXMgdGhlIGV4aXN0aW5nIHN1cGVyYmxvY2sgaW5zdGVhZCBvZiBjcmVhdGluZyBhXG4mIzQzO25ldyBvbmUuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy5cbiYjNDM7XG4gU3lzZnMgRW50cmllc1xuID09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbkBAIC0xNTYsNiAmIzQzOzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlx0XHQweDAwMDAwMDgwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cdFx0MHgwMDAwMDEwMFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcdFx0MHgwMDAwMDIwMFxuJiM0MzsjZGVmaW5lIEVST0ZTX01PVU5UX1NVUEVSQkxPQ0tfU0hBUkVcdDB4MDAwMDA0MDBcbiBcbiAjZGVmaW5lIGNsZWFyX29wdChvcHQsIG9wdGlvbilcdCgob3B0KS1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pXG4gI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbilcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xuaW5kZXggZGRjOTcxOWU2ZDE4ZS4uNDU3ZTA2NzQ0N2Q1ZiAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbkBAIC0zODYsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIGVudW0ge1xuIFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxuIFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcbi1cdE9wdF9zb3VyY2UsXG4mIzQzO1x0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XG5AQCAtNDE1LDYgJiM0Mzs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbiBcdGZzcGFyYW1fdTY0KFwmIzM0O2Zzb2Zmc2V0XCYjMzQ7LFx0XHRcdE9wdF9mc29mZnNldCksXG4gXHRmc3BhcmFtX2ZsYWcoXCYjMzQ7aW5vZGVfc2hhcmVcJiMzNDssXHRcdE9wdF9pbm9kZV9zaGFyZSksXG4gXHRmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKFwmIzM0O3NvdXJjZVwmIzM0OyxcdE9wdF9zb3VyY2UpLFxuJiM0MztcdGZzcGFyYW1fZmxhZyhcJiMzNDtzdXBlcmJsb2NrX3NoYXJlXCYjMzQ7LFx0T3B0X3N1cGVyYmxvY2tfc2hhcmUpLFxuIFx0e31cbiB9O1xuIFxuQEAgLTU2MCw2ICYjNDM7NTYxLDEyIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRlbHNlXG4gXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XG4mIzQzO1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcbiYjNDM7XHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcJiMzNDssIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBPcHRfc291cmNlOlxuIFx0XHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XG4gXHR9XG5AQCAtNjUyLDYgJiM0Mzs2NTksMTcgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuJiM0MztcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG4mIzQzO1x0XHRlcnJvcmZjKGZjLCBcJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdC8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi9cbiYjNDM7XHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNiaS1cdTAwM2VkZXZzLVx1MDAzZWV4dHJhX2RldmljZXMpIHtcbiYjNDM7XHRcdGVycm9yZmMoZmMsIFwmIzM0O3N1cGVyYmxvY2tfc2hhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRyYSBkZXZpY2VzXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiBcbiBcdHNiaS1cdTAwM2VibGtzemJpdHMgPSBQQUdFX1NISUZUO1xuIFx0aWYgKCFzYi1cdTAwM2VzX2JkZXYpIHtcbkBAIC03NzksNiAmIzQzOzc5NywzNiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXRcbiYjNDM7XHQgKiBoYXMgU1VQRVJCTE9DS19TSEFSRSBzZXQsIHNvIHRoYXQgdGhlIG1lbWNtcCBsYXRlciBlbnN1cmVzXG4mIzQzO1x0ICogbmV3X3NiaSBhbHNvIGlzIHNoYXJlYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Ioc2IpO1xuJiM0MztcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuJiM0MztcbiYjNDM7XHRpZiAoc2ItXHUwMDNlc19pZmxhZ3MgXHUwMDI2IFNCX0lfUkVUSVJFRClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghc2JpLVx1MDAzZWRpZjAuZmlsZSB8fCAhbmV3X3NiaS1cdTAwM2VkaWYwLmZpbGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXHUwMDNlZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktXHUwMDNlZGlmMC5maWxlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgc2JpLVx1MDAzZWRpZjAuZnNvZmYgPT0gbmV3X3NiaS1cdTAwM2VkaWYwLmZzb2ZmIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAhbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbiYjNDM7XHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4gXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuQEAgLTc5NCw3ICYjNDM7ODQyLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdFx0ZXJyb3JmYyhmYywgXCYjMzQ7c291cmNlIGlzIHVuc3VwcG9ydGVkXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuLVx0XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuJiM0MztcdFx0cmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpO1xuIFx0fVxuIFxuIFx0cmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlcixcbkBAIC04MTIsNyAmIzQzOzg2MCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0XHRpZiAoU19JU1JFRyhmaWxlX2lub2RlKHNiaS1cdTAwM2VkaWYwLmZpbGUpLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBzYmktXHUwMDNlZGlmMC5maWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VyZWFkX2ZvbGlvKVxuLVx0XHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4mIzQzO1x0XHRcdHJldHVybiBlcm9mc19mY19nZXRfdHJlZV9maWxlKGZjKTtcbiBcdH1cbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTgyNSw2ICYjNDM7ODczLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0REJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTtcbiBcbiYjNDM7XHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cbiYjNDM7XHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiBcdGlmIChuZXdfc2JpLVx1MDAzZWRvbWFpbl9pZClcbiBcdFx0ZXJvZnNfaW5mbyhzYiwgXCYjMzQ7aWdub3JpbmcgcmVjb25maWd1cmF0aW9uIGZvciBkb21haW5faWQuXCYjMzQ7KTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmNcbkBAIC0xMzg5LDcgJiM0MzsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiYjNDM7LyoqXG4mIzQzOyAqIGdldF90cmVlX3N1cGVyIC0gR2V0IGEgc3VwZXJibG9jaywgb3B0aW9uYWxseSBzaGFyaW5nIGFuIGV4aXN0aW5nIG9uZVxuJiM0MzsgKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVyc1xuJiM0MzsgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTFxuJiM0MzsgKiBAZmlsbF9zdXBlcjogSGVscGVyIHRvIGluaXRpYWxpc2UgYSBuZXcgc3VwZXJibG9ja1xuJiM0MzsgKlxuJiM0MzsgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXNcbiYjNDM7ICogcmV1c2VkOyBvdGhlcndpc2UgYSBuZXcgYW5vbnltb3VzIHN1cGVyYmxvY2sgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgd2l0aFxuJiM0MzsgKiBAZmlsbF9zdXBlci4gIFBhc3NpbmcgTlVMTCBmb3IgQHRlc3QgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgc3VwZXJibG9jay5cbiYjNDM7ICovXG4mIzQzO2ludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcbiBcdFx0aW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbkBAIC0xNDE2LDEyICYjNDM7MTQyNiwxMyBAQCBzdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpO1xuIFxuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuIHtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTtcbiBcbkBAIC0xNDI5LDcgJiM0MzsxNDQwLDcgQEAgaW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuIHtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7XG4mIzQzO1x0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc2luZ2xlKTtcbiBcbkBAIC0xNDM5LDcgJiM0MzsxNDUwLDcgQEAgaW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0dm9pZCAqa2V5KVxuIHtcbiBcdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGtleTtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiYjNDM7XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5pbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5AQCAtMTUwLDYgJiM0MzsxNTAsMTAgQEAgZXh0ZXJuIGludCB2ZnNfcGFyc2VfZnNfcGFyYW1fc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xuIGV4dGVybiB2b2lkIGZjX2Ryb3BfbG9ja2VkKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4gXG4mIzQzO2V4dGVybiBpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuJiM0MztcdFx0XHQgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuJiM0MztcdFx0XHQgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpO1xuIGV4dGVybiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZSYjMzQ7LAogICAgJiMzNDtnZXRfdHJlZV9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBzdXBlcmJsb2NrIHNoYXJpbmcgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBtb3VudCBsb2dpYyBmb3IgRVJPRlMgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjFmZTQ0NmFmMzVkZTkzMTdmYzQ2MjIyZWYyNDBkZjA2OThlNzAzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA3OjMwOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdAppbmRleCBkMzAxZDlhYzk0NmE5Li40OWM0ZTdkYmM1ZDYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdApAQCAtMTM5LDYgJiM0MzsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aQogICAgICAgICAgICAgICAgICAgICAgICBwYWdlIGNhY2hlLgogc291cmNlPSVzICAgICAgICAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU3BlY2lmeSB0aGUgYmFja2luZyBpbWFnZSBhcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLgomIzQzO3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLgogPT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogRmlsZS1iYWNrZWQgbW91bnRzCkBAIC0xNTYsNiAmIzQzOzE1OSwxMSBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXQKIHJlc2lkZXMgb24gYSBibG9jayBkZXZpY2UsIHVzZSB0aGUgdHJhZGl0aW9uYWwgYmxvY2sgZGV2aWNlIG1vdW50IHBhdGgKIGluc3RlYWQuCiAKJiM0MztXaGVuIHN1cGVyYmxvY2tfc2hhcmUgaXMgc3BlY2lmaWVkIGFuZCB0aGUgc2FtZSBiYWNraW5nIGZpbGUgKGlkZW50aWZpZWQKJiM0MztieSBpbm9kZSBhbmQgZnNvZmZzZXQpIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG1vdW50CiYjNDM7b3B0aW9ucywgdGhlIGtlcm5lbCByZXVzZXMgdGhlIGV4aXN0aW5nIHN1cGVyYmxvY2sgaW5zdGVhZCBvZiBjcmVhdGluZyBhCiYjNDM7bmV3IG9uZS4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLgomIzQzOwogU3lzZnMgRW50cmllcwogPT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9mcy9lcm9mcy9pbnRlcm5hbC5oIGIvZnMvZXJvZnMvaW50ZXJuYWwuaAppbmRleCA1N2JkMjE4NTljNjVkLi44NmRhMjE5ZjhmNGVjIDEwMDY0NAotLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKQEAgLTE1Niw2ICYjNDM7MTU2LDcgQEAgc3RydWN0IGVyb2ZzX3NiX2luZm8gewogI2RlZmluZSBFUk9GU19NT1VOVF9EQVhfTkVWRVIJCTB4MDAwMDAwODAKICNkZWZpbmUgRVJPRlNfTU9VTlRfRElSRUNUX0lPCQkweDAwMDAwMTAwCiAjZGVmaW5lIEVST0ZTX01PVU5UX0lOT0RFX1NIQVJFCQkweDAwMDAwMjAwCiYjNDM7I2RlZmluZSBFUk9GU19NT1VOVF9TVVBFUkJMT0NLX1NIQVJFCTB4MDAwMDA0MDAKIAogI2RlZmluZSBjbGVhcl9vcHQob3B0LCBvcHRpb24pCSgob3B0KS0mZ3Q7bW91bnRfb3B0ICZhbXA7PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pCiAjZGVmaW5lIHNldF9vcHQob3B0LCBvcHRpb24pCSgob3B0KS0mZ3Q7bW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKQpkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvc3VwZXIuYyBiL2ZzL2Vyb2ZzL3N1cGVyLmMKaW5kZXggZGRjOTcxOWU2ZDE4ZS4uNDU3ZTA2NzQ0N2Q1ZiAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9zdXBlci5jCkBAIC0zODYsNyAmIzQzOzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKQogZW51bSB7CiAJT3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLAogCU9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsCi0JT3B0X3NvdXJjZSwKJiM0MzsJT3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7CkBAIC00MTUsNiAmIzQzOzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0gewogCWZzcGFyYW1fdTY0KCYjMzQ7ZnNvZmZzZXQmIzM0OywJCQlPcHRfZnNvZmZzZXQpLAogCWZzcGFyYW1fZmxhZygmIzM0O2lub2RlX3NoYXJlJiMzNDssCQlPcHRfaW5vZGVfc2hhcmUpLAogCWZzcGFyYW1fZmlsZV9vcl9zdHJpbmcoJiMzNDtzb3VyY2UmIzM0OywJT3B0X3NvdXJjZSksCiYjNDM7CWZzcGFyYW1fZmxhZygmIzM0O3N1cGVyYmxvY2tfc2hhcmUmIzM0OywJT3B0X3N1cGVyYmxvY2tfc2hhcmUpLAogCXt9CiB9OwogCkBAIC01NjAsNiAmIzQzOzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJZWxzZQogCQkJc2V0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBJTk9ERV9TSEFSRSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIE9wdF9zdXBlcmJsb2NrX3NoYXJlOgomIzQzOwkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpCiYjNDM7CQkJZXJyb3JmYyhmYywgJiMzNDslcyBvcHRpb24gbm90IHN1cHBvcnRlZCYjMzQ7LCBlcm9mc19mc19wYXJhbWV0ZXJzW29wdF0ubmFtZSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2V0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgT3B0X3NvdXJjZToKIAkJcmV0dXJuIGVyb2ZzX2ZjX3BhcnNlX3NvdXJjZShmYywgcGFyYW0pOwogCX0KQEAgLTY1Miw2ICYjNDM7NjU5LDE3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCWVycm9yZmMoZmMsICYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQomIzQzOwlpZiAodGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgdGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgSU5PREVfU0hBUkUpKSB7CiYjNDM7CQllcnJvcmZjKGZjLCAmIzM0O3N1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CS8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi8KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpICZhbXA7JmFtcDsKJiM0MzsJICAgIHNiaS0mZ3Q7ZGV2cy0mZ3Q7ZXh0cmFfZGV2aWNlcykgewomIzQzOwkJZXJyb3JmYyhmYywgJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0cmEgZGV2aWNlcyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAlzYmktJmd0O2Jsa3N6Yml0cyA9IFBBR0VfU0hJRlQ7CiAJaWYgKCFzYi0mZ3Q7c19iZGV2KSB7CkBAIC03NzksNiAmIzQzOzc5NywzNiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKJiM0MzsJCQkJICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXQKJiM0MzsJICogaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LCBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlcwomIzQzOwkgKiBuZXdfc2JpIGFsc28gaXMgc2hhcmVhYmxlLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGVyb2ZzX3NiX2luZm8gKm5ld19zYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwomIzQzOwomIzQzOwlpZiAoc2ItJmd0O3NfaWZsYWdzICZhbXA7IFNCX0lfUkVUSVJFRCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAoIXNiaS0mZ3Q7ZGlmMC5maWxlIHx8ICFuZXdfc2JpLSZndDtkaWYwLmZpbGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGZpbGVfaW5vZGUoc2JpLSZndDtkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBzYmktJmd0O2RpZjAuZnNvZmYgPT0gbmV3X3NiaS0mZ3Q7ZGlmMC5mc29mZiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAhbWVtY21wKCZhbXA7c2JpLSZndDtvcHQsICZhbXA7bmV3X3NiaS0mZ3Q7b3B0LCBzaXplb2Yoc2JpLSZndDtvcHQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwomIzQzOwomIzQzOwlpZiAoIXRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKQomIzQzOwkJcmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogewogCXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy0mZ3Q7c19mc19pbmZvOwpAQCAtNzk0LDcgJiM0Mzs4NDIsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAkJCWVycm9yZmMoZmMsICYjMzQ7c291cmNlIGlzIHVuc3VwcG9ydGVkJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJcmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0MzsJCXJldHVybiBlcm9mc19mY19nZXRfdHJlZV9maWxlKGZjKTsKIAl9CiAKIAlyZXQgPSBnZXRfdHJlZV9iZGV2X2ZsYWdzKGZjLCBlcm9mc19mY19maWxsX3N1cGVyLApAQCAtODEyLDcgJiM0Mzs4NjAsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAogCQlpZiAoU19JU1JFRyhmaWxlX2lub2RlKHNiaS0mZ3Q7ZGlmMC5maWxlKS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7CiAJCSAgICBzYmktJmd0O2RpZjAuZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDthX29wcy0mZ3Q7cmVhZF9mb2xpbykKLQkJCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CQkJcmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtODI1LDYgJiM0Mzs4NzMsMTAgQEAgc3RhdGljIGludCBlcm9mc19mY19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAKIAlEQkdfQlVHT04oIXNiX3Jkb25seShzYikpOwogCiYjNDM7CS8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqLwomIzQzOwlpZiAodGVzdF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSkpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwogCWlmIChuZXdfc2JpLSZndDtkb21haW5faWQpCiAJCWVyb2ZzX2luZm8oc2IsICYjMzQ7aWdub3JpbmcgcmVjb25maWd1cmF0aW9uIGZvciBkb21haW5faWQuJiMzNDspOwogCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA1ZmVlY2Y1ZDkwMzhkLi43MWNkMmRiYWRlNWIzIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTEzODksNyAmIzQzOzEzODksMTcgQEAgc3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKJiM0MzsvKioKJiM0MzsgKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmUKJiM0MzsgKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVycwomIzQzOyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMCiYjNDM7ICogQGZpbGxfc3VwZXI6IEhlbHBlciB0byBpbml0aWFsaXNlIGEgbmV3IHN1cGVyYmxvY2sKJiM0MzsgKgomIzQzOyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpcwomIzQzOyAqIHJldXNlZDsgb3RoZXJ3aXNlIGEgbmV3IGFub255bW91cyBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpc2VkIHdpdGgKJiM0MzsgKiBAZmlsbF9zdXBlci4gIFBhc3NpbmcgTlVMTCBmb3IgQHRlc3QgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgc3VwZXJibG9jay4KJiM0MzsgKi8KJiM0MztpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQlpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksCiAJCWludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKQpAQCAtMTQxNiwxMiAmIzQzOzE0MjYsMTMgQEAgc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiAJcmV0dXJuIGVycjsKIH0KJiM0MztFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTsKIAogaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKQogewotCXJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfbm9kZXYpOwogCkBAIC0xNDI5LDcgJiM0MzsxNDQwLDcgQEAgaW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCSAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKIHsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpOwomIzQzOwlyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc2luZ2xlKTsKIApAQCAtMTQzOSw3ICYjNDM7MTQ1MCw3IEBAIGludCBnZXRfdHJlZV9rZXllZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCXZvaWQgKmtleSkKIHsKIAlmYy0mZ3Q7c19mc19pbmZvID0ga2V5OwotCXJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oCmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oCkBAIC0xNTAsNiAmIzQzOzE1MCwxMCBAQCBleHRlcm4gaW50IHZmc19wYXJzZV9mc19wYXJhbV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkJCSAgICAgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pOwogZXh0ZXJuIHZvaWQgZmNfZHJvcF9sb2NrZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTsKIAomIzQzO2V4dGVybiBpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLAomIzQzOwkJCSBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksCiYjNDM7CQkJIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTsKIGV4dGVybiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkJIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCSAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRVJPRlMgRmlsZXN5c3RlbSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgYSBuZXcgbW91bnQgb3B0aW9uLCBgc3VwZXJibG9ja19zaGFyZWAsIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gZW5hYmxlIHN1cGVyYmxvY2sgc2hhcmluZyB3aGVuIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG11bHRpcGxlIHRpbWVzIHdpdGggY29tcGF0aWJsZSBzZXR0aW5ncy4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBgZnMvZXJvZnMvc3VwZXIuY2AsIGBmcy9lcm9mcy9pbnRlcm5hbC5oYCwgYGZzL3N1cGVyLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvZnNfY29udGV4dC5oYC4gVGhlIGNvcmUgbW9kaWZpY2F0aW9uIGluIGBmcy9zdXBlci5jYCBzZWVtcyB0byBiZSByZW5hbWluZyBgdmZzX2dldF9zdXBlcmAgdG8gYGdldF90cmVlX3N1cGVyYCBhbmQgZXhwb3J0aW5nIGl0LiBJbiBgZnMvZXJvZnMvc3VwZXIuY2Agc3BlY2lmaWNhbGx5LCBuZXcgZnVuY3Rpb25zIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAgYXJlIGFkZGVkLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIHRhcmdldGluZyB3aXRoIGZ1enppbmc/IERlZmluaXRlbHkuIEl0JiMzOTtzIGEgKm5ldyogbW91bnQgb3B0aW9uIGZvciBFUk9GUy4gTW91bnQgb3B0aW9ucyBhcmUgcHJhY3RpY2FsbHkgdGFpbG9yLW1hZGUgZm9yIGZ1enppbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZXkmIzM5O3JlIGEgZGlyZWN0IGVudHJ5IHBvaW50IGZvciBtYW5pcHVsYXRpbmcgdGhlIGZpbGVzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZyBvcHRpb25zLiBDbGVhcmx5LCBgQ09ORklHX0VST0ZTX0ZTYCBpcyB0aGUgYmlnIG9uZSBmb3IgZW5hYmxpbmcgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gaXRzZWxmLiBUaGUgcGF0Y2ggY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSB0aGUgY29kZSBzbmlwcGV0IGluIGBmcy9lcm9mcy9zdXBlci5jYCwgaW5jbHVkZXMgYSBjaGVjayBmb3IgYENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50OyBpZiB0aGF0IG9wdGlvbiBpc24mIzM5O3QgZW5hYmxlZCwgdGhlIGBzdXBlcmJsb2NrX3NoYXJlYCBvcHRpb24gdGhyb3dzIGFuIGVycm9yLiBTbywgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYm90aCBgRVJPRlNfRlNgIGFuZCBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIHRvIHByb3Blcmx5IGV4ZXJjaXNlIHRoaXMgZmVhdHVyZS4KCkZpbmFsbHksIEkgc2hvdWxkIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9lcm9mcy9LY29uZmlnYCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCByZXF1aXJlbWVudHMgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMgYmVmb3JlIEkgc3RhcnQgY3JhZnRpbmcgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFUk9GU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvS2NvbmZpZy0yLVxuZnMvZXJvZnMvS2NvbmZpZzozOmNvbmZpZyBFUk9GU19GU1xuZnMvZXJvZnMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7RVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy00OS1cbmZzL2Vyb2ZzL0tjb25maWc6NTA6Y29uZmlnIEVST0ZTX0ZTX0RFQlVHXG5mcy9lcm9mcy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtFUk9GUyBkZWJ1Z2dpbmcgZmVhdHVyZVwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctNTktXG5mcy9lcm9mcy9LY29uZmlnOjYwOmNvbmZpZyBFUk9GU19GU19YQVRUUlxuZnMvZXJvZnMvS2NvbmZpZy02MS1cdGJvb2wgXCYjMzQ7RVJPRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctNzAtXG5mcy9lcm9mcy9LY29uZmlnOjcxOmNvbmZpZyBFUk9GU19GU19QT1NJWF9BQ0xcbmZzL2Vyb2ZzL0tjb25maWctNzItXHRib29sIFwmIzM0O0VST0ZTIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy04NC1cbmZzL2Vyb2ZzL0tjb25maWc6ODU6Y29uZmlnIEVST0ZTX0ZTX1NFQ1VSSVRZXG5mcy9lcm9mcy9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtFUk9GUyBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTk3LVxuZnMvZXJvZnMvS2NvbmZpZzo5ODpjb25maWcgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcbmZzL2Vyb2ZzL0tjb25maWctOTktXHRib29sIFwmIzM0O0ZpbGUtYmFja2VkIEVST0ZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTExLVxuZnMvZXJvZnMvS2NvbmZpZzoxMTI6Y29uZmlnIEVST0ZTX0ZTX1pJUFxuZnMvZXJvZnMvS2NvbmZpZy0xMTMtXHRib29sIFwmIzM0O0VST0ZTIERhdGEgQ29tcHJlc3Npb24gU3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTIxLVxuZnMvZXJvZnMvS2NvbmZpZzoxMjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BXG5mcy9lcm9mcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7RVJPRlMgTFpNQSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTMzLVxuZnMvZXJvZnMvS2NvbmZpZzoxMzQ6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BX0RFRkFVTFRfTUFYX1NUUkVBTVNcbmZzL2Vyb2ZzL0tjb25maWctMTM1LVx0aW50IFwmIzM0O0VST0ZTIExaTUEgZGVmYXVsdCBtYXhpbXVtIGRlY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTQ3LVxuZnMvZXJvZnMvS2NvbmZpZzoxNDg6Y29uZmlnIEVST0ZTX0ZTX1pJUF9ERUZMQVRFXG5mcy9lcm9mcy9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7RVJPRlMgREVGTEFURSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTU4LVxuZnMvZXJvZnMvS2NvbmZpZzoxNTk6Y29uZmlnIEVST0ZTX0ZTX1pJUF9aU1REXG5mcy9lcm9mcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7RVJPRlMgWnN0YW5kYXJkIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNjktXG5mcy9lcm9mcy9LY29uZmlnOjE3MDpjb25maWcgRVJPRlNfRlNfWklQX0FDQ0VMXG5mcy9lcm9mcy9LY29uZmlnLTE3MS1cdGJvb2wgXCYjMzQ7RVJPRlMgaGFyZHdhcmUgZGVjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xODMtXG5mcy9lcm9mcy9LY29uZmlnOjE4NDpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEXG5mcy9lcm9mcy9LY29uZmlnLTE4NS1cdGJvb2wgXCYjMzQ7RVJPRlMgcGVyLWNwdSBkZWNvbXByZXNzaW9uIGt0aHJlYWQgd29ya2Vyc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTkyLVxuZnMvZXJvZnMvS2NvbmZpZzoxOTM6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRF9ISVBSSVxuZnMvZXJvZnMvS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O0VST0ZTIGhpZ2ggcHJpb3JpdHkgcGVyLUNQVSBrdGhyZWFkIHdvcmtlcnNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTIwMi1cbmZzL2Vyb2ZzL0tjb25maWc6MjAzOmNvbmZpZyBFUk9GU19GU19QQUdFX0NBQ0hFX1NIQVJFXG5mcy9lcm9mcy9LY29uZmlnLTIwNC1cdGJvb2wgXCYjMzQ7RVJPRlMgcGFnZSBjYWNoZSBzaGFyZSBzdXBwb3J0IChleHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipDaGVja2luZyBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgLiBCZWZvcmUgSSBldmVuIHRvdWNoIGFueXRoaW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgb2YgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucywgbW9kdWxlcywgb3IgZmVhdHVyZXMgaGluZ2Ugb24gdGhpcyBvbmU/IEFyZSB0aGVyZSBhbnkgdXBzdHJlYW0gb3IgZG93bnN0cmVhbSBpbXBhY3RzIEkgbmVlZCB0byBjb25zaWRlcj8gV2hhdCBkb2VzIHRoaXMgZW5hYmxlIG9yIGRpc2FibGUsIGFuZCBob3cgZG9lcyB0aGF0IGFmZmVjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gZnVuY3Rpb25hbGl0eT8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0gYW5kIGNyb3NzLXJlZmVyZW5jZSByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHN0YWJpbGl0eSBhbmQgaW1wYWN0IG9mIHRoaXMgY29uZmlnIG9wdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBjaGFuZ2luZyB0aGlzIGRvZXNuJiMzOTt0IGFjY2lkZW50YWxseSBicmVhayBzb21ldGhpbmcgZWxzZSBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggZmVhdHVyZXMgaXQgZW5hYmxlcyBhbmQgZGlzYWJsZXMuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBpcyBjb25uZWN0ZWQgdG8uIExldCYjMzk7cyBkbyB0aGlzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHRcdCAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUsIHNheSBOLlxuICA5NzpcdFxuICA5ODpcdGNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxuICA5OTpcdFx0Ym9vbCBcJiMzNDtGaWxlLWJhY2tlZCBFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAxMDA6XHRcdGRlcGVuZHMgb24gRVJPRlNfRlNcbiAxMDE6XHRcdGRlZmF1bHQgeVxuIDEwMjpcdFx0aGVscFxuIDEwMzpcdFx0ICBUaGlzIGFsbG93cyBFUk9GUyB0byB1c2UgZmlsZXN5c3RlbSBpbWFnZSBmaWxlcyBkaXJlY3RseSwgd2l0aG91dFxuIDEwNDpcdFx0ICB0aGUgaW50ZXJjZXNzaW9uIG9mIGxvb3BiYWNrIGJsb2NrIGRldmljZXMgb3IgbGlrZXdpc2UuIEl0IGlzXG4gMTA1Olx0XHQgIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGNvbnRhaW5lciBpbWFnZXMgd2l0aCBudW1lcm91cyBibG9icyBhbmRcbiAxMDY6XHRcdCAgb3RoZXIgc2FuZGJveGVzLCB3aGVyZSBsb29wIGRldmljZXMgYmVoYXZlIGludHJpY2F0ZWx5LiAgSXQgY2FuIGFsc29cbiAxMDc6XHRcdCAgYmUgdXNlZCB0byBzaW1wbGlmeSBlcnJvci1wcm9uZSBsaWZldGltZSBtYW5hZ2VtZW50IG9mIHVubmVjZXNzYXJ5XG4gMTA4Olx0XHQgIHZpcnR1YWwgYmxvY2sgZGV2aWNlcy5cbiAxMDk6XHRcbiAxMTA6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUsIHNheSBOLlxuIDExMTpcdFxuIDExMjpcdGNvbmZpZyBFUk9GU19GU19aSVBcbiAxMTM6XHRcdGJvb2wgXCYjMzQ7RVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XCYjMzQ7XG4gMTE0Olx0XHRkZXBlbmRzIG9uIEVST0ZTX0ZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipBbmFseXppbmcgRVJPRlMgYW5kIEl0cyBGaWxlLUJhY2tlZCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAgaXMsIGFzIEkgc3VzcGVjdGVkLCBjb250aW5nZW50IG9uIHRoZSBjb3JlIGBFUk9GU19GU2AgZnVuY3Rpb25hbGl0eS4gVGhhdCBtYWtlcyBzZW5zZSwgYSBmaWxlLWJhY2tlZCBzeXN0ZW0gYnVpbGRzIG9uIHRoZSBmb3VuZGF0aW9ucyBvZiB0aGUgYmFzaWMgRVJPRlMgc3RydWN0dXJlLgoKTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBvciBiZWVuIGFkZGVkIHRvIGFjY29tbW9kYXRlIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGxpc3QgdGhvc2UgZnVuY3Rpb25zOiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCwgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLCBhbmQgYGdldF90cmVlX3N1cGVyYC4gVGhlIGxhc3Qgb25lLCBgZ2V0X3RyZWVfc3VwZXJgLCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBleHBvcnRlZCBmcm9tIGBmcy9zdXBlci5jYC4gVGhhdCBoaW50cyBhdCBhIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoIHRoZSBjb3JlIFZGUyBzdXBlciBibG9jayBtYW5hZ2VtZW50LgoKSSYjMzk7bGwgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBmcy9zdXBlci5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgdGhlIGBnZXRfdHJlZV9zdXBlcmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGxldmVyYWdlZCwgb3IgcG90ZW50aWFsbHkgZXh0ZW5kZWQsIHdpdGhpbiB0aGlzIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAgY29udGV4dC4gVGhhdCB3aWxsIGxpa2VseSBwcm92aWRlIGluc2lnaHQgaW50byBob3cgdGhlIGZpbGUtYmFja2VkIEVST0ZTIGlzIG1vdW50aW5nIGFuZCBpbnRlZ3JhdGluZyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3RyZWVfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9MTM4Nz1zdGF0aWMgaW50IHRlc3Rfc2luZ2xlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3N1cGVyLmMtMTM5Mi0vKipcbmZzL3N1cGVyLmM6MTM5MzogKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmVcbmZzL3N1cGVyLmMtMTM5NC0gKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVyc1xuLS1cbmZzL3N1cGVyLmMtMTQwMS0gKi9cbmZzL3N1cGVyLmM6MTQwMjppbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvc3VwZXIuYy0xNDAzLVx0XHRpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4tLVxuZnMvc3VwZXIuYy0xNDI4LX1cbmZzL3N1cGVyLmM6MTQyOTpFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTtcbmZzL3N1cGVyLmMtMTQzMC1cbmZzL3N1cGVyLmM9MTQzMT1pbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuLS1cbmZzL3N1cGVyLmMtMTQzNC17XG5mcy9zdXBlci5jOjE0MzU6XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuZnMvc3VwZXIuYy0xNDM2LX1cbi0tXG5mcy9zdXBlci5jPTE0Mzk9aW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvc3VwZXIuYy0xNDQyLXtcbmZzL3N1cGVyLmM6MTQ0MzpcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xuZnMvc3VwZXIuYy0xNDQ0LX1cbi0tXG5mcy9zdXBlci5jPTE0NDc9aW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbi0tXG5mcy9zdXBlci5jLTE0NTItXHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBrZXk7XG5mcy9zdXBlci5jOjE0NTM6XHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuZnMvc3VwZXIuYy0xNDU0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFUk9GUyBGaWxlc3lzdGVtIE1vdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gbW91bnRzLCBhbmQgSSYjMzk7bSBicmVha2luZyBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIGBnZXRfdHJlZV9zdXBlcmAgc2VlbXMgdG8gYmUgYSBnZW5lcmFsIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgZnVuY3Rpb24sIG5vdGhpbmcgcGFydGljdWxhcmx5IEVST0ZTLXNwZWNpZmljIGFib3V0IHRoYXQuIE15IHJlYWwgaW50ZXJlc3QgbGllcyBpbiBob3cgRVJPRlMgaG9va3MgaW50byB0aGlzIGdlbmVyYWwgZnJhbWV3b3JrLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAgYXJlIHRoZSBFUk9GUy1zcGVjaWZpYyBwaWVjZXMgdGhhdCBhY3R1YWxseSBoYW5kbGUgdGhlIGZpbGUgc3lzdGVtJiMzOTtzIGRldGFpbHMuIEFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVgIGxvb2tzIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IOKAkyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1vdW50aW5nIEVST0ZTIHZvbHVtZXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZnMvZXJvZnMvc3VwZXIuY2AsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGVzZSB0d28gRVJPRlMtc3BlY2lmaWMgZnVuY3Rpb25zLCBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLCBpbiBkZXRhaWwuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwYXJ0cyBpbnRlcmFjdCwgcGFydGljdWxhcmx5IHdpdGggdGhlIGdlbmVyaWMgVkZTIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYz02NDM9c3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTc5OS1cbmZzL2Vyb2ZzL3N1cGVyLmM6ODAwOnN0YXRpYyBpbnQgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9lcm9mcy9zdXBlci5jLTgwMS1cdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz04MjA9c3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTgyNi1cbmZzL2Vyb2ZzL3N1cGVyLmM6ODI3Olx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xuZnMvZXJvZnMvc3VwZXIuYy04MjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTc0CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFUk9GUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIGBzdXBlcmJsb2NrX3NoYXJlYCBtb3VudCBvcHRpb24gZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgYWxsb3dpbmcgZm9yIHNoYXJlZCBzdXBlcmJsb2NrcyB3aGVuIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG11bHRpcGxlIHRpbWVzLCB3aGljaCBpcyBhIG5lYXQgb3B0aW1pemF0aW9uLCBpZiBpdCB3b3JrcyBjb3JyZWN0bHkuCgpUaGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyBhcmUgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAsIGBlcm9mc19mY19nZXRfdHJlZV9maWxlYCwgYW5kIGBnZXRfdHJlZV9zdXBlcmAuIFRoZXNlIGFyZSB0aGUga2V5IGFyZWFzIHdoZXJlIHRoZSBuZXcgbG9naWMgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBjb3JlIG1vdW50IHByb2Nlc3Mgb2YgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuCgpOb3csIGFzIGZhciBhcyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYEVST0ZTX0ZTYCBhbmQgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gWXVwLCBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIGRlcGVuZHMgb24gYEVST0ZTX0ZTYCwgYnV0IG5vdGhpbmcgZWxzZSBzZWVtcyByZWxldmFudC4gVGhvc2UgdHdvIHNob3VsZCBjb3ZlciB3aGF0JiMzOTtzIG5lZWRlZCB0byB0ZXN0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGF0IGEgZ2xhbmNlLCBzbyB0aG9zZSBzZWVtIHN1ZmZpY2llbnQuCgpGcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZSwgdGhlIHJhdGlvbmFsZSBpcyBjbGVhci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIG1vdW50IHBhdGgsIGFuZCBpdOKAmXMgcmVhY2hhYmxlLCBtZWFuaW5nIGl0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gbW91bnRpbmcuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIG1vdW50IHByb2Nlc3MsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzLiBUaGUgbmV3IG1vdW50IG9wdGlvbiBhbmQgcmVsYXRlZCBsb2dpYyBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyJiMzNDssCiAgICAmIzM0O2Vyb2ZzX2ZjX2dldF90cmVlX2ZpbGUmIzM0OywKICAgICYjMzQ7Z2V0X3RyZWVfc3VwZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgc3VwZXJibG9jayBzaGFyaW5nIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbW91bnQgbG9naWMgZm9yIEVST0ZTIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXImIzM0OywKICAgICYjMzQ7ZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZSYjMzQ7LAogICAgJiMzNDtnZXRfdHJlZV9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIHRoZSBFUk9GUyBmaWxlc3lzdGVtLCBhbGxvd2luZyBzdXBlcmJsb2NrIHNoYXJpbmcgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBtb3VudCBsb2dpYyBmb3IgRVJPRlMgYW5kIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgZmlsZS1iYWNrZWQgbW91bnRzIGFuZCBhZGRzIGxvZ2ljIHRvIHNoYXJlIHN1cGVyYmxvY2tzIHdoZW4gY29tcGF0aWJsZSBvcHRpb25zIGFyZSB1c2VkLiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCB1c2VzIGBtZW1jbXBgIHRvIGNvbXBhcmUgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYC4gV2hpbGUgdGhpcyBzdHJ1Y3QgY29udGFpbnMgcGFkZGluZywgaW5zdGFuY2VzIG9mIGl0IGFyZSBlbWJlZGRlZCB3aXRoaW4gYHN0cnVjdCBlcm9mc19zYl9pbmZvYCwgd2hpY2ggaXMgYWx3YXlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgIChpbiBgZXJvZnNfaW5pdF9mc19jb250ZXh0YCkuIENvbnNlcXVlbnRseSwgdGhlIHBhZGRpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgcmVtYWlucyB6ZXJvLCBtZWFuaW5nIGBtZW1jbXBgIHNhZmVseSByZWFkcyBpbml0aWFsaXplZCBtZW1vcnkgd2l0aG91dCB0cmlnZ2VyaW5nIEtNU0FOIG9yIGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIHNoYXJpbmcpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYxZmU0NDZhZjM1ZGU5MzE3ZmM0NjIyMmVmMjQwZGYwNjk4ZTcwM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzozMDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKaW5kZXggZDMwMWQ5YWM5NDZhOS4uNDljNGU3ZGJjNWQ2MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QKQEAgLTEzOSw2ICYjNDM7MTM5LDkgQEAgaW5vZGVfc2hhcmUgICAgICAgICAgICBFbmFibGUgaW5vZGUgcGFnZSBzaGFyaW5nIGZvciB0aGlzIGZpbGVzeXN0ZW0uICBJbm9kZXMgd2kKICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS4KIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIGFscmVhZHktb3BlbmVkIGZpbGUgZGVzY3JpcHRvci4KJiM0MztzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGUKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy4KID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEZpbGUtYmFja2VkIG1vdW50cwpAQCAtMTU2LDYgJiM0MzsxNTksMTEgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0CiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoCiBpbnN0ZWFkLgogCiYjNDM7V2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCBhbmQgdGhlIHNhbWUgYmFja2luZyBmaWxlIChpZGVudGlmaWVkCiYjNDM7YnkgaW5vZGUgYW5kIGZzb2Zmc2V0KSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZSBtb3VudAomIzQzO29wdGlvbnMsIHRoZSBrZXJuZWwgcmV1c2VzIHRoZSBleGlzdGluZyBzdXBlcmJsb2NrIGluc3RlYWQgb2YgY3JlYXRpbmcgYQomIzQzO25ldyBvbmUuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy4KJiM0MzsKIFN5c2ZzIEVudHJpZXMKID09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9pbnRlcm5hbC5oCkBAIC0xNTYsNiAmIzQzOzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHsKICNkZWZpbmUgRVJPRlNfTU9VTlRfREFYX05FVkVSCQkweDAwMDAwMDgwCiAjZGVmaW5lIEVST0ZTX01PVU5UX0RJUkVDVF9JTwkJMHgwMDAwMDEwMAogI2RlZmluZSBFUk9GU19NT1VOVF9JTk9ERV9TSEFSRQkJMHgwMDAwMDIwMAomIzQzOyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRQkweDAwMDAwNDAwCiAKICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKQkoKG9wdCktJmd0O21vdW50X29wdCAmYW1wOz0gfkVST0ZTX01PVU5UXyMjb3B0aW9uKQogI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKQkoKG9wdCktJmd0O21vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbikKZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jCmluZGV4IGRkYzk3MTllNmQxOGUuLjQ1N2UwNjc0NDdkNWYgMTAwNjQ0Ci0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvc3VwZXIuYwpAQCAtMzg2LDcgJiM0MzszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSkKIGVudW0gewogCU9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSwKIAlPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLAotCU9wdF9zb3VyY2UsCiYjNDM7CU9wdF9zb3VyY2UsIE9wdF9zdXBlcmJsb2NrX3NoYXJlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBlcm9mc19wYXJhbV9jYWNoZV9zdHJhdGVneVtdID0gewpAQCAtNDE1LDYgJiM0Mzs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHsKIAlmc3BhcmFtX3U2NCgmIzM0O2Zzb2Zmc2V0JiMzNDssCQkJT3B0X2Zzb2Zmc2V0KSwKIAlmc3BhcmFtX2ZsYWcoJiMzNDtpbm9kZV9zaGFyZSYjMzQ7LAkJT3B0X2lub2RlX3NoYXJlKSwKIAlmc3BhcmFtX2ZpbGVfb3Jfc3RyaW5nKCYjMzQ7c291cmNlJiMzNDssCU9wdF9zb3VyY2UpLAomIzQzOwlmc3BhcmFtX2ZsYWcoJiMzNDtzdXBlcmJsb2NrX3NoYXJlJiMzNDssCU9wdF9zdXBlcmJsb2NrX3NoYXJlKSwKIAl7fQogfTsKIApAQCAtNTYwLDYgJiM0Mzs1NjEsMTIgQEAgc3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCWVsc2UKIAkJCXNldF9vcHQoJmFtcDtzYmktJmd0O29wdCwgSU5PREVfU0hBUkUpOwogCQlicmVhazsKJiM0MzsJY2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZToKJiM0MzsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKQomIzQzOwkJCWVycm9yZmMoZmMsICYjMzQ7JXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWQmIzM0OywgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNldF9vcHQoJmFtcDtzYmktJmd0O29wdCwgU1VQRVJCTE9DS19TSEFSRSk7CiYjNDM7CQlicmVhazsKIAljYXNlIE9wdF9zb3VyY2U6CiAJCXJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTsKIAl9CkBAIC02NTIsNiAmIzQzOzY1OSwxNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCQllcnJvcmZjKGZjLCAmIzM0O0ZTREFYIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb24mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpICZhbXA7JmFtcDsKJiM0MzsJICAgIHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIElOT0RFX1NIQVJFKSkgewomIzQzOwkJZXJyb3JmYyhmYywgJiMzNDtzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb24mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwkvKiBFeHRyYSBkZXZpY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIHN1cGVyYmxvY2sgc2hhcmluZy4gICovCiYjNDM7CWlmICh0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzYmktJmd0O2RldnMtJmd0O2V4dHJhX2RldmljZXMpIHsKJiM0MzsJCWVycm9yZmMoZmMsICYjMzQ7c3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXMmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCiAJc2JpLSZndDtibGtzemJpdHMgPSBQQUdFX1NISUZUOwogCWlmICghc2ItJmd0O3NfYmRldikgewpAQCAtNzc5LDYgJiM0Mzs3OTcsMzYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgd2l0aCBhIHNiaSB0aGF0CiYjNDM7CSAqIGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCwgc28gdGhhdCB0aGUgbWVtY21wIGxhdGVyIGVuc3VyZXMKJiM0MzsJICogbmV3X3NiaSBhbHNvIGlzIHNoYXJlYWJsZS4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7CiYjNDM7CXN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJaWYgKHNiLSZndDtzX2lmbGFncyAmYW1wOyBTQl9JX1JFVElSRUQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFzYmktJmd0O2RpZjAuZmlsZSB8fCAhbmV3X3NiaS0mZ3Q7ZGlmMC5maWxlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiBmaWxlX2lub2RlKHNiaS0mZ3Q7ZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktJmd0O2RpZjAuZmlsZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgc2JpLSZndDtkaWYwLmZzb2ZmID09IG5ld19zYmktJmd0O2RpZjAuZnNvZmYgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIW1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X29wdCgmYW1wO3NiaS0mZ3Q7b3B0LCBTVVBFUkJMT0NLX1NIQVJFKSkKJiM0MzsJCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKIHsKIAlzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtJmd0O3NfZnNfaW5mbzsKQEAgLTc5NCw3ICYjNDM7ODQyLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCQllcnJvcmZjKGZjLCAmIzM0O3NvdXJjZSBpcyB1bnN1cHBvcnRlZCYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7CiYjNDM7CQlyZXR1cm4gZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShmYyk7CiAJfQogCiAJcmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlciwKQEAgLTgxMiw3ICYjNDM7ODYwLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAKIAkJaWYgKFNfSVNSRUcoZmlsZV9pbm9kZShzYmktJmd0O2RpZjAuZmlsZSktJmd0O2lfbW9kZSkgJmFtcDsmYW1wOwogCQkgICAgc2JpLSZndDtkaWYwLmZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7YV9vcHMtJmd0O3JlYWRfZm9saW8pCi0JCQlyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpOwomIzQzOwkJCXJldHVybiBlcm9mc19mY19nZXRfdHJlZV9maWxlKGZjKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgyNSw2ICYjNDM7ODczLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogCiAJREJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTsKIAomIzQzOwkvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi8KJiM0MzsJaWYgKHRlc3Rfb3B0KCZhbXA7c2JpLSZndDtvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAobmV3X3NiaS0mZ3Q7ZG9tYWluX2lkKQogCQllcm9mc19pbmZvKHNiLCAmIzM0O2lnbm9yaW5nIHJlY29uZmlndXJhdGlvbiBmb3IgZG9tYWluX2lkLiYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0xMzg5LDcgJiM0MzsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiYjNDM7LyoqCiYjNDM7ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lCiYjNDM7ICogQGZjOiBUaGUgZmlsZXN5c3RlbSBjb250ZXh0IGhvbGRpbmcgdGhlIHBhcmFtZXRlcnMKJiM0MzsgKiBAdGVzdDogQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBmaW5kIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3VwZXJibG9jaywgb3IgTlVMTAomIzQzOyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrCiYjNDM7ICoKJiM0MzsgKiBJZiBAdGVzdCBpcyBub24tTlVMTCBhbmQgbWF0Y2hlcyBhbiBleGlzdGluZyBzdXBlcmJsb2NrLCB0aGF0IHN1cGVyYmxvY2sgaXMKJiM0MzsgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoCiYjNDM7ICogQGZpbGxfc3VwZXIuICBQYXNzaW5nIE5VTEwgZm9yIEB0ZXN0IGFsd2F5cyBjcmVhdGVzIGEgbmV3IHN1cGVyYmxvY2suCiYjNDM7ICovCiYjNDM7aW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLAogCQlpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKQEAgLTE0MTYsMTIgJiM0MzsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpOwogCXJldHVybiBlcnI7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7CiAKIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJCSAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSkKIHsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTsKIApAQCAtMTQyOSw3ICYjNDM7MTQ0MCw3IEBAIGludCBnZXRfdHJlZV9zaW5nbGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpCiB7Ci0JcmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTsKJiM0MzsJcmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7CiAKQEAgLTE0MzksNyAmIzQzOzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQl2b2lkICprZXkpCiB7CiAJZmMtJmd0O3NfZnNfaW5mbyA9IGtleTsKLQlyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7CiYjNDM7CXJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaAppbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaApAQCAtMTUwLDYgJiM0MzsxNTAsMTAgQEAgZXh0ZXJuIGludCB2ZnNfcGFyc2VfZnNfcGFyYW1fc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCQkgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKTsKIGV4dGVybiB2b2lkIGZjX2Ryb3BfbG9ja2VkKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7CiAKJiM0MztleHRlcm4gaW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywKJiM0MzsJCQkgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLAomIzQzOwkJCSBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQkJICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7CiBleHRlcm4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYywKIAkJCSBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRVJPRlMgTW91bnQgT3B0aW9uIENvbmNlcm4qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgRVJPRlMgZmlsZS1iYWNrZWQgbW91bnRzLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCBtb2RpZmllcyBgZnMvZXJvZnMvc3VwZXIuY2AgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIG9mIHRoaXMgbmV3IG9wdGlvbiBhbmQsIGNydWNpYWxseSwgdG8gc3dpdGNoIGZyb20gdXNpbmcgYGdldF90cmVlX25vZGV2KClgIHRvIGBnZXRfdHJlZV9zdXBlcigpYCB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gVGhlIHBhdGNoIGFsc28gZXhwb3NlcyBgZ2V0X3RyZWVfc3VwZXIoKWAgZnJvbSBgZnMvc3VwZXIuY2AsIHJlbmFtaW5nIHRoZSBleGlzdGluZyBgdmZzX2dldF9zdXBlcmAgdG8gYGdldF90cmVlX3N1cGVyYCBpbiB0aGUgcHJvY2Vzcy4gSSBzZWUgdGhhdCB0aGUgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgZnVuY3Rpb24gbm93IGNvbXBhcmVzIHRoZSBgc2JpLSZndDtvcHRgIGFuZCBgbmV3X3NiaS0mZ3Q7b3B0YCBzdHJ1Y3R1cmVzIHVzaW5nIGBtZW1jbXBgLgoKKldhaXQgYSBzZWNvbmQuLi4qIGBtZW1jbXAoJmFtcDtzYmktJmd0O29wdCwgJmFtcDtuZXdfc2JpLSZndDtvcHQsIHNpemVvZihzYmktJmd0O29wdCkpYD8gVGhhdCBjb21wYXJpc29uJiMzOTtzIGdvdCBteSBhdHRlbnRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCBgc2JpLSZndDtvcHRgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHBhZGRpbmcgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBBIGJ5dGUtd2lzZSBjb21wYXJpc29uIGxpa2UgdGhhdCBpcyBhbHdheXMgYSBiaXQgcmlza3kgaWYgeW91JiMzOTtyZSBub3QgYWJzb2x1dGVseSBjZXJ0YWluIGFib3V0IHRoZSBjb250ZW50cy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgaW4gYGZzL2Vyb2ZzL2ludGVybmFsLmhgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgZ290Y2hhcyB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgZXZlcnl0aGluZyBpbiBgc2JpLSZndDtvcHRgIGlzIGluaXRpYWxpemVkIHRvIGEgcmVsaWFibGUgdmFsdWUgYW5kIHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFueSB1bmRlZmluZWQgcGFkZGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlIGBtZW1jbXBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvaW50ZXJuYWwuaD01ND1lbnVtIHtcbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTU5LVxuZnMvZXJvZnMvaW50ZXJuYWwuaDo2MDpzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyB7XG5mcy9lcm9mcy9pbnRlcm5hbC5oLTYxLVx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGVyb2ZzL2ludGVybmFsLmhgKioKCk9rYXksIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBFUk9GUyBpcyBzdHJ1Y3R1cmVkIGludGVybmFsbHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZnMvZXJvZnMvaW50ZXJuYWwuaGAgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIGxvb2tpbmcgYXJvdW5kIGxpbmUgNjAgbWlnaHQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgc29tZSBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgb3IgZGVmaW5pdGlvbnMgdGhlcmUgdGhhdCBhcmUgY3JpdGljYWwgdG8gdGhlIGZpbGUgc3lzdGVtJiMzOTtzIG9wZXJhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcywgcGVyaGFwcyBmb2N1c2luZyBvbiB0aGUgY3JpdGljYWwgZGF0YXR5cGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgaGVhZGVyIGZpbGUsIGVzcGVjaWFsbHkgbmVhciB0aGF0IGxpbmUsIHdpbGwgbGlrZWx5IGdpdmUgbWUgaW5zaWdodHMgaW50byBob3cgdGhlIEVST0ZTIGxheWVyIGludGVyYWN0cyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFuZCwgdWx0aW1hdGVseSwgaG93IGl0IG1hbmFnZXMgaXRzIHJlYWQtb25seSBuYXR1cmUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvaW50ZXJuYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTQ6XHRlbnVtIHtcbiAgNTU6XHRcdEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPLFxuICA1NjpcdFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09OLFxuICA1NzpcdFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09GRlxuICA1ODpcdH07XG4gIDU5Olx0XG4gIDYwOlx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xuICA2MTpcdFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cbiAgNjI6XHRcdHVuc2lnbmVkIGNoYXIgY2FjaGVfc3RyYXRlZ3k7XG4gIDYzOlx0XHR1bnNpZ25lZCBpbnQgbW91bnRfb3B0O1xuICA2NDpcdH07XG4gIDY1Olx0XG4gIDY2Olx0c3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0IHtcbiAgNjc6XHRcdHN0cnVjdCBpZHIgdHJlZTtcbiAgNjg6XHRcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XG4gIDY5Olx0XG4gIDcwOlx0XHR1bnNpZ25lZCBpbnQgZXh0cmFfZGV2aWNlcztcbiAgNzE6XHRcdGJvb2wgZmxhdGRldjtcbiAgNzI6XHR9O1xuICA3MzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhZGRpbmcgV29lcyBpbiBgZXJvZnNfbW91bnRfb3B0c2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGRlZmluaXRpb24gYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHNvbWV0aGluZyB0aGF0JiMzOTtzIG1ha2luZyBteSBpbnRlcm5hbCBjb21waWxlciB3aGltcGVyLiBBbiBgdW5zaWduZWQgY2hhcmAgZm9sbG93ZWQgYnkgYW4gYHVuc2lnbmVkIGludGA/IFRoYXQgc2NyZWFtcyBwYWRkaW5nIHRvIG1lLiBMZXQmIzM5O3Mgc2VlLi4uIGEgYnl0ZSBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzLiBUaGF0JiMzOTtzIHRocmVlIGJ5dGVzIHdhc3RlZCEgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzdHJ1Y3R1cmUgdGhhdCYjMzk7cyBwcm9iYWJseSBmcmVxdWVudGx5IGFjY2Vzc2VkLCBzbyB0aGlzIGNvdWxkIHRyYW5zbGF0ZSB0byBhIHBlcmZvcm1hbmNlIGhpdCwgZXZlbiBpZiBtaW5vciwgaW4gc29tZSBzY2VuYXJpb3MsIHJpZ2h0PwoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucywgSSB3YW50IHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBzYmktJmd0O29wdGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyB3aGVuIGl0JiMzOTtzIGFsbG9jYXRlZC4gVGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgSSB0aGluayBhYm91dCB0aGlzIHBvdGVudGlhbCBwYWRkaW5nIGlzc3VlLiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdG8gYGVyb2ZzX2ZjX2dldF90cmVlYCBhbmQgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgYmVjYXVzZSBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3Mgd2hlcmUgYHNiaWAgaXMgYWxsb2NhdGVkLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgdGhhdCBhbGxvY2F0aW9uIGhhcHBlbnMgYW5kIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZjLVx1MDAzZXNfZnNfaW5mbyA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmM9OTUxPXN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTk2My1cdH1cbmZzL2Vyb2ZzL3N1cGVyLmM6OTY0Olx0ZmMtXHUwMDNlc19mc19pbmZvID0gc2JpO1xuZnMvZXJvZnMvc3VwZXIuYy05NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgRVJPRlMgRmlsZXN5c3RlbSBDb250ZXh0IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgZmlsZXN5c3RlbSBjb250ZXh0IGZvciBFUk9GUyBpcyBzZXQgdXAg4oCTIHNwZWNpZmljYWxseSwgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBoYW5kbGVkLCBhbnkgY2hlY2tzIG9yIHZhbGlkYXRpb25zLCBhbmQgaG93IHRoaXMgY29udGV4dCB1bHRpbWF0ZWx5IGluZmx1ZW5jZXMgdGhlIG1vdW50IHByb2Nlc3MuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyB0aGUgY29yZSBvZiBlc3RhYmxpc2hpbmcgdGhlIGVudmlyb25tZW50IGZvciBhbiBFUk9GUyBmaWxlc3lzdGVtIGluc3RhbmNlLCBzbyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgaGVyZSBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3Igb3B0aW1pemF0aW9uIGxhdGVyLiBUaW1lIHRvIG5hdmlnYXRlIGBmcy9lcm9mcy9zdXBlci5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUxOlx0c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIDk1MjpcdHtcbiA5NTM6XHRcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmk7XG4gOTU0Olx0XG4gOTU1Olx0XHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcbiA5NTY6XHRcdGlmICghc2JpKVxuIDk1NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NTg6XHRcbiA5NTk6XHRcdHNiaS1cdTAwM2VkZXZzID0ga3phbGxvY19vYmooc3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0KTtcbiA5NjA6XHRcdGlmICghc2JpLVx1MDAzZWRldnMpIHtcbiA5NjE6XHRcdFx0a2ZyZWUoc2JpKTtcbiA5NjI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTYzOlx0XHR9XG4gOTY0Olx0XHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBzYmk7XG4gOTY1Olx0XG4gOTY2Olx0XHRpZHJfaW5pdChcdTAwMjZzYmktXHUwMDNlZGV2cy1cdTAwM2V0cmVlKTtcbiA5Njc6XHRcdGluaXRfcndzZW0oXHUwMDI2c2JpLVx1MDAzZWRldnMtXHUwMDNlcndzZW0pO1xuIDk2ODpcdFx0ZXJvZnNfZGVmYXVsdF9vcHRpb25zKHNiaSk7XG4gOTY5Olx0XHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZlcm9mc19jb250ZXh0X29wcztcbiA5NzA6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjE1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRob3VnaHQgUHJvY2VzcyBvbiBgc2JpYCBBbGxvY2F0aW9uIGFuZCBgc2JpLSZndDtvcHRgIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBzYmlgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmooKnNiaSlgLiBSaWdodCBvZmYgdGhlIGJhdCwgbXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgYGt6YWxsb2Nfb2JqYCBpcyBsaWtlbHkgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBga3phbGxvY2AsIHNwZWNpZmljYWxseSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgYHNiaWAgYW5kIGluaXRpYWxpemVzIGl0IHRvIHplcm8uIEJ1dCB3YWl0LCBga3phbGxvY19vYmpgPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBkZWZpbml0aW9uIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gWWVwLCBqdXN0IGFzIEkgc3VzcGVjdGVkLCBpdCYjMzk7cyBqdXN0IGEgZGlyZWN0IGNhbGwgdG8gYGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKWAgb3Igc29tZXRoaW5nIG5lYXJseSBpZGVudGljYWwuCgpUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbjogc2luY2UgYGt6YWxsb2NgIGlzIHVzZWQsIHRoZSBwYWRkaW5nIHdpdGhpbiBgc2JpYCAqc2hvdWxkKiBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0JiMzOTtzIGdvb2QsIHByZWRpY3RhYmxlIGJlaGF2aW9yLiBCdXQgdGhpcyBicmluZ3MgdXAgYW5vdGhlciBpbXBvcnRhbnQgcG9pbnQ6IHdoYXQgaGFwcGVucyBpZiBgc2JpLSZndDtvcHRgIGlzIHN1YnNlcXVlbnRseSAqbW9kaWZpZWQqPyBTcGVjaWZpY2FsbHksIHdoYXQgaWYgaXQmIzM5O3MgY29waWVkIG9yIGFzc2lnbmVkIGEgdmFsdWU/IFRoZSBpbml0aWFsIHplcm9pbmcgYnkgYGt6YWxsb2NgIGlzIG9ubHkgZ3VhcmFudGVlZCBhdCBhbGxvY2F0aW9uLCBhbmQgYW55IGxhdGVyIGFzc2lnbm1lbnQgY291bGQgb3ZlcndyaXRlIHRoYXQgemVybyB2YWx1ZS4KClNvLCB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdGhvcm91Z2hseSBjaGVjayB0aGUgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBzYmktJmd0O29wdGAgaXMgKm5ldmVyKiBhc3NpZ25lZCBieSB2YWx1ZSBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBhbmQgaG93IHRoZSBgc2JpLSZndDtvcHRgIG1lbWJlciBpcyB1cGRhdGVkLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGlmIEkgY2FuIHRydXN0IHRoYXQgdGhlIHBhZGRpbmcgcmVtYWlucyB6ZXJvZWQgdGhyb3VnaG91dCB0aGUgbGlmZXRpbWUgb2YgdGhlIGBzYmlgIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3B0ID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYz00Nzc9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy00ODQtXG5mcy9lcm9mcy9zdXBlci5jOjQ4NTpcdG9wdCA9IGZzX3BhcnNlKGZjLCBlcm9mc19mc19wYXJhbWV0ZXJzLCBwYXJhbSwgXHUwMDI2cmVzdWx0KTtcbmZzL2Vyb2ZzL3N1cGVyLmMtNDg2LVx0aWYgKG9wdCBcdTAwM2MgMClcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTg2OD1zdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTg4Ny1cbmZzL2Vyb2ZzL3N1cGVyLmM6ODg4Olx0c2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O1xuZnMvZXJvZnMvc3VwZXIuYy04ODktXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz0xMTM2PXN0YXRpYyBpbnQgZXJvZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMTEzOC1cdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihyb290LVx1MDAzZWRfc2IpO1xuZnMvZXJvZnMvc3VwZXIuYzoxMTM5Olx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMgKm9wdCA9IFx1MDAyNnNiaS1cdTAwM2VvcHQ7XG5mcy9lcm9mcy9zdXBlci5jLTExNDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFUk9GUyBGaWxlc3lzdGVtIFJlY29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZXJvZnNfZmNfcmVjb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGlzIGxpbmU6IGBzYmktJmd0O29wdCA9IG5ld19zYmktJmd0O29wdDtgLiBUaGF0IGp1bXBzIG91dCBhdCBtZS4gSSYjMzk7bSB0aGlua2luZywgaGFuZyBvbi4uLiBgbmV3X3NiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIHdoaWNoIGNhbGxzIGBremFsbG9jYC4gUmlnaHQsIHNvIGBremFsbG9jYCB6ZXJvZXMgb3V0IHRoZSBtZW1vcnkuIFRoZW4sIHRoZSBwYXJhbWV0ZXJzIGFyZSBwYXJzZWQgaW50byBgbmV3X3NiaS0mZ3Q7b3B0YC4gTm93LCB0aGF0IGFzc2lnbm1lbnQuLi4gaXQmIzM5O3MgYSBzdHJ1Y3QgYXNzaWdubWVudCwgaXNuJiMzOTt0IGl0PwoKUmlnaHQsIHRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IEMgaGFuZGxlcyBzdHJ1Y3QgYXNzaWdubWVudC4gSXQgY29waWVzIHRoZSAqZmllbGRzKiwgYnV0IHdoYXQgYWJvdXQgcGFkZGluZz8gVGhhdCYjMzk7cyB0aGUgcG90ZW50aWFsIGdvdGNoYS4gSXQmIzM5O3Mgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYSBgbWVtY3B5YCBpZiB0aGUgc3RydWN0IGlzIGxhcmdlLCBvciBldmVuIGp1c3QgZmllbGQtYnktZmllbGQgb3Igd29yZC1ieS13b3JkLiBOb3csIGlmIGl0JiMzOTtzICp3b3JkKi1ieS13b3JkLCB0aGVuIHRoZSBwYWRkaW5nICppcyogY29waWVkIQoKQnV0IGhvbGQgb24uLi4gYG5ld19zYmlgIHdhcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHNvIGFsbCB0aGUgcGFkZGluZyAqaW4qIGBuZXdfc2JpYCBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseS4gU28sIGlmIGBuZXdfc2JpLSZndDtvcHRgIGhhcyB6ZXJvIHBhZGRpbmcgdG8gYmVnaW4gd2l0aCwgYW5kIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBzYmktJmd0O29wdGAsIHRoZW4gYHNiaS0mZ3Q7b3B0YCYjMzk7cyBwYWRkaW5nIHNob3VsZCAqcmVtYWluKiB6ZXJvLCBvciBiZWNvbWUgemVybywgd2hpY2ggaXMgbGlrZWx5IHRoZSBkZXNpcmVkIGJlaGF2aW9yLiBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSB0aGUgY29tcGlsZXImIzM5O3MgYmVoYXZpb3IsIGJ1dCBpdCYjMzk7cyBsaWtlbHkgc2FmZS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgYXQgYWxsIHRoZSBwbGFjZXMgYG9wdGAgaXMgbW9kaWZpZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFkZGluZyBiZWluZyBzZXQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyb2ZzX2RlZmF1bHRfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9zdXBlci5jPTI1MD1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMzczLVxuZnMvZXJvZnMvc3VwZXIuYzozNzQ6c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG5mcy9lcm9mcy9zdXBlci5jLTM3NS17XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz05NTE9c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtOTY3LVx0aW5pdF9yd3NlbShcdTAwMjZzYmktXHUwMDNlZGV2cy1cdTAwM2Vyd3NlbSk7XG5mcy9lcm9mcy9zdXBlci5jOjk2ODpcdGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzYmkpO1xuZnMvZXJvZnMvc3VwZXIuYy05NjktXHRmYy1cdTAwM2VvcHMgPSBcdTAwMjZlcm9mc19jb250ZXh0X29wcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHNldCBhcyBkZWZhdWx0cyBmb3IgRVJPRlMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIGNvbXByZXNzaW9uIHNldHRpbmdzLCBhbnkgc3BlY2lmaWMgYmxvY2sgc2l6ZXMsIGFuZCBhbnkgdW51c3VhbCBmbGFncyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHBlcmZvcm1hbmNlIG9yIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIGRvY3VtZW50YXRpb24gdG8gc2VlIGlmIHRoZXNlIGRlZmF1bHRzIGFyZSBpbmxpbmUgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgZGlmZmVyZW50IHVzZSBjYXNlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSB0aGUgZmlsZXN5c3RlbSBtaWdodCBiZSB1c2VkIG9uLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gd2F0Y2ggb3V0IGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgJiMzNDtsZWdhY3kmIzM0OyAtIG1pZ2h0IGJlIGEgc2lnbiB3ZSBzaG91bGQgYmUgY29uc2lkZXJpbmcgY2hhbmdlcyB0byBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3NDpcdHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxuIDM3NTpcdHtcbiAzNzY6XHQjaWZkZWYgQ09ORklHX0VST0ZTX0ZTX1pJUFxuIDM3NzpcdFx0c2JpLVx1MDAzZW9wdC5jYWNoZV9zdHJhdGVneSA9IEVST0ZTX1pJUF9DQUNIRV9SRUFEQVJPVU5EO1xuIDM3ODpcdFx0c2JpLVx1MDAzZXN5bmNfZGVjb21wcmVzcyA9IEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPO1xuIDM3OTpcdCNlbmRpZlxuIDM4MDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1hBVFRSKSlcbiAzODE6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcbiAzODI6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKVxuIDM4MzpcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFBPU0lYX0FDTCk7XG4gMzg0Olx0fVxuIDM4NTpcdFxuIDM4NjpcdGVudW0ge1xuIDM4NzpcdFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxuIDM4ODpcdFx0T3B0X2RldmljZSwgT3B0X2RvbWFpbl9pZCwgT3B0X2RpcmVjdGlvLCBPcHRfZnNvZmZzZXQsIE9wdF9pbm9kZV9zaGFyZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEtNU0FOIElzc3VlcyB3aXRoIEVST0ZTIE1vdW50IE9wdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCBob3cgYHNiaS0mZ3Q7b3B0YCBpcyBoYW5kbGVkLiBJIG5vdGljZWQgdGhhdCBpdCYjMzk7cyBtb2RpZmllZCBmaWVsZCBieSBmaWVsZCwgbGlrZSB3aXRoIHRoZSBjYWNoZSBzdHJhdGVneSwgYW5kIGFsc28gdGhyb3VnaCBgc2V0X29wdGAuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0aGF0IHRoaXMgd291bGRuJiMzOTt0IGxlYXZlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBiZWNhdXNlIGBzYmlgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAuIFRoZSBrZXkgYXNzdW1wdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IHNoYXJlZCBzdXBlcmJsb2Nrcywgd2hpY2ggaXMgcmVsZXZhbnQsIGJ1dCB3aGF0IHJlYWxseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhpcyBgbWVtY21wYCBvbiBgJmFtcDtzYmktJmd0O29wdGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIEtNU0FOIHF1ZXN0aW9uIGFyaXNlcy4KCk15IGNvbmNlcm4gaXMgd2hldGhlciBgc2JpLSZndDtvcHRgIGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBwYWRkaW5nLiBJZiBpdCYjMzk7cyBga3phbGxvY2AmIzM5O2QsIHRoZSBwYWRkaW5nICpzaG91bGQqIGJlIHplcm9lZCwgcmlnaHQ/IEJ1dCB3aGF0IGlmIGBzYmktJmd0O29wdGAgaXMgbGF0ZXIgYXNzaWduZWQgYXMgYSB3aG9sZSB1c2luZyBgc2JpLSZndDtvcHQgPSBuZXdfc2JpLSZndDtvcHQ7YD8gQyBzdHJ1Y3QgYXNzaWdubWVudCwgaW4gc29tZSBjYXNlcywgKm1pZ2h0KiBub3QgY29weSBwYWRkaW5nLiBJZiBpdCBkb2VzbiYjMzk7dCwgdGhhdCBwYWRkaW5nIGNvdWxkIHJldGFpbiBpdHMgb3JpZ2luYWwsIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZW4sIHdoZW4gYG1lbWNtcGAgaXMgY2FsbGVkLCBLTVNBTiBjb3VsZCBwb3RlbnRpYWxseSBmbGFnIHRoYXQgYXMgYSBwcm9ibGVtLiBBbHRob3VnaCwgaWYgdGhlIG9yaWdpbmFsIGBzYmlgIHdhcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCB0aGVuIHBhZGRpbmcgd291bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIHplcm8gdG8gYmVnaW4gd2l0aC4KCldhaXQsIHRoZSBuZXh0IHRoaW5nIEkgdGhvdWdodCBhYm91dCB3YXMgaWYgYHNiaS0mZ3Q7b3B0YCB3YXMgcGFzc2VkIGJ5IHZhbHVlIGFueXdoZXJlLiBCdXQgbm8sIGl0JiMzOTtzIGp1c3QgYSBmaWVsZCB3aXRoaW4gdGhlIGBzYmlgIHN0cnVjdCwgc28gdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLgoKVGhlbiBpdCBoaXRzIG1lOiAqeWVzKiwgYG1lbWNtcGAgb24gYSBzdHJ1Y3Qgd2l0aCBwYWRkaW5nICpjb3VsZCogdHJpZ2dlciBLTVNBTiEgS01TQU4gaXMgdmVyeSBncmFudWxhcjsgaXQgdHJhY2tzIGluaXRpYWxpemF0aW9uIGF0IHRoZSBiaXQvYnl0ZSBsZXZlbC4gSWYgcGFkZGluZyBleGlzdHMgYW5kIGlzbiYjMzk7dCBpbml0aWFsaXplZCwgYSBgbWVtY21wYCBvcGVyYXRpb24gY291bGQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXZlbiBpZiB0aGUgdXNlciBpc24mIzM5O3QgZGlyZWN0bHkgYWNjZXNzaW5nIGl0LiBIb3dldmVyLCBpZiB0aGUgc3RydWN0IHdhcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCB0aGUgcGFkZGluZyBpcyBhbHJlYWR5IGluaXRpYWxpemVkIHRvIHplcm8sIG1ha2luZyB0aGlzIGEgbm9uLWlzc3VlLiAKClNvIHRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBpZiB0aGUgc3RydWN0IGlzIGNvcGllZCB2aWEgYXNzaWdubWVudCwgZG9lcyB0aGUgY29tcGlsZXIgcmVhZCB0aGUgcGFkZGluZz8gSWYgdGhlIGFzc2lnbm1lbnQgaXMgaW1wbGVtZW50ZWQgYXMgYSB3b3JkLXNpemVkIHJlYWQvd3JpdGUsIGl0ICp3aWxsKiByZWFkIHRoZSBwYWRkaW5nLiBCdXQsIGJlY2F1c2UgdGhhdCBwYWRkaW5nIHdhcyB6ZXJvZWQgYnkgdGhlIGBremFsbG9jYCBjYWxsLCB0aGUgcmVhZCBpcyBzYWZlLgoKTm93LCBLTVNBTiBjaGVja3MgZm9yIG1lbW9yeSB0aGF0IGlzIHVuaW5pdGlhbGl6ZWQuIElmIHRoZSBtZW1vcnkgd2FzIHplcm9lZCBieSBga3phbGxvY2AsIGl0IGlzIGluaXRpYWxpemVkLgoKQnV0IHdhaXQsIHdoYXQgaWYgYHNiaS0mZ3Q7b3B0YCBpc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQgKnNvbWV3aGVyZSo/IEkgbmVlZCB0byBsb29rIGF0IHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gTGV0JiMzOTtzIHNlZS4uLgoKYGBgYwpzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyB7CgkvKiBjdXJyZW50IHN0cmF0ZWd5IG9mIGhvdyB0byB1c2UgbWFuYWdlZCBjYWNoZSAqLwoJdW5zaWduZWQgY2hhciBjYWNoZV9zdHJhdGVneTsKCXVuc2lnbmVkIGludCBtb3VudF9vcHQ7Cn07CmBgYApPa2F5LCBpdCBsb29rcyBsaWtlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZpZWxkcy4gVGhlIGBremFsbG9jYCBpbml0aWFsaXphdGlvbiBvZiBgc2JpYCBzaG91bGQgZnVsbHkgaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9lcm9mcy9pbnRlcm5hbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzIHtcbiAgNjE6XHRcdC8qIGN1cnJlbnQgc3RyYXRlZ3kgb2YgaG93IHRvIHVzZSBtYW5hZ2VkIGNhY2hlICovXG4gIDYyOlx0XHR1bnNpZ25lZCBjaGFyIGNhY2hlX3N0cmF0ZWd5O1xuICA2MzpcdFx0dW5zaWduZWQgaW50IG1vdW50X29wdDtcbiAgNjQ6XHR9O1xuICA2NTpcdFxuICA2NjpcdHN0cnVjdCBlcm9mc19kZXZfY29udGV4dCB7XG4gIDY3Olx0XHRzdHJ1Y3QgaWRyIHRyZWU7XG4gIDY4Olx0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtO1xuICA2OTpcdFxuICA3MDpcdFx0dW5zaWduZWQgaW50IGV4dHJhX2RldmljZXM7XG4gIDcxOlx0XHRib29sIGZsYXRkZXY7XG4gIDcyOlx0fTtcbiAgNzM6XHRcbiAgNzQ6XHQvKiBhbGwgZmlsZXN5c3RlbS13aWRlIGx6NCBjb25maWd1cmF0aW9ucyAqL1xuICA3NTpcdHN0cnVjdCBlcm9mc19zYl9sejRfaW5mbyB7XG4gIDc2Olx0XHQvKiAjIG9mIHBhZ2VzIG5lZWRlZCBmb3IgRVJPRlMgbHo0IHJvbGxpbmcgZGVjb21wcmVzc2lvbiAqL1xuICA3NzpcdFx0dTE2IG1heF9kaXN0YW5jZV9wYWdlcztcbiAgNzg6XHRcdC8qIG1heGltdW0gcG9zc2libGUgYmxvY2tzIGZvciBwY2x1c3RlcnMgaW4gdGhlIGZpbGVzeXN0ZW0gKi9cbiAgNzk6XHRcdHUxNiBtYXhfcGNsdXN0ZXJibGtzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIzNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGVyb2ZzX21vdW50X29wdHMgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGZpZWxkcy4gUmlnaHQsIHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGlzIG9ubHkgOCBieXRlcyB0b3RhbCwgYnJva2VuIGRvd24gYXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBzb21lIHBhZGRpbmcsIGFuZCB0aGVuIGFuIGludGVnZXIuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBtZW1jbXBgIGNhbGw6IGBtZW1jbXAoJmFtcDtzYmktJmd0O29wdCwgJmFtcDtuZXdfc2JpLSZndDtvcHQsIHNpemVvZihzYmktJmd0O29wdCkpYC4gSXQmIzM5O3MgY29tcGFyaW5nIDggYnl0ZXMuIFNpbmNlIGJvdGggYHNiaWAgYW5kIGBuZXdfc2JpYCBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCB0aGUgcGFkZGluZyBzaG91bGQgYmUgemVyb2VkIG91dC4gU28sIGBtZW1jbXBgIGlzIHJlYWRpbmcgaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIHNlbnNlLgoKQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElzIHRoZXJlIGFueSBzY2VuYXJpbyB3aGVyZSBgc2JpLSZndDtvcHRgICppc24mIzM5O3QqIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLCBvciBtYXliZSBnZXRzIHBsYWNlZCBvbiB0aGUgc3RhY2s/IEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBlcm9mc19zYl9pbmZvYCBpcyBhY3R1YWxseSBhbGxvY2F0ZWQgdG8gY29uZmlybSB0aGVyZSYjMzk7cyBubyB3YXkgdG8gZW5kIHVwIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgd2hlcmUgdGhlIGBlcm9mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2MuKmVyb2ZzX3NiX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gRVJPRlMgU3VwZXJibG9jayBJbmZvcm1hdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuIExldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIGFsbG9jYXRpb24gb2YgbWVtb3J5IGZvciB0aGUgYGVyb2ZzX3NiX2luZm9gIHN0cnVjdHVyZSB1c2luZyBga3phbGxvY2AuIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIGhvdyB0aGUgc3VwZXJibG9jayBpbmZvcm1hdGlvbiBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIGBremFsbG9jYCDigJMgemVyb2luZyB0aGUgbWVtb3J5IOKAkyByaWdodCBmcm9tIHRoZSBvdXRzZXQuIFRoaXMgY291bGQgYmUgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgYSBjbGVhbiBzbGF0ZSwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBkYXRhIG9yIHBvaW50ZXJzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byBhIGtub3duIHN0YXRlLiBLbm93aW5nIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcgYWxsb3dzIG1lIHRvIGluZmVyIGNlcnRhaW4gdGhpbmdzIGFib3V0IGhvdyB0aGUgRVJPRlMgZHJpdmVyIGlzIGRlc2lnbmVkLCB3aGF0IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgZGF0YSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBnYXJiYWdlIHZhbHVlcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvYy4qc2JpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Vyb2ZzL3N1cGVyLmM9OTUxPXN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTk1NC1cbmZzL2Vyb2ZzL3N1cGVyLmM6OTU1Olx0c2JpID0ga3phbGxvY19vYmooKnNiaSk7XG5mcy9lcm9mcy9zdXBlci5jLTk1Ni1cdGlmICghc2JpKVxuLS1cbmZzL2Vyb2ZzL3hhdHRyLmM9NDk0PWludCBlcm9mc194YXR0cl9wcmVmaXhlc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXJvZnMveGF0dHIuYy01MDUtXG5mcy9lcm9mcy94YXR0ci5jOjUwNjpcdHBmcyA9IGt6YWxsb2Nfb2JqcygqcGZzLCBzYmktXHUwMDNleGF0dHJfcHJlZml4X2NvdW50KTtcbmZzL2Vyb2ZzL3hhdHRyLmMtNTA3LVx0aWYgKCFwZnMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQ0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGt6YWxsb2Nfb2JqYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcgcG9wcyBvdXQuIGBremFsbG9jX29iamAuLi4gd2FpdCwgdGhhdCYjMzk7cyBhIG1hY3JvLiBSaWdodC4gSSBuZWVkIHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hhdCB0aGF0IGV4cGFuZHMgdG8gaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBiZWluZyB1c2VkIGNvcnJlY3RseSBoZXJlPyBJcyB0aGVyZSBhIHN1YnRsZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9yLCB3b3JzZSwgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaWYgaXQmIzM5O3Mgbm90IGhhbmRsZWQgd2l0aCBjYXJlPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgdXNhZ2UgcGF0dGVybnMgb2YgdGhpcyBtYWNybyB0byBhc3Nlc3MgaXRzIGFwcHJvcHJpYXRlbmVzcyBoZXJlLiBJcyB0aGVyZSBhbnkgb2J2aW91cyB3YXkgdGhpcyBjb3VsZCBsZWFkIHRvIGZyYWdtZW50YXRpb24sIG9yIGluZWZmaWNpZW50IHplcm9pbmc/IFRpbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUga3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipUcmFjaW5nIGBremFsbG9jX29iamAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBga3phbGxvY19vYmpgIGZ1bmN0aW9uIGJldHRlci4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBpdHMgZGVmaW5pdGlvbi4gV2hlcmUgaXMgaXQgYWN0dWFsbHkgZGVjbGFyZWQgYW5kIGltcGxlbWVudGVkIHdpdGhpbiB0aGlzIGNvZGViYXNlPyBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIGFueSBkb2N1bWVudGF0aW9uIGNvbW1lbnRzIGlmIHRoZXkgZXhpc3QsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0aGUgYWN0dWFsIGNvZGUgd2l0aGluIGl0LiBUaGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IG9wZXJhdGVzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIHRyYWNrIGl0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDczPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU0LS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTE1NTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExNTYtXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU3OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU4LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTAtXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWmVyby1Jbml0aWFsaXphdGlvbiBvZiBgc2JpLSZndDtvcHRgIGluIEVST0ZTKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFNvLCBga3phbGxvY19vYmooKnNiaSlgIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGBzYmlgIGFuZCwgaW1wb3J0YW50bHksIHplcm9lcyBpdC4gVGhpcyBtZWFucyBgc2JpLSZndDtvcHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoYXQgYHNiaWAgc3RydWN0LCBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgZWxzZSBtaWdodCBgc2JpLSZndDtvcHRgIGJlIG1vZGlmaWVkPyBJIHJlbWVtYmVyIHNlZWluZyBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIGFuZCBgZXJvZnNfZmNfcmVjb25maWd1cmVgLgoKYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCBpcyB3aGVyZSBpdCBzZWVtcyBsaWtlIGBzYmktJmd0O29wdGAgZ2V0cyBkaXJlY3RseSB1cGRhdGVkOiBgc2JpLSZndDtvcHQgPSBuZXdfc2JpLSZndDtvcHQ7YC4gQ3J1Y2lhbGx5LCBgbmV3X3NiaS0mZ3Q7b3B0YCBpcyBpbml0aWFsaXplZCBhcyB6ZXJvLCB0aGVuIGZpZWxkcyBhcmUgc2V0LiBTbywgdGhlIHBhZGRpbmcgd2l0aGluIGBuZXdfc2JpLSZndDtvcHRgIHJlbWFpbnMgemVyby4gVGhlIGFzc2lnbm1lbnQgYHNiaS0mZ3Q7b3B0ID0gbmV3X3NiaS0mZ3Q7b3B0O2AgaXMgYSBzdHJ1Y3QgY29weS4gRXZlbiBpZiB0aGUgY29tcGlsZXIgb3B0aW1pemVzIHRoaXMgd2l0aCA2NC1iaXQgcmVhZHMvd3JpdGVzLCBpdCYjMzk7cyBjb3B5aW5nIGluaXRpYWxpemVkIG1lbW9yeSAoemVyb2VzIGluIHRoZSBwYWRkaW5nKSB0byB0aGUgZGVzdGluYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhZGRpbmcgaW4gYHNiaS0mZ3Q7b3B0YCBzaG91bGQgYWxzbyBiZSB6ZXJvIGFmdGVyIHRoZSBjb3B5LgoKVGhhdCYjMzk7cyBjcml0aWNhbCBiZWNhdXNlIHRoZW4gdGhlIGBtZW1jbXAoJmFtcDtzYmktJmd0O29wdCwgJmFtcDtuZXdfc2JpLSZndDtvcHQsIHNpemVvZihzYmktJmd0O29wdCkpYCBjb21wYXJlcyBhbGwgOCBieXRlcy4gU2luY2UgdGhlIHBhZGRpbmcgaXMgemVybyBpbiBib3RoLCB0aGUgYG1lbWNtcGAgd2lsbCBjb21wYXJlIHRoZSBmaWVsZHMmIzM5OyB2YWx1ZXMsIGFuZCB0aGUgcGFkZGluZyBieXRlcyBzaG91bGQgbWF0Y2guCgpOb3csIHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBjb3ZlciBteSBiYXNlcy4gSXMgdGhlcmUgYW55IHNjZW5hcmlvIHdoZXJlIGBzYmktJmd0O29wdGAgKmNvdWxkKiBlbmQgdXAgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmc/IExldCYjMzk7cyBydWxlIG91dCBzb21lIHRoaW5ncy4gQ291bGQgYHNiaS0mZ3Q7b3B0YCBiZSBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlPyBObywgaXQmIzM5O3MgcGFyc2VkIGZyb20gdGhlIG1vdW50IG9wdGlvbnMsIHNvIHRoZSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgY29udHJvbGxlZC4gQ291bGQgc29tZSBvdGhlciBmdW5jdGlvbiBtb2RpZnkgYHNiaS0mZ3Q7b3B0YD8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhhdC4gVGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgYWxsIG9jY3VycmVuY2VzIG9mIGBvcHRgIGluIHRoZSBgZnMvZXJvZnMvYCBkaXJlY3RvcnkgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC1cdTAwM2VvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvZmlsZWlvLmM9NDQ9c3RhdGljIHZvaWQgZXJvZnNfZmlsZWlvX3JxX3N1Ym1pdChzdHJ1Y3QgZXJvZnNfZmlsZWlvX3JxICpycSlcbi0tXG5mcy9lcm9mcy9maWxlaW8uYy01My1cdHJxLVx1MDAzZWlvY2Iua2lfY29tcGxldGUgPSBlcm9mc19maWxlaW9fa2lfY29tcGxldGU7XG5mcy9lcm9mcy9maWxlaW8uYzo1NDpcdGlmICh0ZXN0X29wdChcdTAwMjZFUk9GU19TQihycS1cdTAwM2VzYiktXHUwMDNlb3B0LCBESVJFQ1RfSU8pIFx1MDAyNlx1MDAyNlxuZnMvZXJvZnMvZmlsZWlvLmMtNTUtXHQgICAgcnEtXHUwMDNlaW9jYi5raV9maWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ0FOX09ESVJFQ1QpXG4tLVxuZnMvZXJvZnMvaW5vZGUuYz0zNj1zdGF0aWMgaW50IGVyb2ZzX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9lcm9mcy9pbm9kZS5jLTIxNC1cdGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2PSB+U19EQVg7XG5mcy9lcm9mcy9pbm9kZS5jOjIxNTpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSBcdTAwMjZcdTAwMjYgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXJvZnMvaW5vZGUuYy0yMTYtXHQgICAgKHZpLVx1MDAzZWRhdGFsYXlvdXQgPT0gRVJPRlNfSU5PREVfRkxBVF9QTEFJTiB8fFxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9MTI1PXN0YXRpYyBpbnQgZXJvZnNfaW5pdF9kZXZpY2Uoc3RydWN0IGVyb2ZzX2J1ZiAqYnVmLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMTY0LVx0XHR9XG5mcy9lcm9mcy9zdXBlci5jOjE2NTpcdFx0aWYgKCFkaWYtXHUwMDNlZGF4X2RldiBcdTAwMjZcdTAwMjYgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgREFYX0FMV0FZUykpIHtcbmZzL2Vyb2ZzL3N1cGVyLmMtMTY2LVx0XHRcdGVyb2ZzX2luZm8oc2IsIFwmIzM0O0RBWCB1bnN1cHBvcnRlZCBieSAlcy4gVHVybmluZyBvZmYgREFYLlwmIzM0OyxcbmZzL2Vyb2ZzL3N1cGVyLmMtMTY3LVx0XHRcdFx0ICAgZGlmLVx1MDAzZXBhdGgpO1xuZnMvZXJvZnMvc3VwZXIuYzoxNjg6XHRcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpO1xuZnMvZXJvZnMvc3VwZXIuYy0xNjktXHRcdH1cbi0tXG5mcy9lcm9mcy9zdXBlci5jPTE4Mz1zdGF0aWMgaW50IGVyb2ZzX3NjYW5fZGV2aWNlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtMjA1LVxuZnMvZXJvZnMvc3VwZXIuYzoyMDY6XHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgREFYX0FMV0FZUykgXHUwMDI2XHUwMDI2ICFzYmktXHUwMDNlZGlmMC5kYXhfZGV2KSB7XG5mcy9lcm9mcy9zdXBlci5jLTIwNy1cdFx0ZXJvZnNfaW5mbyhzYiwgXCYjMzQ7REFYIHVuc3VwcG9ydGVkIGJ5IGJsb2NrIGRldmljZS4gVHVybmluZyBvZmYgREFYLlwmIzM0Oyk7XG5mcy9lcm9mcy9zdXBlci5jOjIwODpcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpO1xuZnMvZXJvZnMvc3VwZXIuYy0yMDktXHR9XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz0zNzQ9c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0zNzYtI2lmZGVmIENPTkZJR19FUk9GU19GU19aSVBcbmZzL2Vyb2ZzL3N1cGVyLmM6Mzc3Olx0c2JpLVx1MDAzZW9wdC5jYWNoZV9zdHJhdGVneSA9IEVST0ZTX1pJUF9DQUNIRV9SRUFEQVJPVU5EO1xuZnMvZXJvZnMvc3VwZXIuYy0zNzgtXHRzYmktXHUwMDNlc3luY19kZWNvbXByZXNzID0gRVJPRlNfU1lOQ19ERUNPTVBSRVNTX0FVVE87XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0zODAtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxuZnMvZXJvZnMvc3VwZXIuYzozODE6XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XG5mcy9lcm9mcy9zdXBlci5jLTM4Mi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKVxuZnMvZXJvZnMvc3VwZXIuYzozODM6XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgUE9TSVhfQUNMKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtMzg0LX1cbi0tXG5mcy9lcm9mcy9zdXBlci5jPTQyMj1zdGF0aWMgYm9vbCBlcm9mc19mY19zZXRfZGF4X21vZGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCB1bnNpZ25lZCBpbnQgbW9kZSlcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTQyNy1cdFx0aWYgKG1vZGUgPT0gRVJPRlNfTU9VTlRfREFYX0FMV0FZUykge1xuZnMvZXJvZnMvc3VwZXIuYzo0Mjg6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfQUxXQVlTKTtcbmZzL2Vyb2ZzL3N1cGVyLmM6NDI5Olx0XHRcdGNsZWFyX29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfTkVWRVIpO1xuZnMvZXJvZnMvc3VwZXIuYy00MzAtXHRcdFx0cmV0dXJuIHRydWU7XG5mcy9lcm9mcy9zdXBlci5jLTQzMS1cdFx0fSBlbHNlIGlmIChtb2RlID09IEVST0ZTX01PVU5UX0RBWF9ORVZFUikge1xuZnMvZXJvZnMvc3VwZXIuYzo0MzI6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfTkVWRVIpO1xuZnMvZXJvZnMvc3VwZXIuYzo0MzM6XHRcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpO1xuZnMvZXJvZnMvc3VwZXIuYy00MzQtXHRcdFx0cmV0dXJuIHRydWU7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz00Nzc9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy00OTMtXHRcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxuZnMvZXJvZnMvc3VwZXIuYzo0OTQ6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtNDk1LVx0XHRlbHNlXG5mcy9lcm9mcy9zdXBlci5jOjQ5NjpcdFx0XHRjbGVhcl9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XG5mcy9lcm9mcy9zdXBlci5jLTQ5Ny1cdFx0YnJlYWs7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy01MDEtXHRcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxuZnMvZXJvZnMvc3VwZXIuYzo1MDI6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xuZnMvZXJvZnMvc3VwZXIuYy01MDMtXHRcdGVsc2VcbmZzL2Vyb2ZzL3N1cGVyLmM6NTA0Olx0XHRcdGNsZWFyX29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xuZnMvZXJvZnMvc3VwZXIuYy01MDUtXHRcdGJyZWFrO1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtNTA5LVx0XHRlbHNlXG5mcy9lcm9mcy9zdXBlci5jOjUxMDpcdFx0XHRzYmktXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gcmVzdWx0LnVpbnRfMzI7XG5mcy9lcm9mcy9zdXBlci5jLTUxMS1cdFx0YnJlYWs7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy01NTAtXHRcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxuZnMvZXJvZnMvc3VwZXIuYzo1NTE6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBESVJFQ1RfSU8pO1xuZnMvZXJvZnMvc3VwZXIuYy01NTItXHRcdGVsc2VcbmZzL2Vyb2ZzL3N1cGVyLmM6NTUzOlx0XHRcdGNsZWFyX29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBESVJFQ1RfSU8pO1xuZnMvZXJvZnMvc3VwZXIuYy01NTQtXHRcdGJyZWFrO1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtNTYxLVx0XHRlbHNlXG5mcy9lcm9mcy9zdXBlci5jOjU2MjpcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtNTYzLVx0XHRicmVhaztcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTU2Ny1cdFx0ZWxzZVxuZnMvZXJvZnMvc3VwZXIuYzo1Njg6XHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbmZzL2Vyb2ZzL3N1cGVyLmMtNTY5LVx0XHRicmVhaztcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTY0Mz1zdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtNjUzLVxuZnMvZXJvZnMvc3VwZXIuYzo2NTQ6XHRpZiAoIXNiaS1cdTAwM2Vkb21haW5faWQgXHUwMDI2XHUwMDI2IHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xuZnMvZXJvZnMvc3VwZXIuYy02NTUtXHRcdGVycm9yZmMoZmMsIFwmIzM0O2RvbWFpbl9pZCBpcyBuZWVkZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02NTctXHR9XG5mcy9lcm9mcy9zdXBlci5jOjY1ODpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSBcdTAwMjZcdTAwMjYgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG5mcy9lcm9mcy9zdXBlci5jLTY1OS1cdFx0ZXJyb3JmYyhmYywgXCYjMzQ7RlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02NjEtXHR9XG5mcy9lcm9mcy9zdXBlci5jOjY2MjpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbmZzL2Vyb2ZzL3N1cGVyLmM6NjYzOlx0ICAgIHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xuZnMvZXJvZnMvc3VwZXIuYy02NjQtXHRcdGVycm9yZmMoZmMsIFwmIzM0O3N1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwmIzM0Oyk7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02NjctXHQvKiBFeHRyYSBkZXZpY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIHN1cGVyYmxvY2sgc2hhcmluZy4gICovXG5mcy9lcm9mcy9zdXBlci5jOjY2ODpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbmZzL2Vyb2ZzL3N1cGVyLmMtNjY5LVx0ICAgIHNiaS1cdTAwM2VkZXZzLVx1MDAzZWV4dHJhX2RldmljZXMpIHtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTczMy1cbmZzL2Vyb2ZzL3N1cGVyLmM6NzM0Olx0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpIFx1MDAyNlx1MDAyNiBzYmktXHUwMDNlYmxrc3piaXRzICE9IFBBR0VfU0hJRlQpIHtcbmZzL2Vyb2ZzL3N1cGVyLmMtNzM1LVx0XHRlcm9mc19pbmZvKHNiLCBcJiMzNDt1bnN1cHBvcnRlZCBibG9ja3NpemUgZm9yIERBWFwmIzM0Oyk7XG5mcy9lcm9mcy9zdXBlci5jOjczNjpcdFx0Y2xlYXJfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIERBWF9BTFdBWVMpO1xuZnMvZXJvZnMvc3VwZXIuYy03MzctXHR9XG5mcy9lcm9mcy9zdXBlci5jOjczODpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkgXHUwMDI2XHUwMDI2ICFlcm9mc19zYl9oYXNfaXNoYXJlX3hhdHRycyhzYmkpKSB7XG5mcy9lcm9mcy9zdXBlci5jLTczOS1cdFx0ZXJvZnNfaW5mbyhzYiwgXCYjMzQ7b24tZGlzayBpc2hhcmUgeGF0dHJzIG5vdCBmb3VuZC4gVHVybmluZyBvZmYgaW5vZGVfc2hhcmUuXCYjMzQ7KTtcbmZzL2Vyb2ZzL3N1cGVyLmM6NzQwOlx0XHRjbGVhcl9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xuZnMvZXJvZnMvc3VwZXIuYy03NDEtXHR9XG5mcy9lcm9mcy9zdXBlci5jOjc0MjpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkpXG5mcy9lcm9mcy9zdXBlci5jLTc0My1cdFx0ZXJvZnNfaW5mbyhzYiwgXCYjMzQ7RVhQRVJJTUVOVEFMIEVST0ZTIHBhZ2UgY2FjaGUgc2hhcmUgc3VwcG9ydCBpbiB1c2UuIFVzZSBhdCB5b3VyIG93biByaXNrIVwmIzM0Oyk7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYy03NDgtXG5mcy9lcm9mcy9zdXBlci5jOjc0OTpcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpKVxuZnMvZXJvZnMvc3VwZXIuYy03NTAtXHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUE9TSVhBQ0w7XG4tLVxuZnMvZXJvZnMvc3VwZXIuYz04MDA9c3RhdGljIGludCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTgxNi1cdCAgICAgICBzYmktXHUwMDNlZGlmMC5mc29mZiA9PSBuZXdfc2JpLVx1MDAzZWRpZjAuZnNvZmYgXHUwMDI2XHUwMDI2XG5mcy9lcm9mcy9zdXBlci5jOjgxNzpcdCAgICAgICAhbWVtY21wKFx1MDAyNnNiaS1cdTAwM2VvcHQsIFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVx1MDAzZW9wdCkpO1xuZnMvZXJvZnMvc3VwZXIuYy04MTgtfVxuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9ODIwPXN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy04MjMtXG5mcy9lcm9mcy9zdXBlci5jOjgyNDpcdGlmICghdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG5mcy9lcm9mcy9zdXBlci5jLTgyNS1cdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTg2OD1zdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTg3Ni1cdC8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqL1xuZnMvZXJvZnMvc3VwZXIuYzo4Nzc6XHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG5mcy9lcm9mcy9zdXBlci5jLTg3OC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTg4Mi1cbmZzL2Vyb2ZzL3N1cGVyLmM6ODgzOlx0aWYgKHRlc3Rfb3B0KFx1MDAyNm5ld19zYmktXHUwMDNlb3B0LCBQT1NJWF9BQ0wpKVxuZnMvZXJvZnMvc3VwZXIuYy04ODQtXHRcdGZjLVx1MDAzZXNiX2ZsYWdzIHw9IFNCX1BPU0lYQUNMO1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmMtODg3LVxuZnMvZXJvZnMvc3VwZXIuYzo4ODg6XHRzYmktXHUwMDNlb3B0ID0gbmV3X3NiaS1cdTAwM2VvcHQ7XG5mcy9lcm9mcy9zdXBlci5jLTg4OS1cbi0tXG5mcy9lcm9mcy9zdXBlci5jPTExMzY9c3RhdGljIGludCBlcm9mc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0xMTM4LVx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHJvb3QtXHUwMDNlZF9zYik7XG5mcy9lcm9mcy9zdXBlci5jOjExMzk6XHRzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyAqb3B0ID0gXHUwMDI2c2JpLVx1MDAzZW9wdDtcbmZzL2Vyb2ZzL3N1cGVyLmMtMTE0MC1cbi0tXG5mcy9lcm9mcy9zeXNmcy5jPTExNz1zdGF0aWMgdW5zaWduZWQgY2hhciAqX19zdHJ1Y3RfcHRyKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZXJvZnMvc3lzZnMuYy0xMjItXHRpZiAoc3RydWN0X3R5cGUgPT0gc3RydWN0X2Vyb2ZzX21vdW50X29wdHMpXG5mcy9lcm9mcy9zeXNmcy5jOjEyMzpcdFx0cmV0dXJuICh1bnNpZ25lZCBjaGFyICopXHUwMDI2c2JpLVx1MDAzZW9wdCAmIzQzOyBvZmZzZXQ7XG5mcy9lcm9mcy9zeXNmcy5jLTEyNC1cdHJldHVybiBOVUxMO1xuLS1cbmZzL2Vyb2ZzL3hhdHRyLmM9NDA2PXN0YXRpYyBib29sIGVyb2ZzX3hhdHRyX3VzZXJfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9lcm9mcy94YXR0ci5jLTQwNy17XG5mcy9lcm9mcy94YXR0ci5jOjQwODpcdHJldHVybiB0ZXN0X29wdChcdTAwMjZFUk9GU19TQihkZW50cnktXHUwMDNlZF9zYiktXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcbmZzL2Vyb2ZzL3hhdHRyLmMtNDA5LX1cbi0tXG5mcy9lcm9mcy94YXR0ci5jPTQxNj1zdGF0aWMgaW50IGVyb2ZzX3hhdHRyX2dlbmVyaWNfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2Vyb2ZzL3hhdHRyLmMtNDIwLVx0aWYgKGhhbmRsZXItXHUwMDNlZmxhZ3MgPT0gRVJPRlNfWEFUVFJfSU5ERVhfVVNFUiBcdTAwMjZcdTAwMjZcbmZzL2Vyb2ZzL3hhdHRyLmM6NDIxOlx0ICAgICF0ZXN0X29wdChcdTAwMjZFUk9GU19JX1NCKGlub2RlKS1cdTAwM2VvcHQsIFhBVFRSX1VTRVIpKVxuZnMvZXJvZnMveGF0dHIuYy00MjItXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9lcm9mcy94YXR0ci5jPTYxOD1pbnQgZXJvZnNfeGF0dHJfZmlsbF9pbm9kZV9maW5nZXJwcmludChzdHJ1Y3QgZXJvZnNfaW5vZGVfZmluZ2VycHJpbnQgKmZwLFxuLS1cbmZzL2Vyb2ZzL3hhdHRyLmMtNjI1LVxuZnMvZXJvZnMveGF0dHIuYzo2MjY6XHRpZiAoIXRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKSlcbmZzL2Vyb2ZzL3hhdHRyLmMtNjI3LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZnMvZXJvZnMvemRhdGEuYz01MTY9c3RhdGljIGJvb2wgel9lcm9mc19zaG91bGRfYWxsb2NfY2FjaGUoc3RydWN0IHpfZXJvZnNfZnJvbnRlbmQgKmZlKVxuZnMvZXJvZnMvemRhdGEuYy01MTcte1xuZnMvZXJvZnMvemRhdGEuYzo1MTg6XHR1bnNpZ25lZCBpbnQgY2FjaGVzdHJhdGVneSA9IEVST0ZTX0lfU0IoZmUtXHUwMDNlaW5vZGUpLVx1MDAzZW9wdC5jYWNoZV9zdHJhdGVneTtcbmZzL2Vyb2ZzL3pkYXRhLmMtNTE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yYXZlbGluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIEVST0ZTIE1vdW50IE9wdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEVST0ZTIGNvZGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBoYW5kbGluZyBvZiBtb3VudCBvcHRpb25zIGFuZCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBleHBvc3VyZSBvZiBgc2JpLSZndDtvcHRgIHZpYSBzeXNmcyDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIHJlZCBmbGFnLiBCdXQgdGhlbiBJIHJlYWxpemVkLCBzeXNmcyBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIGZpZWxkLWJ5LWZpZWxkLCBzbyB0aGV5IHdvdWxkbiYjMzk7dCBleHBvc2UgdGhlIGVudGlyZSBzdHJ1Y3R1cmUsIHBhZGRpbmcgYW5kIGFsbC4gR29vZCwgdGhhdCYjMzk7cyBvbmUgYXZlbnVlIGNsb3NlZC4KClRoZSBjb3JlIG9mIG15IGNvbmNlcm4gaGVyZSBzZWVtcyB0byBiZSBgbWVtY21wKCZhbXA7c2JpLSZndDtvcHQsICZhbXA7bmV3X3NiaS0mZ3Q7b3B0LCBzaXplb2Yoc2JpLSZndDtvcHQpKWAuIElzIGl0IHBvc3NpYmxlIHRoYXQgYG5ld19zYmktJmd0O29wdGAgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIHBhZGRpbmcgd2hlbiBpdCYjMzk7cyBhbGxvY2F0ZWQgdmlhIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIGFuZCB6ZXJvZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYD8gTm8uIFNpbmNlIGl0IGlzIGluaXRpYWxpemVkIGJ5IGBremFsbG9jYCwgdGhlIHN0cnVjdHVyZSBhbmQgaXRzIHBhZGRpbmcgaXMgemVyb2VkLiBMYXRlciBtb2RpZmljYXRpb25zIHdpdGhpbiBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIG9ubHkgdG91Y2ggc3BlY2lmaWMgZmllbGRzLCBsZWF2aW5nIHRoZSBwYWRkaW5nIHVudG91Y2hlZCBhbmQgcmVtYWluaW5nIHplcm9lZC4gU28sIHRoZSBgbWVtY21wYCB3aWxsIGJlIGNvbXBhcmluZyBpbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LgoKVGhlbiwgSSBzdGFydGVkIHdvbmRlcmluZyBpZiBgc2JpLSZndDtvcHRgIHdhcyBjb3BpZWQgZnJvbSBzb21ld2hlcmUgZWxzZSB0aGF0ICp3YXNuJiMzOTt0KiB6ZXJvZWQuIEJ1dCBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgY29kZSBzaG93cyB0aGF0IGBzYmktJmd0O29wdGAgaXMgYXNzaWduZWQgdXNpbmcgYHNiaS0mZ3Q7b3B0ID0gbmV3X3NiaS0mZ3Q7b3B0O2AgaW4gYGVyb2ZzX2ZjX3JlY29uZmlndXJlYC4gR2l2ZW4gdGhhdCBgbmV3X3NiaWAgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgd2UmIzM5O3JlIGd1YXJhbnRlZWQgdG8gYmUgc2FmZSBmcm9tIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcG9zc2liaWxpdHkgdGhhdCBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIG1pZ2h0IGludm9sdmUgYSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24gb24gdGhlIHdob2xlIHdvcmQsIGluY2x1ZGluZyBwYWRkaW5nLiBIb3dldmVyLCB0aGUgcGFkZGluZyB3aWxsIGJlIHplcm8uIFRoZXJlZm9yZSwgZXZlbiBpZiBhIGNvbXBpbGVyIGdlbmVyYXRlcyBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbiBvbiB0aGUgd2hvbGUgd29yZCwgaXQgcmVhZHMgaW5pdGlhbGl6ZWQgKHplcm8pIG1lbW9yeSwgZG9lcyBzb21ldGhpbmcsIGFuZCB3cml0ZXMgdGhlIHBhZGRpbmcgYmFjayBhcyB6ZXJvLiBUaGF0JiMzOTtzIHN0aWxsIHNhZmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYHN1cGVyYmxvY2tfc2hhcmVgIGFuZCBpdHMgdXNlIGluIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgLiBUaGUgY29tcGFyaXNvbiB0aGVyZSBsb29rcyBhdCBgc2JpLSZndDtkaWYwLmZpbGVgLCBgc2JpLSZndDtkaWYwLmZzb2ZmYCwgYG5ld19zYmktJmd0O2RpZjAuZmlsZWAsIGFuZCBgbmV3X3NiaS0mZ3Q7ZGlmMC5mc29mZmAsIGFsb25nIHdpdGggYG1lbWNtcGAgb2YgdGhlIG9wdGlvbnMuIEFyZSB0aG9zZSBpbml0aWFsaXplZD8gSSYjMzk7bSBwcmV0dHkgc3VyZSBgZGlmMGAgaXMgcGFydCBvZiBgc2JpYCB3aGljaCBpcyBpbml0aWFsaXplZCBieSBga3phbGxvY2AsIG1lYW5pbmcgdGhlIGBmc29mZmAgaXMgYWx3YXlzIGluaXRpYWxpemVkLiBFdmVuIGlmIGl0JiMzOTtzIG5vdCBwcm92aWRlZCB2aWEgYSBtb3VudCBvcHRpb24sIGl0IHJlbWFpbnMgemVyby4gVGhlbiBgc2JpLSZndDtkaWYwLmZpbGVgIGlzIHNldCBmcm9tIHRoZSBgT3B0X3NvdXJjZWAgb3B0aW9uLCBhbmQgaXQmIzM5O3MgaGFuZGxlZCBwcm9wZXJseSBpZiBpdCYjMzk7cyBOVUxMICh1bnNwZWNpZmllZCkgd2l0aCB0aGUgY29uZGl0aW9uYWwgY2hlY2suCgpJIGRpZCBhIG1lbnRhbCBjaGVjayBvZiBgZ2V0X3RyZWVfc3VwZXJgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIFZGUyBmdW5jdGlvbi4gVGhlcmUmIzM5O3Mgbm90aGluZyB1bnVzdWFsIHRoZXJlLgoKSXMgYW55dGhpbmcgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlPyBObywgdGhpcyBpcyBqdXN0IGludGVybmFsIG1vdW50IG9wdGlvbiBoYW5kbGluZyBhbmQgc3VwZXJibG9jayBzaGFyaW5nLiBJcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIGV2ZXJ5dGhpbmcmIzM5O3MgaW5pdGlhbGl6ZWQuIE5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUsIHRoZSBzdHJ1Y3R1cmVzIGFyZSBzdHJhaWdodGZvcndhcmQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcmV2aWV3IGFnYWluOiBgc2JpLSZndDtvcHRgIGFuZCBpdHMgcGFkZGluZyBhcmUgemVyb2VkIGJ5IGBremFsbG9jYC4gSWYgYHNiaS0mZ3Q7b3B0YCBpcyBhc3NpZ25lZCBmcm9tIGEgYG5ld19zYmktJmd0O29wdGAsIHRoYXQgYWxzbyBnZXRzIGluaXRpYWxpemVkIGJ5IGBremFsbG9jYC4gVGhlIG1vZGlmaWNhdGlvbnMgdmlhIGBlcm9mc19kZWZhdWx0X29wdGlvbnNgIGFuZCBgZXJvZnNfZmNfcGFyc2VfcGFyYW1gIGRvIG5vdCB0b3VjaCB0aGUgcGFkZGluZy4gVGhlcmUmIzM5O3Mgbm8gY29weWluZyB0byB1c2VyIHNwYWNlIGV4Y2VwdCBmb3IgcHJpbnRpbmcgdGhlIG9wdGlvbnMgZmllbGQtYnktZmllbGQgaW4gYGVyb2ZzX3Nob3dfb3B0aW9uc2AuIFRoZSBvcHRpb25zIGFyZSBwcmludGVkIHZpYSBhIHNlcV9maWxlLCB3aGljaCBpcyBzZW50IHRvIHVzZXIgc3BhY2UsIGJ1dCB0aGlzIGhhcHBlbnMgZmllbGQtYnktZmllbGQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gc3RydWN0IGNvcHlpbmcsIG5vIHBhZGRpbmcsIGFuZCBubyBwcm9ibGVtLgoKT2theSwgSSB0aGluayBJJiMzOTt2ZSB0aG9yb3VnaGx5IHZldHRlZCB0aGUgY29kZSwgYW5kIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBtb3VudCBvcHRpb24gaGFuZGxpbmcgaW4gdGhpcyBwYXRjaC4gSSYjMzk7bSBzYXRpc2ZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXJvZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzNjpcdHN0YXRpYyBpbnQgZXJvZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuMTEzNzpcdHtcbjExMzg6XHRcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihyb290LVx1MDAzZWRfc2IpO1xuMTEzOTpcdFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMgKm9wdCA9IFx1MDAyNnNiaS1cdTAwM2VvcHQ7XG4xMTQwOlx0XG4xMTQxOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxuMTE0MjpcdFx0XHRzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgWEFUVFJfVVNFUikgP1xuMTE0MzpcdFx0XHRcdFx0XCYjMzQ7LHVzZXJfeGF0dHJcJiMzNDsgOiBcJiMzNDssbm91c2VyX3hhdHRyXCYjMzQ7KTtcbjExNDQ6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKVxuMTE0NTpcdFx0XHRzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgUE9TSVhfQUNMKSA/IFwmIzM0OyxhY2xcJiMzNDsgOiBcJiMzNDssbm9hY2xcJiMzNDspO1xuMTE0NjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1pJUCkgXHUwMDI2XHUwMDI2IHNiaS1cdTAwM2VhdmFpbGFibGVfY29tcHJfYWxncylcbjExNDc6XHRcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyxjYWNoZV9zdHJhdGVneT0lc1wmIzM0OyxcbjExNDg6XHRcdFx0XHQgIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W29wdC1cdTAwM2VjYWNoZV9zdHJhdGVneV0ubmFtZSk7XG4xMTQ5Olx0XHRpZiAodGVzdF9vcHQob3B0LCBEQVhfQUxXQVlTKSlcbjExNTA6XHRcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDssZGF4PWFsd2F5c1wmIzM0Oyk7XG4xMTUxOlx0XHRpZiAodGVzdF9vcHQob3B0LCBEQVhfTkVWRVIpKVxuMTE1MjpcdFx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0OyxkYXg9bmV2ZXJcJiMzNDspO1xuMTE1MzpcdFx0aWYgKGVyb2ZzX2lzX2ZpbGVpb19tb2RlKHNiaSkgXHUwMDI2XHUwMDI2IHRlc3Rfb3B0KG9wdCwgRElSRUNUX0lPKSlcbjExNTQ6XHRcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDssZGlyZWN0aW9cJiMzNDspO1xuMTE1NTpcdFx0aWYgKHNiaS1cdTAwM2VkaWYwLmZzb2ZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE2NQoJCQkJCQkJb3V0cHV0OiAyNjIKCQkJCQkJCXRob3VnaHRzOiAxNzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQgb2YgRVJPRlMgU3VwZXJibG9jayBTaGFyaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB5ZXMsIHRoZSBjb2RlICpkb2VzKiBzZWVtIHRvIHByaW50IGZpZWxkIGJ5IGZpZWxkLiBJJiMzOTttIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHNlZSB0aGF0IHRoZSBvbmx5IHVzZSBvZiBgc2JpLSZndDtvcHRgIGFzIGEgd2hvbGUgaXMgaW4gYG1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSlgLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwb2ludC4gQm90aCBgc2JpYCBhbmQgYG5ld19zYmlgIGFyZSBga3phbGxvY2AmIzM5O2QsIHdoaWNoIG1lYW5zIHRoZWlyIHBhZGRpbmcgaXMgKnplcm9lZCogYnkgZGVmYXVsdC4gU28gZXZlbiBpZiBgbWVtY21wYCByZWFkcyB0aGF0IHBhZGRpbmcsIGl0JiMzOTtzIHJlYWRpbmcgKmluaXRpYWxpemVkKiBtZW1vcnkgKHNwZWNpZmljYWxseSwgemVyb3MpLiBLTVNBTiBzaG91bGRuJiMzOTt0IGNvbXBsYWluLgoKTm93LCBjb3VsZCB0aGUgYHNiaS0mZ3Q7b3B0YCBzdHJ1Y3QsIGluIHBhcnRpY3VsYXIsIGhhdmUgYml0ZmllbGRzPyBObywgaXQgZG9lc24mIzM5O3QuIEl0JiMzOTtzIGdvdCBgdW5zaWduZWQgY2hhciBjYWNoZV9zdHJhdGVneWAgYW5kIGB1bnNpZ25lZCBpbnQgbW91bnRfb3B0YC4gVGhlcmUgaXMgMyBieXRlcyBvZiBwYWRkaW5nIGJldHdlZW4gdGhlc2UgdHdvIGZpZWxkcywgZHVlIHRvIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0LiBCdXQgc2luY2UgaXQmIzM5O3MgYGt6YWxsb2NgJiMzOTtkLCB0aGF0IHBhZGRpbmcgaXMgemVyby4gQW55IHdyaXRlIHRvIGBjYWNoZV9zdHJhdGVneWAgb3IgYG1vdW50X29wdGAgZ2VuZXJhdGVzIGJ5dGUgb3Igd29yZCB3cml0ZXMsIGFuZCBpdCBuZXZlciB0b3VjaGVzIHRoZSBwYWRkaW5nLiBUaGF0IHBhZGRpbmcgKnJlbWFpbnMqIHplcm8uIFRoZSBgbWVtY21wYCBjYWxsIHdpbGwgY29tcGFyZSB0aGUgcGFkZGluZyBieXRlcywgYW5kIHRoZXkgYXJlIGJvdGggemVybywgc28gdGhleSBtYXRjaC4gVGhpcyBpcyBwZXJmZWN0bHkgc2FmZS4gSXQmIzM5O3Mgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTGV0JiMzOTtzIGxvb2sgbW9yZSBicm9hZGx5IGF0IHRoZSBwYXRjaC4gSXQgaW50cm9kdWNlcyBgc3VwZXJibG9ja19zaGFyZWAgbW91bnQgb3B0aW9uLiBOb3csIGl0IGRvZXMgbW9kaWZ5IGBlcm9mc19mY19wYXJzZV9wYXJhbWAgdG8gc2V0IGBTVVBFUkJMT0NLX1NIQVJFYC4gVGhpcyBqdXN0IHNldHMgYSBmbGFnIGluIGBzYmktJmd0O29wdC5tb3VudF9vcHRgLiBgZXJvZnNfZmNfZmlsbF9zdXBlcmAgY2hlY2tzIGZsYWdzIHRoYXQgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgoKVGhlIG5ldyBmdW5jdGlvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgcGxhY2Ugd2hlcmUgaXQgY291bGQgZmFpbC4gQnV0IGxldCYjMzk7cyBzZWUuIEhlcmUsIHdlIHNlZSBjb21wYXJpc29ucyBhZ2FpbnN0IGBzYi0mZ3Q7c19pZmxhZ3NgLCB0aGUgYHNiaS0mZ3Q7ZGlmMGAgbWVtYmVycywgYW5kIGZpbmFsbHkgYG1lbWNtcCgmYW1wO3NiaS0mZ3Q7b3B0LCAmYW1wO25ld19zYmktJmd0O29wdCwgc2l6ZW9mKHNiaS0mZ3Q7b3B0KSlgLiBBbGwgdGhlc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBpbml0aWFsaXplZCBmbGFncy4KClRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLCB3aGljaCBqdXN0IGNhbGxzIGFub3RoZXIgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIGEgZmxhZy4gQW5kIGBlcm9mc19mY19yZWNvbmZpZ3VyZWAganVzdCBjaGVja3MgYSBmbGFnLCB0b28uCgpGaW5hbGx5LCB0aGUgYGZzL3N1cGVyLmNgIGNoYW5nZSBqdXN0IGV4cG9ydHMgYGdldF90cmVlX3N1cGVyYC4KClRoZXJlIGlzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBgbWVtY21wYCBvbiBhIHN0cnVjdCB3aXRoIHBhZGRpbmcgaXMgc2FmZSBiZWNhdXNlIG9mIGBremFsbG9jYC4gVGhlIHBhZGRpbmcgaXMgbmV2ZXIgbW9kaWZpZWQsIGFuZCByZW1haW5zIHplcm8uIEtNU0FOIHNlZXMgdGhlIHBhZGRpbmcgYXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gemVyby4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gVGhlIGNoYW5nZXMgYXJlIGFsbCByZWxhdGVkIHRvIG1vdW50IG9wdGlvbnMgYW5kIHN1cGVyYmxvY2sgc2hhcmluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCB3aWxsIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIGFuZCB0aG9zZSBhcmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBkZXRlY3RvcnMuIFRoZXJlIGFyZSBubyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTbywgaGVyZSYjMzk7cyBteSByZWFzb25pbmcsIGluIHN1bW1hcnk6CgoqICAgVGhlIHBhdGNoIGludHJvZHVjZXMgYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBmaWxlLWJhY2tlZCBtb3VudHMuCiogICBJdCBhZGRzIGEgY29tcGFyaXNvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCB0aGF0IHVzZXMgYG1lbWNtcGAgb24gYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYC4KKiAgIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgaGFzIHBhZGRpbmcsIGJ1dCBpbnN0YW5jZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLCBzbyBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kICpyZW1haW5zKiB6ZXJvLiBgbWVtY21wYCBzYWZlbHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgTm8gc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZS4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgaW4gY29udHJvbCBmbG93LgoqICAgUG90ZW50aWFsIGJ1Z3MgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIGxvZ2ljIGVycm9ycykgYXJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgdGVzdGluZy4KKiAgIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpc24mIzM5O3QganVzdGlmaWVkLiBUaGlzIHNob3VsZCBiZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIEVST0ZTIGZpbGUtYmFja2VkIG1vdW50cyBhbmQgYWRkcyBsb2dpYyB0byBzaGFyZSBzdXBlcmJsb2NrcyB3aGVuIGNvbXBhdGlibGUgb3B0aW9ucyBhcmUgdXNlZC4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgdXNlcyBgbWVtY21wYCB0byBjb21wYXJlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIFdoaWxlIHRoaXMgc3RydWN0IGNvbnRhaW5zIHBhZGRpbmcsIGluc3RhbmNlcyBvZiBpdCBhcmUgZW1iZWRkZWQgd2l0aGluIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AsIHdoaWNoIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCAoaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGApLiBDb25zZXF1ZW50bHksIHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIHJlbWFpbnMgemVybywgbWVhbmluZyBgbWVtY21wYCBzYWZlbHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhvdXQgdHJpZ2dlcmluZyBLTVNBTiBvciBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBzaGFyaW5nKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBmaWxlLWJhY2tlZCBtb3VudHMgYW5kIGFkZHMgbG9naWMgdG8gc2hhcmUgc3VwZXJibG9ja3Mgd2hlbiBjb21wYXRpYmxlIG9wdGlvbnMgYXJlIHVzZWQuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIHVzZXMgYG1lbWNtcGAgdG8gY29tcGFyZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBXaGlsZSB0aGlzIHN0cnVjdCBjb250YWlucyBwYWRkaW5nLCBpbnN0YW5jZXMgb2YgaXQgYXJlIGVtYmVkZGVkIHdpdGhpbiBgc3RydWN0IGVyb2ZzX3NiX2luZm9gLCB3aGljaCBpcyBhbHdheXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AgKGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgKS4gQ29uc2VxdWVudGx5LCB0aGUgcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCByZW1haW5zIHplcm8sIG1lYW5pbmcgYG1lbWNtcGAgc2FmZWx5IHJlYWRzIGluaXRpYWxpemVkIG1lbW9yeSB3aXRob3V0IHRyaWdnZXJpbmcgS01TQU4gb3IgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3IuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZXJlIGlzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHN1cGVyYmxvY2sgc2hhcmluZykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6MjYuNDA2ODQyMTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NTQ0Mzg4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19nZXRfdHJlZV9maWxlXCIsXG4gICAgXCJnZXRfdHJlZV9zdXBlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBmaWxlLWJhY2tlZCBtb3VudHMgYW5kIGFkZHMgbG9naWMgdG8gc2hhcmUgc3VwZXJibG9ja3Mgd2hlbiBjb21wYXRpYmxlIG9wdGlvbnMgYXJlIHVzZWQuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIHVzZXMgYG1lbWNtcGAgdG8gY29tcGFyZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBXaGlsZSB0aGlzIHN0cnVjdCBjb250YWlucyBwYWRkaW5nLCBpbnN0YW5jZXMgb2YgaXQgYXJlIGVtYmVkZGVkIHdpdGhpbiBgc3RydWN0IGVyb2ZzX3NiX2luZm9gLCB3aGljaCBpcyBhbHdheXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AgKGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgKS4gQ29uc2VxdWVudGx5LCB0aGUgcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCByZW1haW5zIHplcm8sIG1lYW5pbmcgYG1lbWNtcGAgc2FmZWx5IHJlYWRzIGluaXRpYWxpemVkIG1lbW9yeSB3aXRob3V0IHRyaWdnZXJpbmcgS01TQU4gb3IgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3IuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBzaGFyaW5nKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0sIGFsbG93aW5nIHN1cGVyYmxvY2sgc2hhcmluZyB3aGVuIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG11bHRpcGxlIHRpbWVzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIG1vdW50IGxvZ2ljIGZvciBFUk9GUyBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGxpa2UgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgYW5kIGBlcm9mc19mY19nZXRfdHJlZV9maWxlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIG1vdW50IHBhdGggdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMwOjI2LjQwNjg0ODE4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1NzA3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjFmZTQ0NmFmMzVkZTkzMTdmYzQ2MjIyZWYyNDBkZjA2OThlNzAzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzozMDoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XFxuaW5kZXggZDMwMWQ5YWM5NDZhOS4uNDljNGU3ZGJjNWQ2MSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XFxuQEAgLTEzOSw2ICsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgY2FjaGUuXFxuIHNvdXJjZT0lcyAgICAgICAgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNwZWNpZnkgdGhlIGJhY2tpbmcgaW1hZ2UgYXMgYSBwYXRoXFxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLlxcbitzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lXFxuKyAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlXFxuKyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxcbiA9PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG4gRmlsZS1iYWNrZWQgbW91bnRzXFxuQEAgLTE1Niw2ICsxNTksMTEgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0XFxuIHJlc2lkZXMgb24gYSBibG9jayBkZXZpY2UsIHVzZSB0aGUgdHJhZGl0aW9uYWwgYmxvY2sgZGV2aWNlIG1vdW50IHBhdGhcXG4gaW5zdGVhZC5cXG4gXFxuK1doZW4gc3VwZXJibG9ja19zaGFyZSBpcyBzcGVjaWZpZWQgYW5kIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSAoaWRlbnRpZmllZFxcbitieSBpbm9kZSBhbmQgZnNvZmZzZXQpIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG1vdW50XFxuK29wdGlvbnMsIHRoZSBrZXJuZWwgcmV1c2VzIHRoZSBleGlzdGluZyBzdXBlcmJsb2NrIGluc3RlYWQgb2YgY3JlYXRpbmcgYVxcbituZXcgb25lLiAgUmVtb3VudCBpcyBub3QgYWxsb3dlZCBvbiBzaGFyZWQgc3VwZXJibG9ja3MuXFxuK1xcbiBTeXNmcyBFbnRyaWVzXFxuID09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL2ludGVybmFsLmggYi9mcy9lcm9mcy9pbnRlcm5hbC5oXFxuaW5kZXggNTdiZDIxODU5YzY1ZC4uODZkYTIxOWY4ZjRlYyAxMDA2NDRcXG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxcbkBAIC0xNTYsNiArMTU2LDcgQEAgc3RydWN0IGVyb2ZzX3NiX2luZm8ge1xcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlxcdFxcdDB4MDAwMDAwODBcXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cXHRcXHQweDAwMDAwMTAwXFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcXHRcXHQweDAwMDAwMjAwXFxuKyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRVxcdDB4MDAwMDA0MDBcXG4gXFxuICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKVxcdCgob3B0KS1cXHUwMDNlbW91bnRfb3B0IFxcdTAwMjY9IH5FUk9GU19NT1VOVF8jI29wdGlvbilcXG4gI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKVxcdCgob3B0KS1cXHUwMDNlbW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKVxcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xcbmluZGV4IGRkYzk3MTllNmQxOGUuLjQ1N2UwNjc0NDdkNWYgMTAwNjQ0XFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcXG5AQCAtMzg2LDcgKzM4Niw3IEBAIHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxcbiBlbnVtIHtcXG4gXFx0T3B0X3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9jYWNoZV9zdHJhdGVneSwgT3B0X2RheCwgT3B0X2RheF9lbnVtLFxcbiBcXHRPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLFxcbi1cXHRPcHRfc291cmNlLFxcbitcXHRPcHRfc291cmNlLCBPcHRfc3VwZXJibG9ja19zaGFyZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgZXJvZnNfcGFyYW1fY2FjaGVfc3RyYXRlZ3lbXSA9IHtcXG5AQCAtNDE1LDYgKzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0ge1xcbiBcXHRmc3BhcmFtX3U2NChcXFwiZnNvZmZzZXRcXFwiLFxcdFxcdFxcdE9wdF9mc29mZnNldCksXFxuIFxcdGZzcGFyYW1fZmxhZyhcXFwiaW5vZGVfc2hhcmVcXFwiLFxcdFxcdE9wdF9pbm9kZV9zaGFyZSksXFxuIFxcdGZzcGFyYW1fZmlsZV9vcl9zdHJpbmcoXFxcInNvdXJjZVxcXCIsXFx0T3B0X3NvdXJjZSksXFxuK1xcdGZzcGFyYW1fZmxhZyhcXFwic3VwZXJibG9ja19zaGFyZVxcXCIsXFx0T3B0X3N1cGVyYmxvY2tfc2hhcmUpLFxcbiBcXHR7fVxcbiB9O1xcbiBcXG5AQCAtNTYwLDYgKzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBPcHRfc3VwZXJibG9ja19zaGFyZTpcXG4rXFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19CQUNLRURfQllfRklMRSkpXFxuK1xcdFxcdFxcdGVycm9yZmMoZmMsIFxcXCIlcyBvcHRpb24gbm90IHN1cHBvcnRlZFxcXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE9wdF9zb3VyY2U6XFxuIFxcdFxcdHJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTtcXG4gXFx0fVxcbkBAIC02NTIsNiArNjU5LDE3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIFxcdFxcdGVycm9yZmMoZmMsIFxcXCJGU0RBWCBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuK1xcdGlmICh0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xcbitcXHRcXHRlcnJvcmZjKGZjLCBcXFwic3VwZXJibG9ja19zaGFyZSBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdC8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi9cXG4rXFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNiaS1cXHUwMDNlZGV2cy1cXHUwMDNlZXh0cmFfZGV2aWNlcykge1xcbitcXHRcXHRlcnJvcmZjKGZjLCBcXFwic3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXNcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4gXFxuIFxcdHNiaS1cXHUwMDNlYmxrc3piaXRzID0gUEFHRV9TSElGVDtcXG4gXFx0aWYgKCFzYi1cXHUwMDNlc19iZGV2KSB7XFxuQEAgLTc3OSw2ICs3OTcsMzYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHdpdGggYSBzYmkgdGhhdFxcbitcXHQgKiBoYXMgU1VQRVJCTE9DS19TSEFSRSBzZXQsIHNvIHRoYXQgdGhlIG1lbWNtcCBsYXRlciBlbnN1cmVzXFxuK1xcdCAqIG5ld19zYmkgYWxzbyBpcyBzaGFyZWFibGUuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Ioc2IpO1xcbitcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqbmV3X3NiaSA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuK1xcbitcXHRpZiAoc2ItXFx1MDAzZXNfaWZsYWdzIFxcdTAwMjYgU0JfSV9SRVRJUkVEKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFzYmktXFx1MDAzZWRpZjAuZmlsZSB8fCAhbmV3X3NiaS1cXHUwMDNlZGlmMC5maWxlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGZpbGVfaW5vZGUoc2JpLVxcdTAwM2VkaWYwLmZpbGUpID09IGZpbGVfaW5vZGUobmV3X3NiaS1cXHUwMDNlZGlmMC5maWxlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgc2JpLVxcdTAwM2VkaWYwLmZzb2ZmID09IG5ld19zYmktXFx1MDAzZWRpZjAuZnNvZmYgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgICFtZW1jbXAoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBcXHUwMDI2bmV3X3NiaS1cXHUwMDNlb3B0LCBzaXplb2Yoc2JpLVxcdTAwM2VvcHQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4re1xcbitcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4rXFxuK1xcdGlmICghdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcXG4rXFx0XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rXFxuK1xcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIHtcXG4gXFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuQEAgLTc5NCw3ICs4NDIsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0XFx0XFx0ZXJyb3JmYyhmYywgXFxcInNvdXJjZSBpcyB1bnN1cHBvcnRlZFxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbitcXHRcXHRyZXR1cm4gZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShmYyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsXFxuQEAgLTgxMiw3ICs4NjAsNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFxuIFxcdFxcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVxcdTAwM2VkaWYwLmZpbGUpLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBzYmktXFx1MDAzZWRpZjAuZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlcmVhZF9mb2xpbylcXG4tXFx0XFx0XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpO1xcbiBcXHR9XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtODI1LDYgKzg3MywxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFxuIFxcdERCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7XFxuIFxcbitcXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cXG4rXFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbiBcXHRpZiAobmV3X3NiaS1cXHUwMDNlZG9tYWluX2lkKVxcbiBcXHRcXHRlcm9mc19pbmZvKHNiLCBcXFwiaWdub3JpbmcgcmVjb25maWd1cmF0aW9uIGZvciBkb21haW5faWQuXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMTM4OSw3ICsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbisvKipcXG4rICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXFxuKyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXFxuKyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXFxuKyAqIEBmaWxsX3N1cGVyOiBIZWxwZXIgdG8gaW5pdGlhbGlzZSBhIG5ldyBzdXBlcmJsb2NrXFxuKyAqXFxuKyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xcbisgKiByZXVzZWQ7IG90aGVyd2lzZSBhIG5ldyBhbm9ueW1vdXMgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXNlZCB3aXRoXFxuKyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxcbisgKi9cXG4raW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0aW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxcbiBcXHRcXHRpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXFxuQEAgLTE0MTYsMTIgKzE0MjYsMTMgQEAgc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpO1xcbiBcXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4ge1xcbi1cXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuK1xcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XFxuIFxcbkBAIC0xNDI5LDcgKzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0XFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcXG4ge1xcbi1cXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbitcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7XFxuIFxcbkBAIC0xNDM5LDcgKzE0NTAsNyBAQCBpbnQgZ2V0X3RyZWVfa2V5ZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbiBcXHRcXHR2b2lkICprZXkpXFxuIHtcXG4gXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IGtleTtcXG4tXFx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbitcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxcbkBAIC0xNTAsNiArMTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xcbiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiBcXG4rZXh0ZXJuIGludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuK1xcdFxcdFxcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXFxuK1xcdFxcdFxcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcXG4gZXh0ZXJuIGludCBnZXRfdHJlZV9ub2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6MjcuMDEzMTI0MTQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjYzMTY2NDMyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyXCIsXG4gICAgXCJlcm9mc19mY19nZXRfdHJlZV9maWxlXCIsXG4gICAgXCJnZXRfdHJlZV9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0sIGFsbG93aW5nIHN1cGVyYmxvY2sgc2hhcmluZyB3aGVuIHRoZSBzYW1lIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG11bHRpcGxlIHRpbWVzLiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIG1vdW50IGxvZ2ljIGZvciBFUk9GUyBhbmQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIGxpa2UgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgYW5kIGBlcm9mc19mY19nZXRfdHJlZV9maWxlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBmaWxlc3lzdGVtIG1vdW50IHBhdGggdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYxZmU0NDZhZjM1ZGU5MzE3ZmM0NjIyMmVmMjQwZGYwNjk4ZTcwM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzozMDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbmluZGV4IGQzMDFkOWFjOTQ2YTkuLjQ5YzRlN2RiYzVkNjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3RcbkBAIC0xMzksNiArMTM5LDkgQEAgaW5vZGVfc2hhcmUgICAgICAgICAgICBFbmFibGUgaW5vZGUgcGFnZSBzaGFyaW5nIGZvciB0aGlzIGZpbGVzeXN0ZW0uICBJbm9kZXMgd2lcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgY2FjaGUuXG4gc291cmNlPSVzICAgICAgICAgICAgICAoRm9yIGZpbGUtYmFja2VkIG1vdW50cykgU3BlY2lmeSB0aGUgYmFja2luZyBpbWFnZSBhcyBhIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIGFscmVhZHktb3BlbmVkIGZpbGUgZGVzY3JpcHRvci5cbitzdXBlcmJsb2NrX3NoYXJlICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTaGFyZSB0aGUgc3VwZXJibG9jayB3aGVuIHRoZSBzYW1lXG4rICAgICAgICAgICAgICAgICAgICAgICBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGNvbXBhdGlibGVcbisgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy5cbiA9PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIEZpbGUtYmFja2VkIG1vdW50c1xuQEAgLTE1Niw2ICsxNTksMTEgQEAgT25seSByZWd1bGFyIGZpbGVzIGFyZSBhY2NlcHRlZCBhcyBiYWNraW5nIGZpbGVzOyB0byBtb3VudCBhbiBpbWFnZSB0aGF0XG4gcmVzaWRlcyBvbiBhIGJsb2NrIGRldmljZSwgdXNlIHRoZSB0cmFkaXRpb25hbCBibG9jayBkZXZpY2UgbW91bnQgcGF0aFxuIGluc3RlYWQuXG4gXG4rV2hlbiBzdXBlcmJsb2NrX3NoYXJlIGlzIHNwZWNpZmllZCBhbmQgdGhlIHNhbWUgYmFja2luZyBmaWxlIChpZGVudGlmaWVkXG4rYnkgaW5vZGUgYW5kIGZzb2Zmc2V0KSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZSBtb3VudFxuK29wdGlvbnMsIHRoZSBrZXJuZWwgcmV1c2VzIHRoZSBleGlzdGluZyBzdXBlcmJsb2NrIGluc3RlYWQgb2YgY3JlYXRpbmcgYVxuK25ldyBvbmUuICBSZW1vdW50IGlzIG5vdCBhbGxvd2VkIG9uIHNoYXJlZCBzdXBlcmJsb2Nrcy5cbitcbiBTeXNmcyBFbnRyaWVzXG4gPT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL2ludGVybmFsLmggYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5pbmRleCA1N2JkMjE4NTljNjVkLi44NmRhMjE5ZjhmNGVjIDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuQEAgLTE1Niw2ICsxNTYsNyBAQCBzdHJ1Y3QgZXJvZnNfc2JfaW5mbyB7XG4gI2RlZmluZSBFUk9GU19NT1VOVF9EQVhfTkVWRVJcdFx0MHgwMDAwMDA4MFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfRElSRUNUX0lPXHRcdDB4MDAwMDAxMDBcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0lOT0RFX1NIQVJFXHRcdDB4MDAwMDAyMDBcbisjZGVmaW5lIEVST0ZTX01PVU5UX1NVUEVSQkxPQ0tfU0hBUkVcdDB4MDAwMDA0MDBcbiBcbiAjZGVmaW5lIGNsZWFyX29wdChvcHQsIG9wdGlvbilcdCgob3B0KS1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+RVJPRlNfTU9VTlRfIyNvcHRpb24pXG4gI2RlZmluZSBzZXRfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCB8PSBFUk9GU19NT1VOVF8jI29wdGlvbilcbmRpZmYgLS1naXQgYS9mcy9lcm9mcy9zdXBlci5jIGIvZnMvZXJvZnMvc3VwZXIuY1xuaW5kZXggZGRjOTcxOWU2ZDE4ZS4uNDU3ZTA2NzQ0N2Q1ZiAxMDA2NDRcbi0tLSBhL2ZzL2Vyb2ZzL3N1cGVyLmNcbisrKyBiL2ZzL2Vyb2ZzL3N1cGVyLmNcbkBAIC0zODYsNyArMzg2LDcgQEAgc3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXG4gZW51bSB7XG4gXHRPcHRfdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X2NhY2hlX3N0cmF0ZWd5LCBPcHRfZGF4LCBPcHRfZGF4X2VudW0sXG4gXHRPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLFxuLVx0T3B0X3NvdXJjZSxcbitcdE9wdF9zb3VyY2UsIE9wdF9zdXBlcmJsb2NrX3NoYXJlLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBlcm9mc19wYXJhbV9jYWNoZV9zdHJhdGVneVtdID0ge1xuQEAgLTQxNSw2ICs0MTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbiBcdGZzcGFyYW1fdTY0KFwiZnNvZmZzZXRcIixcdFx0XHRPcHRfZnNvZmZzZXQpLFxuIFx0ZnNwYXJhbV9mbGFnKFwiaW5vZGVfc2hhcmVcIixcdFx0T3B0X2lub2RlX3NoYXJlKSxcbiBcdGZzcGFyYW1fZmlsZV9vcl9zdHJpbmcoXCJzb3VyY2VcIixcdE9wdF9zb3VyY2UpLFxuK1x0ZnNwYXJhbV9mbGFnKFwic3VwZXJibG9ja19zaGFyZVwiLFx0T3B0X3N1cGVyYmxvY2tfc2hhcmUpLFxuIFx0e31cbiB9O1xuIFxuQEAgLTU2MCw2ICs1NjEsMTIgQEAgc3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdGVsc2VcbiBcdFx0XHRzZXRfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIE9wdF9zdXBlcmJsb2NrX3NoYXJlOlxuK1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFKSlcbitcdFx0XHRlcnJvcmZjKGZjLCBcIiVzIG9wdGlvbiBub3Qgc3VwcG9ydGVkXCIsIGVyb2ZzX2ZzX3BhcmFtZXRlcnNbb3B0XS5uYW1lKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBPcHRfc291cmNlOlxuIFx0XHRyZXR1cm4gZXJvZnNfZmNfcGFyc2Vfc291cmNlKGZjLCBwYXJhbSk7XG4gXHR9XG5AQCAtNjUyLDYgKzY1OSwxNyBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0XHRlcnJvcmZjKGZjLCBcIkZTREFYIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuK1x0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xuK1x0XHRlcnJvcmZjKGZjLCBcInN1cGVyYmxvY2tfc2hhcmUgaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHQvKiBFeHRyYSBkZXZpY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIHN1cGVyYmxvY2sgc2hhcmluZy4gICovXG4rXHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2JpLVx1MDAzZWRldnMtXHUwMDNlZXh0cmFfZGV2aWNlcykge1xuK1x0XHRlcnJvcmZjKGZjLCBcInN1cGVyYmxvY2tfc2hhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRyYSBkZXZpY2VzXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiBcbiBcdHNiaS1cdTAwM2VibGtzemJpdHMgPSBQQUdFX1NISUZUO1xuIFx0aWYgKCFzYi1cdTAwM2VzX2JkZXYpIHtcbkBAIC03NzksNiArNzk3LDM2IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0LypcbitcdCAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB3aXRoIGEgc2JpIHRoYXRcbitcdCAqIGhhcyBTVVBFUkJMT0NLX1NIQVJFIHNldCwgc28gdGhhdCB0aGUgbWVtY21wIGxhdGVyIGVuc3VyZXNcbitcdCAqIG5ld19zYmkgYWxzbyBpcyBzaGFyZWFibGUuXG4rXHQgKi9cbitcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBFUk9GU19TQihzYik7XG4rXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqbmV3X3NiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbitcbitcdGlmIChzYi1cdTAwM2VzX2lmbGFncyBcdTAwMjYgU0JfSV9SRVRJUkVEKVxuK1x0XHRyZXR1cm4gMDtcbitcdGlmICghc2JpLVx1MDAzZWRpZjAuZmlsZSB8fCAhbmV3X3NiaS1cdTAwM2VkaWYwLmZpbGUpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSkgPT0gZmlsZV9pbm9kZShuZXdfc2JpLVx1MDAzZWRpZjAuZmlsZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgc2JpLVx1MDAzZWRpZjAuZnNvZmYgPT0gbmV3X3NiaS1cdTAwM2VkaWYwLmZzb2ZmIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICFtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbitcbitcdGlmICghdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkpXG4rXHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlciwgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIHtcbiBcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkgPSBmYy1cdTAwM2VzX2ZzX2luZm87XG5AQCAtNzk0LDcgKzg0Miw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0XHRcdGVycm9yZmMoZmMsIFwic291cmNlIGlzIHVuc3VwcG9ydGVkXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXHRcdHJldHVybiBlcm9mc19mY19nZXRfdHJlZV9maWxlKGZjKTtcbiBcdH1cbiBcbiBcdHJldCA9IGdldF90cmVlX2JkZXZfZmxhZ3MoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIsXG5AQCAtODEyLDcgKzg2MCw3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0XHRpZiAoU19JU1JFRyhmaWxlX2lub2RlKHNiaS1cdTAwM2VkaWYwLmZpbGUpLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBzYmktXHUwMDNlZGlmMC5maWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VyZWFkX2ZvbGlvKVxuLVx0XHRcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgZXJvZnNfZmNfZmlsbF9zdXBlcik7XG4rXHRcdFx0cmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpO1xuIFx0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtODI1LDYgKzg3MywxMCBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcbiBcdERCR19CVUdPTighc2JfcmRvbmx5KHNiKSk7XG4gXG4rXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbiBcdGlmIChuZXdfc2JpLVx1MDAzZWRvbWFpbl9pZClcbiBcdFx0ZXJvZnNfaW5mbyhzYiwgXCJpZ25vcmluZyByZWNvbmZpZ3VyYXRpb24gZm9yIGRvbWFpbl9pZC5cIik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDVmZWVjZjVkOTAzOGQuLjcxY2QyZGJhZGU1YjMgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMTM4OSw3ICsxMzg5LDE3IEBAIHN0YXRpYyBpbnQgdGVzdF9zaW5nbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCB2ZnNfZ2V0X3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbisvKipcbisgKiBnZXRfdHJlZV9zdXBlciAtIEdldCBhIHN1cGVyYmxvY2ssIG9wdGlvbmFsbHkgc2hhcmluZyBhbiBleGlzdGluZyBvbmVcbisgKiBAZmM6IFRoZSBmaWxlc3lzdGVtIGNvbnRleHQgaG9sZGluZyB0aGUgcGFyYW1ldGVyc1xuKyAqIEB0ZXN0OiBDb21wYXJpc29uIGZ1bmN0aW9uIHRvIGZpbmQgYSBtYXRjaGluZyBleGlzdGluZyBzdXBlcmJsb2NrLCBvciBOVUxMXG4rICogQGZpbGxfc3VwZXI6IEhlbHBlciB0byBpbml0aWFsaXNlIGEgbmV3IHN1cGVyYmxvY2tcbisgKlxuKyAqIElmIEB0ZXN0IGlzIG5vbi1OVUxMIGFuZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN1cGVyYmxvY2ssIHRoYXQgc3VwZXJibG9jayBpc1xuKyAqIHJldXNlZDsgb3RoZXJ3aXNlIGEgbmV3IGFub255bW91cyBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpc2VkIHdpdGhcbisgKiBAZmlsbF9zdXBlci4gIFBhc3NpbmcgTlVMTCBmb3IgQHRlc3QgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgc3VwZXJibG9jay5cbisgKi9cbitpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4gXHRcdGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHQgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG5AQCAtMTQxNiwxMiArMTQyNiwxMyBAQCBzdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zdXBlcik7XG4gXG4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuK1x0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBOVUxMLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9ub2Rldik7XG4gXG5AQCAtMTQyOSw3ICsxNDQwLDcgQEAgaW50IGdldF90cmVlX3NpbmdsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdCAgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKVxuIHtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X3NpbmdsZV9zdXBlciwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfdHJlZV9zaW5nbGUpO1xuIFxuQEAgLTE0MzksNyArMTQ1MCw3IEBAIGludCBnZXRfdHJlZV9rZXllZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdHZvaWQgKmtleSlcbiB7XG4gXHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBrZXk7XG4tXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX2tleWVkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaCBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5pbmRleCAwZDZjOGE2ZDdiZTIxLi5jOTIwYWJhNTE3N2MzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oXG5AQCAtMTUwLDYgKzE1MCwxMCBAQCBleHRlcm4gaW50IHZmc19wYXJzZV9mc19wYXJhbV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG4gZXh0ZXJuIHZvaWQgZmNfZHJvcF9sb2NrZWQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbiBcbitleHRlcm4gaW50IGdldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbitcdFx0XHQgaW50ICgqdGVzdCkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19jb250ZXh0ICopLFxuK1x0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiBleHRlcm4gaW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHQgaW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDoyNy4wMTMxMjUzMTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg4OTc3MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRVJPRlMgRmlsZXN5c3RlbSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIGVuYWJsZSBzdXBlcmJsb2NrIHNoYXJpbmcgd2hlbiB0aGUgc2FtZSBiYWNraW5nIGZpbGUgaXMgbW91bnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGNvbXBhdGlibGUgc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgYGZzL2Vyb2ZzL3N1cGVyLmNgLCBgZnMvZXJvZnMvaW50ZXJuYWwuaGAsIGBmcy9zdXBlci5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaGAuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpbiBgZnMvc3VwZXIuY2Agc2VlbXMgdG8gYmUgcmVuYW1pbmcgYHZmc19nZXRfc3VwZXJgIHRvIGBnZXRfdHJlZV9zdXBlcmAgYW5kIGV4cG9ydGluZyBpdC4gSW4gYGZzL2Vyb2ZzL3N1cGVyLmNgIHNwZWNpZmljYWxseSwgbmV3IGZ1bmN0aW9ucyBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgIGFyZSBhZGRlZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSwgYW5kIGlzIGl0IHdvcnRoIHRhcmdldGluZyB3aXRoIGZ1enppbmc/IERlZmluaXRlbHkuIEl0J3MgYSAqbmV3KiBtb3VudCBvcHRpb24gZm9yIEVST0ZTLiBNb3VudCBvcHRpb25zIGFyZSBwcmFjdGljYWxseSB0YWlsb3ItbWFkZSBmb3IgZnV6emluZyB3aXRoIHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4gVGhleSdyZSBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBmaWxlc3lzdGVtJ3MgYmVoYXZpb3IuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMuIENsZWFybHksIGBDT05GSUdfRVJPRlNfRlNgIGlzIHRoZSBiaWcgb25lIGZvciBlbmFibGluZyB0aGUgRVJPRlMgZmlsZXN5c3RlbSBpdHNlbGYuIFRoZSBwYXRjaCBjb2RlIGl0c2VsZiwgc3BlY2lmaWNhbGx5IHRoZSBjb2RlIHNuaXBwZXQgaW4gYGZzL2Vyb2ZzL3N1cGVyLmNgLCBpbmNsdWRlcyBhIGNoZWNrIGZvciBgQ09ORklHX0VST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYC4gVGhhdCdzIGltcG9ydGFudDsgaWYgdGhhdCBvcHRpb24gaXNuJ3QgZW5hYmxlZCwgdGhlIGBzdXBlcmJsb2NrX3NoYXJlYCBvcHRpb24gdGhyb3dzIGFuIGVycm9yLiBTbywgSSdsbCBuZWVkIHRvIGVuYWJsZSBib3RoIGBFUk9GU19GU2AgYW5kIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhpcyBmZWF0dXJlLlxuXG5GaW5hbGx5LCBJIHNob3VsZCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgZnMvZXJvZnMvS2NvbmZpZ2AgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCByZXF1aXJlbWVudHMgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcuIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMgYmVmb3JlIEkgc3RhcnQgY3JhZnRpbmcgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6MzQuMDAyMTA1MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNDk5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFUk9GU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL0tjb25maWctMi1cXG5mcy9lcm9mcy9LY29uZmlnOjM6Y29uZmlnIEVST0ZTX0ZTXFxuZnMvZXJvZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTQ5LVxcbmZzL2Vyb2ZzL0tjb25maWc6NTA6Y29uZmlnIEVST0ZTX0ZTX0RFQlVHXFxuZnMvZXJvZnMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJFUk9GUyBkZWJ1Z2dpbmcgZmVhdHVyZVxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctNTktXFxuZnMvZXJvZnMvS2NvbmZpZzo2MDpjb25maWcgRVJPRlNfRlNfWEFUVFJcXG5mcy9lcm9mcy9LY29uZmlnLTYxLVxcdGJvb2wgXFxcIkVST0ZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTcwLVxcbmZzL2Vyb2ZzL0tjb25maWc6NzE6Y29uZmlnIEVST0ZTX0ZTX1BPU0lYX0FDTFxcbmZzL2Vyb2ZzL0tjb25maWctNzItXFx0Ym9vbCBcXFwiRVJPRlMgQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTg0LVxcbmZzL2Vyb2ZzL0tjb25maWc6ODU6Y29uZmlnIEVST0ZTX0ZTX1NFQ1VSSVRZXFxuZnMvZXJvZnMvS2NvbmZpZy04Ni1cXHRib29sIFxcXCJFUk9GUyBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTk3LVxcbmZzL2Vyb2ZzL0tjb25maWc6OTg6Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXFxuZnMvZXJvZnMvS2NvbmZpZy05OS1cXHRib29sIFxcXCJGaWxlLWJhY2tlZCBFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTExMS1cXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMTMtXFx0Ym9vbCBcXFwiRVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiRVJPRlMgTFpNQSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTMzLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTM0OmNvbmZpZyBFUk9GU19GU19aSVBfTFpNQV9ERUZBVUxUX01BWF9TVFJFQU1TXFxuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXFx0aW50IFxcXCJFUk9GUyBMWk1BIGRlZmF1bHQgbWF4aW11bSBkZWNvbXByZXNzaW9uIHN0cmVhbXNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE0Ny1cXG5mcy9lcm9mcy9LY29uZmlnOjE0ODpjb25maWcgRVJPRlNfRlNfWklQX0RFRkxBVEVcXG5mcy9lcm9mcy9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJFUk9GUyBERUZMQVRFIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTgtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNTk6Y29uZmlnIEVST0ZTX0ZTX1pJUF9aU1REXFxuZnMvZXJvZnMvS2NvbmZpZy0xNjAtXFx0Ym9vbCBcXFwiRVJPRlMgWnN0YW5kYXJkIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNjktXFxuZnMvZXJvZnMvS2NvbmZpZzoxNzA6Y29uZmlnIEVST0ZTX0ZTX1pJUF9BQ0NFTFxcbmZzL2Vyb2ZzL0tjb25maWctMTcxLVxcdGJvb2wgXFxcIkVST0ZTIGhhcmR3YXJlIGRlY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTgzLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTg0OmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURcXG5mcy9lcm9mcy9LY29uZmlnLTE4NS1cXHRib29sIFxcXCJFUk9GUyBwZXItY3B1IGRlY29tcHJlc3Npb24ga3RocmVhZCB3b3JrZXJzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xOTItXFxuZnMvZXJvZnMvS2NvbmZpZzoxOTM6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRF9ISVBSSVxcbmZzL2Vyb2ZzL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIkVST0ZTIGhpZ2ggcHJpb3JpdHkgcGVyLUNQVSBrdGhyZWFkIHdvcmtlcnNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTIwMi1cXG5mcy9lcm9mcy9LY29uZmlnOjIwMzpjb25maWcgRVJPRlNfRlNfUEFHRV9DQUNIRV9TSEFSRVxcbmZzL2Vyb2ZzL0tjb25maWctMjA0LVxcdGJvb2wgXFxcIkVST0ZTIHBhZ2UgY2FjaGUgc2hhcmUgc3VwcG9ydCAoZXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6MzQuMTEyNjA4NzQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczMDI0NTE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAuIEJlZm9yZSBJIGV2ZW4gdG91Y2ggYW55dGhpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUuIExldCdzIHN0YXJ0IHdpdGggYSBkZXBlbmRlbmN5IGFuYWx5c2lzIG9mIGBFUk9GU19GU19CQUNLRURfQllfRklMRWAuIFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGhpbmdlIG9uIHRoaXMgb25lPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gaW1wYWN0cyBJIG5lZWQgdG8gY29uc2lkZXI/IFdoYXQgZG9lcyB0aGlzIGVuYWJsZSBvciBkaXNhYmxlLCBhbmQgaG93IGRvZXMgdGhhdCBhZmZlY3QgdGhlIG92ZXJhbGwgc3lzdGVtIGZ1bmN0aW9uYWxpdHk/IEknbGwgcHJvYmFibHkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbSBhbmQgY3Jvc3MtcmVmZXJlbmNlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGUgc3RhYmlsaXR5IGFuZCBpbXBhY3Qgb2YgdGhpcyBjb25maWcgb3B0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGNoYW5naW5nIHRoaXMgZG9lc24ndCBhY2NpZGVudGFsbHkgYnJlYWsgc29tZXRoaW5nIGVsc2UgZG93biB0aGUgbGluZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggZmVhdHVyZXMgaXQgZW5hYmxlcyBhbmQgZGlzYWJsZXMuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCBpcyBjb25uZWN0ZWQgdG8uIExldCdzIGRvIHRoaXMgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDozNy44NDI4NTYwNjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9lcm9mcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSwgc2F5IE4uXFxuICA5NzpcXHRcXG4gIDk4OlxcdGNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxcbiAgOTk6XFx0XFx0Ym9vbCBcXFwiRmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbiAxMDA6XFx0XFx0ZGVwZW5kcyBvbiBFUk9GU19GU1xcbiAxMDE6XFx0XFx0ZGVmYXVsdCB5XFxuIDEwMjpcXHRcXHRoZWxwXFxuIDEwMzpcXHRcXHQgIFRoaXMgYWxsb3dzIEVST0ZTIHRvIHVzZSBmaWxlc3lzdGVtIGltYWdlIGZpbGVzIGRpcmVjdGx5LCB3aXRob3V0XFxuIDEwNDpcXHRcXHQgIHRoZSBpbnRlcmNlc3Npb24gb2YgbG9vcGJhY2sgYmxvY2sgZGV2aWNlcyBvciBsaWtld2lzZS4gSXQgaXNcXG4gMTA1OlxcdFxcdCAgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY29udGFpbmVyIGltYWdlcyB3aXRoIG51bWVyb3VzIGJsb2JzIGFuZFxcbiAxMDY6XFx0XFx0ICBvdGhlciBzYW5kYm94ZXMsIHdoZXJlIGxvb3AgZGV2aWNlcyBiZWhhdmUgaW50cmljYXRlbHkuICBJdCBjYW4gYWxzb1xcbiAxMDc6XFx0XFx0ICBiZSB1c2VkIHRvIHNpbXBsaWZ5IGVycm9yLXByb25lIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgdW5uZWNlc3NhcnlcXG4gMTA4OlxcdFxcdCAgdmlydHVhbCBibG9jayBkZXZpY2VzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQgIElmIHlvdSBkb24ndCB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUsIHNheSBOLlxcbiAxMTE6XFx0XFxuIDExMjpcXHRjb25maWcgRVJPRlNfRlNfWklQXFxuIDExMzpcXHRcXHRib29sIFxcXCJFUk9GUyBEYXRhIENvbXByZXNzaW9uIFN1cHBvcnRcXFwiXFxuIDExNDpcXHRcXHRkZXBlbmRzIG9uIEVST0ZTX0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMwOjM3Ljg0Mjk1MDk0MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjMwOTE0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipBbmFseXppbmcgRVJPRlMgYW5kIEl0cyBGaWxlLUJhY2tlZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCBpcywgYXMgSSBzdXNwZWN0ZWQsIGNvbnRpbmdlbnQgb24gdGhlIGNvcmUgYEVST0ZTX0ZTYCBmdW5jdGlvbmFsaXR5LiBUaGF0IG1ha2VzIHNlbnNlLCBhIGZpbGUtYmFja2VkIHN5c3RlbSBidWlsZHMgb24gdGhlIGZvdW5kYXRpb25zIG9mIHRoZSBiYXNpYyBFUk9GUyBzdHJ1Y3R1cmUuXG5cbk5vdywgSSBuZWVkIHRvIHNlZSB3aGF0J3MgY2hhbmdlZCBvciBiZWVuIGFkZGVkIHRvIGFjY29tbW9kYXRlIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gTGV0J3MgbGlzdCB0aG9zZSBmdW5jdGlvbnM6IGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgLCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAsIGFuZCBgZ2V0X3RyZWVfc3VwZXJgLiBUaGUgbGFzdCBvbmUsIGBnZXRfdHJlZV9zdXBlcmAsIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgZXhwb3J0ZWQgZnJvbSBgZnMvc3VwZXIuY2AuIFRoYXQgaGludHMgYXQgYSBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnQgd2l0aCB0aGUgY29yZSBWRlMgc3VwZXIgYmxvY2sgbWFuYWdlbWVudC5cblxuSSdsbCBzaGlmdCBteSBhdHRlbnRpb24gdG8gYGZzL3N1cGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgYGdldF90cmVlX3N1cGVyYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgbGV2ZXJhZ2VkLCBvciBwb3RlbnRpYWxseSBleHRlbmRlZCwgd2l0aGluIHRoaXMgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCBjb250ZXh0LiBUaGF0IHdpbGwgbGlrZWx5IHByb3ZpZGUgaW5zaWdodCBpbnRvIGhvdyB0aGUgZmlsZS1iYWNrZWQgRVJPRlMgaXMgbW91bnRpbmcgYW5kIGludGVncmF0aW5nIHdpdGggdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDU5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDo0Mi4xNjYwNDQ5MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3MTI2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3RyZWVfc3VwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zdXBlci5jPTEzODc9c3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3N1cGVyLmMtMTM5Mi0vKipcXG5mcy9zdXBlci5jOjEzOTM6ICogZ2V0X3RyZWVfc3VwZXIgLSBHZXQgYSBzdXBlcmJsb2NrLCBvcHRpb25hbGx5IHNoYXJpbmcgYW4gZXhpc3Rpbmcgb25lXFxuZnMvc3VwZXIuYy0xMzk0LSAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXFxuLS1cXG5mcy9zdXBlci5jLTE0MDEtICovXFxuZnMvc3VwZXIuYzoxNDAyOmludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuZnMvc3VwZXIuYy0xNDAzLVxcdFxcdGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcXG4tLVxcbmZzL3N1cGVyLmMtMTQyOC19XFxuZnMvc3VwZXIuYzoxNDI5OkVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfc3VwZXIpO1xcbmZzL3N1cGVyLmMtMTQzMC1cXG5mcy9zdXBlci5jPTE0MzE9aW50IGdldF90cmVlX25vZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcbmZzL3N1cGVyLmMtMTQzNC17XFxuZnMvc3VwZXIuYzoxNDM1OlxcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XFxuZnMvc3VwZXIuYy0xNDM2LX1cXG4tLVxcbmZzL3N1cGVyLmM9MTQzOT1pbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcbmZzL3N1cGVyLmMtMTQ0Mi17XFxuZnMvc3VwZXIuYzoxNDQzOlxcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbmZzL3N1cGVyLmMtMTQ0NC19XFxuLS1cXG5mcy9zdXBlci5jPTE0NDc9aW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4tLVxcbmZzL3N1cGVyLmMtMTQ1Mi1cXHRmYy1cXHUwMDNlc19mc19pbmZvID0ga2V5O1xcbmZzL3N1cGVyLmM6MTQ1MzpcXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIHRlc3Rfa2V5ZWRfc3VwZXIsIGZpbGxfc3VwZXIpO1xcbmZzL3N1cGVyLmMtMTQ1NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMwOjQyLjIyNzc2MTY1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjY5ODE2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVST0ZTIEZpbGVzeXN0ZW0gTW91bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIEVST0ZTIGZpbGVzeXN0ZW0gbW91bnRzLCBhbmQgSSdtIGJyZWFraW5nIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZS4gYGdldF90cmVlX3N1cGVyYCBzZWVtcyB0byBiZSBhIGdlbmVyYWwgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKSBmdW5jdGlvbiwgbm90aGluZyBwYXJ0aWN1bGFybHkgRVJPRlMtc3BlY2lmaWMgYWJvdXQgdGhhdC4gTXkgcmVhbCBpbnRlcmVzdCBsaWVzIGluIGhvdyBFUk9GUyBob29rcyBpbnRvIHRoaXMgZ2VuZXJhbCBmcmFtZXdvcmsuIEl0J3MgY2xlYXIgdGhhdCBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgIGFyZSB0aGUgRVJPRlMtc3BlY2lmaWMgcGllY2VzIHRoYXQgYWN0dWFsbHkgaGFuZGxlIHRoZSBmaWxlIHN5c3RlbSdzIGRldGFpbHMuIEFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVgIGxvb2tzIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IOKAkyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1vdW50aW5nIEVST0ZTIHZvbHVtZXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZnMvZXJvZnMvc3VwZXIuY2AsIGFzIHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZXNlIHR3byBFUk9GUy1zcGVjaWZpYyBmdW5jdGlvbnMsIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIGFuZCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAsIGluIGRldGFpbC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBhcnRzIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgZ2VuZXJpYyBWRlMgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDo0Ni42NTQ3NDg3NDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMTk2NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL3N1cGVyLmM9NjQzPXN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTc5OS1cXG5mcy9lcm9mcy9zdXBlci5jOjgwMDpzdGF0aWMgaW50IGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2Vyb2ZzL3N1cGVyLmMtODAxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTgyMD1zdGF0aWMgaW50IGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy04MjYtXFxuZnMvZXJvZnMvc3VwZXIuYzo4Mjc6XFx0cmV0dXJuIGdldF90cmVlX3N1cGVyKGZjLCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtODI4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6NDYuNzI3OTUxNTY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0Nzk3NDY0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRVJPRlMgRmlsZXN5c3RlbSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgYHN1cGVyYmxvY2tfc2hhcmVgIG1vdW50IG9wdGlvbiBmb3IgdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbGxvd2luZyBmb3Igc2hhcmVkIHN1cGVyYmxvY2tzIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMsIHdoaWNoIGlzIGEgbmVhdCBvcHRpbWl6YXRpb24sIGlmIGl0IHdvcmtzIGNvcnJlY3RseS5cblxuVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMgYXJlIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgLCBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAsIGFuZCBgZ2V0X3RyZWVfc3VwZXJgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGlzIGludGVncmF0ZWQgaW50byB0aGUgY29yZSBtb3VudCBwcm9jZXNzIG9mIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5Ob3csIGFzIGZhciBhcyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgRVJPRlNfRlNgIGFuZCBgRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVgLiBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIFl1cCwgYEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFYCBkZXBlbmRzIG9uIGBFUk9GU19GU2AsIGJ1dCBub3RoaW5nIGVsc2Ugc2VlbXMgcmVsZXZhbnQuIFRob3NlIHR3byBzaG91bGQgY292ZXIgd2hhdCdzIG5lZWRlZCB0byB0ZXN0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLiBJIGRvbid0IHNlZSBhbnkgb3RoZXIgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXQgYSBnbGFuY2UsIHNvIHRob3NlIHNlZW0gc3VmZmljaWVudC5cblxuRnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUsIHRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZmlsZXN5c3RlbSBtb3VudCBwYXRoLCBhbmQgaXTigJlzIHJlYWNoYWJsZSwgbWVhbmluZyBpdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIG1vdW50aW5nLiBHaXZlbiB0aGF0IGl0J3MgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIG1vdW50IHByb2Nlc3MsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzLiBUaGUgbmV3IG1vdW50IG9wdGlvbiBhbmQgcmVsYXRlZCBsb2dpYyBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk3NCwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6NTMuMjA3NzAyMTk4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDYyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVcIixcbiAgICBcImdldF90cmVlX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgc3VwZXJibG9jayBzaGFyaW5nIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbW91bnQgbG9naWMgZm9yIEVST0ZTIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJcIixcbiAgICBcImVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVcIixcbiAgICBcImdldF90cmVlX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSwgYWxsb3dpbmcgc3VwZXJibG9jayBzaGFyaW5nIHdoZW4gdGhlIHNhbWUgYmFja2luZyBmaWxlIGlzIG1vdW50ZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbW91bnQgbG9naWMgZm9yIEVST0ZTIGFuZCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCBhbmQgYGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGZpbGVzeXN0ZW0gbW91bnQgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6NTMuMzI5NzcwOTk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4MzE0OTM2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMDo1My4zMzAzMzQzMjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA1ODMwOTI0OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiBgc3VwZXJibG9ja19zaGFyZWAgZm9yIEVST0ZTIGZpbGUtYmFja2VkIG1vdW50cyBhbmQgYWRkcyBsb2dpYyB0byBzaGFyZSBzdXBlcmJsb2NrcyB3aGVuIGNvbXBhdGlibGUgb3B0aW9ucyBhcmUgdXNlZC4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgdXNlcyBgbWVtY21wYCB0byBjb21wYXJlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AuIFdoaWxlIHRoaXMgc3RydWN0IGNvbnRhaW5zIHBhZGRpbmcsIGluc3RhbmNlcyBvZiBpdCBhcmUgZW1iZWRkZWQgd2l0aGluIGBzdHJ1Y3QgZXJvZnNfc2JfaW5mb2AsIHdoaWNoIGlzIGFsd2F5cyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCAoaW4gYGVyb2ZzX2luaXRfZnNfY29udGV4dGApLiBDb25zZXF1ZW50bHksIHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYW5kIHJlbWFpbnMgemVybywgbWVhbmluZyBgbWVtY21wYCBzYWZlbHkgcmVhZHMgaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhvdXQgdHJpZ2dlcmluZyBLTVNBTiBvciBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvci5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIHNoYXJpbmcpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjFmZTQ0NmFmMzVkZTkzMTdmYzQ2MjIyZWYyNDBkZjA2OThlNzAzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjMwOjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lcm9mcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuaW5kZXggZDMwMWQ5YWM5NDZhOS4uNDljNGU3ZGJjNWQ2MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXJvZnMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Vyb2ZzLnJzdFxuQEAgLTEzOSw2ICsxMzksOSBAQCBpbm9kZV9zaGFyZSAgICAgICAgICAgIEVuYWJsZSBpbm9kZSBwYWdlIHNoYXJpbmcgZm9yIHRoaXMgZmlsZXN5c3RlbS4gIElub2RlcyB3aVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSBjYWNoZS5cbiBzb3VyY2U9JXMgICAgICAgICAgICAgIChGb3IgZmlsZS1iYWNrZWQgbW91bnRzKSBTcGVjaWZ5IHRoZSBiYWNraW5nIGltYWdlIGFzIGEgcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXMgYW4gYWxyZWFkeS1vcGVuZWQgZmlsZSBkZXNjcmlwdG9yLlxuK3N1cGVyYmxvY2tfc2hhcmUgICAgICAgKEZvciBmaWxlLWJhY2tlZCBtb3VudHMpIFNoYXJlIHRoZSBzdXBlcmJsb2NrIHdoZW4gdGhlIHNhbWVcbisgICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmcgZmlsZSBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggY29tcGF0aWJsZVxuKyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuID09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gRmlsZS1iYWNrZWQgbW91bnRzXG5AQCAtMTU2LDYgKzE1OSwxMSBAQCBPbmx5IHJlZ3VsYXIgZmlsZXMgYXJlIGFjY2VwdGVkIGFzIGJhY2tpbmcgZmlsZXM7IHRvIG1vdW50IGFuIGltYWdlIHRoYXRcbiByZXNpZGVzIG9uIGEgYmxvY2sgZGV2aWNlLCB1c2UgdGhlIHRyYWRpdGlvbmFsIGJsb2NrIGRldmljZSBtb3VudCBwYXRoXG4gaW5zdGVhZC5cbiBcbitXaGVuIHN1cGVyYmxvY2tfc2hhcmUgaXMgc3BlY2lmaWVkIGFuZCB0aGUgc2FtZSBiYWNraW5nIGZpbGUgKGlkZW50aWZpZWRcbitieSBpbm9kZSBhbmQgZnNvZmZzZXQpIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBjb21wYXRpYmxlIG1vdW50XG4rb3B0aW9ucywgdGhlIGtlcm5lbCByZXVzZXMgdGhlIGV4aXN0aW5nIHN1cGVyYmxvY2sgaW5zdGVhZCBvZiBjcmVhdGluZyBhXG4rbmV3IG9uZS4gIFJlbW91bnQgaXMgbm90IGFsbG93ZWQgb24gc2hhcmVkIHN1cGVyYmxvY2tzLlxuK1xuIFN5c2ZzIEVudHJpZXNcbiA9PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbmluZGV4IDU3YmQyMTg1OWM2NWQuLjg2ZGEyMTlmOGY0ZWMgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5AQCAtMTU2LDYgKzE1Niw3IEBAIHN0cnVjdCBlcm9mc19zYl9pbmZvIHtcbiAjZGVmaW5lIEVST0ZTX01PVU5UX0RBWF9ORVZFUlx0XHQweDAwMDAwMDgwXG4gI2RlZmluZSBFUk9GU19NT1VOVF9ESVJFQ1RfSU9cdFx0MHgwMDAwMDEwMFxuICNkZWZpbmUgRVJPRlNfTU9VTlRfSU5PREVfU0hBUkVcdFx0MHgwMDAwMDIwMFxuKyNkZWZpbmUgRVJPRlNfTU9VTlRfU1VQRVJCTE9DS19TSEFSRVx0MHgwMDAwMDQwMFxuIFxuICNkZWZpbmUgY2xlYXJfb3B0KG9wdCwgb3B0aW9uKVx0KChvcHQpLVx1MDAzZW1vdW50X29wdCBcdTAwMjY9IH5FUk9GU19NT1VOVF8jI29wdGlvbilcbiAjZGVmaW5lIHNldF9vcHQob3B0LCBvcHRpb24pXHQoKG9wdCktXHUwMDNlbW91bnRfb3B0IHw9IEVST0ZTX01PVU5UXyMjb3B0aW9uKVxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL3N1cGVyLmMgYi9mcy9lcm9mcy9zdXBlci5jXG5pbmRleCBkZGM5NzE5ZTZkMThlLi40NTdlMDY3NDQ3ZDVmIDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvc3VwZXIuY1xuKysrIGIvZnMvZXJvZnMvc3VwZXIuY1xuQEAgLTM4Niw3ICszODYsNyBAQCBzdGF0aWMgdm9pZCBlcm9mc19kZWZhdWx0X29wdGlvbnMoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSlcbiBlbnVtIHtcbiBcdE9wdF91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfY2FjaGVfc3RyYXRlZ3ksIE9wdF9kYXgsIE9wdF9kYXhfZW51bSxcbiBcdE9wdF9kZXZpY2UsIE9wdF9kb21haW5faWQsIE9wdF9kaXJlY3RpbywgT3B0X2Zzb2Zmc2V0LCBPcHRfaW5vZGVfc2hhcmUsXG4tXHRPcHRfc291cmNlLFxuK1x0T3B0X3NvdXJjZSwgT3B0X3N1cGVyYmxvY2tfc2hhcmUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN0YW50X3RhYmxlIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W10gPSB7XG5AQCAtNDE1LDYgKzQxNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXJvZnNfZnNfcGFyYW1ldGVyc1tdID0ge1xuIFx0ZnNwYXJhbV91NjQoXCJmc29mZnNldFwiLFx0XHRcdE9wdF9mc29mZnNldCksXG4gXHRmc3BhcmFtX2ZsYWcoXCJpbm9kZV9zaGFyZVwiLFx0XHRPcHRfaW5vZGVfc2hhcmUpLFxuIFx0ZnNwYXJhbV9maWxlX29yX3N0cmluZyhcInNvdXJjZVwiLFx0T3B0X3NvdXJjZSksXG4rXHRmc3BhcmFtX2ZsYWcoXCJzdXBlcmJsb2NrX3NoYXJlXCIsXHRPcHRfc3VwZXJibG9ja19zaGFyZSksXG4gXHR7fVxuIH07XG4gXG5AQCAtNTYwLDYgKzU2MSwxMiBAQCBzdGF0aWMgaW50IGVyb2ZzX2ZjX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ZWxzZVxuIFx0XHRcdHNldF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgT3B0X3N1cGVyYmxvY2tfc2hhcmU6XG4rXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfQkFDS0VEX0JZX0ZJTEUpKVxuK1x0XHRcdGVycm9yZmMoZmMsIFwiJXMgb3B0aW9uIG5vdCBzdXBwb3J0ZWRcIiwgZXJvZnNfZnNfcGFyYW1ldGVyc1tvcHRdLm5hbWUpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2V0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE9wdF9zb3VyY2U6XG4gXHRcdHJldHVybiBlcm9mc19mY19wYXJzZV9zb3VyY2UoZmMsIHBhcmFtKTtcbiBcdH1cbkBAIC02NTIsNiArNjU5LDE3IEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdGVycm9yZmMoZmMsIFwiRlNEQVggaXMgbm90IGFsbG93ZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4rXHRpZiAodGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgU1VQRVJCTE9DS19TSEFSRSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGVzdF9vcHQoXHUwMDI2c2JpLVx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XG4rXHRcdGVycm9yZmMoZmMsIFwic3VwZXJibG9ja19zaGFyZSBpcyBub3QgYWxsb3dlZCB3aGVuIGlub2RlX3NoYXJlIGlzIG9uXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdC8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi9cbitcdGlmICh0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcdTAwMjZcdTAwMjZcbitcdCAgICBzYmktXHUwMDNlZGV2cy1cdTAwM2VleHRyYV9kZXZpY2VzKSB7XG4rXHRcdGVycm9yZmMoZmMsIFwic3VwZXJibG9ja19zaGFyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGRldmljZXNcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuIFx0c2JpLVx1MDAzZWJsa3N6Yml0cyA9IFBBR0VfU0hJRlQ7XG4gXHRpZiAoIXNiLVx1MDAzZXNfYmRldikge1xuQEAgLTc3OSw2ICs3OTcsMzYgQEAgc3RhdGljIGludCBlcm9mc19mY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHQvKlxuK1x0ICogVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHdpdGggYSBzYmkgdGhhdFxuK1x0ICogaGFzIFNVUEVSQkxPQ0tfU0hBUkUgc2V0LCBzbyB0aGF0IHRoZSBtZW1jbXAgbGF0ZXIgZW5zdXJlc1xuK1x0ICogbmV3X3NiaSBhbHNvIGlzIHNoYXJlYWJsZS5cbitcdCAqL1xuK1x0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHNiKTtcbitcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpuZXdfc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0aWYgKHNiLVx1MDAzZXNfaWZsYWdzIFx1MDAyNiBTQl9JX1JFVElSRUQpXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKCFzYmktXHUwMDNlZGlmMC5maWxlIHx8ICFuZXdfc2JpLVx1MDAzZWRpZjAuZmlsZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZmlsZV9pbm9kZShzYmktXHUwMDNlZGlmMC5maWxlKSA9PSBmaWxlX2lub2RlKG5ld19zYmktXHUwMDNlZGlmMC5maWxlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBzYmktXHUwMDNlZGlmMC5mc29mZiA9PSBuZXdfc2JpLVx1MDAzZWRpZjAuZnNvZmYgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIW1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKTtcbit9XG4rXG4rc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbit7XG4rXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0aWYgKCF0ZXN0X29wdChcdTAwMjZzYmktXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcbitcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbit9XG4rXG4gc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4ge1xuIFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IGZjLVx1MDAzZXNfZnNfaW5mbztcbkBAIC03OTQsNyArODQyLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdFx0ZXJyb3JmYyhmYywgXCJzb3VyY2UgaXMgdW5zdXBwb3J0ZWRcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcdFx0cmV0dXJuIGVyb2ZzX2ZjX2dldF90cmVlX2ZpbGUoZmMpO1xuIFx0fVxuIFxuIFx0cmV0ID0gZ2V0X3RyZWVfYmRldl9mbGFncyhmYywgZXJvZnNfZmNfZmlsbF9zdXBlcixcbkBAIC04MTIsNyArODYwLDcgQEAgc3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXG4gXHRcdGlmIChTX0lTUkVHKGZpbGVfaW5vZGUoc2JpLVx1MDAzZWRpZjAuZmlsZSktXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHNiaS1cdTAwM2VkaWYwLmZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXJlYWRfZm9saW8pXG4tXHRcdFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBlcm9mc19mY19maWxsX3N1cGVyKTtcbitcdFx0XHRyZXR1cm4gZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZShmYyk7XG4gXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjUsNiArODczLDEwIEBAIHN0YXRpYyBpbnQgZXJvZnNfZmNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFxuIFx0REJHX0JVR09OKCFzYl9yZG9ubHkoc2IpKTtcbiBcbitcdC8qIFNoYXJlZCBzdXBlcmJsb2NrcyBtdXN0IG5vdCBiZSByZWNvbmZpZ3VyZWQuICAqL1xuK1x0aWYgKHRlc3Rfb3B0KFx1MDAyNnNiaS1cdTAwM2VvcHQsIFNVUEVSQkxPQ0tfU0hBUkUpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0aWYgKG5ld19zYmktXHUwMDNlZG9tYWluX2lkKVxuIFx0XHRlcm9mc19pbmZvKHNiLCBcImlnbm9yaW5nIHJlY29uZmlndXJhdGlvbiBmb3IgZG9tYWluX2lkLlwiKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggNWZlZWNmNWQ5MDM4ZC4uNzFjZDJkYmFkZTViMyAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0xMzg5LDcgKzEzODksMTcgQEAgc3RhdGljIGludCB0ZXN0X3NpbmdsZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZmc19nZXRfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuKy8qKlxuKyAqIGdldF90cmVlX3N1cGVyIC0gR2V0IGEgc3VwZXJibG9jaywgb3B0aW9uYWxseSBzaGFyaW5nIGFuIGV4aXN0aW5nIG9uZVxuKyAqIEBmYzogVGhlIGZpbGVzeXN0ZW0gY29udGV4dCBob2xkaW5nIHRoZSBwYXJhbWV0ZXJzXG4rICogQHRlc3Q6IENvbXBhcmlzb24gZnVuY3Rpb24gdG8gZmluZCBhIG1hdGNoaW5nIGV4aXN0aW5nIHN1cGVyYmxvY2ssIG9yIE5VTExcbisgKiBAZmlsbF9zdXBlcjogSGVscGVyIHRvIGluaXRpYWxpc2UgYSBuZXcgc3VwZXJibG9ja1xuKyAqXG4rICogSWYgQHRlc3QgaXMgbm9uLU5VTEwgYW5kIG1hdGNoZXMgYW4gZXhpc3Rpbmcgc3VwZXJibG9jaywgdGhhdCBzdXBlcmJsb2NrIGlzXG4rICogcmV1c2VkOyBvdGhlcndpc2UgYSBuZXcgYW5vbnltb3VzIHN1cGVyYmxvY2sgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGlzZWQgd2l0aFxuKyAqIEBmaWxsX3N1cGVyLiAgUGFzc2luZyBOVUxMIGZvciBAdGVzdCBhbHdheXMgY3JlYXRlcyBhIG5ldyBzdXBlcmJsb2NrLlxuKyAqL1xuK2ludCBnZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcbiBcdFx0aW50ICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRcdCAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbkBAIC0xNDE2LDEyICsxNDI2LDEzIEBAIHN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbitFWFBPUlRfU1lNQk9MKGdldF90cmVlX3N1cGVyKTtcbiBcbiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHQgIGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IGZzX2NvbnRleHQgKmZjKSlcbiB7XG4tXHRyZXR1cm4gdmZzX2dldF9zdXBlcihmYywgTlVMTCwgZmlsbF9zdXBlcik7XG4rXHRyZXR1cm4gZ2V0X3RyZWVfc3VwZXIoZmMsIE5VTEwsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX25vZGV2KTtcbiBcbkBAIC0xNDI5LDcgKzE0NDAsNyBAQCBpbnQgZ2V0X3RyZWVfc2luZ2xlKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0ICBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpXG4ge1xuLVx0cmV0dXJuIHZmc19nZXRfc3VwZXIoZmMsIHRlc3Rfc2luZ2xlX3N1cGVyLCBmaWxsX3N1cGVyKTtcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9zaW5nbGVfc3VwZXIsIGZpbGxfc3VwZXIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF90cmVlX3NpbmdsZSk7XG4gXG5AQCAtMTQzOSw3ICsxNDUwLDcgQEAgaW50IGdldF90cmVlX2tleWVkKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0dm9pZCAqa2V5KVxuIHtcbiBcdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGtleTtcbi1cdHJldHVybiB2ZnNfZ2V0X3N1cGVyKGZjLCB0ZXN0X2tleWVkX3N1cGVyLCBmaWxsX3N1cGVyKTtcbitcdHJldHVybiBnZXRfdHJlZV9zdXBlcihmYywgdGVzdF9rZXllZF9zdXBlciwgZmlsbF9zdXBlcik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZ2V0X3RyZWVfa2V5ZWQpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbmluZGV4IDBkNmM4YTZkN2JlMjEuLmM5MjBhYmE1MTc3YzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX2NvbnRleHQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mc19jb250ZXh0LmhcbkBAIC0xNTAsNiArMTUwLDEwIEBAIGV4dGVybiBpbnQgdmZzX3BhcnNlX2ZzX3BhcmFtX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKTtcbiBleHRlcm4gdm9pZCBmY19kcm9wX2xvY2tlZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIFxuK2V4dGVybiBpbnQgZ2V0X3RyZWVfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuK1x0XHRcdCBpbnQgKCp0ZXN0KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGZzX2NvbnRleHQgKiksXG4rXHRcdFx0IGludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBmc19jb250ZXh0ICpmYykpO1xuIGV4dGVybiBpbnQgZ2V0X3RyZWVfbm9kZXYoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0XHRcdCBpbnQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMwOjUzLjMzMDMzNzUzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjk0NDQ3NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVST0ZTIE1vdW50IE9wdGlvbiBDb25jZXJuKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vdW50IG9wdGlvbiwgYHN1cGVyYmxvY2tfc2hhcmVgLCBmb3IgRVJPRlMgZmlsZS1iYWNrZWQgbW91bnRzLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBpdCBtb2RpZmllcyBgZnMvZXJvZnMvc3VwZXIuY2AgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIG9mIHRoaXMgbmV3IG9wdGlvbiBhbmQsIGNydWNpYWxseSwgdG8gc3dpdGNoIGZyb20gdXNpbmcgYGdldF90cmVlX25vZGV2KClgIHRvIGBnZXRfdHJlZV9zdXBlcigpYCB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gVGhlIHBhdGNoIGFsc28gZXhwb3NlcyBgZ2V0X3RyZWVfc3VwZXIoKWAgZnJvbSBgZnMvc3VwZXIuY2AsIHJlbmFtaW5nIHRoZSBleGlzdGluZyBgdmZzX2dldF9zdXBlcmAgdG8gYGdldF90cmVlX3N1cGVyYCBpbiB0aGUgcHJvY2Vzcy4gSSBzZWUgdGhhdCB0aGUgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgZnVuY3Rpb24gbm93IGNvbXBhcmVzIHRoZSBgc2JpLVx1MDAzZW9wdGAgYW5kIGBuZXdfc2JpLVx1MDAzZW9wdGAgc3RydWN0dXJlcyB1c2luZyBgbWVtY21wYC5cblxuKldhaXQgYSBzZWNvbmQuLi4qIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgPyBUaGF0IGNvbXBhcmlzb24ncyBnb3QgbXkgYXR0ZW50aW9uLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgYHNiaS1cdTAwM2VvcHRgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgaWYgdGhlcmUncyBhbnkgcGFkZGluZyB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIEEgYnl0ZS13aXNlIGNvbXBhcmlzb24gbGlrZSB0aGF0IGlzIGFsd2F5cyBhIGJpdCByaXNreSBpZiB5b3UncmUgbm90IGFic29sdXRlbHkgY2VydGFpbiBhYm91dCB0aGUgY29udGVudHMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGluIGBmcy9lcm9mcy9pbnRlcm5hbC5oYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgZ290Y2hhcyB0aGVyZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBldmVyeXRoaW5nIGluIGBzYmktXHUwMDNlb3B0YCBpcyBpbml0aWFsaXplZCB0byBhIHJlbGlhYmxlIHZhbHVlIGFuZCB0aGF0IHRoZXJlIGlzbid0IGFueSB1bmRlZmluZWQgcGFkZGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlIGBtZW1jbXBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzA6NTguNjI0Nzg3OTUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODUwODYxOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBlcm9mc19tb3VudF9vcHRzIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL2ludGVybmFsLmg9NTQ9ZW51bSB7XFxuLS1cXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTU5LVxcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NjA6c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xcbmZzL2Vyb2ZzL2ludGVybmFsLmgtNjEtXFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzE6MDEuNDc1NjcwNzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MzU0MTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZXJvZnMvaW50ZXJuYWwuaGAqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgRVJPRlMgaXMgc3RydWN0dXJlZCBpbnRlcm5hbGx5LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZnMvZXJvZnMvaW50ZXJuYWwuaGAgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIGxvb2tpbmcgYXJvdW5kIGxpbmUgNjAgbWlnaHQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBzb21lIG9mIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBkZWZpbml0aW9ucyB0aGVyZSB0aGF0IGFyZSBjcml0aWNhbCB0byB0aGUgZmlsZSBzeXN0ZW0ncyBvcGVyYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcywgcGVyaGFwcyBmb2N1c2luZyBvbiB0aGUgY3JpdGljYWwgZGF0YXR5cGVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgaGVhZGVyIGZpbGUsIGVzcGVjaWFsbHkgbmVhciB0aGF0IGxpbmUsIHdpbGwgbGlrZWx5IGdpdmUgbWUgaW5zaWdodHMgaW50byBob3cgdGhlIEVST0ZTIGxheWVyIGludGVyYWN0cyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFuZCwgdWx0aW1hdGVseSwgaG93IGl0IG1hbmFnZXMgaXRzIHJlYWQtb25seSBuYXR1cmUgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTowNC42MjkyMTM5MDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXJvZnMvaW50ZXJuYWwuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NDpcXHRlbnVtIHtcXG4gIDU1OlxcdFxcdEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPLFxcbiAgNTY6XFx0XFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09OLFxcbiAgNTc6XFx0XFx0RVJPRlNfU1lOQ19ERUNPTVBSRVNTX0ZPUkNFX09GRlxcbiAgNTg6XFx0fTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xcbiAgNjE6XFx0XFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cXG4gIDYyOlxcdFxcdHVuc2lnbmVkIGNoYXIgY2FjaGVfc3RyYXRlZ3k7XFxuICA2MzpcXHRcXHR1bnNpZ25lZCBpbnQgbW91bnRfb3B0O1xcbiAgNjQ6XFx0fTtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0c3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0IHtcXG4gIDY3OlxcdFxcdHN0cnVjdCBpZHIgdHJlZTtcXG4gIDY4OlxcdFxcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdHVuc2lnbmVkIGludCBleHRyYV9kZXZpY2VzO1xcbiAgNzE6XFx0XFx0Ym9vbCBmbGF0ZGV2O1xcbiAgNzI6XFx0fTtcXG4gIDczOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTowNC42MjkyOTY2NjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNDQyMTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYWRkaW5nIFdvZXMgaW4gYGVyb2ZzX21vdW50X29wdHNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0c2AgZGVmaW5pdGlvbiBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgc29tZXRoaW5nIHRoYXQncyBtYWtpbmcgbXkgaW50ZXJuYWwgY29tcGlsZXIgd2hpbXBlci4gQW4gYHVuc2lnbmVkIGNoYXJgIGZvbGxvd2VkIGJ5IGFuIGB1bnNpZ25lZCBpbnRgPyBUaGF0IHNjcmVhbXMgcGFkZGluZyB0byBtZS4gTGV0J3Mgc2VlLi4uIGEgYnl0ZSBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzLiBUaGF0J3MgdGhyZWUgYnl0ZXMgd2FzdGVkISBXZSdyZSB0YWxraW5nIGFib3V0IGEgc3RydWN0dXJlIHRoYXQncyBwcm9iYWJseSBmcmVxdWVudGx5IGFjY2Vzc2VkLCBzbyB0aGlzIGNvdWxkIHRyYW5zbGF0ZSB0byBhIHBlcmZvcm1hbmNlIGhpdCwgZXZlbiBpZiBtaW5vciwgaW4gc29tZSBzY2VuYXJpb3MsIHJpZ2h0P1xuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gb3B0aW1pemF0aW9uIGNvbnNpZGVyYXRpb25zLCBJIHdhbnQgdG8gY29uZmlybSBzb21ldGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHNiaS1cdTAwM2VvcHRgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gd2hlbiBpdCdzIGFsbG9jYXRlZC4gVGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgSSB0aGluayBhYm91dCB0aGlzIHBvdGVudGlhbCBwYWRkaW5nIGlzc3VlLiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdG8gYGVyb2ZzX2ZjX2dldF90cmVlYCBhbmQgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgYmVjYXVzZSBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHdoZXJlIGBzYmlgIGlzIGFsbG9jYXRlZC4gTGV0J3MganVzdCBkb3VibGUtY2hlY2sgd2hlcmUgdGhhdCBhbGxvY2F0aW9uIGhhcHBlbnMgYW5kIHZlcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTowOS40MzM3MjEyNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NzExODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZjLVxcdTAwM2VzX2ZzX2luZm8gPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvc3VwZXIuYz05NTE9c3RhdGljIGludCBlcm9mc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy05NjMtXFx0fVxcbmZzL2Vyb2ZzL3N1cGVyLmM6OTY0OlxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBzYmk7XFxuZnMvZXJvZnMvc3VwZXIuYy05NjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjA5LjUxMTQzNzIzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEwMTI0MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgRVJPRlMgRmlsZXN5c3RlbSBDb250ZXh0IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIGRpZyBpbnRvIHRoZSBgZXJvZnNfaW5pdF9mc19jb250ZXh0YCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGZpbGVzeXN0ZW0gY29udGV4dCBmb3IgRVJPRlMgaXMgc2V0IHVwIOKAkyBzcGVjaWZpY2FsbHksIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgaGFuZGxlZCwgYW55IGNoZWNrcyBvciB2YWxpZGF0aW9ucywgYW5kIGhvdyB0aGlzIGNvbnRleHQgdWx0aW1hdGVseSBpbmZsdWVuY2VzIHRoZSBtb3VudCBwcm9jZXNzLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyB0aGUgY29yZSBvZiBlc3RhYmxpc2hpbmcgdGhlIGVudmlyb25tZW50IGZvciBhbiBFUk9GUyBmaWxlc3lzdGVtIGluc3RhbmNlLCBzbyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgaGVyZSBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3Rpbmcgb3Igb3B0aW1pemF0aW9uIGxhdGVyLiBUaW1lIHRvIG5hdmlnYXRlIGBmcy9lcm9mcy9zdXBlci5jYC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzE6MTMuMTIxNTYzNTUzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Vyb2ZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUxOlxcdHN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gOTUyOlxcdHtcXG4gOTUzOlxcdFxcdHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmk7XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdHNiaSA9IGt6YWxsb2Nfb2JqKCpzYmkpO1xcbiA5NTY6XFx0XFx0aWYgKCFzYmkpXFxuIDk1NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTU4OlxcdFxcbiA5NTk6XFx0XFx0c2JpLVxcdTAwM2VkZXZzID0ga3phbGxvY19vYmooc3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0KTtcXG4gOTYwOlxcdFxcdGlmICghc2JpLVxcdTAwM2VkZXZzKSB7XFxuIDk2MTpcXHRcXHRcXHRrZnJlZShzYmkpO1xcbiA5NjI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk2MzpcXHRcXHR9XFxuIDk2NDpcXHRcXHRmYy1cXHUwMDNlc19mc19pbmZvID0gc2JpO1xcbiA5NjU6XFx0XFxuIDk2NjpcXHRcXHRpZHJfaW5pdChcXHUwMDI2c2JpLVxcdTAwM2VkZXZzLVxcdTAwM2V0cmVlKTtcXG4gOTY3OlxcdFxcdGluaXRfcndzZW0oXFx1MDAyNnNiaS1cXHUwMDNlZGV2cy1cXHUwMDNlcndzZW0pO1xcbiA5Njg6XFx0XFx0ZXJvZnNfZGVmYXVsdF9vcHRpb25zKHNiaSk7XFxuIDk2OTpcXHRcXHRmYy1cXHUwMDNlb3BzID0gXFx1MDAyNmVyb2ZzX2NvbnRleHRfb3BzO1xcbiA5NzA6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjEzLjEyMTY0OTgyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQ3OTQ4MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFRob3VnaHQgUHJvY2VzcyBvbiBgc2JpYCBBbGxvY2F0aW9uIGFuZCBgc2JpLVx1MDAzZW9wdGAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgc2JpYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKCpzYmkpYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIG15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IGBremFsbG9jX29iamAgaXMgbGlrZWx5IGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgYGt6YWxsb2NgLCBzcGVjaWZpY2FsbHkgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGBzYmlgIGFuZCBpbml0aWFsaXplcyBpdCB0byB6ZXJvLiBCdXQgd2FpdCwgYGt6YWxsb2Nfb2JqYD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwganVzdCBhcyBJIHN1c3BlY3RlZCwgaXQncyBqdXN0IGEgZGlyZWN0IGNhbGwgdG8gYGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKWAgb3Igc29tZXRoaW5nIG5lYXJseSBpZGVudGljYWwuXG5cblRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3N1bXB0aW9uOiBzaW5jZSBga3phbGxvY2AgaXMgdXNlZCwgdGhlIHBhZGRpbmcgd2l0aGluIGBzYmlgICpzaG91bGQqIGJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQncyBnb29kLCBwcmVkaWN0YWJsZSBiZWhhdmlvci4gQnV0IHRoaXMgYnJpbmdzIHVwIGFub3RoZXIgaW1wb3J0YW50IHBvaW50OiB3aGF0IGhhcHBlbnMgaWYgYHNiaS1cdTAwM2VvcHRgIGlzIHN1YnNlcXVlbnRseSAqbW9kaWZpZWQqPyBTcGVjaWZpY2FsbHksIHdoYXQgaWYgaXQncyBjb3BpZWQgb3IgYXNzaWduZWQgYSB2YWx1ZT8gVGhlIGluaXRpYWwgemVyb2luZyBieSBga3phbGxvY2AgaXMgb25seSBndWFyYW50ZWVkIGF0IGFsbG9jYXRpb24sIGFuZCBhbnkgbGF0ZXIgYXNzaWdubWVudCBjb3VsZCBvdmVyd3JpdGUgdGhhdCB6ZXJvIHZhbHVlLlxuXG5TbywgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHRob3JvdWdobHkgY2hlY2sgdGhlIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgc2JpLVx1MDAzZW9wdGAgaXMgKm5ldmVyKiBhc3NpZ25lZCBieSB2YWx1ZSBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBhbmQgaG93IHRoZSBgc2JpLVx1MDAzZW9wdGAgbWVtYmVyIGlzIHVwZGF0ZWQuIFRoaXMgd2lsbCBkZXRlcm1pbmUgaWYgSSBjYW4gdHJ1c3QgdGhhdCB0aGUgcGFkZGluZyByZW1haW5zIHplcm9lZCB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGUgYHNiaWAgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjE1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzE6MTcuNTY5NjAyODMxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODY0NjM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvcHQgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvc3VwZXIuYz00Nzc9c3RhdGljIGludCBlcm9mc19mY19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTQ4NC1cXG5mcy9lcm9mcy9zdXBlci5jOjQ4NTpcXHRvcHQgPSBmc19wYXJzZShmYywgZXJvZnNfZnNfcGFyYW1ldGVycywgcGFyYW0sIFxcdTAwMjZyZXN1bHQpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNDg2LVxcdGlmIChvcHQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz04Njg9c3RhdGljIGludCBlcm9mc19mY19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTg4Ny1cXG5mcy9lcm9mcy9zdXBlci5jOjg4ODpcXHRzYmktXFx1MDAzZW9wdCA9IG5ld19zYmktXFx1MDAzZW9wdDtcXG5mcy9lcm9mcy9zdXBlci5jLTg4OS1cXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9MTEzNj1zdGF0aWMgaW50IGVyb2ZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMTEzOC1cXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuZnMvZXJvZnMvc3VwZXIuYzoxMTM5OlxcdHN0cnVjdCBlcm9mc19tb3VudF9vcHRzICpvcHQgPSBcXHUwMDI2c2JpLVxcdTAwM2VvcHQ7XFxuZnMvZXJvZnMvc3VwZXIuYy0xMTQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMToxNy42MjgyNTM4MjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc2ODMyMjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVST0ZTIEZpbGVzeXN0ZW0gUmVjb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZXJvZnNfZmNfcmVjb25maWd1cmVgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGlzIGxpbmU6IGBzYmktXHUwMDNlb3B0ID0gbmV3X3NiaS1cdTAwM2VvcHQ7YC4gVGhhdCBqdW1wcyBvdXQgYXQgbWUuIEknbSB0aGlua2luZywgaGFuZyBvbi4uLiBgbmV3X3NiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgIHdoaWNoIGNhbGxzIGBremFsbG9jYC4gUmlnaHQsIHNvIGBremFsbG9jYCB6ZXJvZXMgb3V0IHRoZSBtZW1vcnkuIFRoZW4sIHRoZSBwYXJhbWV0ZXJzIGFyZSBwYXJzZWQgaW50byBgbmV3X3NiaS1cdTAwM2VvcHRgLiBOb3csIHRoYXQgYXNzaWdubWVudC4uLiBpdCdzIGEgc3RydWN0IGFzc2lnbm1lbnQsIGlzbid0IGl0P1xuXG5SaWdodCwgdGhlIGtleSBxdWVzdGlvbiBpcyBob3cgQyBoYW5kbGVzIHN0cnVjdCBhc3NpZ25tZW50LiBJdCBjb3BpZXMgdGhlICpmaWVsZHMqLCBidXQgd2hhdCBhYm91dCBwYWRkaW5nPyBUaGF0J3MgdGhlIHBvdGVudGlhbCBnb3RjaGEuIEl0J3Mgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYSBgbWVtY3B5YCBpZiB0aGUgc3RydWN0IGlzIGxhcmdlLCBvciBldmVuIGp1c3QgZmllbGQtYnktZmllbGQgb3Igd29yZC1ieS13b3JkLiBOb3csIGlmIGl0J3MgKndvcmQqLWJ5LXdvcmQsIHRoZW4gdGhlIHBhZGRpbmcgKmlzKiBjb3BpZWQhXG5cbkJ1dCBob2xkIG9uLi4uIGBuZXdfc2JpYCB3YXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBzbyBhbGwgdGhlIHBhZGRpbmcgKmluKiBgbmV3X3NiaWAgaXMgemVyb2VkIG91dCBpbml0aWFsbHkuIFNvLCBpZiBgbmV3X3NiaS1cdTAwM2VvcHRgIGhhcyB6ZXJvIHBhZGRpbmcgdG8gYmVnaW4gd2l0aCwgYW5kIGl0J3MgYXNzaWduZWQgdG8gYHNiaS1cdTAwM2VvcHRgLCB0aGVuIGBzYmktXHUwMDNlb3B0YCdzIHBhZGRpbmcgc2hvdWxkICpyZW1haW4qIHplcm8sIG9yIGJlY29tZSB6ZXJvLCB3aGljaCBpcyBsaWtlbHkgdGhlIGRlc2lyZWQgYmVoYXZpb3IuIEknZCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGVyJ3MgYmVoYXZpb3IsIGJ1dCBpdCdzIGxpa2VseSBzYWZlLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGF0IGFsbCB0aGUgcGxhY2VzIGBvcHRgIGlzIG1vZGlmaWVkLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwYWRkaW5nIGJlaW5nIHNldCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMToyMy4zOTY1Nzg5NDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDU3ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyb2ZzX2RlZmF1bHRfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXJvZnMvc3VwZXIuYz0yNTA9c3RhdGljIGludCBlcm9mc19yZWFkX3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzczLVxcbmZzL2Vyb2ZzL3N1cGVyLmM6Mzc0OnN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzc1LXtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9OTUxPXN0YXRpYyBpbnQgZXJvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtOTY3LVxcdGluaXRfcndzZW0oXFx1MDAyNnNiaS1cXHUwMDNlZGV2cy1cXHUwMDNlcndzZW0pO1xcbmZzL2Vyb2ZzL3N1cGVyLmM6OTY4OlxcdGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzYmkpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtOTY5LVxcdGZjLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZXJvZnNfY29udGV4dF9vcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjIzLjQ2MjA1MDE5MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU5MjAxNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBgZXJvZnNfZGVmYXVsdF9vcHRpb25zYC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBzZXQgYXMgZGVmYXVsdHMgZm9yIEVST0ZTLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIGNvbXByZXNzaW9uIHNldHRpbmdzLCBhbnkgc3BlY2lmaWMgYmxvY2sgc2l6ZXMsIGFuZCBhbnkgdW51c3VhbCBmbGFncyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHBlcmZvcm1hbmNlIG9yIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlc2UgZGVmYXVsdHMgYXJlIGlubGluZSB3aXRoIGJlc3QgcHJhY3RpY2VzIGZvciBkaWZmZXJlbnQgdXNlIGNhc2VzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHRoZSBmaWxlc3lzdGVtIG1pZ2h0IGJlIHVzZWQgb24uIEknbGwgYWxzbyB3YW50IHRvIHdhdGNoIG91dCBmb3IgYW55dGhpbmcgdGhhdCBzY3JlYW1zIFwibGVnYWN5XCIgLSBtaWdodCBiZSBhIHNpZ24gd2Ugc2hvdWxkIGJlIGNvbnNpZGVyaW5nIGNoYW5nZXMgdG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZS4gTGV0J3Mgc2VlIHdoYXQgdGhpcyByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzE6MjYuODIxMjU0MTI2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Vyb2ZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc0LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzc0OlxcdHN0YXRpYyB2b2lkIGVyb2ZzX2RlZmF1bHRfb3B0aW9ucyhzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpKVxcbiAzNzU6XFx0e1xcbiAzNzY6XFx0I2lmZGVmIENPTkZJR19FUk9GU19GU19aSVBcXG4gMzc3OlxcdFxcdHNiaS1cXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gRVJPRlNfWklQX0NBQ0hFX1JFQURBUk9VTkQ7XFxuIDM3ODpcXHRcXHRzYmktXFx1MDAzZXN5bmNfZGVjb21wcmVzcyA9IEVST0ZTX1NZTkNfREVDT01QUkVTU19BVVRPO1xcbiAzNzk6XFx0I2VuZGlmXFxuIDM4MDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxcbiAzODE6XFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xcbiAzODI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXFxuIDM4MzpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgUE9TSVhfQUNMKTtcXG4gMzg0OlxcdH1cXG4gMzg1OlxcdFxcbiAzODY6XFx0ZW51bSB7XFxuIDM4NzpcXHRcXHRPcHRfdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X2NhY2hlX3N0cmF0ZWd5LCBPcHRfZGF4LCBPcHRfZGF4X2VudW0sXFxuIDM4ODpcXHRcXHRPcHRfZGV2aWNlLCBPcHRfZG9tYWluX2lkLCBPcHRfZGlyZWN0aW8sIE9wdF9mc29mZnNldCwgT3B0X2lub2RlX3NoYXJlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMToyNi44MjEzNDEwMjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0ODA4OTc2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBLTVNBTiBJc3N1ZXMgd2l0aCBFUk9GUyBNb3VudCBPcHRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IGhvdyBgc2JpLVx1MDAzZW9wdGAgaXMgaGFuZGxlZC4gSSBub3RpY2VkIHRoYXQgaXQncyBtb2RpZmllZCBmaWVsZCBieSBmaWVsZCwgbGlrZSB3aXRoIHRoZSBjYWNoZSBzdHJhdGVneSwgYW5kIGFsc28gdGhyb3VnaCBgc2V0X29wdGAuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0aGF0IHRoaXMgd291bGRuJ3QgbGVhdmUgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJlY2F1c2UgYHNiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYC4gVGhhdCdzIGltcG9ydGFudC5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAuIFRoZSBrZXkgYXNzdW1wdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IHNoYXJlZCBzdXBlcmJsb2Nrcywgd2hpY2ggaXMgcmVsZXZhbnQsIGJ1dCB3aGF0IHJlYWxseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhpcyBgbWVtY21wYCBvbiBgXHUwMDI2c2JpLVx1MDAzZW9wdGAuIFRoYXQncyB3aGVyZSB0aGUgS01TQU4gcXVlc3Rpb24gYXJpc2VzLlxuXG5NeSBjb25jZXJuIGlzIHdoZXRoZXIgYHNiaS1cdTAwM2VvcHRgIGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBwYWRkaW5nLiBJZiBpdCdzIGBremFsbG9jYCdkLCB0aGUgcGFkZGluZyAqc2hvdWxkKiBiZSB6ZXJvZWQsIHJpZ2h0PyBCdXQgd2hhdCBpZiBgc2JpLVx1MDAzZW9wdGAgaXMgbGF0ZXIgYXNzaWduZWQgYXMgYSB3aG9sZSB1c2luZyBgc2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O2A/IEMgc3RydWN0IGFzc2lnbm1lbnQsIGluIHNvbWUgY2FzZXMsICptaWdodCogbm90IGNvcHkgcGFkZGluZy4gSWYgaXQgZG9lc24ndCwgdGhhdCBwYWRkaW5nIGNvdWxkIHJldGFpbiBpdHMgb3JpZ2luYWwsIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZW4sIHdoZW4gYG1lbWNtcGAgaXMgY2FsbGVkLCBLTVNBTiBjb3VsZCBwb3RlbnRpYWxseSBmbGFnIHRoYXQgYXMgYSBwcm9ibGVtLiBBbHRob3VnaCwgaWYgdGhlIG9yaWdpbmFsIGBzYmlgIHdhcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCB0aGVuIHBhZGRpbmcgd291bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIHplcm8gdG8gYmVnaW4gd2l0aC5cblxuV2FpdCwgdGhlIG5leHQgdGhpbmcgSSB0aG91Z2h0IGFib3V0IHdhcyBpZiBgc2JpLVx1MDAzZW9wdGAgd2FzIHBhc3NlZCBieSB2YWx1ZSBhbnl3aGVyZS4gQnV0IG5vLCBpdCdzIGp1c3QgYSBmaWVsZCB3aXRoaW4gdGhlIGBzYmlgIHN0cnVjdCwgc28gdGhhdCdzIG5vdCBhIGNvbmNlcm4uXG5cblRoZW4gaXQgaGl0cyBtZTogKnllcyosIGBtZW1jbXBgIG9uIGEgc3RydWN0IHdpdGggcGFkZGluZyAqY291bGQqIHRyaWdnZXIgS01TQU4hIEtNU0FOIGlzIHZlcnkgZ3JhbnVsYXI7IGl0IHRyYWNrcyBpbml0aWFsaXphdGlvbiBhdCB0aGUgYml0L2J5dGUgbGV2ZWwuIElmIHBhZGRpbmcgZXhpc3RzIGFuZCBpc24ndCBpbml0aWFsaXplZCwgYSBgbWVtY21wYCBvcGVyYXRpb24gY291bGQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXZlbiBpZiB0aGUgdXNlciBpc24ndCBkaXJlY3RseSBhY2Nlc3NpbmcgaXQuIEhvd2V2ZXIsIGlmIHRoZSBzdHJ1Y3Qgd2FzIGluaXRpYWxpemVkIHZpYSBga3phbGxvY2AsIHRoZSBwYWRkaW5nIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gemVybywgbWFraW5nIHRoaXMgYSBub24taXNzdWUuIFxuXG5TbyB0aGUgY29yZSBxdWVzdGlvbiBpcywgaWYgdGhlIHN0cnVjdCBpcyBjb3BpZWQgdmlhIGFzc2lnbm1lbnQsIGRvZXMgdGhlIGNvbXBpbGVyIHJlYWQgdGhlIHBhZGRpbmc/IElmIHRoZSBhc3NpZ25tZW50IGlzIGltcGxlbWVudGVkIGFzIGEgd29yZC1zaXplZCByZWFkL3dyaXRlLCBpdCAqd2lsbCogcmVhZCB0aGUgcGFkZGluZy4gQnV0LCBiZWNhdXNlIHRoYXQgcGFkZGluZyB3YXMgemVyb2VkIGJ5IHRoZSBga3phbGxvY2AgY2FsbCwgdGhlIHJlYWQgaXMgc2FmZS5cblxuTm93LCBLTVNBTiBjaGVja3MgZm9yIG1lbW9yeSB0aGF0IGlzIHVuaW5pdGlhbGl6ZWQuIElmIHRoZSBtZW1vcnkgd2FzIHplcm9lZCBieSBga3phbGxvY2AsIGl0IGlzIGluaXRpYWxpemVkLlxuXG5CdXQgd2FpdCwgd2hhdCBpZiBgc2JpLVx1MDAzZW9wdGAgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQgKnNvbWV3aGVyZSo/IEkgbmVlZCB0byBsb29rIGF0IHRoZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gTGV0J3Mgc2VlLi4uXG5cbmBgYGNcbnN0cnVjdCBlcm9mc19tb3VudF9vcHRzIHtcblx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cblx0dW5zaWduZWQgY2hhciBjYWNoZV9zdHJhdGVneTtcblx0dW5zaWduZWQgaW50IG1vdW50X29wdDtcbn07XG5gYGBcbk9rYXksIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmaWVsZHMuIFRoZSBga3phbGxvY2AgaW5pdGlhbGl6YXRpb24gb2YgYHNiaWAgc2hvdWxkIGZ1bGx5IGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTozOS4zMDIyNDE2MzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Vyb2ZzL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0c3RydWN0IGVyb2ZzX21vdW50X29wdHMge1xcbiAgNjE6XFx0XFx0LyogY3VycmVudCBzdHJhdGVneSBvZiBob3cgdG8gdXNlIG1hbmFnZWQgY2FjaGUgKi9cXG4gIDYyOlxcdFxcdHVuc2lnbmVkIGNoYXIgY2FjaGVfc3RyYXRlZ3k7XFxuICA2MzpcXHRcXHR1bnNpZ25lZCBpbnQgbW91bnRfb3B0O1xcbiAgNjQ6XFx0fTtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0c3RydWN0IGVyb2ZzX2Rldl9jb250ZXh0IHtcXG4gIDY3OlxcdFxcdHN0cnVjdCBpZHIgdHJlZTtcXG4gIDY4OlxcdFxcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XFxuICA2OTpcXHRcXG4gIDcwOlxcdFxcdHVuc2lnbmVkIGludCBleHRyYV9kZXZpY2VzO1xcbiAgNzE6XFx0XFx0Ym9vbCBmbGF0ZGV2O1xcbiAgNzI6XFx0fTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0LyogYWxsIGZpbGVzeXN0ZW0td2lkZSBsejQgY29uZmlndXJhdGlvbnMgKi9cXG4gIDc1OlxcdHN0cnVjdCBlcm9mc19zYl9sejRfaW5mbyB7XFxuICA3NjpcXHRcXHQvKiAjIG9mIHBhZ2VzIG5lZWRlZCBmb3IgRVJPRlMgbHo0IHJvbGxpbmcgZGVjb21wcmVzc2lvbiAqL1xcbiAgNzc6XFx0XFx0dTE2IG1heF9kaXN0YW5jZV9wYWdlcztcXG4gIDc4OlxcdFxcdC8qIG1heGltdW0gcG9zc2libGUgYmxvY2tzIGZvciBwY2x1c3RlcnMgaW4gdGhlIGZpbGVzeXN0ZW0gKi9cXG4gIDc5OlxcdFxcdHUxNiBtYXhfcGNsdXN0ZXJibGtzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTozOS4zMDIzNjk2MDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5NzUyMjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGVyb2ZzX21vdW50X29wdHMgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHR3byBmaWVsZHMuIFJpZ2h0LCB0aGUgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYCBpcyBvbmx5IDggYnl0ZXMgdG90YWwsIGJyb2tlbiBkb3duIGFzIGEgc2luZ2xlIGNoYXJhY3Rlciwgc29tZSBwYWRkaW5nLCBhbmQgdGhlbiBhbiBpbnRlZ2VyLiBOb3csIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBtZW1jbXBgIGNhbGw6IGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBJdCdzIGNvbXBhcmluZyA4IGJ5dGVzLiBTaW5jZSBib3RoIGBzYmlgIGFuZCBgbmV3X3NiaWAgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgdGhlIHBhZGRpbmcgc2hvdWxkIGJlIHplcm9lZCBvdXQuIFNvLCBgbWVtY21wYCBpcyByZWFkaW5nIGluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElzIHRoZXJlIGFueSBzY2VuYXJpbyB3aGVyZSBgc2JpLVx1MDAzZW9wdGAgKmlzbid0KiBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCwgb3IgbWF5YmUgZ2V0cyBwbGFjZWQgb24gdGhlIHN0YWNrPyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgZXJvZnNfc2JfaW5mb2AgaXMgYWN0dWFsbHkgYWxsb2NhdGVkIHRvIGNvbmZpcm0gdGhlcmUncyBubyB3YXkgdG8gZW5kIHVwIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZS4uLiBJJ2xsIGNoZWNrIHdoZXJlIHRoZSBgZXJvZnNfc2JfaW5mb2AgaXMgYWxsb2NhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIzNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjQzLjg5OTg5NTEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExNzk5NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2MuKmVyb2ZzX3NiX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTo0My45NTUwMjI2NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MTAwMjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEVST0ZTIFN1cGVyYmxvY2sgSW5mb3JtYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuIExldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnkgZm9yIHRoZSBgZXJvZnNfc2JfaW5mb2Agc3RydWN0dXJlIHVzaW5nIGBremFsbG9jYC4gSSB3YW50IHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaG93IHRoZSBzdXBlcmJsb2NrIGluZm9ybWF0aW9uIGZvciB0aGUgRVJPRlMgZmlsZXN5c3RlbSBpcyBiZWluZyBpbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBga3phbGxvY2Ag4oCTIHplcm9pbmcgdGhlIG1lbW9yeSDigJMgcmlnaHQgZnJvbSB0aGUgb3V0c2V0LiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgZm9yIGVuc3VyaW5nIGEgY2xlYW4gc2xhdGUsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgZGF0YSBvciBwb2ludGVycyB0aGF0IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gYSBrbm93biBzdGF0ZS4gS25vd2luZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nIGFsbG93cyBtZSB0byBpbmZlciBjZXJ0YWluIHRoaW5ncyBhYm91dCBob3cgdGhlIEVST0ZTIGRyaXZlciBpcyBkZXNpZ25lZCwgd2hhdCBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIGRhdGEsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZ2FyYmFnZSB2YWx1ZXMuIEknbSBnb2luZyB0byBsb29rIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTo0Ny4xMjYwMjc2NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg0MTg0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvYy4qc2JpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Vyb2ZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9zdXBlci5jPTk1MT1zdGF0aWMgaW50IGVyb2ZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTk1NC1cXG5mcy9lcm9mcy9zdXBlci5jOjk1NTpcXHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcXG5mcy9lcm9mcy9zdXBlci5jLTk1Ni1cXHRpZiAoIXNiaSlcXG4tLVxcbmZzL2Vyb2ZzL3hhdHRyLmM9NDk0PWludCBlcm9mc194YXR0cl9wcmVmaXhlc19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9lcm9mcy94YXR0ci5jLTUwNS1cXG5mcy9lcm9mcy94YXR0ci5jOjUwNjpcXHRwZnMgPSBremFsbG9jX29ianMoKnBmcywgc2JpLVxcdTAwM2V4YXR0cl9wcmVmaXhfY291bnQpO1xcbmZzL2Vyb2ZzL3hhdHRyLmMtNTA3LVxcdGlmICghcGZzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTo0Ny4yMTQ0NTAxNTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxNDExNzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGt6YWxsb2Nfb2JqYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIHBvcHMgb3V0LiBga3phbGxvY19vYmpgLi4uIHdhaXQsIHRoYXQncyBhIG1hY3JvLiBSaWdodC4gSSBuZWVkIHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hhdCB0aGF0IGV4cGFuZHMgdG8gaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBiZWluZyB1c2VkIGNvcnJlY3RseSBoZXJlPyBJcyB0aGVyZSBhIHN1YnRsZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9yLCB3b3JzZSwgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaWYgaXQncyBub3QgaGFuZGxlZCB3aXRoIGNhcmU/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJucyBvZiB0aGlzIG1hY3JvIHRvIGFzc2VzcyBpdHMgYXBwcm9wcmlhdGVuZXNzIGhlcmUuIElzIHRoZXJlIGFueSBvYnZpb3VzIHdheSB0aGlzIGNvdWxkIGxlYWQgdG8gZnJhZ21lbnRhdGlvbiwgb3IgaW5lZmZpY2llbnQgemVyb2luZz8gVGltZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjUwLjIyODU2OTg0M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTk1ODIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBremFsbG9jX29ialwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9lcm9mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjUwLjMxMDk3NTQwNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY1NDE3NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqVHJhY2luZyBga3phbGxvY19vYmpgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBga3phbGxvY19vYmpgIGZ1bmN0aW9uIGJldHRlci4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBpdHMgZGVmaW5pdGlvbi4gV2hlcmUgaXMgaXQgYWN0dWFsbHkgZGVjbGFyZWQgYW5kIGltcGxlbWVudGVkIHdpdGhpbiB0aGlzIGNvZGViYXNlPyBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIGFueSBkb2N1bWVudGF0aW9uIGNvbW1lbnRzIGlmIHRoZXkgZXhpc3QsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0aGUgYWN0dWFsIGNvZGUgd2l0aGluIGl0LiBUaGF0J3MgdGhlIG9ubHkgd2F5IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgb3BlcmF0ZXMgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byB0cmFjayBpdCBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMxOjU0LjI3NjM5NTg4MloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MTA1OTY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUga3phbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zbGFiLmg9MTA3Mz12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU0LS8qIEFsbCBremFsbG9jIGFsaWFzZXMgZm9yIGttYWxsb2NfKG9ianxvYmpzfGZsZXgpLiAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExNTU6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU2LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgMSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTU3OiNkZWZpbmUga3phbGxvY19vYmpzKFAsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTU4LVxcdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaD0yMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaGVhZl9zaXplKHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMC1cXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaDoyMTE6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMTItXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMTo1Ni42Mjc0NTk4OTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk3NDAzMjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFplcm8tSW5pdGlhbGl6YXRpb24gb2YgYHNiaS1cdTAwM2VvcHRgIGluIEVST0ZTKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBTbywgYGt6YWxsb2Nfb2JqKCpzYmkpYCBhbGxvY2F0ZXMgbWVtb3J5IGZvciBgc2JpYCBhbmQsIGltcG9ydGFudGx5LCB6ZXJvZXMgaXQuIFRoaXMgbWVhbnMgYHNiaS1cdTAwM2VvcHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoYXQgYHNiaWAgc3RydWN0LCBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MuIFRoZSBxdWVzdGlvbiBpcywgd2hlcmUgZWxzZSBtaWdodCBgc2JpLVx1MDAzZW9wdGAgYmUgbW9kaWZpZWQ/IEkgcmVtZW1iZXIgc2VlaW5nIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgYW5kIGBlcm9mc19mY19yZWNvbmZpZ3VyZWAuXG5cbmBlcm9mc19mY19yZWNvbmZpZ3VyZWAgaXMgd2hlcmUgaXQgc2VlbXMgbGlrZSBgc2JpLVx1MDAzZW9wdGAgZ2V0cyBkaXJlY3RseSB1cGRhdGVkOiBgc2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O2AuIENydWNpYWxseSwgYG5ld19zYmktXHUwMDNlb3B0YCBpcyBpbml0aWFsaXplZCBhcyB6ZXJvLCB0aGVuIGZpZWxkcyBhcmUgc2V0LiBTbywgdGhlIHBhZGRpbmcgd2l0aGluIGBuZXdfc2JpLVx1MDAzZW9wdGAgcmVtYWlucyB6ZXJvLiBUaGUgYXNzaWdubWVudCBgc2JpLVx1MDAzZW9wdCA9IG5ld19zYmktXHUwMDNlb3B0O2AgaXMgYSBzdHJ1Y3QgY29weS4gRXZlbiBpZiB0aGUgY29tcGlsZXIgb3B0aW1pemVzIHRoaXMgd2l0aCA2NC1iaXQgcmVhZHMvd3JpdGVzLCBpdCdzIGNvcHlpbmcgaW5pdGlhbGl6ZWQgbWVtb3J5ICh6ZXJvZXMgaW4gdGhlIHBhZGRpbmcpIHRvIHRoZSBkZXN0aW5hdGlvbi4gVGhlcmVmb3JlLCB0aGUgcGFkZGluZyBpbiBgc2JpLVx1MDAzZW9wdGAgc2hvdWxkIGFsc28gYmUgemVybyBhZnRlciB0aGUgY29weS5cblxuVGhhdCdzIGNyaXRpY2FsIGJlY2F1c2UgdGhlbiB0aGUgYG1lbWNtcChcdTAwMjZzYmktXHUwMDNlb3B0LCBcdTAwMjZuZXdfc2JpLVx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cdTAwM2VvcHQpKWAgY29tcGFyZXMgYWxsIDggYnl0ZXMuIFNpbmNlIHRoZSBwYWRkaW5nIGlzIHplcm8gaW4gYm90aCwgdGhlIGBtZW1jbXBgIHdpbGwgY29tcGFyZSB0aGUgZmllbGRzJyB2YWx1ZXMsIGFuZCB0aGUgcGFkZGluZyBieXRlcyBzaG91bGQgbWF0Y2guXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGNvdmVyIG15IGJhc2VzLiBJcyB0aGVyZSBhbnkgc2NlbmFyaW8gd2hlcmUgYHNiaS1cdTAwM2VvcHRgICpjb3VsZCogZW5kIHVwIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nPyBMZXQncyBydWxlIG91dCBzb21lIHRoaW5ncy4gQ291bGQgYHNiaS1cdTAwM2VvcHRgIGJlIGNvcGllZCBmcm9tIHVzZXIgc3BhY2U/IE5vLCBpdCdzIHBhcnNlZCBmcm9tIHRoZSBtb3VudCBvcHRpb25zLCBzbyB0aGUgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGNvbnRyb2xsZWQuIENvdWxkIHNvbWUgb3RoZXIgZnVuY3Rpb24gbW9kaWZ5IGBzYmktXHUwMDNlb3B0YD8gSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhhdC4gVGltZSB0byBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgYWxsIG9jY3VycmVuY2VzIG9mIGBvcHRgIGluIHRoZSBgZnMvZXJvZnMvYCBkaXJlY3RvcnkgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMjowMy42MDE0OTQ3NTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDEzMjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLVxcdTAwM2VvcHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXJvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL2ZpbGVpby5jPTQ0PXN0YXRpYyB2b2lkIGVyb2ZzX2ZpbGVpb19ycV9zdWJtaXQoc3RydWN0IGVyb2ZzX2ZpbGVpb19ycSAqcnEpXFxuLS1cXG5mcy9lcm9mcy9maWxlaW8uYy01My1cXHRycS1cXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IGVyb2ZzX2ZpbGVpb19raV9jb21wbGV0ZTtcXG5mcy9lcm9mcy9maWxlaW8uYzo1NDpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNkVST0ZTX1NCKHJxLVxcdTAwM2VzYiktXFx1MDAzZW9wdCwgRElSRUNUX0lPKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL2ZpbGVpby5jLTU1LVxcdCAgICBycS1cXHUwMDNlaW9jYi5raV9maWxwLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DQU5fT0RJUkVDVClcXG4tLVxcbmZzL2Vyb2ZzL2lub2RlLmM9MzY9c3RhdGljIGludCBlcm9mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9lcm9mcy9pbm9kZS5jLTIxNC1cXHRpbm9kZS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2PSB+U19EQVg7XFxuZnMvZXJvZnMvaW5vZGUuYzoyMTU6XFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgREFYX0FMV0FZUykgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL2lub2RlLmMtMjE2LVxcdCAgICAodmktXFx1MDAzZWRhdGFsYXlvdXQgPT0gRVJPRlNfSU5PREVfRkxBVF9QTEFJTiB8fFxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0xMjU9c3RhdGljIGludCBlcm9mc19pbml0X2RldmljZShzdHJ1Y3QgZXJvZnNfYnVmICpidWYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTE2NC1cXHRcXHR9XFxuZnMvZXJvZnMvc3VwZXIuYzoxNjU6XFx0XFx0aWYgKCFkaWYtXFx1MDAzZWRheF9kZXYgXFx1MDAyNlxcdTAwMjYgdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKSkge1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMTY2LVxcdFxcdFxcdGVyb2ZzX2luZm8oc2IsIFxcXCJEQVggdW5zdXBwb3J0ZWQgYnkgJXMuIFR1cm5pbmcgb2ZmIERBWC5cXFwiLFxcbmZzL2Vyb2ZzL3N1cGVyLmMtMTY3LVxcdFxcdFxcdFxcdCAgIGRpZi1cXHUwMDNlcGF0aCk7XFxuZnMvZXJvZnMvc3VwZXIuYzoxNjg6XFx0XFx0XFx0Y2xlYXJfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgREFYX0FMV0FZUyk7XFxuZnMvZXJvZnMvc3VwZXIuYy0xNjktXFx0XFx0fVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0xODM9c3RhdGljIGludCBlcm9mc19zY2FuX2RldmljZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMjA1LVxcbmZzL2Vyb2ZzL3N1cGVyLmM6MjA2OlxcdGlmICh0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIERBWF9BTFdBWVMpIFxcdTAwMjZcXHUwMDI2ICFzYmktXFx1MDAzZWRpZjAuZGF4X2Rldikge1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMjA3LVxcdFxcdGVyb2ZzX2luZm8oc2IsIFxcXCJEQVggdW5zdXBwb3J0ZWQgYnkgYmxvY2sgZGV2aWNlLiBUdXJuaW5nIG9mZiBEQVguXFxcIik7XFxuZnMvZXJvZnMvc3VwZXIuYzoyMDg6XFx0XFx0Y2xlYXJfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgREFYX0FMV0FZUyk7XFxuZnMvZXJvZnMvc3VwZXIuYy0yMDktXFx0fVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz0zNzQ9c3RhdGljIHZvaWQgZXJvZnNfZGVmYXVsdF9vcHRpb25zKHN0cnVjdCBlcm9mc19zYl9pbmZvICpzYmkpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTM3Ni0jaWZkZWYgQ09ORklHX0VST0ZTX0ZTX1pJUFxcbmZzL2Vyb2ZzL3N1cGVyLmM6Mzc3OlxcdHNiaS1cXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gRVJPRlNfWklQX0NBQ0hFX1JFQURBUk9VTkQ7XFxuZnMvZXJvZnMvc3VwZXIuYy0zNzgtXFx0c2JpLVxcdTAwM2VzeW5jX2RlY29tcHJlc3MgPSBFUk9GU19TWU5DX0RFQ09NUFJFU1NfQVVUTztcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMzgwLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19YQVRUUikpXFxuZnMvZXJvZnMvc3VwZXIuYzozODE6XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMzgyLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19QT1NJWF9BQ0wpKVxcbmZzL2Vyb2ZzL3N1cGVyLmM6MzgzOlxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMzg0LX1cXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9NDIyPXN0YXRpYyBib29sIGVyb2ZzX2ZjX3NldF9kYXhfbW9kZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHVuc2lnbmVkIGludCBtb2RlKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy00MjctXFx0XFx0aWYgKG1vZGUgPT0gRVJPRlNfTU9VTlRfREFYX0FMV0FZUykge1xcbmZzL2Vyb2ZzL3N1cGVyLmM6NDI4OlxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKTtcXG5mcy9lcm9mcy9zdXBlci5jOjQyOTpcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfTkVWRVIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNDMwLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNDMxLVxcdFxcdH0gZWxzZSBpZiAobW9kZSA9PSBFUk9GU19NT1VOVF9EQVhfTkVWRVIpIHtcXG5mcy9lcm9mcy9zdXBlci5jOjQzMjpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgREFYX05FVkVSKTtcXG5mcy9lcm9mcy9zdXBlci5jOjQzMzpcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKTtcXG5mcy9lcm9mcy9zdXBlci5jLTQzNC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9NDc3PXN0YXRpYyBpbnQgZXJvZnNfZmNfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLFxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy00OTMtXFx0XFx0ZWxzZSBpZiAocmVzdWx0LmJvb2xlYW4pXFxuZnMvZXJvZnMvc3VwZXIuYzo0OTQ6XFx0XFx0XFx0c2V0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIFhBVFRSX1VTRVIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNDk1LVxcdFxcdGVsc2VcXG5mcy9lcm9mcy9zdXBlci5jOjQ5NjpcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBYQVRUUl9VU0VSKTtcXG5mcy9lcm9mcy9zdXBlci5jLTQ5Ny1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNTAxLVxcdFxcdGVsc2UgaWYgKHJlc3VsdC5ib29sZWFuKVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NTAyOlxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNTAzLVxcdFxcdGVsc2VcXG5mcy9lcm9mcy9zdXBlci5jOjUwNDpcXHRcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNTA1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy01MDktXFx0XFx0ZWxzZVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NTEwOlxcdFxcdFxcdHNiaS1cXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5ID0gcmVzdWx0LnVpbnRfMzI7XFxuZnMvZXJvZnMvc3VwZXIuYy01MTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTU1MC1cXHRcXHRlbHNlIGlmIChyZXN1bHQuYm9vbGVhbilcXG5mcy9lcm9mcy9zdXBlci5jOjU1MTpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgRElSRUNUX0lPKTtcXG5mcy9lcm9mcy9zdXBlci5jLTU1Mi1cXHRcXHRlbHNlXFxuZnMvZXJvZnMvc3VwZXIuYzo1NTM6XFx0XFx0XFx0Y2xlYXJfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgRElSRUNUX0lPKTtcXG5mcy9lcm9mcy9zdXBlci5jLTU1NC1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNTYxLVxcdFxcdGVsc2VcXG5mcy9lcm9mcy9zdXBlci5jOjU2MjpcXHRcXHRcXHRzZXRfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpO1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNTYzLVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy01NjctXFx0XFx0ZWxzZVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NTY4OlxcdFxcdFxcdHNldF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKTtcXG5mcy9lcm9mcy9zdXBlci5jLTU2OS1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9NjQzPXN0YXRpYyBpbnQgZXJvZnNfZmNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTY1My1cXG5mcy9lcm9mcy9zdXBlci5jOjY1NDpcXHRpZiAoIXNiaS1cXHUwMDNlZG9tYWluX2lkIFxcdTAwMjZcXHUwMDI2IHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XFxuZnMvZXJvZnMvc3VwZXIuYy02NTUtXFx0XFx0ZXJyb3JmYyhmYywgXFxcImRvbWFpbl9pZCBpcyBuZWVkZWQgd2hlbiBpbm9kZV9zaGFyZSBpcyBvblxcXCIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy02NTctXFx0fVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NjU4OlxcdGlmICh0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIERBWF9BTFdBWVMpIFxcdTAwMjZcXHUwMDI2IHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKSB7XFxuZnMvZXJvZnMvc3VwZXIuYy02NTktXFx0XFx0ZXJyb3JmYyhmYywgXFxcIkZTREFYIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cXFwiKTtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNjYxLVxcdH1cXG5mcy9lcm9mcy9zdXBlci5jOjY2MjpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL3N1cGVyLmM6NjYzOlxcdCAgICB0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIElOT0RFX1NIQVJFKSkge1xcbmZzL2Vyb2ZzL3N1cGVyLmMtNjY0LVxcdFxcdGVycm9yZmMoZmMsIFxcXCJzdXBlcmJsb2NrX3NoYXJlIGlzIG5vdCBhbGxvd2VkIHdoZW4gaW5vZGVfc2hhcmUgaXMgb25cXFwiKTtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNjY3LVxcdC8qIEV4dHJhIGRldmljZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggc3VwZXJibG9jayBzaGFyaW5nLiAgKi9cXG5mcy9lcm9mcy9zdXBlci5jOjY2ODpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL3N1cGVyLmMtNjY5LVxcdCAgICBzYmktXFx1MDAzZWRldnMtXFx1MDAzZWV4dHJhX2RldmljZXMpIHtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNzMzLVxcbmZzL2Vyb2ZzL3N1cGVyLmM6NzM0OlxcdGlmICh0ZXN0X29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIERBWF9BTFdBWVMpIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlYmxrc3piaXRzICE9IFBBR0VfU0hJRlQpIHtcXG5mcy9lcm9mcy9zdXBlci5jLTczNS1cXHRcXHRlcm9mc19pbmZvKHNiLCBcXFwidW5zdXBwb3J0ZWQgYmxvY2tzaXplIGZvciBEQVhcXFwiKTtcXG5mcy9lcm9mcy9zdXBlci5jOjczNjpcXHRcXHRjbGVhcl9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBEQVhfQUxXQVlTKTtcXG5mcy9lcm9mcy9zdXBlci5jLTczNy1cXHR9XFxuZnMvZXJvZnMvc3VwZXIuYzo3Mzg6XFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpIFxcdTAwMjZcXHUwMDI2ICFlcm9mc19zYl9oYXNfaXNoYXJlX3hhdHRycyhzYmkpKSB7XFxuZnMvZXJvZnMvc3VwZXIuYy03MzktXFx0XFx0ZXJvZnNfaW5mbyhzYiwgXFxcIm9uLWRpc2sgaXNoYXJlIHhhdHRycyBub3QgZm91bmQuIFR1cm5pbmcgb2ZmIGlub2RlX3NoYXJlLlxcXCIpO1xcbmZzL2Vyb2ZzL3N1cGVyLmM6NzQwOlxcdFxcdGNsZWFyX29wdChcXHUwMDI2c2JpLVxcdTAwM2VvcHQsIElOT0RFX1NIQVJFKTtcXG5mcy9lcm9mcy9zdXBlci5jLTc0MS1cXHR9XFxuZnMvZXJvZnMvc3VwZXIuYzo3NDI6XFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgSU5PREVfU0hBUkUpKVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNzQzLVxcdFxcdGVyb2ZzX2luZm8oc2IsIFxcXCJFWFBFUklNRU5UQUwgRVJPRlMgcGFnZSBjYWNoZSBzaGFyZSBzdXBwb3J0IGluIHVzZS4gVXNlIGF0IHlvdXIgb3duIHJpc2shXFxcIik7XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTc0OC1cXG5mcy9lcm9mcy9zdXBlci5jOjc0OTpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBQT1NJWF9BQ0wpKVxcbmZzL2Vyb2ZzL3N1cGVyLmMtNzUwLVxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1BPU0lYQUNMO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz04MDA9c3RhdGljIGludCBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtODE2LVxcdCAgICAgICBzYmktXFx1MDAzZWRpZjAuZnNvZmYgPT0gbmV3X3NiaS1cXHUwMDNlZGlmMC5mc29mZiBcXHUwMDI2XFx1MDAyNlxcbmZzL2Vyb2ZzL3N1cGVyLmM6ODE3OlxcdCAgICAgICAhbWVtY21wKFxcdTAwMjZzYmktXFx1MDAzZW9wdCwgXFx1MDAyNm5ld19zYmktXFx1MDAzZW9wdCwgc2l6ZW9mKHNiaS1cXHUwMDNlb3B0KSk7XFxuZnMvZXJvZnMvc3VwZXIuYy04MTgtfVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz04MjA9c3RhdGljIGludCBlcm9mc19mY19nZXRfdHJlZV9maWxlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtODIzLVxcbmZzL2Vyb2ZzL3N1cGVyLmM6ODI0OlxcdGlmICghdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcXG5mcy9lcm9mcy9zdXBlci5jLTgyNS1cXHRcXHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGVyb2ZzX2ZjX2ZpbGxfc3VwZXIpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz04Njg9c3RhdGljIGludCBlcm9mc19mY19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTg3Ni1cXHQvKiBTaGFyZWQgc3VwZXJibG9ja3MgbXVzdCBub3QgYmUgcmVjb25maWd1cmVkLiAgKi9cXG5mcy9lcm9mcy9zdXBlci5jOjg3NzpcXHRpZiAodGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBTVVBFUkJMT0NLX1NIQVJFKSlcXG5mcy9lcm9mcy9zdXBlci5jLTg3OC1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy04ODItXFxuZnMvZXJvZnMvc3VwZXIuYzo4ODM6XFx0aWYgKHRlc3Rfb3B0KFxcdTAwMjZuZXdfc2JpLVxcdTAwM2VvcHQsIFBPU0lYX0FDTCkpXFxuZnMvZXJvZnMvc3VwZXIuYy04ODQtXFx0XFx0ZmMtXFx1MDAzZXNiX2ZsYWdzIHw9IFNCX1BPU0lYQUNMO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy04ODctXFxuZnMvZXJvZnMvc3VwZXIuYzo4ODg6XFx0c2JpLVxcdTAwM2VvcHQgPSBuZXdfc2JpLVxcdTAwM2VvcHQ7XFxuZnMvZXJvZnMvc3VwZXIuYy04ODktXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTExMzY9c3RhdGljIGludCBlcm9mc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTExMzgtXFx0c3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSA9IEVST0ZTX1NCKHJvb3QtXFx1MDAzZWRfc2IpO1xcbmZzL2Vyb2ZzL3N1cGVyLmM6MTEzOTpcXHRzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyAqb3B0ID0gXFx1MDAyNnNiaS1cXHUwMDNlb3B0O1xcbmZzL2Vyb2ZzL3N1cGVyLmMtMTE0MC1cXG4tLVxcbmZzL2Vyb2ZzL3N5c2ZzLmM9MTE3PXN0YXRpYyB1bnNpZ25lZCBjaGFyICpfX3N0cnVjdF9wdHIoc3RydWN0IGVyb2ZzX3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2Vyb2ZzL3N5c2ZzLmMtMTIyLVxcdGlmIChzdHJ1Y3RfdHlwZSA9PSBzdHJ1Y3RfZXJvZnNfbW91bnRfb3B0cylcXG5mcy9lcm9mcy9zeXNmcy5jOjEyMzpcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGNoYXIgKilcXHUwMDI2c2JpLVxcdTAwM2VvcHQgKyBvZmZzZXQ7XFxuZnMvZXJvZnMvc3lzZnMuYy0xMjQtXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy9lcm9mcy94YXR0ci5jPTQwNj1zdGF0aWMgYm9vbCBlcm9mc194YXR0cl91c2VyX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2Vyb2ZzL3hhdHRyLmMtNDA3LXtcXG5mcy9lcm9mcy94YXR0ci5jOjQwODpcXHRyZXR1cm4gdGVzdF9vcHQoXFx1MDAyNkVST0ZTX1NCKGRlbnRyeS1cXHUwMDNlZF9zYiktXFx1MDAzZW9wdCwgWEFUVFJfVVNFUik7XFxuZnMvZXJvZnMveGF0dHIuYy00MDktfVxcbi0tXFxuZnMvZXJvZnMveGF0dHIuYz00MTY9c3RhdGljIGludCBlcm9mc194YXR0cl9nZW5lcmljX2dldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcXG4tLVxcbmZzL2Vyb2ZzL3hhdHRyLmMtNDIwLVxcdGlmIChoYW5kbGVyLVxcdTAwM2VmbGFncyA9PSBFUk9GU19YQVRUUl9JTkRFWF9VU0VSIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXJvZnMveGF0dHIuYzo0MjE6XFx0ICAgICF0ZXN0X29wdChcXHUwMDI2RVJPRlNfSV9TQihpbm9kZSktXFx1MDAzZW9wdCwgWEFUVFJfVVNFUikpXFxuZnMvZXJvZnMveGF0dHIuYy00MjItXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvZXJvZnMveGF0dHIuYz02MTg9aW50IGVyb2ZzX3hhdHRyX2ZpbGxfaW5vZGVfZmluZ2VycHJpbnQoc3RydWN0IGVyb2ZzX2lub2RlX2ZpbmdlcnByaW50ICpmcCxcXG4tLVxcbmZzL2Vyb2ZzL3hhdHRyLmMtNjI1LVxcbmZzL2Vyb2ZzL3hhdHRyLmM6NjI2OlxcdGlmICghdGVzdF9vcHQoXFx1MDAyNnNiaS1cXHUwMDNlb3B0LCBJTk9ERV9TSEFSRSkpXFxuZnMvZXJvZnMveGF0dHIuYy02MjctXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvZXJvZnMvemRhdGEuYz01MTY9c3RhdGljIGJvb2wgel9lcm9mc19zaG91bGRfYWxsb2NfY2FjaGUoc3RydWN0IHpfZXJvZnNfZnJvbnRlbmQgKmZlKVxcbmZzL2Vyb2ZzL3pkYXRhLmMtNTE3LXtcXG5mcy9lcm9mcy96ZGF0YS5jOjUxODpcXHR1bnNpZ25lZCBpbnQgY2FjaGVzdHJhdGVneSA9IEVST0ZTX0lfU0IoZmUtXFx1MDAzZWlub2RlKS1cXHUwMDNlb3B0LmNhY2hlX3N0cmF0ZWd5O1xcbmZzL2Vyb2ZzL3pkYXRhLmMtNTE5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzozMjowMy43MDE2MzI2MzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5MTIxODk5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yYXZlbGluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIEVST0ZTIE1vdW50IE9wdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBFUk9GUyBjb2RlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgaGFuZGxpbmcgb2YgbW91bnQgb3B0aW9ucyBhbmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRyaWdnZXJlZCBieSB0aGUgZXhwb3N1cmUgb2YgYHNiaS1cdTAwM2VvcHRgIHZpYSBzeXNmcyDigJMgdGhhdCdzIG9mdGVuIGEgcmVkIGZsYWcuIEJ1dCB0aGVuIEkgcmVhbGl6ZWQsIHN5c2ZzIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgZmllbGQtYnktZmllbGQsIHNvIHRoZXkgd291bGRuJ3QgZXhwb3NlIHRoZSBlbnRpcmUgc3RydWN0dXJlLCBwYWRkaW5nIGFuZCBhbGwuIEdvb2QsIHRoYXQncyBvbmUgYXZlbnVlIGNsb3NlZC5cblxuVGhlIGNvcmUgb2YgbXkgY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBJcyBpdCBwb3NzaWJsZSB0aGF0IGBuZXdfc2JpLVx1MDAzZW9wdGAgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIHBhZGRpbmcgd2hlbiBpdCdzIGFsbG9jYXRlZCB2aWEgYGVyb2ZzX2luaXRfZnNfY29udGV4dGAgYW5kIHplcm9lZCB1c2luZyBga3phbGxvY19vYmpgPyBOby4gU2luY2UgaXQgaXMgaW5pdGlhbGl6ZWQgYnkgYGt6YWxsb2NgLCB0aGUgc3RydWN0dXJlIGFuZCBpdHMgcGFkZGluZyBpcyB6ZXJvZWQuIExhdGVyIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgb25seSB0b3VjaCBzcGVjaWZpYyBmaWVsZHMsIGxlYXZpbmcgdGhlIHBhZGRpbmcgdW50b3VjaGVkIGFuZCByZW1haW5pbmcgemVyb2VkLiBTbywgdGhlIGBtZW1jbXBgIHdpbGwgYmUgY29tcGFyaW5nIGluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuXG5cblRoZW4sIEkgc3RhcnRlZCB3b25kZXJpbmcgaWYgYHNiaS1cdTAwM2VvcHRgIHdhcyBjb3BpZWQgZnJvbSBzb21ld2hlcmUgZWxzZSB0aGF0ICp3YXNuJ3QqIHplcm9lZC4gQnV0IGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIHNob3dzIHRoYXQgYHNiaS1cdTAwM2VvcHRgIGlzIGFzc2lnbmVkIHVzaW5nIGBzYmktXHUwMDNlb3B0ID0gbmV3X3NiaS1cdTAwM2VvcHQ7YCBpbiBgZXJvZnNfZmNfcmVjb25maWd1cmVgLiBHaXZlbiB0aGF0IGBuZXdfc2JpYCBpcyBhbHdheXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCB3ZSdyZSBndWFyYW50ZWVkIHRvIGJlIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGBlcm9mc19mY19wYXJzZV9wYXJhbWAgbWlnaHQgaW52b2x2ZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbiBvbiB0aGUgd2hvbGUgd29yZCwgaW5jbHVkaW5nIHBhZGRpbmcuIEhvd2V2ZXIsIHRoZSBwYWRkaW5nIHdpbGwgYmUgemVyby4gVGhlcmVmb3JlLCBldmVuIGlmIGEgY29tcGlsZXIgZ2VuZXJhdGVzIGEgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9uIG9uIHRoZSB3aG9sZSB3b3JkLCBpdCByZWFkcyBpbml0aWFsaXplZCAoemVybykgbWVtb3J5LCBkb2VzIHNvbWV0aGluZywgYW5kIHdyaXRlcyB0aGUgcGFkZGluZyBiYWNrIGFzIHplcm8uIFRoYXQncyBzdGlsbCBzYWZlLlxuXG5Ob3csIGxldCdzIGxvb2sgZm9yIG90aGVyIHBvdGVudGlhbCBpc3N1ZXMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgc3VwZXJibG9ja19zaGFyZWAgYW5kIGl0cyB1c2UgaW4gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAuIFRoZSBjb21wYXJpc29uIHRoZXJlIGxvb2tzIGF0IGBzYmktXHUwMDNlZGlmMC5maWxlYCwgYHNiaS1cdTAwM2VkaWYwLmZzb2ZmYCwgYG5ld19zYmktXHUwMDNlZGlmMC5maWxlYCwgYW5kIGBuZXdfc2JpLVx1MDAzZWRpZjAuZnNvZmZgLCBhbG9uZyB3aXRoIGBtZW1jbXBgIG9mIHRoZSBvcHRpb25zLiBBcmUgdGhvc2UgaW5pdGlhbGl6ZWQ/IEknbSBwcmV0dHkgc3VyZSBgZGlmMGAgaXMgcGFydCBvZiBgc2JpYCB3aGljaCBpcyBpbml0aWFsaXplZCBieSBga3phbGxvY2AsIG1lYW5pbmcgdGhlIGBmc29mZmAgaXMgYWx3YXlzIGluaXRpYWxpemVkLiBFdmVuIGlmIGl0J3Mgbm90IHByb3ZpZGVkIHZpYSBhIG1vdW50IG9wdGlvbiwgaXQgcmVtYWlucyB6ZXJvLiBUaGVuIGBzYmktXHUwMDNlZGlmMC5maWxlYCBpcyBzZXQgZnJvbSB0aGUgYE9wdF9zb3VyY2VgIG9wdGlvbiwgYW5kIGl0J3MgaGFuZGxlZCBwcm9wZXJseSBpZiBpdCdzIE5VTEwgKHVuc3BlY2lmaWVkKSB3aXRoIHRoZSBjb25kaXRpb25hbCBjaGVjay5cblxuSSBkaWQgYSBtZW50YWwgY2hlY2sgb2YgYGdldF90cmVlX3N1cGVyYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBWRlMgZnVuY3Rpb24uIFRoZXJlJ3Mgbm90aGluZyB1bnVzdWFsIHRoZXJlLlxuXG5JcyBhbnl0aGluZyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLCB0aGlzIGlzIGp1c3QgaW50ZXJuYWwgbW91bnQgb3B0aW9uIGhhbmRsaW5nIGFuZCBzdXBlcmJsb2NrIHNoYXJpbmcuIElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZSwgZXZlcnl0aGluZydzIGluaXRpYWxpemVkLiBObyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3BlLCB0aGUgc3RydWN0dXJlcyBhcmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCByZXZpZXcgYWdhaW46IGBzYmktXHUwMDNlb3B0YCBhbmQgaXRzIHBhZGRpbmcgYXJlIHplcm9lZCBieSBga3phbGxvY2AuIElmIGBzYmktXHUwMDNlb3B0YCBpcyBhc3NpZ25lZCBmcm9tIGEgYG5ld19zYmktXHUwMDNlb3B0YCwgdGhhdCBhbHNvIGdldHMgaW5pdGlhbGl6ZWQgYnkgYGt6YWxsb2NgLiBUaGUgbW9kaWZpY2F0aW9ucyB2aWEgYGVyb2ZzX2RlZmF1bHRfb3B0aW9uc2AgYW5kIGBlcm9mc19mY19wYXJzZV9wYXJhbWAgZG8gbm90IHRvdWNoIHRoZSBwYWRkaW5nLiBUaGVyZSdzIG5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBleGNlcHQgZm9yIHByaW50aW5nIHRoZSBvcHRpb25zIGZpZWxkLWJ5LWZpZWxkIGluIGBlcm9mc19zaG93X29wdGlvbnNgLiBUaGUgb3B0aW9ucyBhcmUgcHJpbnRlZCB2aWEgYSBzZXFfZmlsZSwgd2hpY2ggaXMgc2VudCB0byB1c2VyIHNwYWNlLCBidXQgdGhpcyBoYXBwZW5zIGZpZWxkLWJ5LWZpZWxkLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gc3RydWN0IGNvcHlpbmcsIG5vIHBhZGRpbmcsIGFuZCBubyBwcm9ibGVtLlxuXG5Pa2F5LCBJIHRoaW5rIEkndmUgdGhvcm91Z2hseSB2ZXR0ZWQgdGhlIGNvZGUsIGFuZCBJJ20gY29uZmlkZW50IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBtb3VudCBvcHRpb24gaGFuZGxpbmcgaW4gdGhpcyBwYXRjaC4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMyOjE5LjYxMzgyNTEwMloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9lcm9mcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzY6XFx0c3RhdGljIGludCBlcm9mc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gRVJPRlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuMTEzOTpcXHRcXHRzdHJ1Y3QgZXJvZnNfbW91bnRfb3B0cyAqb3B0ID0gXFx1MDAyNnNiaS1cXHUwMDNlb3B0O1xcbjExNDA6XFx0XFxuMTE0MTpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRVJPRlNfRlNfWEFUVFIpKVxcbjExNDI6XFx0XFx0XFx0c2VxX3B1dHMoc2VxLCB0ZXN0X29wdChvcHQsIFhBVFRSX1VTRVIpID9cXG4xMTQzOlxcdFxcdFxcdFxcdFxcdFxcXCIsdXNlcl94YXR0clxcXCIgOiBcXFwiLG5vdXNlcl94YXR0clxcXCIpO1xcbjExNDQ6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0VST0ZTX0ZTX1BPU0lYX0FDTCkpXFxuMTE0NTpcXHRcXHRcXHRzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KG9wdCwgUE9TSVhfQUNMKSA/IFxcXCIsYWNsXFxcIiA6IFxcXCIsbm9hY2xcXFwiKTtcXG4xMTQ2OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19FUk9GU19GU19aSVApIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlYXZhaWxhYmxlX2NvbXByX2FsZ3MpXFxuMTE0NzpcXHRcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIixjYWNoZV9zdHJhdGVneT0lc1xcXCIsXFxuMTE0ODpcXHRcXHRcXHRcXHQgIGVyb2ZzX3BhcmFtX2NhY2hlX3N0cmF0ZWd5W29wdC1cXHUwMDNlY2FjaGVfc3RyYXRlZ3ldLm5hbWUpO1xcbjExNDk6XFx0XFx0aWYgKHRlc3Rfb3B0KG9wdCwgREFYX0FMV0FZUykpXFxuMTE1MDpcXHRcXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCIsZGF4PWFsd2F5c1xcXCIpO1xcbjExNTE6XFx0XFx0aWYgKHRlc3Rfb3B0KG9wdCwgREFYX05FVkVSKSlcXG4xMTUyOlxcdFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixkYXg9bmV2ZXJcXFwiKTtcXG4xMTUzOlxcdFxcdGlmIChlcm9mc19pc19maWxlaW9fbW9kZShzYmkpIFxcdTAwMjZcXHUwMDI2IHRlc3Rfb3B0KG9wdCwgRElSRUNUX0lPKSlcXG4xMTU0OlxcdFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixkaXJlY3Rpb1xcXCIpO1xcbjExNTU6XFx0XFx0aWYgKHNiaS1cXHUwMDNlZGlmMC5mc29mZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MzI6MTkuNjEzOTE0NzMyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NTQ3MzEzMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgRVJPRlMgU3VwZXJibG9jayBTaGFyaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgeWVzLCB0aGUgY29kZSAqZG9lcyogc2VlbSB0byBwcmludCBmaWVsZCBieSBmaWVsZC4gSSdtIGZvY3VzaW5nIG9uIHdoZXRoZXIgdGhlcmUncyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkgc2VlIHRoYXQgdGhlIG9ubHkgdXNlIG9mIGBzYmktXHUwMDNlb3B0YCBhcyBhIHdob2xlIGlzIGluIGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwb2ludC4gQm90aCBgc2JpYCBhbmQgYG5ld19zYmlgIGFyZSBga3phbGxvY2AnZCwgd2hpY2ggbWVhbnMgdGhlaXIgcGFkZGluZyBpcyAqemVyb2VkKiBieSBkZWZhdWx0LiBTbyBldmVuIGlmIGBtZW1jbXBgIHJlYWRzIHRoYXQgcGFkZGluZywgaXQncyByZWFkaW5nICppbml0aWFsaXplZCogbWVtb3J5IChzcGVjaWZpY2FsbHksIHplcm9zKS4gS01TQU4gc2hvdWxkbid0IGNvbXBsYWluLlxuXG5Ob3csIGNvdWxkIHRoZSBgc2JpLVx1MDAzZW9wdGAgc3RydWN0LCBpbiBwYXJ0aWN1bGFyLCBoYXZlIGJpdGZpZWxkcz8gTm8sIGl0IGRvZXNuJ3QuIEl0J3MgZ290IGB1bnNpZ25lZCBjaGFyIGNhY2hlX3N0cmF0ZWd5YCBhbmQgYHVuc2lnbmVkIGludCBtb3VudF9vcHRgLiBUaGVyZSBpcyAzIGJ5dGVzIG9mIHBhZGRpbmcgYmV0d2VlbiB0aGVzZSB0d28gZmllbGRzLCBkdWUgdG8gdGhlIHN0cnVjdHVyZSBsYXlvdXQuIEJ1dCBzaW5jZSBpdCdzIGBremFsbG9jYCdkLCB0aGF0IHBhZGRpbmcgaXMgemVyby4gQW55IHdyaXRlIHRvIGBjYWNoZV9zdHJhdGVneWAgb3IgYG1vdW50X29wdGAgZ2VuZXJhdGVzIGJ5dGUgb3Igd29yZCB3cml0ZXMsIGFuZCBpdCBuZXZlciB0b3VjaGVzIHRoZSBwYWRkaW5nLiBUaGF0IHBhZGRpbmcgKnJlbWFpbnMqIHplcm8uIFRoZSBgbWVtY21wYCBjYWxsIHdpbGwgY29tcGFyZSB0aGUgcGFkZGluZyBieXRlcywgYW5kIHRoZXkgYXJlIGJvdGggemVybywgc28gdGhleSBtYXRjaC4gVGhpcyBpcyBwZXJmZWN0bHkgc2FmZS4gSXQncyBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkxldCdzIGxvb2sgbW9yZSBicm9hZGx5IGF0IHRoZSBwYXRjaC4gSXQgaW50cm9kdWNlcyBgc3VwZXJibG9ja19zaGFyZWAgbW91bnQgb3B0aW9uLiBOb3csIGl0IGRvZXMgbW9kaWZ5IGBlcm9mc19mY19wYXJzZV9wYXJhbWAgdG8gc2V0IGBTVVBFUkJMT0NLX1NIQVJFYC4gVGhpcyBqdXN0IHNldHMgYSBmbGFnIGluIGBzYmktXHUwMDNlb3B0Lm1vdW50X29wdGAuIGBlcm9mc19mY19maWxsX3N1cGVyYCBjaGVja3MgZmxhZ3MgdGhhdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuXG5cblRoZSBuZXcgZnVuY3Rpb24gYGVyb2ZzX2ZjX3Rlc3RfZmlsZV9zdXBlcmAgc2VlbXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHdoZXJlIGl0IGNvdWxkIGZhaWwuIEJ1dCBsZXQncyBzZWUuIEhlcmUsIHdlIHNlZSBjb21wYXJpc29ucyBhZ2FpbnN0IGBzYi1cdTAwM2VzX2lmbGFnc2AsIHRoZSBgc2JpLVx1MDAzZWRpZjBgIG1lbWJlcnMsIGFuZCBmaW5hbGx5IGBtZW1jbXAoXHUwMDI2c2JpLVx1MDAzZW9wdCwgXHUwMDI2bmV3X3NiaS1cdTAwM2VvcHQsIHNpemVvZihzYmktXHUwMDNlb3B0KSlgLiBBbGwgdGhlc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBpbml0aWFsaXplZCBmbGFncy5cblxuVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBgZXJvZnNfZmNfZ2V0X3RyZWVfZmlsZWAsIHdoaWNoIGp1c3QgY2FsbHMgYW5vdGhlciBmdW5jdGlvbiBkZXBlbmRpbmcgb24gYSBmbGFnLiBBbmQgYGVyb2ZzX2ZjX3JlY29uZmlndXJlYCBqdXN0IGNoZWNrcyBhIGZsYWcsIHRvby5cblxuRmluYWxseSwgdGhlIGBmcy9zdXBlci5jYCBjaGFuZ2UganVzdCBleHBvcnRzIGBnZXRfdHJlZV9zdXBlcmAuXG5cblRoZXJlIGlzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLiBgbWVtY21wYCBvbiBhIHN0cnVjdCB3aXRoIHBhZGRpbmcgaXMgc2FmZSBiZWNhdXNlIG9mIGBremFsbG9jYC4gVGhlIHBhZGRpbmcgaXMgbmV2ZXIgbW9kaWZpZWQsIGFuZCByZW1haW5zIHplcm8uIEtNU0FOIHNlZXMgdGhlIHBhZGRpbmcgYXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gemVyby5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBUaGUgY2hhbmdlcyBhcmUgYWxsIHJlbGF0ZWQgdG8gbW91bnQgb3B0aW9ucyBhbmQgc3VwZXJibG9jayBzaGFyaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIHdpbGwgYmUgbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcywgYW5kIHRob3NlIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGRldGVjdG9ycy4gVGhlcmUgYXJlIG5vIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIGhlcmUncyBteSByZWFzb25pbmcsIGluIHN1bW1hcnk6XG5cbiogICBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc3VwZXJibG9ja19zaGFyZWAgZm9yIEVST0ZTIGZpbGUtYmFja2VkIG1vdW50cy5cbiogICBJdCBhZGRzIGEgY29tcGFyaXNvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCB0aGF0IHVzZXMgYG1lbWNtcGAgb24gYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYC5cbiogICBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgIGhhcyBwYWRkaW5nLCBidXQgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdmlhIGBremFsbG9jYCwgc28gcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCAqcmVtYWlucyogemVyby4gYG1lbWNtcGAgc2FmZWx5IHJlYWRzIGluaXRpYWxpemVkIG1lbW9yeS5cbiogICBObyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLlxuKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgaW4gY29udHJvbCBmbG93LlxuKiAgIFBvdGVudGlhbCBidWdzIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBsb2dpYyBlcnJvcnMpIGFyZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHRlc3RpbmcuXG4qICAgVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzbid0IGp1c3RpZmllZC4gVGhpcyBzaG91bGQgYmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNjUsIk91dHB1dFRva2VucyI6MjYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjMyOjM5LjE2MTIzMTM4NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtb3VudCBvcHRpb24gYHN1cGVyYmxvY2tfc2hhcmVgIGZvciBFUk9GUyBmaWxlLWJhY2tlZCBtb3VudHMgYW5kIGFkZHMgbG9naWMgdG8gc2hhcmUgc3VwZXJibG9ja3Mgd2hlbiBjb21wYXRpYmxlIG9wdGlvbnMgYXJlIHVzZWQuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGBlcm9mc19mY190ZXN0X2ZpbGVfc3VwZXJgIHVzZXMgYG1lbWNtcGAgdG8gY29tcGFyZSBgc3RydWN0IGVyb2ZzX21vdW50X29wdHNgLiBXaGlsZSB0aGlzIHN0cnVjdCBjb250YWlucyBwYWRkaW5nLCBpbnN0YW5jZXMgb2YgaXQgYXJlIGVtYmVkZGVkIHdpdGhpbiBgc3RydWN0IGVyb2ZzX3NiX2luZm9gLCB3aGljaCBpcyBhbHdheXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AgKGluIGBlcm9mc19pbml0X2ZzX2NvbnRleHRgKS4gQ29uc2VxdWVudGx5LCB0aGUgcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCByZW1haW5zIHplcm8sIG1lYW5pbmcgYG1lbWNtcGAgc2FmZWx5IHJlYWRzIGluaXRpYWxpemVkIG1lbW9yeSB3aXRob3V0IHRyaWdnZXJpbmcgS01TQU4gb3IgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3IuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBzaGFyaW5nKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW91bnQgb3B0aW9uIGBzdXBlcmJsb2NrX3NoYXJlYCBmb3IgRVJPRlMgZmlsZS1iYWNrZWQgbW91bnRzIGFuZCBhZGRzIGxvZ2ljIHRvIHNoYXJlIHN1cGVyYmxvY2tzIHdoZW4gY29tcGF0aWJsZSBvcHRpb25zIGFyZSB1c2VkLiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBgZXJvZnNfZmNfdGVzdF9maWxlX3N1cGVyYCB1c2VzIGBtZW1jbXBgIHRvIGNvbXBhcmUgYHN0cnVjdCBlcm9mc19tb3VudF9vcHRzYC4gV2hpbGUgdGhpcyBzdHJ1Y3QgY29udGFpbnMgcGFkZGluZywgaW5zdGFuY2VzIG9mIGl0IGFyZSBlbWJlZGRlZCB3aXRoaW4gYHN0cnVjdCBlcm9mc19zYl9pbmZvYCwgd2hpY2ggaXMgYWx3YXlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgIChpbiBgZXJvZnNfaW5pdF9mc19jb250ZXh0YCkuIENvbnNlcXVlbnRseSwgdGhlIHBhZGRpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgcmVtYWlucyB6ZXJvLCBtZWFuaW5nIGBtZW1jbXBgIHNhZmVseSByZWFkcyBpbml0aWFsaXplZCBtZW1vcnkgd2l0aG91dCB0cmlnZ2VyaW5nIEtNU0FOIG9yIGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW9yLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIFRoZXJlIGlzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHN1cGVyYmxvY2sgc2hhcmluZykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowl6lpp[1] Phase: Succeeded StartedAt: 2026-08-11 07:32:50 +0000 UTC FinishedAt: 2026-08-11 07:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 07:32:50 +0000 UTC FinishedAt: 2026-08-11 07:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2] Phase: Succeeded StartedAt: 2026-08-11 07:32:50 +0000 UTC FinishedAt: 2026-08-11 11:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 07:32:50 +0000 UTC FinishedAt: 2026-08-11 11:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 07:32:50 +0000 UTC FinishedAt: 2026-08-11 07:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 07:32:50 +0000 UTC FinishedAt: 2026-08-11 07:32:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowl6lpp/series-workflowl6lpp-convert-artifact-1648687035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 07:33:00 +0000 UTC FinishedAt: 2026-08-11 07:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 07:33:00 +0000 UTC FinishedAt: 2026-08-11 07:49:50 +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:*1f6300f8-6b8f-4e2b-a7d4-e4a8ab938557,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-workflowl6lpp/series-workflowl6lpp-convert-artifact-1648687035/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": "360bf890-86ef-49c5-9787-0ce76f2e89e1", "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-workflowl6lpp/series-workflowl6lpp-build-action-840566265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 07:33:00 +0000 UTC FinishedAt: 2026-08-11 07:49:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1f6300f8-6b8f-4e2b-a7d4-e4a8ab938557,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-workflowl6lpp/series-workflowl6lpp-convert-artifact-1648687035/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": "360bf890-86ef-49c5-9787-0ce76f2e89e1", "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-workflowl6lpp/series-workflowl6lpp-build-action-840566265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 07:49:50 +0000 UTC FinishedAt: 2026-08-11 07:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 07:49:50 +0000 UTC FinishedAt: 2026-08-11 07:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 07:49:50 +0000 UTC FinishedAt: 2026-08-11 07:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 07:49:50 +0000 UTC FinishedAt: 2026-08-11 07:49:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowl6lpp/series-workflowl6lpp-convert-artifact-4236013330/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 07:50:00 +0000 UTC FinishedAt: 2026-08-11 07:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 07:50:00 +0000 UTC FinishedAt: 2026-08-11 07:51:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*360bf890-86ef-49c5-9787-0ce76f2e89e1,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-workflowl6lpp/series-workflowl6lpp-build-action-840566265/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-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 07:51:56 +0000 UTC FinishedAt: 2026-08-11 07:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 07:51:56 +0000 UTC FinishedAt: 2026-08-11 07:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 07:51:56 +0000 UTC FinishedAt: 2026-08-11 08:12:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 07:51:56 +0000 UTC FinishedAt: 2026-08-11 08:12:23 +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:*1f6300f8-6b8f-4e2b-a7d4-e4a8ab938557,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-workflowl6lpp/series-workflowl6lpp-convert-artifact-4236013330/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": "589b81f6-7db3-4716-b558-e168290f37e1", "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-workflowl6lpp/series-workflowl6lpp-build-action-2413095846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 07:51:56 +0000 UTC FinishedAt: 2026-08-11 08:12:12 +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:*1f6300f8-6b8f-4e2b-a7d4-e4a8ab938557,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-workflowl6lpp/series-workflowl6lpp-convert-artifact-4236013330/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": "589b81f6-7db3-4716-b558-e168290f37e1", "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-workflowl6lpp/series-workflowl6lpp-build-action-2413095846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 08:12:23 +0000 UTC FinishedAt: 2026-08-11 08:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 08:12:24 +0000 UTC FinishedAt: 2026-08-11 08:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 08:12:24 +0000 UTC FinishedAt: 2026-08-11 08:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 08:12:24 +0000 UTC FinishedAt: 2026-08-11 08:14:08 +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:*589b81f6-7db3-4716-b558-e168290f37e1,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-workflowl6lpp/series-workflowl6lpp-build-action-2413095846/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-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 08:14:19 +0000 UTC FinishedAt: 2026-08-11 08:14:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 08:14:20 +0000 UTC FinishedAt: 2026-08-11 11:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 08:14:20 +0000 UTC FinishedAt: 2026-08-11 11:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"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:*360bf890-86ef-49c5-9787-0ce76f2e89e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*589b81f6-7db3-4716-b558-e168290f37e1,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-workflowl6lpp/series-workflowl6lpp-build-action-840566265/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-workflowl6lpp/series-workflowl6lpp-build-action-2413095846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 08:14:20 +0000 UTC FinishedAt: 2026-08-11 08:14:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 08:14:20 +0000 UTC FinishedAt: 2026-08-11 08:14:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"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-workflowl6lpp/series-workflowl6lpp-convert-artifact-240976487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 08:14:20 +0000 UTC FinishedAt: 2026-08-11 08:14:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 08:14:20 +0000 UTC FinishedAt: 2026-08-11 08:14:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 08:14:31 +0000 UTC FinishedAt: 2026-08-11 11:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl6lpp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["erofs_fc_test_file_super","erofs_fc_get_tree_file","get_tree_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d08ff75a47a3e7e2ab45a3bcab6723b4d906422","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EROFS_FS_BACKED_BY_FILE"],"series_id":"ef6239d3-2a9e-451d-a517-251a95a039b2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 08:14:31 +0000 UTC FinishedAt: 2026-08-11 11:19:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*360bf890-86ef-49c5-9787-0ce76f2e89e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*589b81f6-7db3-4716-b558-e168290f37e1,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-workflowl6lpp/series-workflowl6lpp-build-action-840566265/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-workflowl6lpp/series-workflowl6lpp-build-action-2413095846/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-workflowl6lpp/series-workflowl6lpp-convert-artifact-240976487/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,}